diff --git a/Assets/gamedb/gamedb_Odyssey2.txt b/Assets/gamedb/gamedb_Odyssey2.txt index c6d655de62..cc9410bfb7 100644 --- a/Assets/gamedb/gamedb_Odyssey2.txt +++ b/Assets/gamedb/gamedb_Odyssey2.txt @@ -1,3 +1,4 @@ SHA1:26A044C68FF08F574F6649B731B82CACA8C0E797 Death Race O2 +SHA1:E04D12B6290370B76F90E76D9DE75B6470B4F913 redgreen O2 diff --git a/BizHawk.Client.ApiHawk/BizHawk.Client.ApiHawk.csproj b/BizHawk.Client.ApiHawk/BizHawk.Client.ApiHawk.csproj index d057484c40..f2526e02c0 100644 --- a/BizHawk.Client.ApiHawk/BizHawk.Client.ApiHawk.csproj +++ b/BizHawk.Client.ApiHawk/BizHawk.Client.ApiHawk.csproj @@ -1,5 +1,7 @@  + + true ..\output\dll\ diff --git a/BizHawk.Client.Common/BizHawk.Client.Common.csproj b/BizHawk.Client.Common/BizHawk.Client.Common.csproj index 49890fd2d8..99ff3d0770 100644 --- a/BizHawk.Client.Common/BizHawk.Client.Common.csproj +++ b/BizHawk.Client.Common/BizHawk.Client.Common.csproj @@ -1,5 +1,6 @@  + Debug x86 @@ -43,21 +44,24 @@ false - - ..\References\ICSharpCode.SharpZipLib.dll + + ../packages/SharpZipLib.1.1.0/lib/net45/ICSharpCode.SharpZipLib.dll + True - - ..\References\Ionic.Zip.dll + + ../packages/Ionic.Zip.1.9.1.8/lib/Ionic.Zip.dll + True - - ..\References\Newtonsoft.Json.dll + + ../packages/Newtonsoft.Json.12.0.3/lib/net45/Newtonsoft.Json.dll + True ..\output\dll\nlua\NLua.dll False - ..\packages\SharpCompress.0.24.0\lib\net45\SharpCompress.dll + ../packages/SharpCompress.0.24.0/lib/net45/SharpCompress.dll True diff --git a/BizHawk.Client.Common/Global.cs b/BizHawk.Client.Common/Global.cs index 21fd1902e6..4b8c82a35b 100644 --- a/BizHawk.Client.Common/Global.cs +++ b/BizHawk.Client.Common/Global.cs @@ -164,6 +164,8 @@ namespace BizHawk.Client.Common return SystemInfo.ChannelF; case "O2": return SystemInfo.O2; + case "MAME": + return SystemInfo.MAME; } } } diff --git a/BizHawk.Client.Common/NESGameGenieEncoderDecoder.cs b/BizHawk.Client.Common/NESGameGenieEncoderDecoder.cs index f986effd6a..bbc94f6e61 100644 --- a/BizHawk.Client.Common/NESGameGenieEncoderDecoder.cs +++ b/BizHawk.Client.Common/NESGameGenieEncoderDecoder.cs @@ -4,27 +4,27 @@ namespace BizHawk.Client.Common { public class NESGameGenieDecoder { - private readonly string _code = ""; + private readonly string _code; private readonly Dictionary _gameGenieTable = new Dictionary - { - { 'A', 0 }, // 0000 - { 'P', 1 }, // 0001 - { 'Z', 2 }, // 0010 - { 'L', 3 }, // 0011 - { 'G', 4 }, // 0100 - { 'I', 5 }, // 0101 - { 'T', 6 }, // 0110 - { 'Y', 7 }, // 0111 - { 'E', 8 }, // 1000 - { 'O', 9 }, // 1001 - { 'X', 10 }, // 1010 - { 'U', 11 }, // 1011 - { 'K', 12 }, // 1100 - { 'S', 13 }, // 1101 - { 'V', 14 }, // 1110 - { 'N', 15 }, // 1111 - }; + { + ['A'] = 0, // 0000 + ['P'] = 1, // 0001 + ['Z'] = 2, // 0010 + ['L'] = 3, // 0011 + ['G'] = 4, // 0100 + ['I'] = 5, // 0101 + ['T'] = 6, // 0110 + ['Y'] = 7, // 0111 + ['E'] = 8, // 1000 + ['O'] = 9, // 1001 + ['X'] = 10, // 1010 + ['U'] = 11, // 1011 + ['K'] = 12, // 1100 + ['S'] = 13, // 1101 + ['V'] = 14, // 1110 + ['N'] = 15 // 1111 + }; public NESGameGenieDecoder(string code) { diff --git a/BizHawk.Client.Common/OpenAdvanced.cs b/BizHawk.Client.Common/OpenAdvanced.cs index e1ddd48609..71f5da2883 100644 --- a/BizHawk.Client.Common/OpenAdvanced.cs +++ b/BizHawk.Client.Common/OpenAdvanced.cs @@ -109,7 +109,7 @@ namespace BizHawk.Client.Common public Token token = new Token(); public string TypeName { get { return "Libretro"; } } - public string DisplayName { get { return $"{Path.GetFileNameWithoutExtension(token.CorePath)}:{token.Path}"; } } + public string DisplayName { get { return $"{Path.GetFileNameWithoutExtension(token.CorePath)}: {token.Path}"; } } public string SimplePath { get { return token.Path; } } public void Deserialize(string str) @@ -192,7 +192,7 @@ namespace BizHawk.Client.Common public string Path; public string TypeName { get { return "MAME"; } } - public string DisplayName { get { return Path; } } + public string DisplayName { get { return $"{TypeName}: {Path}"; } } public string SimplePath { get { return Path; } } public void Deserialize(string str) diff --git a/BizHawk.Client.Common/RomLoader.cs b/BizHawk.Client.Common/RomLoader.cs index cc11adcb0b..f0e4aa536b 100644 --- a/BizHawk.Client.Common/RomLoader.cs +++ b/BizHawk.Client.Common/RomLoader.cs @@ -172,7 +172,7 @@ namespace BizHawk.Client.Common return false; } - public AdvancedRomLoaderType AdvancedLoader { get; set; } + public IOpenAdvanced OpenAdvanced { get; set; } private bool HandleArchiveBinding(HawkFile file) { @@ -271,7 +271,7 @@ namespace BizHawk.Client.Common { // MAME uses these extensions for arcade ROMs, but also accepts all sorts of variations of archives, folders, and files. if we let archive loader handle this, it won't know where to stop, since it'd require MAME's ROM database (which contains ROM names and blob hashes) to look things up, and even then it might be confused by archive/folder structure // so assume the user provides the proper ROM directly, and handle possible errors later - if (AdvancedLoader == AdvancedRomLoaderType.MAMELaunchGame) + if (OpenAdvanced is OpenAdvanced_MAME) { file.NonArchiveExtensions = new[] { ".zip", ".7z" }; } @@ -295,7 +295,7 @@ namespace BizHawk.Client.Common { string ext = null; - if (AdvancedLoader == AdvancedRomLoaderType.LibretroLaunchGame) + if (OpenAdvanced is OpenAdvanced_Libretro) { string codePathPart = Path.GetFileNameWithoutExtension(nextComm.LaunchLibretroCore); @@ -1159,7 +1159,9 @@ namespace BizHawk.Client.Common nextEmulator.CoreComm.RomStatusDetails = "PSX etc."; break; case "Arcade": - nextEmulator = new MAME(nextComm, file.Directory, file.CanonicalName); + string gameName = ""; + nextEmulator = new MAME(nextComm, file.Directory, file.CanonicalName, GetCoreSyncSettings(), out gameName); + rom.GameInfo.Name = gameName; break; case "GEN": if (Global.Config.CoreForcingViaGameDB && game.ForcedCore?.ToLower() == "pico") diff --git a/BizHawk.Client.Common/SaveSlotManager.cs b/BizHawk.Client.Common/SaveSlotManager.cs index 7ec9588a22..223f19250c 100644 --- a/BizHawk.Client.Common/SaveSlotManager.cs +++ b/BizHawk.Client.Common/SaveSlotManager.cs @@ -1,6 +1,4 @@ using System.IO; -using System.Linq; - using BizHawk.Emulation.Common.IEmulatorExtensions; namespace BizHawk.Client.Common @@ -29,27 +27,20 @@ namespace BizHawk.Client.Common for (int i = 0; i < 10; i++) { - var file = new FileInfo($"{PathManager.SaveStatePrefix(Global.Game)}.QuickSave{i}.State"); - if (file.Directory != null && file.Directory.Exists == false) + if (Global.MovieSession.Movie is TasMovie tasMovie) { - file.Directory.Create(); + _slots[i] = i < tasMovie.Branches.Count; } - - _slots[i] = file.Exists; - } - } - - public bool HasSavestateSlots - { - get - { - if (!Global.Emulator.HasSavestates()) + else { - return false; - } + var file = new FileInfo($"{PathManager.SaveStatePrefix(Global.Game)}.QuickSave{i}.State"); + if (file.Directory != null && file.Directory.Exists == false) + { + file.Directory.Create(); + } - Update(); - return _slots.Any(slot => slot); + _slots[i] = file.Exists; + } } } @@ -84,6 +75,11 @@ namespace BizHawk.Client.Common return; } + if (Global.MovieSession.Movie is TasMovie tasMovie) + { + return; + } + _redo[slot] ^= true; } @@ -94,6 +90,11 @@ namespace BizHawk.Client.Common return false; } + if (Global.MovieSession.Movie is TasMovie tasMovie) + { + return false; + } + return _redo[slot]; } diff --git a/BizHawk.Client.Common/config/Binding.cs b/BizHawk.Client.Common/config/Binding.cs index b2d9ad6d6a..1c0913bce7 100644 --- a/BizHawk.Client.Common/config/Binding.cs +++ b/BizHawk.Client.Common/config/Binding.cs @@ -55,13 +55,7 @@ namespace BizHawk.Client.Common return GetEnumerator(); } - public Binding this[string index] - { - get - { - return Bindings.FirstOrDefault(b => b.DisplayName == index) ?? new Binding(); - } - } + public Binding this[string index] => Bindings.FirstOrDefault(b => b.DisplayName == index) ?? new Binding(); private static Binding Bind(string tabGroup, string displayName, string bindings = "", string defaultBinding = "", string toolTip = "") { @@ -223,8 +217,14 @@ namespace BizHawk.Client.Common Bind("TAStudio", "Toggle Follow Cursor", "Shift+F"), Bind("TAStudio", "Toggle Auto-Restore", "Shift+R"), Bind("TAStudio", "Toggle Turbo Seek", "Shift+S"), + Bind("TAStudio", "Undo", "Ctrl+Z"), // TODO: these are getting not unique enough + Bind("TAStudio", "Redo", "Ctrl+Y"), + Bind("TAStudio", "Sel. bet. Markers", "Ctrl+A"), + Bind("TAStudio", "Select All", "Ctrl+Shift+A"), + Bind("TAStudio", "Reselect Clip.", "Ctrl+B"), Bind("TAStudio", "Clear Frames", "Delete"), Bind("TAStudio", "Insert Frame", "Insert"), + Bind("TAStudio", "Insert # Frames", "Ctrl+Shift+Insert"), Bind("TAStudio", "Delete Frames", "Ctrl+Delete"), Bind("TAStudio", "Clone Frames", "Ctrl+Insert"), Bind("TAStudio", "Analog Increment", "UpArrow"), diff --git a/BizHawk.Client.Common/config/Config.cs b/BizHawk.Client.Common/config/Config.cs index 36be920135..400f58d87c 100644 --- a/BizHawk.Client.Common/config/Config.cs +++ b/BizHawk.Client.Common/config/Config.cs @@ -13,10 +13,7 @@ namespace BizHawk.Client.Common { public class Config { - public static string ControlDefaultPath - { - get { return PathManager.MakeProgramRelativePath("defctrl.json"); } - } + public static string ControlDefaultPath => PathManager.MakeProgramRelativePath("defctrl.json"); public void ConfigCheckAllControlDefaults() { @@ -62,7 +59,6 @@ namespace BizHawk.Client.Common // General Client Settings public int Input_Hotkey_OverrideOptions = 0; public bool StackOSDMessages = true; - public int TargetZoomFactor = 2; // TODO: move me public class ToomFactors : Dictionary @@ -79,10 +75,7 @@ namespace BizHawk.Client.Common return base[index]; } - set - { - base[index] = value; - } + set => base[index] = value; } } @@ -93,15 +86,12 @@ namespace BizHawk.Client.Common public int DispFinalFilter = 0; // None public string DispUserFilterPath = ""; public RecentFiles RecentRoms = new RecentFiles(10); - public RecentFiles RecentRomSessions = new RecentFiles(8); // Only used for MultiHawk public bool PauseWhenMenuActivated = true; public bool SaveWindowPosition = true; public bool StartPaused = false; public bool StartFullscreen = false; public int MainWndx = -1; // Negative numbers will be ignored public int MainWndy = -1; - public int MainWidth = -1; - public int MainHeight = -1; public bool RunInBackground = true; public bool AcceptBackgroundInput = false; public bool AcceptBackgroundInputControllerOnly = false; @@ -127,7 +117,7 @@ namespace BizHawk.Client.Common public bool AutoLoadLastSaveSlot = false; public bool WIN32_CONSOLE = true; public bool SkipLagFrame = false; - public bool SupressAskSave = false; + public bool SuppressAskSave = false; public bool AVI_CaptureOSD = false; public bool Screenshot_CaptureOSD = false; public bool FirstBoot = true; @@ -153,23 +143,9 @@ namespace BizHawk.Client.Common public int FlushSaveRamFrames; //check CurrentDomain_AssemblyResolve if you change the defaults or name of this key - public bool UseNLua = true; // Whether or not to use a good, reliable, memory-leak-free lua interface that is slower than the original luainterface + public bool UseNLua = false; // Whether or not to use a good, reliable, memory-leak-free lua interface that is slower than the original luainterface - ////public bool TurboSeek = true; // When PauseOnFrame is set, this will decide whether the client goes into turbo mode or not - - private bool _turboSeek; - public bool TurboSeek - { - get - { - return _turboSeek; - } - - set - { - _turboSeek = value; - } - } + public bool TurboSeek { get; set; } public enum EDispMethod { @@ -241,8 +217,8 @@ namespace BizHawk.Client.Common public SaveStateTypeE SaveStateType = SaveStateTypeE.Default; public const int DefaultSaveStateCompressionLevelNormal = 1; public int SaveStateCompressionLevelNormal = DefaultSaveStateCompressionLevelNormal; - public const int DefaultSaveStateCompressionLevelRewind = 0; // this isnt actually used yet - public int SaveStateCompressionLevelRewind = DefaultSaveStateCompressionLevelRewind; // this isnt actually used yet + public const int DefaultSaveStateCompressionLevelRewind = 0; // this isn't actually used yet + public int SaveStateCompressionLevelRewind = DefaultSaveStateCompressionLevelRewind; // this isn't actually used yet public int MovieCompressionLevel = 2; /// @@ -470,8 +446,7 @@ namespace BizHawk.Client.Common public object GetCoreSyncSettings(Type t) { - object ret; - CoreSyncSettings.TryGetValue(t.ToString(), out ret); + CoreSyncSettings.TryGetValue(t.ToString(), out var ret); return ret; } diff --git a/BizHawk.Client.Common/lua/EmuLuaLibrary.Events.cs b/BizHawk.Client.Common/lua/EmuLuaLibrary.Events.cs index 3ef04e8708..d565051b9c 100644 --- a/BizHawk.Client.Common/lua/EmuLuaLibrary.Events.cs +++ b/BizHawk.Client.Common/lua/EmuLuaLibrary.Events.cs @@ -218,6 +218,39 @@ namespace BizHawk.Client.Common return Guid.Empty.ToString(); } + [LuaMethodExample("local steveonm = event.onmemoryexecuteany(\r\n\tfunction()\r\n\t\tconsole.log( \"Fires after any address is executed by the core (CPU-intensive)\" );\r\n\tend\r\n\t, \"Frame name\", \"System Bus\" );")] + [LuaMethod("onmemoryexecuteany", "Fires after any address is executed by the core (CPU-intensive)")] + public string OnMemoryExecuteAny(LuaFunction luaf, string name = null, string domain = null) + { + try + { + if (DebuggableCore?.MemoryCallbacksAvailable() == true + && DebuggableCore.MemoryCallbacks.ExecuteCallbacksAvailable) + { + var nlf = new NamedLuaFunction(luaf, "OnMemoryExecuteAny", LogOutputCallback, CurrentFile, name); + RegisteredFunctions.Add(nlf); + DebuggableCore.MemoryCallbacks.Add(new MemoryCallback( + string.IsNullOrWhiteSpace(domain) && Domains?.HasSystemBus == true + ? Domains.SystemBus.Name + : domain, + MemoryCallbackType.Execute, + "Lua Hook", + nlf.MemCallback, + null, + null + )); + return nlf.Guid.ToString(); + } + // fall through + } + catch (NotImplementedException) + { + // fall through + } + LogMemoryExecuteCallbacksNotImplemented(); + return Guid.Empty.ToString(); + } + [LuaMethodExample("local steveonm = event.onmemoryread(\r\n\tfunction()\r\n\t\tconsole.log( \"Fires after the given address is read by the core. If no address is given, it will attach to every memory read\" );\r\n\tend\r\n\t, 0x200, \"Frame name\" );")] [LuaMethod("onmemoryread", "Fires after the given address is read by the core. If no address is given, it will attach to every memory read")] public string OnMemoryRead(LuaFunction luaf, uint? address = null, string name = null, string domain = null) diff --git a/BizHawk.Client.Common/lua/EmuLuaLibrary.Memory.cs b/BizHawk.Client.Common/lua/EmuLuaLibrary.Memory.cs index 2164f0abe2..7bd0a8aff2 100644 --- a/BizHawk.Client.Common/lua/EmuLuaLibrary.Memory.cs +++ b/BizHawk.Client.Common/lua/EmuLuaLibrary.Memory.cs @@ -6,7 +6,7 @@ using NLua; // ReSharper disable UnusedMember.Global namespace BizHawk.Client.Common { - [Description("These functions behavior identically to the mainmemory functions but the user can set the memory domain to read and write from. The default domain is main memory. Use getcurrentmemorydomain(), and usememorydomain() to control which domain is used. Each core has its own set of valid memory domains. Use getmemorydomainlist() to get a list of memory domains for the current core loaded.")] + [Description("These functions behavior identically to the mainmemory functions but the user can set the memory domain to read and write from. The default domain is the system bus. Use getcurrentmemorydomain(), and usememorydomain() to control which domain is used. Each core has its own set of valid memory domains. Use getmemorydomainlist() to get a list of memory domains for the current core loaded.")] public sealed class MemoryLuaLibrary : DelegatingLuaLibrary { public MemoryLuaLibrary(Lua lua) diff --git a/BizHawk.Client.Common/movie/bk2/Bk2ControllerAdapter.cs b/BizHawk.Client.Common/movie/bk2/Bk2ControllerAdapter.cs index 42e1e6ccbd..576d75b0bf 100644 --- a/BizHawk.Client.Common/movie/bk2/Bk2ControllerAdapter.cs +++ b/BizHawk.Client.Common/movie/bk2/Bk2ControllerAdapter.cs @@ -9,6 +9,15 @@ namespace BizHawk.Client.Common { public class Bk2ControllerAdapter : IMovieController { + private class ControlMap + { + public string Name { get; set; } + public bool IsBool { get; set; } + public bool IsFloat { get; set; } + } + + private List _controlsOrdered = new List(); + private readonly string _logKey = ""; private readonly WorkingDictionary _myBoolButtons = new WorkingDictionary(); private readonly WorkingDictionary _myFloatControls = new WorkingDictionary(); @@ -36,14 +45,10 @@ namespace BizHawk.Client.Common } } - // TODO: get rid of this, add a SetBool() method or something for the set access, replace get wtih IsPressed + // TODO: get rid of this, add a SetBool() method or something for the set access, replace get with IsPressed public bool this[string button] { - get - { - return _myBoolButtons[button]; - } - + get => _myBoolButtons[button]; set { if (_myBoolButtons.ContainsKey(button)) @@ -78,6 +83,17 @@ namespace BizHawk.Client.Common { _type = new Bk2ControllerDefinition(value); SetLogOverride(); + + var def = Global.Emulator.ControllerDefinition; + _controlsOrdered = Definition.ControlsOrdered + .SelectMany(c => c) + .Select(c => new ControlMap + { + Name = c, + IsBool = def.BoolButtons.Contains(c), + IsFloat = def.FloatControls.Contains(c) + }) + .ToList(); } } @@ -154,24 +170,22 @@ namespace BizHawk.Client.Common { if (!string.IsNullOrWhiteSpace(mnemonic)) { - var def = Global.Emulator.ControllerDefinition; var trimmed = mnemonic.Replace("|", ""); - var buttons = Definition.ControlsOrdered.SelectMany(c => c); var iterator = 0; - foreach (var key in buttons) + foreach (var key in _controlsOrdered) { - if (def.BoolButtons.Contains(key)) + if (key.IsBool) { - _myBoolButtons[key] = trimmed[iterator] != '.'; + _myBoolButtons[key.Name] = trimmed[iterator] != '.'; iterator++; } - else if (def.FloatControls.Contains(key)) + else if (key.IsFloat) { var commaIndex = trimmed.Substring(iterator).IndexOf(','); var temp = trimmed.Substring(iterator, commaIndex); var val = int.Parse(temp.Trim()); - _myFloatControls[key] = val; + _myFloatControls[key.Name] = val; iterator += commaIndex + 1; } diff --git a/BizHawk.Client.Common/movie/bk2/Bk2Movie.cs b/BizHawk.Client.Common/movie/bk2/Bk2Movie.cs index eb64f74597..b207e150d1 100644 --- a/BizHawk.Client.Common/movie/bk2/Bk2Movie.cs +++ b/BizHawk.Client.Common/movie/bk2/Bk2Movie.cs @@ -7,6 +7,8 @@ namespace BizHawk.Client.Common { public partial class Bk2Movie : IMovie { + private Bk2ControllerAdapter _adapter; + public Bk2Movie(string filename) : this() { @@ -127,6 +129,14 @@ namespace BizHawk.Client.Common { if (frame < FrameCount && frame >= 0) { + if (_adapter == null) + { + _adapter = new Bk2ControllerAdapter + { + Definition = Global.MovieSession.MovieControllerAdapter.Definition + }; + } + int getFrame; if (LoopOffset.HasValue) @@ -145,13 +155,8 @@ namespace BizHawk.Client.Common getFrame = frame; } - var adapter = new Bk2ControllerAdapter - { - Definition = Global.MovieSession.MovieControllerAdapter.Definition - }; - - adapter.SetControllersAsMnemonic(Log[getFrame]); - return adapter; + _adapter.SetControllersAsMnemonic(Log[getFrame]); + return _adapter; } return null; diff --git a/BizHawk.Client.Common/movie/tasproj/TasBranch.cs b/BizHawk.Client.Common/movie/tasproj/TasBranch.cs index a79a3beec2..a9ad7f805a 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasBranch.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasBranch.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.IO; -using System.Linq; using Newtonsoft.Json; using BizHawk.Bizware.BizwareGL; @@ -32,13 +31,7 @@ namespace BizHawk.Client.Common { if (item.UniqueIdentifier == Guid.Empty) { - var currentHashes = this.Select(b => b.UniqueIdentifier.GetHashCode()).ToList(); - - do - { - item.UniqueIdentifier = Guid.NewGuid(); - } - while (currentHashes.Contains(item.UniqueIdentifier.GetHashCode())); + item.UniqueIdentifier = Guid.NewGuid(); } base.Add(item); diff --git a/BizHawk.Client.Common/movie/tasproj/TasMovie.cs b/BizHawk.Client.Common/movie/tasproj/TasMovie.cs index 1c48c66254..bc6c11d08b 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasMovie.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasMovie.cs @@ -13,7 +13,6 @@ namespace BizHawk.Client.Common public sealed partial class TasMovie : Bk2Movie, INotifyPropertyChanged { private readonly Bk2MnemonicConstants _mnemonics = new Bk2MnemonicConstants(); - private readonly Dictionary _inputStateCache = new Dictionary(); public IStringLog VerificationLog { get; } = StringLogUtil.MakeStringLog(); // For movies that do not begin with power-on, this is the input required to get into the initial state public TasBranchCollection Branches { get; } = new TasBranchCollection(); @@ -26,7 +25,6 @@ namespace BizHawk.Client.Common public bool LastPositionStable { get; set; } = true; public TasMovieMarkerList Markers { get; private set; } public bool BindMarkersToInput { get; set; } - public bool UseInputCache { get; set; } public int CurrentBranch { get; set; } public TasLagLog TasLagLog { get; } = new TasLagLog(); @@ -148,26 +146,10 @@ namespace BizHawk.Client.Common /// public string DisplayValue(int frame, string buttonName) { - if (UseInputCache && _inputStateCache.ContainsKey(frame)) - { - return CreateDisplayValueForButton(_inputStateCache[frame], buttonName); - } - var adapter = GetInputState(frame); - - if (UseInputCache) - { - _inputStateCache.Add(frame, adapter); - } - return CreateDisplayValueForButton(adapter, buttonName); } - public void FlushInputCache() - { - _inputStateCache.Clear(); - } - private string CreateDisplayValueForButton(IController adapter, string buttonName) { if (adapter.Definition.BoolButtons.Contains(buttonName)) diff --git a/BizHawk.Client.Common/packages.config b/BizHawk.Client.Common/packages.config index dcaa847713..a65c590f5b 100644 --- a/BizHawk.Client.Common/packages.config +++ b/BizHawk.Client.Common/packages.config @@ -1,4 +1,7 @@  + + + \ No newline at end of file diff --git a/BizHawk.Client.Common/tools/Watch/WatchList/WatchList.cs b/BizHawk.Client.Common/tools/Watch/WatchList/WatchList.cs index 6bd5fa2df0..79df2f54b4 100644 --- a/BizHawk.Client.Common/tools/Watch/WatchList/WatchList.cs +++ b/BizHawk.Client.Common/tools/Watch/WatchList/WatchList.cs @@ -30,14 +30,7 @@ namespace BizHawk.Client.Common public const string DOMAIN = "DomainColumn"; public const string NOTES = "NotesColumn"; - private static readonly WatchDomainComparer DomainComparer = new WatchDomainComparer(); - private static readonly WatchAddressComparer AddressComparer = new WatchAddressComparer(); - private static readonly WatchFullDisplayTypeComparer DisplayTypeComparer = new WatchFullDisplayTypeComparer(); - private static readonly WatchValueComparer ValueComparer = new WatchValueComparer(); - private static readonly WatchPreviousValueComparer PreviousValueComparer = new WatchPreviousValueComparer(); - private static readonly WatchValueDifferenceComparer ValueDifferenceComparer = new WatchValueDifferenceComparer(); - private static readonly WatchChangeCountComparer ChangeCountComparer = new WatchChangeCountComparer(); - private static readonly WatchNoteComparer NoteComparer = new WatchNoteComparer(); + private static readonly Dictionary> WatchComparers; private readonly List _watchList = new List(0); private readonly string _systemId; @@ -47,6 +40,25 @@ namespace BizHawk.Client.Common #region cTor(s) + /// + /// Static constructor for the class. + /// + static WatchList() + { + // Initialize mapping of columns to comparers for sorting. + WatchComparers = new Dictionary> + { + { ADDRESS, new WatchAddressComparer() }, + { VALUE, new WatchValueComparer() }, + { PREV, new WatchPreviousValueComparer() }, + { CHANGES, new WatchChangeCountComparer() }, + { DIFF, new WatchValueDifferenceComparer() }, + { TYPE, new WatchFullDisplayTypeComparer() }, + { DOMAIN, new WatchDomainComparer() }, + { NOTES, new WatchNoteComparer() } + }; + } + /// /// Initializes a new instance of the class /// that will contains a set of @@ -213,118 +225,35 @@ namespace BizHawk.Client.Common } /// - /// Sort the current list based on one of the constant + /// Sort the current list based on one of the column constants. /// - /// Value that specify sorting base - /// Value that define the ordering. Ascending (true) or descending (false) + /// The column to sort by. + /// Defines the order of the sort. Ascending (true) or descending (false) public void OrderWatches(string column, bool reverse) { - switch (column) + var separatorIndices = new List(); + for (var i = 0; i < _watchList.Count; i++) { - case ADDRESS: - if (reverse) - { - _watchList.Sort(AddressComparer); - _watchList.Reverse(); - } - else - { - _watchList.Sort(); - } - - break; - - case VALUE: - if (reverse) - { - _watchList.Sort(ValueComparer); - _watchList.Reverse(); - } - else - { - _watchList.Sort(ValueComparer); - } - - break; - - case PREV: - if (reverse) - { - _watchList.Sort(PreviousValueComparer); - _watchList.Reverse(); - } - else - { - _watchList.Sort(PreviousValueComparer); - } - - break; - - case DIFF: - if (reverse) - { - _watchList.Sort(ValueDifferenceComparer); - _watchList.Reverse(); - } - else - { - _watchList.Sort(ValueDifferenceComparer); - } - - break; - - case CHANGES: - if (reverse) - { - _watchList.Sort(ChangeCountComparer); - _watchList.Reverse(); - } - else - { - _watchList.Sort(ChangeCountComparer); - } - - break; - - case DOMAIN: - if (reverse) - { - _watchList.Sort(DomainComparer); - _watchList.Reverse(); - } - else - { - _watchList.Sort(DomainComparer); - } - - break; - - case TYPE: - if (reverse) - { - _watchList.Sort(DisplayTypeComparer); - _watchList.Reverse(); - } - else - { - _watchList.Sort(DisplayTypeComparer); - } - - break; - - case NOTES: - if (reverse) - { - _watchList.Sort(NoteComparer); - _watchList.Reverse(); - } - else - { - _watchList.Sort(NoteComparer); - } - - break; + if (_watchList[i].IsSeparator) + { + separatorIndices.Add(i); + } } + separatorIndices.Add(_watchList.Count); + + // Sort "blocks" of addresses between separators. + int startIndex = 0; + foreach (int index in separatorIndices) + { + _watchList.Sort(startIndex, index - startIndex, WatchComparers[column]); + if (reverse) + { + _watchList.Reverse(startIndex, index - startIndex); + } + startIndex = index + 1; + } + + Changes = true; } /// @@ -407,13 +336,7 @@ namespace BizHawk.Client.Common /// /// Gets the number of that are not /// - public int WatchCount - { - get - { - return _watchList.Count(watch => !watch.IsSeparator); - } - } + public int WatchCount => _watchList.Count(watch => !watch.IsSeparator); #endregion diff --git a/BizHawk.Client.DBMan/BizHawk.Client.DBMan.csproj b/BizHawk.Client.DBMan/BizHawk.Client.DBMan.csproj index 6d14eca92e..0314d8265e 100644 --- a/BizHawk.Client.DBMan/BizHawk.Client.DBMan.csproj +++ b/BizHawk.Client.DBMan/BizHawk.Client.DBMan.csproj @@ -1,5 +1,7 @@  + + None diff --git a/BizHawk.Client.DBMan/Program.cs b/BizHawk.Client.DBMan/Program.cs index e4ddd6a1e9..4c7fe8bb5e 100644 --- a/BizHawk.Client.DBMan/Program.cs +++ b/BizHawk.Client.DBMan/Program.cs @@ -1,12 +1,11 @@ using System; +using System.IO; using System.Linq; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Reflection; using System.Collections.Generic; using Community.CsharpSqlite.SQLiteClient; -using System.IO; - namespace BizHawk.Client.DBMan { @@ -15,17 +14,17 @@ namespace BizHawk.Client.DBMan static Program() { #if WINDOWS - //http://www.codeproject.com/Articles/310675/AppDomain-AssemblyResolve-Event-Tips + // http://www.codeproject.com/Articles/310675/AppDomain-AssemblyResolve-Event-Tips // this will look in subdirectory "dll" to load pinvoked stuff - string dllDir = System.IO.Path.Combine(GetExeDirectoryAbsolute(), "dll"); + string dllDir = Path.Combine(GetExeDirectoryAbsolute(), "dll"); SetDllDirectory(dllDir); - //in case assembly resolution fails, such as if we moved them into the dll subdiretory, this event handler can reroute to them - AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); + // in case assembly resolution fails, such as if we moved them into the dll subdirectory, this event handler can reroute to them + AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; - //but before we even try doing that, whack the MOTW from everything in that directory (thats a dll) - //otherwise, some people will have crashes at boot-up due to .net security disliking MOTW. - //some people are getting MOTW through a combination of browser used to download bizhawk, and program used to dearchive it + // but before we even try doing that, whack the MOTW from everything in that directory (that's a dll) + // otherwise, some people will have crashes at boot-up due to .net security disliking MOTW. + // some people are getting MOTW through a combination of browser used to download BizHawk, and program used to dearchive it WhackAllMOTW(dllDir); #endif } @@ -46,17 +45,18 @@ namespace BizHawk.Client.DBMan if (asm.FullName == args.Name) return asm; - //load missing assemblies by trying to find them in the dll directory - string dllname = new AssemblyName(args.Name).Name + ".dll"; + // load missing assemblies by trying to find them in the dll directory + string dllName = new AssemblyName(args.Name).Name + ".dll"; string directory = Path.Combine(GetExeDirectoryAbsolute(), "dll"); - string fname = Path.Combine(directory, dllname); + string fname = Path.Combine(directory, dllName); if (!File.Exists(fname)) return null; - //it is important that we use LoadFile here and not load from a byte array; otherwise mixed (managed/unamanged) assemblies can't load + + // it is important that we use LoadFile here and not load from a byte array; otherwise mixed (managed/unmanaged) assemblies can't load return Assembly.LoadFile(fname); } } - //declared here instead of a more usual place to avoid dependencies on the more usual place + // declared here instead of a more usual place to avoid dependencies on the more usual place #if WINDOWS [DllImport("kernel32.dll", SetLastError = true)] static extern bool SetDllDirectory(string lpPathName); @@ -133,14 +133,11 @@ namespace BizHawk.Client.DBMan { MessageBox.Show(e.ToString()); } - - return; } static void InitDB() { - DB.Con = new SqliteConnection(); - DB.Con.ConnectionString = @"Version=3,uri=file://gamedb/game.db"; + DB.Con = new SqliteConnection { ConnectionString = @"Version=3,uri=file://gamedb/game.db" }; DB.Con.Open(); } } diff --git a/BizHawk.Client.DiscoHawk/BizHawk.Client.DiscoHawk.csproj b/BizHawk.Client.DiscoHawk/BizHawk.Client.DiscoHawk.csproj index e45f56b5ce..66b5b259b9 100644 --- a/BizHawk.Client.DiscoHawk/BizHawk.Client.DiscoHawk.csproj +++ b/BizHawk.Client.DiscoHawk/BizHawk.Client.DiscoHawk.csproj @@ -1,5 +1,7 @@  + + Debug x86 @@ -35,6 +37,7 @@ 8.0 + true true diff --git a/BizHawk.Client.EmuHawk/AboutBox.Designer.cs b/BizHawk.Client.EmuHawk/AboutBox.Designer.cs index a3a62f6bda..2c83e78a24 100644 --- a/BizHawk.Client.EmuHawk/AboutBox.Designer.cs +++ b/BizHawk.Client.EmuHawk/AboutBox.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutBox)); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.timer1 = new System.Windows.Forms.Timer(this.components); @@ -116,7 +115,7 @@ // // mom2 // - this.mom2.Image = ((System.Drawing.Image)(resources.GetObject("mom2.Image"))); + this.mom2.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.mom2.Value; this.mom2.Location = new System.Drawing.Point(372, 274); this.mom2.Name = "mom2"; this.mom2.Size = new System.Drawing.Size(115, 150); @@ -125,7 +124,7 @@ // // pictureBox2 // - this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox2.Image"))); + this.pictureBox2.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.pictureBox2.Value; this.pictureBox2.Location = new System.Drawing.Point(353, 97); this.pictureBox2.Name = "pictureBox2"; this.pictureBox2.Size = new System.Drawing.Size(122, 108); @@ -135,7 +134,7 @@ // // mom1 // - this.mom1.Image = ((System.Drawing.Image)(resources.GetObject("mom1.Image"))); + this.mom1.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.mom1.Value; this.mom1.Location = new System.Drawing.Point(372, 274); this.mom1.Name = "mom1"; this.mom1.Size = new System.Drawing.Size(115, 150); @@ -145,7 +144,7 @@ // // pictureBox4 // - this.pictureBox4.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox4.Image"))); + this.pictureBox4.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.pictureBox4.Value; this.pictureBox4.Location = new System.Drawing.Point(21, 89); this.pictureBox4.Name = "pictureBox4"; this.pictureBox4.Size = new System.Drawing.Size(128, 128); @@ -155,7 +154,7 @@ // // pictureBox3 // - this.pictureBox3.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox3.Image"))); + this.pictureBox3.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.pictureBox3.Value; this.pictureBox3.Location = new System.Drawing.Point(21, 89); this.pictureBox3.Name = "pictureBox3"; this.pictureBox3.Size = new System.Drawing.Size(128, 128); @@ -165,7 +164,7 @@ // // pictureBox1 // - this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.pictureBox1.Value; this.pictureBox1.Location = new System.Drawing.Point(155, 108); this.pictureBox1.Name = "pictureBox1"; this.pictureBox1.Size = new System.Drawing.Size(171, 216); @@ -275,7 +274,7 @@ this.Controls.Add(this.label2); this.Controls.Add(this.label1); this.DoubleBuffered = true; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.logo; this.MaximizeBox = false; this.MaximumSize = new System.Drawing.Size(527, 524); this.MinimumSize = new System.Drawing.Size(527, 524); diff --git a/BizHawk.Client.EmuHawk/AboutBox.cs b/BizHawk.Client.EmuHawk/AboutBox.cs index 0c552ff6a5..e5e01e0b15 100644 --- a/BizHawk.Client.EmuHawk/AboutBox.cs +++ b/BizHawk.Client.EmuHawk/AboutBox.cs @@ -20,8 +20,7 @@ namespace BizHawk.Client.EmuHawk label1.Text = ""; try { - var rm = new System.Resources.ResourceManager("BizHawk.Client.EmuHawk.Properties.Resources", GetType().Assembly); - sfx = new SoundPlayer(rm.GetStream("nothawk")); + sfx = new SoundPlayer(Properties.Resources.nothawk); sfx.Play(); } catch diff --git a/BizHawk.Client.EmuHawk/AboutBox.resx b/BizHawk.Client.EmuHawk/AboutBox.resx index 17afc11b6f..bb3c530211 100644 --- a/BizHawk.Client.EmuHawk/AboutBox.resx +++ b/BizHawk.Client.EmuHawk/AboutBox.resx @@ -120,2493 +120,4 @@ 17, 17 - - - - iVBORw0KGgoAAAANSUhEUgAAAGwAAACQCAIAAABiVBn4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA - CvYBwq9wAwAAh6hJREFUeF7U/QdgG+eV7o1rU+24yOoSRbFXsKD33ntvBFEIohBE7wRBAOy9906KkqhC - 9S5bkrvjEidxYidxejY9m2Rd1UVR/xeyd+/ee7+96++72d383xyPhpRCDn7znHOeMzMgNz38Amv97oON - 9Y2N9Yfr9zc2Hjx88ODhOtgHn3mwce/mzfsff7hx99O//uIHZ5bGRhP1LXWisI7SZGZPJcz9AbVfTfAo - sHYhrJZbbmAUW3gVYN8pRWmp+UEDM2hkuTRkswhhFsHrVVi3Bq8gZFXRCrS03CpaXp0Y6pIjXHKkiQNR - k/NruBXBalq0ht8fMV9Znfjj+2/dv/XXjfu37t745MH6xo2b92/evv9gY+Pzg/4vXF8I4sMHAOTD9XsP - 7935HCKIe/ce3L+3vrF+d2P99q1/+vVrF9ZWxzunWz0pmyCqp/X5VTMpS7ONDyACpjYBVI7N5FZsVeKz - AEfwDzxqvE2KqREiDDyojJQrIWTrWMVqWkENt6xOArcKK0zsYqugHIRNWGFkl6pIeTJclp4J8VfRO326 - 8RbPwbGON66evf3BHzce3H+w/iB9Ru8/uL/+dwxx494DIMMH9x+mIa6DSMvwzs0b929+snH/xse//cmL - Zw5MtodaXeqmWm7KyhsIagDHFrsAEATUAEFO+RYhfKeJVWrlV3qVOKsQJicV8NGZICiQzVTIZjFuHwu6 - Xc8stovhDgnMzC2t5UEs/DKnDAHIWgSVBlZpNaPYqyZ1eDXdYVN3xDrdm/jh2y9vrN+5e/vm/fv3AUQA - 8/Nj/i9cXxDixv079wA1EOAwAcEHIJkf3L9/98bG+o0Ht//yvZcvnFwcGGv2NFrEMRO72SZosQvjNexu - jzxUReZWbKMXP0UrelKE2FVFKZBh9qqJOUBWPEQGpXQLFbIVl/8NUtFTQnQGDaBE7wEcrYKKGk5pDafE - JigP6YhuJSakp4SqyU45yqMiNDskQ3FLb8za1+S6uLZ07/YHGxt37t27fe/+3Y2Hf8cQ1+8BHQKID+7e - vvVwY/3+vVuffPTnTz78w4M7f73155+9dGb55ELPTKc/YZdEDcxQFTWqZzSa2IlanplTQcp7nFb0FLP0 - GV7lDgFsF6XgCT50pwi9V4LLYcN30yBbycWbmRU7BMg9rPKtUmwmSN46EdzCKwcZXcstDVYRGs2MkJ7k - 0+JcSpRNBHPKsXGbMGoVd0UtU33x77/1/F/+9Mv19Zv37t0Ep/fhfznHLwZxA+BLJ/CDB/du3fwYHO7v - f/2TK+eOPn/p6J9/9c4ff/LNkwvd053e8ea6NrcCQAxoyJFqOoDolGIkqL304qcBOxUht4pSqCbmAYIK - XLYUu09LL1WSixjlOziw3VJcDh++W4TK0DNK68QIrwLrEMFNrBI9vdAlQyUsLI8aYxOWWwRlOnq+grBP - Qysw8mERm7jBpZ4eTFw8vXLrxj+t3//0wfrdv1eIoAau39vYAL357r07H9/4+E9XLxzraQkMtvtXp9sP - T7e0+jV+PT1kYPi1ZMCuzSEJ62g+FbGWWwnwAQEamRCbAA5UqaeXaEj5YEdNKtTRy3TMchpkmwiVpaOX - ChAZanKBiVXmECG9Cly9GGFillRTC8AOyGh/Fd6jRFn4ECVhLw+2hQffqqYV1kjQQatoojc8Mdj0T7// - 0f27H6zfu/F3CvH++j2Q0LdufwIgPrj/yW9+/v3ZkbZEoGYg5epttLiraQED3S5DebWEQBW5x6tOWUXx - Gq5diHKI0dyKHWpivolVYeUjwFZHLTEygdcpU+By5bj8akYFD5ohw+ZqyMUKfJ6BWWbhwpxitE9BcInR - Fla5iVZkZBQDrxOsJoK8Bt1Ght0tQm4XoXYYuBA9r8JjZLWGDNODjT9976X12396AGp0OmnSHNeBEXuU - RZ99+J+3vhBEcAgbD4F7uP3w4e379z76ybvfnB9tGesMjLa5+uPmzoA6buM6FciEjRM3c5IWAeAV0FDd - ckJQSwOwADWbAOkQY2rYlVpyEeAItkJ4JrcyQ0Us5sMyAU0AUU0oNHOgTjHWrySFtVS/guDgw2uZpQCi - mVMGchwYzGp6voq4T0XMVOD3qsm5CnJerQwTtYt7EnUvXDzwyQe/eLhxcz3tZj+HCAoQ2Afbz17If9L6 - jyGCwwG24ZGluXv3zqe3bvz57ZcvLY42zw9ER1P2wZhhIKyNGKg+NbbLI/Gp8AZ6Gb9yj42PMrNhDhFW - Syo2MStBGBkVSly+AJoB/pZTtpOS/zQx72khPItfuVeCzJGhc6WobD0VYuXCAUeflOASos0MiA6fp0Jn - aQh5oAiAqgqskpqwr4qcoyFlCWBAjxkmATxqFcaciv7m+u+/cXH99geg6wF8n7G7B9zsfzJBsL4QxPsb - D28BD7bx4N7dTz/9+E8vXTm+PNo8kqzvjxi6vMqAhuhWoCJ6cqdbZGJD2JDtbMgOQA1A0RCLVPgCwA7s - ixH7ADtqwWYQ5Lyn8FmPE3Ke4kMzRfBsAFEEzxJUZqjxBTpSSQ2j3MqCmullVfg8KWwPH7JNitwnQe4T - IfaK4HtkqD0qHECZJUXtkeP26Zhl4RpOg10cd6leu3rk/h1gd9YBO7A+4/j3AhGUlnvAYwMPtn730w// - +NLFY0tDyaG4dShqADOJQwRNmJlxE73HIwM9gV68hVu+C4ATwvZWkUtk6Bxa4TPMkm0gwA4gSC/aAvbp - RVupBVt5FZlSFECcJ0ZkS+DZVcQSNSZPRygykEv0pGINJlcG2yOA7FCgc4FUZahsGXKfHLlXid6rwWcr - sJkqQraaXAhmx66wvi9uef3a0Vuf/NMDMMA8eHDr1i1w8GAHmPD//pr4mRJBpLW4fu/mB398+/nzq+Nt - S72huRZHR704pqcOBpRtdt5EoyGooTCKtwJArNIdUlRONbUM5C8h+wla4RZG8TY2ZCevYo8ACgS1D1Dj - lGVwy0Eu50mRuVJkjhyVV00uAxC1uIJqwJFUrCcWVeFAOudo8SVyTL4clavG5WtxeRoc+Ewuv2K7DJ2p - pRZHTJzRpG04ZT842fqd15+/eeNTQA1A/NeM/juCeOsmGFrur9/88Hc/evv6sdnzC90HewPjMUNnnbDD - IRoMqJY7690yHIDFKN7OKt2pIZYocYVC2D4pKlcE3QeEpsQWaIklVeRSHaVUTy3XkcsV2EItsVSNL9YQ - ioAMaxhQIwVSQy2z0CvtbHg9DwmijoOoIpQKoVmCigw1Ng+IVEcsUONyhNBdSnwOUKJVjG7zqvtjNd0x - y4G5od/95hdAf7du3QQEAb7PevRntf1R/O2BfrHG8ijWwXh/6+bD25/c+eC3P3rl/KXF3vkW54Bf02IR - gBGl168eaTBa+UhmyU564XYRLFtPKVfhitT4QjMLZmMj7FykUwg6BjGoIIdV1Iia5ldQ3FKiV0J0i/Ee - Cd4rJQbkZLcIF1HTEwYuiKZqdtLAba0V+WVkLa6QW7JdAs3QEQp1xEIVPk8EB94oW0UqMHKhjTZhd7g6 - 7lTMDSf/+Psf37/zEciZjUfN+X76mgSQItimxZB+KeAlfRZ/o/UfQwQr/R3BtwZx/87DGx/d+dMv3n/p - 3KmJlsGgvr1O0mIThXT0VJ04ZuZXUUrpRTtoBdtV2GIbF2PjogG4sIrWoGU2VrESek6rSdBZK+6xS3vs - snarBABqrhG01AjaLeLuOnmvUwViyKebCJumoubJRzHdUNtWK3JwkZLKdH2UI7PU+Hw5NocH3QX8uZyY - X8OHh0zspFMWsQlHOjx/+NW3N+59sHH/5oNHo2q6JKYhpgvSo7j/PxT5N+L4RSHevZO+1vQQVJgP/vyb - 733zrXMH14YTvR5ti1UI5pNQFd2roViEKAEsk5j9NDVviwZf7JGSgypGk57baZf3OlT9TvWgRzvqq54M - GmciptlozWyDZSpingybpqPmxUTdartvrS9ysr/hWG/4eG/k7EjTxYmWcyOJ4/1RwBSANtPKROW7xNAM - JTZXis7iQnfxYLsVpAKrBOOrpodqOGGboDlU/e3Xzt2/+9eH67fu3boNTjyQ431gv/8HxHv/bRDv3F5P - X4BYv3PjD79696WLzx0YO9Qb7fNqm0wcMOcBI61jQKS4PGbpTvy+p+gF23QkiF9Bi+v5HTbZMAAXNk9H - a2cbrYtN9v3J+gPN9YdaXcc6g0c7A2B7oid8bih+Zbzl6kzH1an2y+PNVyZaXpjveW1l6OWl/uem2k70 - RpZT9SC7q3D5MnimGpcnQ2cBx8OH7wEQ3WpyxMwNmlgRm6DRrTp9ZOLDf/r5xoPb63fupi82gXb49wAx - bbYfXUlcv3PzTz997zvXzpyZ7Z5ssrfapVEdPaAhg4FEQSjgwTMZJTup+duElZkWNrJJz++qUw379bON - 9qWkc3/KdbDFvdrmPdLhP9rpW+sKnOqNnulrODcYvzicuDLW/NxE69XJNrADaF6ban95ofeb+wdfWx54 - aaH3uan2C6NJoEeXAK3B5qkwOVJU2jkCJcoIeR4NpaGWB9xi1CpoDlbPj7f88sdvbzy49Wg8AHYHsPq3 - 6fzfBHEdHEf6W27c/viff/m9N968fOzUdOdgyNhsETcaWGDCq5fgq+nlEmyeAAZ66D7QTL0ySptFNuQz - TMesy83uQ22+1Xb/I3yBte7g8e7AiZ7g6Z7Iub6GCwPxS0OJy8PJK8PJyyPp7bNjLS9Mdbwy3/vNpQEQ - ry70PT/bdW2280hXoNUsBEmtQGaJYXuFsAxe5S4pNtsiAmM71a9nNNiEPU3WiYHGn/7gjX+BCKilryP/ - HUB8lBTAdd355J/ff+vFF04tn53rGYtZOuoVcSMXyBDMJ1VUiBw4FSLEzEB4JeTmGvGgVz/VYAMaPNDq - PdTqBRo83O472uE91ukDcbwrcK4neq6n4XxPw4Xe2KWB+JXBxLPDqetjrdfGWl+YaH91rveNpYHXF/pf - mul6YbbrpaW+yxMtU+EajxCrRGVL4ZkC6B4BDAwtuaCS1AqRgGPSJR9sqZ8cjP/ul98H6QwaC2jN6SIE - /vd3AnF9/e7dmx9++8VLL51eubQ8uNTh66xXBlSUamppepzAFcjxJQYaLKhgttXK+l1V0w225WYvEODR - rtBqmw/k8oGU82Cq/nCr+3iX/1R36Hx39Fxn5HxX5GJv7Ep/03NDyWsjzS+Mtb000f7KVNc353rfXBh4 - fb7vpalOkNHXZ7uuTrcfaHZFFBQ1mGQAxIpdYiQYWvI1lKIaHixQzUg65T1xy+Jk2+9/9S6YrUBNfFQQ - H/xd1MT02QTn8/7tu7c/fPPq2dcvHn7u4OjB3jCoiU4xtpoKAcOvFFOgJJbpKJUAYq9DO+o3Lac8R7uj - a93ho53BpSbHStK52uI52uZd6/CBON7uO9UWPN0aONseOt8ZudjdcLm38epg8qXx9lcmO1+b7n59tveN - uT6wfXGy48XZrsugaE62rXUFm/VcE7lUjtgnrNglQWYq8XlaSrFFiAzpmY02UdKnnRlJ/vxHb63fu/Hg - 7r31dTD2pefVvweIgOKD+/du3r39AYD48lmgxIGFNm+TiW/jIcGAnIaILlAQyrSEMp+E2u/UzTU6jnc3 - nBlIHOsKHW73H0i6DoLGAlI74Tjc7DnS6jnbEz7ZFjjdETrTET7dHjzTEbrQE3t2MHF1OPXccOr5sdZX - AMf5vtdme16a7Lw+3XF5NAUgglbeXiO0M6FKZBYw3hJEGqKJVVEnwQSrGQm7uMmjbo3ZXnvh3IN7NzYe - Xc1JH/vfA8S0DtM+4fbdOx9+6/mz147Pn5ruGG+0BTV0U/oCF5jtskWIfCkWDHDlARl90K1fTLhO9zed - G0od6QikC2KL92DStT9et7+xbiFSuxyzHm12n+4Mn+2KnOkMA5TnuqMX+xov9cfBZy4PNp3pioD6+Ops - Tzrmel+c6waNG7ifw63elI5joZWrUNlgpgbFsYpUVCdCe1XkqJHd4VUPphypaO25E8v3bn4IDhnAS1+D - eAAI/rdDBN0tfW/g3r27H77zyuVnj8wcG2sZDJk8MmIVsRSMxulLCZXZQmSRClcWlDMHnbr5hrqTvY3n - h5uPd4WPtPmPtvpXmz3LMfuYq2rQrpx0Vy2Eak60B052BI+3+cHO+b4YCLBzpjtyOOk6EHfMB2sWI7Xg - b8Fnzg/GQQA9AlfUbhLaGJXpaxP4AmB3DDSIS4oDbj9pEQ42mBaGGkZ7o69cP/Ng/Wba2ILjBrX83t2/ - C4h37t5I32C5/c/vvHLp3Mrogf7GPr/eIyNVEUtE8CxG8R5WWSYfVqDElAZkjIF63WJj/dnB5OXxthMA - SqvvUNK9GLUCfF0mUW+tdMAmX0mL0XOqM3SqC0T4Qn/jxYE4gHikxTsTqJnyGcY91YB4X61kzKmdA149 - YDzbH7s0mhp0qOpZMCOpRIvLB3N0DbPCJcFFqpldHtVsu2uuP7w01f6L97+18WhiSXdnMGr9PVgcAPHG - zY82Nm7dv/3XH7xx7eLBicPDyaGwOaim68llYgCxaBf7EUQVFhJVsif85qMd4atTXc9Ndh5q9kwHa0ac - WsCutZrbbZaAnV6zaLhOsRSzne6NAomd7A6DHcAI7JzqiUx6DWPu6tmgebheM+nTH0jUH2vzT3irD7d4 - gQ+f8OmdbEQttQyIsZZR4RBi3DJCvIY/0WQ9OtZ08cjot145e/Oj34HZ+faNm+mDT1ucfwvxv2l2Bufy - zt2bIJ3X733yj++++cKJxTMzPdNN9bEqdi0dKoPnMIt3ckqB+82rwpe1GCX7k57TA4mrMz3nR1rmo7Yx - j34ccPHqR1xVI86qoXr1QJ1y2KmeCQJxNZwbaAR95lDKdaIrdKwdWJ/IXMgy7NBOeAwHm9znwdcZ77g+ - 2XWqq+Foi//qeOtKvC4kwjtZMDMV4pMS7QKMT8tocakPjCSfP7Xw6x+/eefTP208uLl+79a9u3fTBNfX - 768Dgv/dV3HSM/yjh0g27t/68Nc/fuvS2pnp3rmEu6mKa2fCDYQSUfleTtFOKTzXxkYDc3OiP35yoOnU - YOJQe3AqbJmJ2uYbHWA74tUPe/SDIEkd6omAcS5iOtMXOdEVWGmyLzZY1toDIOuPtQXnQtYZf22vWdlv - 0Z7sjJ/oaDzZ3vD64ujZ7ti1sbaL/fFOAz8swXtF2MZqtpmH9hsFUz2xt14880+//dH63Y8fPAD28F66 - nfyb9YjZvyrwb7z+Y4jge6ZPIjgQMD8Dv/3hn374ypWDfcmJaF1bjTQgJjVp2DY6XFaZpcNDmnT8g22B - C6AU9scBwfl4/XTUttDkBDEVsfY7q9rN0i6bEsSYr3oqYDiYdKw2Ow+3uFeaHMfSBdF3MOGe8pl6zYqI - iNokZ405jUtR14zX/NxI63OjIFqujjZPeqta9OwGNc3GQ3nULJ9RfHhu4M+/e3/j/scgZ9Lm+n9bn7+Y - /5z1hSCCHACxvn7v4frt9dsf/fbdN49P9kw0OkcDtcMe42Lc2aoX+gVEDxffa1OfHkxcnGg/3te4lHTP - NNhnY3VgO+w1NOuFtZQKNxebqub31ql77YoBu2Ihaj6Uqj/Tl74ScbavcSVeP+qsWohYu43SII8QlzFn - fJYuk6zHKAFd6MXpzqtjqWsTLUDCXRZxUEE2MeHdgdrJztiB6f5P//Kbjfs3NtIa/F8XSOrPX8x/zvpC - EEF6gOqSHvzu3wJd785Hf/jV2y+dm+tfaPYvJb2XRtqn/ZbhuuohW9XBhO/iaOvFsbZT/U2gMs5EbBMB - 87Bb32VROFkoM6kcbEMSSlzNHvHoYnLKXNB4tMUD+vLzk+3PjbRMuKrDfHy/WdYgpvo52GYVe8imHbJp - ptzVRxLO1xf7Xl/qeXmuc6nROujW+OQUl5z+3OGZn3/31deunb9/44P1uzcfpq3YI2vzP6/PX8x/zvpC - EG89WL8DKvTDB3fv3li/92n6SbCbf/7Du6+/uDpzpCv+rcOzq8nAvN92vCXyrZXJ1/aPvLw0dHW6+1CL - fxIQdOpaDaIGOb2ODvcLCC06fqqKnwZKLPXz0fsbrKe7wleGk68t9L082zPpqu7SC7v0oriU7qIhmlWc - tZYQSOST7d6z3b7X5jvePjT0ylL3gRbnkN8QUnNSdbp//O5rD2789f7H/7xx79b9u+BI0/f2/vf1+Yv5 - z1lfCOK9hw/vpLcPbt27eefOJw/uffLwzgcPb/3l9++89tz8yPdOrqw2+faHHFd6m397+fhvrp385bPH - 3j21dLI7Nhu2zkdsc2HrsbbQcmN9v13db1MN1mmTao6fh22SU1cTTuAQr462vDzT882FgWPNvtE6TauG - A1COObSLIcuZrobrE23nevzPjzVcHY29utDx/Gzb0e7QgM8w3xr61uUTDz/808b9Ow/u303PJ6B4/yfz - +n9cXyydH0G8DZQIGszGvY2NOxsPbgCOH/zs3ZdW51/dP70YrF+Nui93J//p2plb33nxo7euApSXh1sO - JjwA39GW4OGUf60tdCDu2h+rnw9Zu02yRhm9vYq3v8EGhpZLA01XR1tfme29MpQatatb1Ow+k2R/1H6q - I3yhL36hN3amw/3abOLqWPT56dS1mbZzo6mRsPXFtaW7H//Tw3s3H9y98+kHH94DQ+ltUHU+P+z/yvWF - IK4/4ggCdJZ7YI5KQ7z58N4nd//59z964fLV+bHT3alph+lkU/Cjly9/8sbV31879fPzqy9O9VzoSxyK - uw8nvCsN9QtB67THNF5fPVCrbK8SpJTsGbfxQLTuaNJzvif2zfn+t1dGX5rqujKYnAJJXS0Yq9Msh62r - cedayrWWtLwwHn19qf2l+bZrc52XZ7pPT/X+8b23Hnz4p4f3bqe9V/rp0/SziX+/EIFB+KxB33u4AZL6 - HnDdD+6spy+T3Lj1u1+8dHDh5YWJ/cH6K92pv14/96frZ359ee1XF4+8uTT63HDr4SbPWnPwQINz1lsz - ZFH1GKR9JvkI6BUu45G490Rz8Ex75NmB1OvzA28tDb0w1v7cUOpyX9PxZt+iv2bWo18JW9dS9Zd7/d+c - Tbw8nXpuPPHsdMerR2Z++e2X7v71dw9vf5I+rcBP31u/n3Zhf68QwfqMIwgA8W46qdN6vH/3xoN7Nx/e - /OB7l8/+6Pzxb86Nvjk38vNTB397ee2X5w+/e2TupckeEGc7Y+e744dirsNxD9juD9ct+C0gloP2tSb/ - iWTwdGv4uYHmN+YGv7U4/PJE59XB1PXh5gtd0SON9SDOdYavDze9ONr41mLrS5OpZ8dTl6e7Xjux9OHv - fvrw7o2HoOGtr6cfnrx7795nED8/5P/S9YUgpg/tUckGhfvuw43bACVInQf37tz46MHdT2/902//9MaL - Pzl77M2FsVcmen94bOGX51bfXBh+frTjuysTF7rjx1OBo01esF1L+g81OJcjdYtB60qo7kQyBCCeag5f - 6km8NN716lTPC6Nt31ocuj7cAiCe7wyfaQ+AuNwTeXGk8bWp1PXRxOWxlosTXS8eWfjnX/zw4a1P07m8 - fj8NEZzT9CN16euvnx/zf+H6AhD/VYefQwQd5iFwPPcAxFugU9/4+B9/eqy//ZvLU28tTVwdbP3ewamf - nVq5OthyuTfx3uHZ852xwzHXWsIHAuws+GunXcbxOt2wRX200bfWFDjVHLnQFb821PryRPdr0z2XehrX - Eu5TLf61lPt0m//acOKVydZXJpKvjCevj6YujrRcnu5/59KpT3/7i41PP35w5+Y6oJcuio8u1T16KPq/ - nuIXhgiay2dvX9lIQwRivHn/3v11oMg7V48eCKrFJ3ubf3pq9YdHFn5x+uCPjy1e6Ihd6Um8d2jmcnfT - 2dbIyWTgVCp4MFo/ZtcOmVWDJsWASb4/4FiNeoEez7XHrvQlX5ns+e7K2Mlm/7zHsOgz7g+Z15Kui93h - i10hQPCVidSr090Xh1uvLYz96b1vb9z8eOPOrY17t9MQwTD18MH9dLFOX8n+O4b4KABEcKqBjwDw0kq8 - 8+mnf/ndmf0zA+H6FrPq2Ymun19Y/cfzh3+ytvDaZPf3D0z89Pji+fbIxc6Gcx0NhxvdqzHXgWj9csgO - xBjjUQ5FXGkltkSAGE+1hJ/tT70+2/fe4alTLb4Fn2HaqT3UYAUQrw5Enx9qvDYYe3mm+8xg6vL82F9/ - +f7GXeD5wYEAao+udKUX2P6nT3j/j+uL1kRwbOn4bPfRE/DA5Wzc++jn770xN9Dc6q9ptMpnW32/eun0 - H54/8dNTC2/M97y92P/GbNfzw82nW0PHmjzHEl5QE48lfECPU/X6OY/5aMJ/LOk/1RYBnedCb/zZodSL - k50vTXVeG20Zskhn3FXnu0Lnu4JXesPPDzfuDxlPdIcvz/S8ffn4xqd/vn/rowcP7gFLAzIk/dTXv57p - R4f4X7z+v0FM++31ex8/WP/497/43uxAMuHSJxzahFW5lHStNXu+vTTw9kLvj9em3tk/+PpM18lm32rU - cazJC2K1wbnkt8w4DTPumhm3acFnWQk7gDyBYVxL+S71xc93N1zujx9LeQDElbD5dKv3heH4c32RY032 - wy3uM+NtP3j50sM7Hz54cBtYw/Rlkf8F4mcc/2vXF4X4CN5nBwlOPpDAnXWgxI0bNz743Qvnju4fbJtr - axjw2QZsVa0yxgsDqe8sDPzg4Pg3J9qv9TUeDNWebgmdSPhAZTwUSZfFUat2IVQ3ZNaMmDWjtWCrHrNq - 9gdt5zujL461g9YMXM6RuONUi/d8h+/Z3vC5du9y0LDWFrgw0fmHd994ePeTtNcC2fv5oT367+8a4r8e - 3yOI99OHv37n4b37D+/eX78FuvOHv//Hf3z7zXfOnn52YuJYU0O3jHehKfjewtibY50XWvzLHv1svfZc - W/hMW+RgpP5AxDHjrVmM1s8H6w5E3Yte+6yzdqa+Zt5tPhR1nmmLXh1oPd0WOtXqP90aXI3Zz7R5TzU7 - 5z3aE8n6i4OJl1cmbv/mJw/vAI8NIKZ7yOfQ/v8GImgs6eFv49ZDMPSt3354/9bd22Dyf3j37sZHn370 - 3R+8PrtyqaVzqabmqMP2w5mxb4/3nY17xoyS402ugxH78aTvaNwNPPZy2A4gHoj7D4Q9+wOu1aj/VHPs - XHvThc7Epe7kpe74tcEWQPBA2LoStqzGrKeaXadbXJd7G66OtX/v3OGND37/8M6nD8H3TZvrz9M57Q/B - cf5r/NeuLwbx8yNNQ7zz8OHNhxufPty4ATrL3bsPbt9/eOvBg7/e/vn5ly+1jb3QOnjGFZxXaV9pbv7p - 4szlZHihrupiZ/hyT8ORRufhBjCEuJcCNmC298e9iz7ngqtu0mbuq5KBaFOIOpTiQxHn0bjrYNi64DUe - CNceilrOtnqON9Wd6wo9N9H9y1efe3jjrw/v3ACWJt3g/sdQ/+iy8aMHUf/LGX5xiOAY/wfEh58+fHhr - Y+P23fUHtzce3ty4+/6fTjSNngz2/XT6+PVgywRPcUhv/tXy4qXG8PGw41DYejrlORJzHG10HW10H4w6 - Zjw1o/XVbUrJuKVqOWDf73UMGpWfoRyzVIHms+g3HWl0HIrajsXtJ5PO40nHs8PJqzP9f37vrYd3Pn54 - DyRD2lcDfOB4/iU27qTfRfx3CxEQfAQR7ILjvvXZ0AKYgtfx6frDP919ZfZ0M89yLTn7lwPXvxUfOSir - 7cDQ3x0c/cnizLGA7WTcBZwzENeJlH9/wHIo6pjz1rSoeX166bBZu+SvP9oYOhzxHWsIAIjDNeoxi3Yl - ZD0Wd66ELECMywHTwaj1ZFfDt44u3P71+w9vf3L/ow/W79wBJfk2OJGPDuYz/38b+O3/GWLaSYCp+tG7 - MMD6/LN/6/WFayIYCO6kH2357M7jvfUNUA8fgOnvz3d+/cK7+wP9IZzmQnD0r0vX3olPHlXUd2E4S2rD - 90aHX+hKrsUcBxssB6LWeX/NqEO74DUDT3PQ5xy1aGbrzSM1mnmHeUAvGzTIL3W2tMnF49aqMy2Btbhv - qk4359KvRuzHGn3HUqFzAx3vnFn79Fe/2LiTLiMb6aeIN26vb3x0987H94H5Tt+7ePSG4n93ff6K/tbr - C0AEGIEGAcf0Nj0fAK+dFubNBw9vbNz+2V8vDRxo4VttJawVQ9Pvpi99v2n+tDY0RJaFIMhzodBbY71H - YnVLQeNS2DTj0/fVSIYsmv0hUPW8U1bDfL15LRZccNeOmzWA4LPdqSWP9UJ74/X+1itdTacSgdk6/aLT - dCzimaszTzusK7GGtw4fu/mPv3/4yb2HN9IXNsHxpB/9As4bTKDrd++uf36jCpxwsD7b/xzhfyNE8J3T - o+lnRfv+xvrNdRDp/Pnkwcafbv/u+e/NOVIBrFS7G9lJNbzfu/Z+y6GLhuQYTRsuw3ZyuFdaYieTnjmv - btqtmfcZZz0GkK1TNuOq3zVXZ1yoN805TAAfiENBx5LXuuKve7Y7fqU7frYldKEtshq2H/JZzoX9Ewrl - bLVpf733SCT1oxOXb//8TxsfAo4bGzcf3L95b/3WPQDw0dVZMAR+Tu0zfOmX8C/rs1f0N19fCOL9Bw/v - 3E8/+w7y9yHoJDcePPjL7fXffHzj7V++MXW8V+Zww7iCJ/Lr8imvNcz8qufUFXPHAFHVQeTX5hdMGlXn - 2oIrQdNEnWLKoTkEoAQdi07roYDjaNC56DTP1BlAKTyeCpxofWQkg3XXB1KXOqPnWoPP9TYdj7tWPeZZ - qbQXS5kXaQ7pHYs658XG/u8vnf3Nte/+8/d+s/6HTx9++iCdFrfuAee6cX/9s9vOoA7eAXUT+Ie/EyUC - A3EbHOStR/cFPr1/41d/+e3L7/7x2nf+8dTLJ0K9CarKWkBgfmWPbhf0hKnlZ+0nrlp7h8hVHUSBOa8g - REIt+0Crtc24NMM1khWf+WSDb9Vbf9hbf8BlORJ0HY04p52maXfNrLf20kDyUlfj1Z74cz2NV7qiz3Y3 - LLqqB6Sstkr4CJR0iKM5qao7We0/72g+7+85Fx2+3rv/+4eu/PjZN//xm+/++d2fffqr39/+54/u3gZJ - /uhq96OW8l8C8VG1A8NIutn+yzwPPpX+huC/Ryb21q30j6gAne/BJ+sfvPebd9auX+yaf2Ps6A/nzu43 - x0IInnZ3OfOru6szoJM8x7eCC8/XDSwIHU1wRiOOYirKbWTjl7zGeY9+yCTZ7605lwqfiHiPh9zHo+5T - jd7jMc+hWP3hpOdYyn+qPfziUMu1vqbrvU1XOqOn4q6UkFhbmNGQWzwJpa3S1afE1tMK10l14Hxt6lx9 - 12l39wl/71q452TTwKWuyevjyy8fPvXd51/9409+uf7hp2A0fXgXnPh7G5/9AIv/RIj30xdY74M/Ht6/ - 8fD+zYcPwBb4mPRlTmAD74JB+eE6KH+fbDz84+37P/vw/UNXTwb61+rafzpx9s3WpUlxvb+cKdmSz3hs - jyoDkkRLX/GMfdM3vsivb0OLIlCyvbjCWgbplAsOBB0TNu2gUXqy2X+lv2k1ZDsVdZ1tChyJOA/H3XMR - 20K07vpY23MDqVfHOy+1RS63RY7HXKbKPMWebZ68suZC3ARatMarPS10rHHtF9WRF+wdF8ypAyr/SlVw - zZo4Ym48bI6tuVsP+1pPRHvenD764avvPfztRxuf3N+4/eDerbv3H71T8tObN0COp5mm552/zdq0ce/2 - /Xs3bz24dfPRPYtPAbGNex/fvQ263P1b90DZfvCnG59+95cfvfTeh5ffuf/yz77ff+xwVfyqc/D3U5ev - e4cGaCZnAYn/ZA79iT2KfWVROP9iTdsb/vEDYk8PXtlQQfeV4fXZhXYodEivGbNWdVbxR+pUK032Qw22 - /XX6ExH3kZj7UJNntcV/tD10fih1pj16tS91NhE4HfPNWfXy7N2i3dvteeWRIkI/UnCYYz7NqzvBqL0o - cr9mabtekzwq9x1VBs7oG4+rQsdk/qMK/1FV4JQhdtaSvOTt/vbo4Q9efffhn29s3Fpfv30HVMvPGva9 - O+kHxj5n8H+9NqWfVQLSe/Do9u3G+t20NwAUb28AA/HXuzd//pefn//m2/OnXuiaf617/0fH3/h268oh - ZeSdxP4/TV45V9PajlGbM5HMr2UwvrFHmV0eqmAvcp1vBiZOVzUOEDVNCHYYRqneVyDfneHGotrVog6t - MC6ltBu4C37jdK1qwVE96zbMhWonQ+YJf83+Jvec13I04jkTCx721HUIOdLMHYJtW8xZpYFCfA+Cv59h - OM6xHqXXHGPWvmBMPG9OnQLsFP7TVdGjUu8qv/4A37EicByWeQHZg2rf4dr4ldbx7x+7/Omv/rRx58H9 - 9I3ptApv3rz5N8ztTXc3Ht1zTPuBBxt3H4DmuwEGuj/cuPnTv/zh0tu/PPbSN/sPvdi2cC7Qd9bV/cP+ - Y9fdg0fk0Z92Hf/N0LljmlgrUm7YWUn/0i7mE3uUWeXeUlo3XPmGd/R5R88wWZeEsWNwmrWgXJeVq8rJ - chNRzXJOg4QSlZJ7TeIpm6ZHw0vI6a0GfluNpEUvGrRVDRiUB9x1Z6OROaOhiUKxlZeJd+zW7M7zFuHa - EdxZivYIu/YQ1bgEvL3c/5whflodXlP4TylDR0WuI7z6Q4L6RY51iWtbUwXP1yRO1SYO1TaueJvfPnz+ - 1u//eePm3Xu37wCIoFgBv/u34rjp0/X0MywgeR/eWn/40b0Hf7i18bubN198/2eLz170Db0UnX47tfyd - jgMvxyfPWNvO1rTs53uOSiO/6Tvzo5bVFbGvBS4z7KgErZm/Jac6Hx4oozcVcJ6raX8jODrDMjfDOHEY - wwvBWArLFJn7qksLvDRMkE8MiyjNKtZoraKnmh9X0BqU9LCCHlOyh2zV8/W2Y37fkXp3J5vfgCWnmFxt - VoFoS6ajEJ2Es0cJilVO7SrNNAmTrHHrrugaLlTFTsgDJ6S+w5y6VabtIMe+zLUDMR4SOQ8KnYdknpPm - piP2xJFQ5/vnXrj350/Wb9wGKQ0ECQrW3wwi+Eppi/rhnbu//Oudd3776fUffnrhnd8tXH2n5dApbep8 - desrzpE3IlPfSsw96+jZL3APo3XHZdE/Dl74dnh2nl3XBpeZd8O4j+2T7y6uLcFGoexYLn2Z4/hmYHhV - BsqiNAlnhcoJ9sLK6twCXWGBCQaxYivdTFxcQh8xy8fr1F0mUZOG3aBidxgVKyHv6XjjYYd7RKyOIclN - OOaQRFeTV8l8fKc5H9EIY/TjpId4lsMs80g5/yCt5pI2eqk6flIeOC50H2JYD1LNh9j2FU46VnmOw7z6 - IyLXKW3kbG3ygDFysrH/j9/8/san6ad20o9w/A0hrt9av/W7j/767V/++dr3P7z4vU+Ov/3r0Qs/7Vj7 - Qfzg9Zq+c8rkWWXigMBz2dx6va73iDgwitatiYK/7jzxqnN4nlXXiVLaMpDCx7PVe0pri9ANME5DHr29 - TPiCs/ussXGKZWhF8hphoL1gavJKjUUl5spyI7TMhKxwU9Gjtco+gzjEJ3i5uKRGMGI3rYYDZyKxUYkm - jqQmUaxehnJcWmvMghK//Iw+DxqG0ruxokMC21GebaicN4fTnFH4L+oaT8n8xwWuwwzbYbr1GK8e4Fth - WQ9z69b4rhNC92mp/4w6slYVWbXEXx0/ePPnvweZnJ4RQW38HML/7dr08Q//+Nvr7/7u7Nv/tPbmn/e/ - /Jfp6z9MHnrdOf6KdejZ6vYTkoYVjmcIXTVB1B+TBp81ts6Ras8qGv+x48Tzlp5lnqsXq7XtQYofy1bt - KKrJQ0QqmY2FzPA+0gGx60VP97LQ3oMVd+KEcQTgiLUWVZqKyxwodDWkxFhR2i7nJUU0PbRACclJyPgL - 7vq5WmsHU9iCZbciOf0U5ZzENsKvUW0rRm16wlCI8JSTuvGSZa75pMQ5ChNNoOTHhPVn1ZFzqvBBuuUY - 036SXX+c6wR5fZBlO8i0Am0eYzvOiXznZcHTiuDpmvgRZ+oHZ6+nET66T/Tgs07wL+tzJP/v16YPrr// - 13Pv/OXwG7+fuvrr/vM/ih98vW7ssqb1jCx+TBReYrunqdZBtLathNdTLj0uDR3heV8wd/+qfe25ms79 - fHc/rsqegZI9nqPaVmDOgYfKaOECmjsD04ORP1fXuiJxgAQcIMrasXygLFcJyphT4oRjq/KLtXn5fjw6 - SifakBX6suIIk9YtkyfIrCYkrZ8knWToplmmBYmjl1IlfiIXvulxQxHSBSH0kGQLbONpuWcCLRtFSA9x - rKcUwQvahiWyaY1Vd5bnPsmpP8yyA4Ir9FoQR1j2MwLPJUnwvNh/VhNZUnme7Ztb/9NHG8A1Pnp7xmfr - /xbix8e/++nRb//T9PUftxx9N7L8mnXwWW3raWnssMC/yK6fpFkmaJYxorGzXBTbR+utkB8R+L9ZP/zT - lsPXrb3LfPcQyeDOxqueLFBtzqvZBw2UUb35xLoMVKSIviJzHlF6+7HyEbJqkKzoIUljUJqjAOGCYGsK - KixFFV442gWD1xSXqPflaPblWQsrAmXYYZpikVdzSFS3wLVMsWtbUFLBY9mITY/r8qBAib1k+QLbdFLm - nsIqBiqFSzTjcanvvLZhhVZ7guc8K/Cc5roATQBxmW5epNWAnZMc52VR4Io4eEbiXxTYV+zxX11/c+OT - 2w/u3vvXh7v/byF+NP/ab/ov/KL9xLvR5ReM3YDgGWn0EM+7n+OaZdjGqWYQE1TTAErVVSkL7SUPwNWv - 1A/9tO0omO0AxDGqOVpMr36mVP10nnFPmb+c6ioiOXJwdZnoXoJirSo0TqmaZuinGNVTLH0fWR6HsSKV - tDCMniRw2yg8fwWmOrNAsnm3YkumrwQ7ylRP0auW2KaDPPsCo3acZkxBRdLHc9GbnlDtg3gryOArzLMM - x6XOeZK2F8KdImiOiN0XdLGDbNspkees0Hua4zrBrFtlWBdoNdM04wK9ZpVtvyD0XZdFzgt9B7l1w/za - F8cObPzl0w0wEf6tIP5p4NIPYwe+6597o37suer2C6rkKt+7QLPN06xztNpxkmEYV9WPVrWWCUaJhmgO - vSmf81Zw6iftx67aevcLvZMMawrKt+2G654pMO4o9UEozlKKPR9n2FEWLqEekDlnWaZZhhHEAts8xdB3 - oyXRUkoSwe2myPppsj6qtA0vSKLZnUTxFM+wIrHP0arnSbolqhFQmKIaWmBC9eZC/KanZbsLA5WUXoJs - lqFfE9cfYJq6StijGMVBgeNCdeMhvuOU1H8aQGTXn6DbD9JqZyiGUUr1JM2wxKg9JXA/Jw5eFvhBdndh - FcfD3bd/9JuHt9KXdf82EH/RdOT7gYUXanrPq5KXq1vPaRKHhb4lpn2JaV1iWGZJxglcVQ9cFi/ldMEV - 7ZXSboTqu02L73ccveroOyDxT7NsXWi5P5dYs73UsLWovghfByHX5KLUW4utGfBBknqWVTNN1c/RDAsM - 0xzd2IeSejMxDcW0FhivA8kfpihH6ZphhnaKa5znmaepuv100zy+aplsXAIQKfp2hKhmdyX1y9sk23KD - 5ZRunHiaWnVMVHdUYO8sZQ8ipfsBRGPTqth1EvRovvMko+4E1boCsodcPUCpGqJVzzJq1njOi3zvFb7v - ANHUAuEsGkO/uPjKw3+++TeD+G5g8RXLwBlFfJXvXxX41qThVYFnhVMHXMISBbwe3RxBN4RRdWOUoVxa - qkLUDlecNjS/FZt/yTd6UB6c5tj7CepYKaNud6XxmcK6fExdOdmQg1DvKDFuL2uEMObZtZOk6kW6GShi - iVk7itN4d6Mb8iiJEmZrGacbIejHSPtwclA6h3HKCbx6kVg9j9WsUIxAjKMEdRuc78jBsL++W/xMdqiM - 0okWTJDUR4V1p6TurjLuAEKShmhKrErcx2W+IxzHGtVynFwLzsE4SddL0fbTdFMM0zGB66LA+5wwsIBQ - N+XRpuSO16cOP/zDBxv/+naNf0sR/PFv4rM//89r01uuiYua1FFBYIXtBCm8n+XYz7KvMK0HGJYlomEO - rZlGq0ZxilGK1puJDmYTG4vZwNacqWl50TdyWB2Z5thGqNWtMJ47A2bZVlyfh3KWk2rykNqdpdXbSgL5 - hDFa1ThZN8cwLTLMS0wLyLLoPmIwA5cqZiWKmS0V3G6UpBcj70FK+pHScZx6CqeZwqgXKMYZICWMvA0m - 8BYSud/Yy3kyMwChdKBE40T1Ia7ttNzfVynqggpXhPVnDI1HZN5jEu8hjv0Yw3KUYlok6UaJ2h6iqo+o - nqYbgVu8Ig5c5nunK2XxbPIwV3+1c+Lj935+7/ZdsD676Pjoyv2ju1wgHt0L+eyC4L/8+X9am16w9p7T - NK3yPQfZzhWmY4lSu0ytPUC3gNp8kFq7gNWNwWUjaMkIQRYrIHozkJF8cjifNsGyXrR3rlU3zvLskyzT - IE4WzcO591S4c5GuUry9AF29s0S3pdCTh+lEi0Yomsl0WhnnGTXz9JpUAcO5GdpUwIgW0hoh7GYovx0u - 6kJI+lFyIPkxvBbENJAhqaoXLQd/5Sskc5/Ioj+W4YXQOjHSUYJmmVkLDPYoStkG4QKIxzXhY3LfUbH7 - ENt2jGUFk/UcUTOCV3ZjZb0Y2QzVeBLURGn4LNsxXiZqzCL0UBTnY93vX37x3o3bYJS+ey/98wEf3dB8 - pEbA7N9cVf3sRud/APGCLnVa1XiI517leZYZ9gVyzSLFfIBeewjMoTTLIkE/gVQOIkQjeGlLGSOUg/Vm - oC1boYly4RFtA4A4L3BMsowTVG0XnBvKRtbvgzqLsI5CjGlPmW5roSMLAcbnQaJynKqbounnmeZltrW7 - QhjYgY7lUiOFtAYIK1HBbYUKAMQBtGIED168ZoxYNU03jRCrulDSNrgoUETlPJFFe2yvp4zWjpWBf7BE - N5+QeCdx2o5ywTK/7pjCf1TmPSpyH2JajzAth6imOWLVME7Rg5L2oeVA+6BWXpGFTrPqB4o4kQxML1l1 - 1JV8denY7T9/BKYXkM3pi6cPP/Pg/58ggjp4WhkDEFfY9XOU2jmSCXBcptaAdD5Aq10iGWewmgG4cBAr - 6UbwkxB6IAtvehrizMCN0GpW5L55Yd04Qz9BrRrCyxsLCI69FfUFaMDRsg+q31Zcu7sc9OIujHiQoBoh - ameZ5hWefQynSeXRY7mUWAmjsYwNILZU8Dqgwj6kbBin/leIw0RtJ1ICurO/mMb8RhblsQwXJA1xiKCZ - o5mOidwzJH1PpWiJazss9RyVeNaELtCUV2mWAxTTDLF6EKMEJwZAnKYYjvLqL8nDa0x7axbVtxPZT9Me - sDaebB/9zfd//OBO+gecpx+bf/Sg7ecQP+P4xSFOEWtOyCNHhL5Fum0B2BoiyAXjHEm/SDEClOneQqoe - QIi6YNz2Sk47jJsoZdfvRlm2wRpLOWMgPQV1Y/TqYYJqGC9vhtC92UhXPsZdhLPnIAzbQW8p8efjWhH8 - fpxiCK8GjXKZYwXS6K0QNeRSmgDBcm6ygttczmsr53fDxCCjAcRRgnaCoh/Aqdrh4maowFtEoT2eSfj6 - bgeE2oKVDj6CeETomqMY+2CSZY4NWEXQOsDUfJBiBrFCMc8QDf1IZQcMQFROkvWH+fUXFOEVam10J86x - FT7EMKxamlZC7d+9/MLGx7fS08u9e/8D4r9yfAQRwPyPIQLzvJ9df1TkBxBBVwFKnMZVT2A1UzgtQLlE - NS3TTKMYWWsZo6mI0lrBBq0gXECx74I7MzBtSMkMzzLBNAwTFCNEZR9a2AihegpxnkKsMw9Vswti2Fbs - ykYlYOx+onKQAIy0CRhgUKRG0arGHEoSwkkTrOC1lqWjs1LYA5cAiEBEw3gN6DatCBEwoc58IulruzFf - 22mDUJI4aT9BM/sI4izZ0AeVrHDtx8QeoLVj7LpDZPMBsnk/tXaGaOyFy9uh4l60coxSfVBQf0oZmiHo - PVuR9q2wYYbpqDV10NP60tLarT988DB9STX9SwvSSZ1uMI+Y/Ut8ltn/AcRBhGYQoT7AdQEZzlMtMyTj - OLZqCCEHMYHTLlCN+1m1c3R9F5QXLyQ3lVATIAdL6b4cnG0nNFJEHaZogRIBwTGSGmzbELxQKckLIOYg - QS4DJTr2wWPl9A60uBtMu2QdUBlAAIx0WyknVkhrKmU1l3HbKvgdlcIuqAhkNPgHYNuLkoNcBhATlTxr - Dhb7lR2IL2+rLSElAESiBij6iMg1ia8Cil7l14PJ7yi3/hjDvkoyHyBZ9lOsM0RTD0zRVi4EEIHlXhY6 - jij8g1h1/XakfTtqEFQDU/KQo+VM5+Sf3vtF+ibwvfSDUGmO6Ycq/ieIYPMfQ5yn2dpLhFNE0xzVMkUA - xsI0jtMNwmUDMOkISgl8xjK7dplbO0pQtpSxGgpIsUJyHMIIF5LrdkPd+9DtSCHgOExIQxwna3qx4ngF - 3V+Iq89GAIimHaX2ffBgCTkB5bYhRAN49SBONUM3HeDYh9CKhnxqYxEDQAQEgQz/NZ17ENIOuLgVLmxB - iBoruTX7kKgvb4d9eauxANeElQyQtPOsWtCLgZz7KsWHeA7QZI5yHUfo1kPEmv3E2kWKdZpo6oXJ28oF - PSjZEEU7L7IfUHm7cQrrDrh1B3KIYjymT6zWJg/4Wn/6/LcefnT34e37Dx/9GKJHb+L4nyE+4vh/Xpuu - 6FtHkFWA4wzZvMiwz9Nrp0iGEYxqACHrhYqH0YoFZs1nQ1s/RhbKwUfy8dFicqiA4M1GO/ZAG4rJQxQV - qIljJM0kVTdMUnZhRbFymjMLYd5VVrMTYt0LdedhE3BeO1rSh1MO4tSgb4ByNs8wgzqYLGG3QLiAYEeF - ACgRJHI/BpQFeUslv6mMk4IJImXM6j1Q9Fe2I76yXbUX2ogStpKFrRQh6MVAhuBk72dZj/Drj3IcR0BL - IZgWCTVzpFqghkGksh0IHC7oJ6tmJJYlrbuNINVuLjJurRwDg6A+uWZKLJij31o+vf6Hj9O31R9spN9Q - 9Aji/yLG/5DipqumjsMCX2+lvB+mXGLWzQGIZOMoXtMH5FDO70VIZhmmGbpxnmUewqvixbRIHt6fgwnm - 4wL5OE82KpSPByk8StIARz1OqhojawcJ8hY4J1SIr8uEW/ZU1O6psGchImX0ZoSgB5tuL2MkHYC4wKwd - wCjbK4VtZbwuUA2h4n6EbAir6scogD0EpqepgpuACQIlNM2OMpDOKS69RcBpFfITPG6LWNQqkTTxuHEu - +wC3DmR02pCBlgIgEmtmSeZJvGEQqWiv4HYgeH1UxZjENK2ti+F4om/ss2YgwYBwQh07rmtcrg691L94 - 4/3fpx+gAMVwI33b/VE7+Z8Jpj/+P61NJ6QRYLbHsNWdEPEC3TZLq52m1oDBsxchTZWwQb0HRWqeaVnm - 1oGO2YUQNpWAFowK5GPDRYRgAc6bhQoXEEYIAGL1KF4LxDhKVvViRIkKhr8Ab8+EGYEeMyoCJZQEjN+N - lQMlgoSdJOhmqIYpmhHkb1qDFULQZ4dQCmBxgFsEOdgKEyah/CYY351PlD1TGBRg/CJMQEYMK2kBOS2u - E8Q0goicG5Vza/BwQd5eWWF+LRwTJvPamIpummoSrxtEyjor2B1Ibi9dOizRjeusfiyD9vVtjjzsgqj+ - uDxyVtd0WBc5H+n702vvPfwkfXsdQASu+zOO/+8gzlOsZ1SNKxznCLoKxBTZNEMzA5vWj1YkipixAhoo - WLP02v28evCahwgqkCCBPKwnGxnIxwC5OffCnBmwXqRshKAdxmoB/TGyepAg60DxoxCqIxtp2AXR74K4 - Cwgx8JLQ0j6schCrGsWqJ4k6UNrAGQKlsLNC8BlEoEQAEfi7FpggCROAgujmI+uEsFpRhVEMqVFCbdUY - u57gs3FDNlGTS9Pi1nvUXLuI5pFwI3Jpp8E0XFPXKzdOErSDCPBlmZ1IZi9D1C9VDVebnFgS4etP2fJQ - iyL7SXnosj55XBdZrW38xcnnN/5662H6JuDGHWAY/z9AnCXVHhMFz6jTHNtKhQDEJNU0w6gBXjcF4YSy - iaD8D2A0cwzrNB18Ut2LlUSLiM7MSncWzJeLcu6FOnZXNhXRQTcYwlSBejdGVI4QFb04MXA2ngIckGH1 - zlLrPkSgmJqCC7pRMlD4xvFaYJUXmOZJ4AfRiu5KIai/g0g52AfRAROlKvlAuV4BwSFGmWWVWlmxTJYn - URcIVPkGB84VEYbjmvbO+u5Ob1eLuyfp7ow4Bht9C52pAx1ti41NI2bXIELYXcnoQjN6WfweqbRbq3Hj - KJTHtpgyK2a4pjOK0LO6xHFVcF7pfmvi8J1f//UziI9Gl0ft+H+BCOLfX2mIy0zHaVXshDLah1B1Q6VD - OC1Q4gTN0AEXBXNJvkxcvJA9RtTPsaxjlKoBvCxRQfflIpyZ5fV7Kzz7EK69cM9uRHMpdxhbBYrpGEEx - SlQMEOVtGGG4jGrPRZr2VpoyoJ4CIihzoO2CFB7HaQBE4HXmGGYgyX64FCgxDRGlAIjbQEEs5zRV8jxC - kl2K1snLRNIcjjKTZ8yjVWcbYzRXp8LfrU8Ou1uG/Il2ZyLlaG/xDHRHJgZTK5N9x2cnTk5MHEx1jdf4 - u9C0Xja3SyLq0WrdZAr1yS2WXPgkW39J23BdlzilCM6JHc+2jH/yo1+nLy+mCf4LRMDm3xJMf/zvrk3j - mGpgCA7xPSdVDUucus5KcTdcAgrcNMPUi1FE8ymePSjvHuwARg1G/WmGYZio6ERwG0tInn0w+y4IyGt3 - FtK0pTRUSO3Bq/vxwHUrRknKIbKyEy+JQzneQqItG2Xdh/QBb1TOSY/JcDHwN+mrDGTTIqtunmYZQWv7 - 4YpBpGoIpRpAqVrTrZndWMmqZ+GsYpRWXsaXZVGUO0nVGdTaPFUj0T+mt3SowsOOxmFfqLM+0eVOtru6 - ByNDk6m5pYHV1Znjh5bOLCwfbOnvRPP6mZJeqbRDI/eQyILdOaJt+wIVlGMa7zVD8rwyviLxnQ/2f/Dm - +xsf3dq4d9ciQaTfjvzoNlb6qWAQ6Xczpq+AA4yP3pm+fv/hfVBB02/Q+xe0m8ax1aAUTpNMy2z7AUH9 - FNXQCQVDnmiSVg1011RMq99eCSJRzJxlmabphiHQYTGyDjC35ODcmUjQgmsz4frd5bq9lXWl5CY0v58g - Hyap+vCKLqysHS2NlXPcOYT6fVhvHrGhhNEM5XUhxX0YKaiM48SaOYp9meGaI9cNwXU95dJeqKy9TNQG - CiKUXVVYokOU6pllVfJSoTKbrNxBNWUyHUWiEMoKyl6LrL6rJjToiQ36ox2OSIu1eyo+frB3fHVw9ujk - zNLEwuTkUvdIjzHURDH0kGo7NRIPjWyAwEQ7c8II5iy/5rQyeFrSdFDsPaIK/ezIlQcf3IxYiPV1WFcN - sUUvurF+76O7N26v376ffiDkzo0bNwHFOw/ufbp+49bGzU83Pr67ATw6kOwjiDMk0whaM4xWT5H0y2wr - GAbSrRklAQGMSx9a4t+LND5R4MlADeAVM0zjGFEzTlD3ISTJYnool+DMQlv2IXQZFeqM8uo8pK+c2o4R - 9hMVYM7rJaSjDSltKGV7swj+HEK4EMzLrDa4oBMtBC14EKWdJJgW6HWL9PoxrL4PpuxHgJB3YsXRCkoU - QeJm7xAj9yoE+SJlNlWxnWfNo5iy6JZieZCiCXOtSZ2vyxHucUU7HfEed/9iy9jR/t4D3QMHBgbnBzu7 - 2kdb+gbqUu1c5xDNMy62JRliL4Ul2pPthOAX5HUXqqJHxK7DMv8RTeiFyGC/QdDkYHgdxKCD0efUrNpc - oEiCAebe/Vvpt789+t1md9N3/e/e2Pj0k/sf3lm/8cgRPYK4QKsdw1b1w+VDKCUoTwDiEtc2hFe2VXAH - cYpxCmgvdO1jOdVPFYJBZYZtGqfqJshVQI8dUH68GBRHfF022rgXpt1TrtpTVpuDjFbQWzGiboKiN81R - 0YWRtUD5DYW0YA4xkIOPFlFTUG47GnQYcR9KPorTz5KtS0znLMU2iKjqrpD0wKR9OEULgpfEcW1QpLQ0 - U8rJEsn2UaVb6VW7cYrtOHmGop6gctBtEU19oymQsqV6fb1TTYMrHT3LbcmpRMNgLNweTTWnhpJ9E97e - cXVqWdR6XNA1zLWESaIGmly9pyiFFV3wtB4QOfaLPaumhqNq17BB1mLjhWrpDWbusFV/2O5P/3699Ps6 - Hmyknw9OvxH4zt103/5s3b73afpnTjxaaYjTJOMoVgtGFFDdx4ArZNVOUHVdcGE3QgTmOdBJTFtLFY9n - O/YiJrk147TqcUrVIFbRixC3lLEjBWR3DtaehTLuhWp2lmp3Qay5qGAFvQUn6aEo+4iKHqwU8ALEGwsp - /mxsMI8Qr2C1YcU9BGkPSjKAVE/gjfN0+wKjbhRXPYTVjRB0w/iqYUp1P1EbKidVFRUZiFA6fStTsIsh - 3UPg7yDwMhQGdI2D7/CqtUZeQ6p+bK5t+mD/4FJH80RjbCiaGEo0dSZS8WRvqGPWO3TENnFaN3mcN7DK - 6FjmtEzRG5Z5LZ3kqiWR46QwfoDtv9o0viAyTOirOmtlcaOwUSOcstovx7rXAbubj97d8clnrP7dtWme - al6g185Sa0Yw6q5yAfDY6StRYIAjqADHLrhgkKjwFOCVT+drny4Y4xhHaFWjZG0/WtqPknYCI1LCCOYR - PTlYRxbauLtCtb1YtRtSm49pQHF7qMpBmnqQrBwC2Y2RtlawooXEQAGxoYzRAiBSZD14YS9KOoKtnqFY - 9nM8i2znJM06jjcOwDSgOPbAZG1QUSdVMeX2cWl7BdwCAa+EwyrkMou1CnxHk6OjyV1vVcVidZNznbMr - fZ0jsXhPoLE7mOyONbc2dTe19Xna93vHL/kOXTHtvyCZPi4aWeb3TFBT84z2U9KxC7KJ0+LkIt11UhQ7 - ovTNVlkHjcZhu33c4Tmb6PvJwXNvjR1adsb7q+2fo/r316Y5Ss0iw7LItE6TwagkBwMs4AjSGRTEAay0 - HcpNlDFicI5udznvK3sGmdUDVM0wqJUo6TBG0Y+UAI7xQioojiCv7fuQ4J/JdpWo95Y5IcRmvKiXLB8k - yYeIsn6MuBspSFUyIxBqpIzWhOK3kYW9bH43KKAo1TjBAJQ4y7Quy/3zTMcotroXruiDK4BPaEMKYiSW - il+iEaB0ApJDIRgK+68uzF9fWLi2tHBuYfrI3OjSTN/UdGf/SCLV4W/uCA0NdsyPjS32TM5HxlbqJ05b - ly5WLV6Uz1/W71/TTs2yOo5Jx46LR8/KJs5Khi8qBy9qu49rEzMK17TJfzzed6l79lvzJ39x/voLs4tz - sYbOOstkquFzWv/OSkOcp9UCiAuM9L3aHrgEjBAgkQHHCaoWvHLHHmgTRmjMhlM3bellaPsp6pG0EmVj - ePUIGD+Q0uYSZjSXGM4lurMw5iyEKrNCuqvIkAMLQWkpNLsdxelEczqBMHHCDqwgDmOFyqlhKCuF5XUR - hF0EQQ9akq6MVOtBgX/NmFrkeabJlgGktuuR2WpFC6JY+rjPbRZSYqbqI139Pzh+8f3DF35+9NKv1p79 - 1cmr7x0//9z+5ZWJgc6WUGuzf7i/+cTK4sWVIwfbp+ecgzNVvcvSgYPcoTXhxEntzJp2fFU68FL96pp8 - +LhyZJLWdFTWc0Ld1YOumRT7Dzu7Xxw8+mzf4W8duPCd02efOzR7dKpzvDO4ONHy7jvPv/fDNz9n9r+t - dE0EGT1Pr52j1cxSjcDi9KFkoNi1VXB6UaIelCgFY1tz0aZ8NOuruxNY0SBdB8zgAEY+gJQOPQrAEegx - VcqMFpA9JWR9PlqVWSbdll+bC181+xug5A4Ct4PA66FI+unKXpoqhROGILQWgqiLJB6hVw8TdQNo9QTR - OEk0DyCV8yLXArt+DK8fxIG6oe/ESRNCaSNH1F1nvTIxCwj+9uyLvz/x/D8de/4PK8/++cD13x269v7h - iz959oUXjh1dW5x+/tzJNy9fOTO1f8ie6lPGF7WDy6LBKULbEKphlBKbZMSWeMkDktZRZrgZa2+A14xy - oxOccAyiXqluPReZuTZw4ur4+ddWz19amTmx1Lu2v3N6MnzgUNt33rvUP5FIdca+873v3rp173N4/7I2 - LdItQIkA4jy9Zo5mAhBH8Brgbzphgg4orxPOb0Py64vwNfkY+pd2xJC8AZq2n6BMu0VAECEdfsSxDyYC - HAH6QAnVVcEw5WO0GaWTWttyjauXK0sQmY1oWhLPasJxUnhBF13TCOc14yVdVOkATT5IVINOMk2pBRxn - 6fZDqsgC1zXHrBun106IrAksH/y/Jpyub+0/8rNTz/32zEu/P/HiL5cu/Gr27O9mL356+NU/r1z/2dL5 - X5976dcvvfnW+YvvXH3+1VMXllJDHdrwsDJ11DR9SDo+jGpqLbc3lVUFc/iu3ZR4pSyCUZnLeTaEJMGw - tNOsXRTLuCx0yDt4onP/as/ics9AV9Q21FHX32VONCvaB4xv/GBNWUuusove/sEbf/ngL5/De7Q2bmxs - WmJYF+iWBYZlnm7+DCKIMbK2Dy1tr+QBPXYg+cFyur2EQN20NQJl9VM0gwTVME4xhJINA4hwySBCMoCQ - 9CHT1rIdLUmgxf5KhjkXLt2a3SVQLtpdLXyRBQINYMkNRE4Uw24lyxMYSQIraKUIBoXSfjIw59WLrPoF - Vv0UxTKE1szyHIt81yF9rJUoDJEpw/qaHx48+ePVC788cu23h5//6fTZt9rmvtO2+F77wZ90H/tR75Ef - jR//+eqldw+fvzq98tKBk8/OH52P9g8bm8eUrTOi7kVO3zSpdQDjaSqTG54qq91e0UQQBZkiE5VtovDq - KRIvWtCIl/vRwpTc2uaINHtCoVqdXoRxmshhP9vhwvkSzLkTEY0TXxsRvfz9C9/83vXL107/4y9+dO/m - xxuP3huwaT8r/cTIZzURiHGKogcQQXcGNRFURgAxVcGMITg+KIP5DzuiACJZPYBXDmHkIIuHEZIhmLgf - JhqAi8GH6RzHq7uxyma0KAJnynfknGxMjlttHhpFlJOlLirx4KgBDDOC4sbg/Fa6oonIATneQxEPE6vm - mXVzLNt+RWCKapnjOqZZth66sonBHq+ueb5r+E+nXvjtked/sXj5Z1PnfjBw9Hvtyz9oX/lJx5HvNMy/ - GZ15pWHi3ZGjbwweWGvofa5/6erAwWMNE8vW/glxyxgtMUNpm8I3D2NCXRhzoITegGIkeGK/VGhV8hwa - iZ3DMVagpHtyVYUQFQat4NO9dkPYqnZoqCYF3G3DW6zQtgFZ51SVsr5S7cW2L7j690eHl5ve+fFzH9/8 - 5fr6h+v3b286wHEsA44s2yIT6NEMII6TdECJoDsDjp0wfryE2oTkgVcu+GpGHM4dIKv7MTLQlwfBCAwT - D0JF/SDg4gHUI4ho+TAWTNDKJIpnKYKFmOylaGgq7JFXliI3b+Zn5ZkhaD+M0QDltpBkESyzj6kcZQLh - G+fotlVx8HhNy5LAt6ppcODQAQpp3lb33anF746v/PX0ax+eeP13S9d+P//s72cu/Wb09K/6T/ysa+29 - xMobwamXPMPfaV687O07am0+6ug87R0+5Ro9ZhyaYiSGUZEpdHIG1TKOjs8IGxNUdYwpinBFLh7frZXF - 7YaIVuak4Q3QIg2q0CDG1Np41hpRqFYeMQsNogqHAWkxliebOdEWlsSUzzXmuTr4DWPa2HjV6DHfe7+9 - cGv9l5/e+e2mg9z6FU7dfk7dEguI0TxNM4KxDxAEMUJU96LEqXJmI4wThrPFj+1LIvgDRFUvUgKKYH+l - cKBS2A8VppWYvvUuS084OM0EWgO6didekqDznWTypcmhoVB9VCdHbt+CfPIp7rYsUw7CkY0Fc04UwZ7S - 2oeYqiGydppeO021TtBMq6b4xYYRCxUxbDO8Mj76Yt/IlaaBH06e+sX0xX+cuvTnpev/vHjtlwNrP2g7 - 9OP2Y99tXPpuw8LboZlXXMOnq5LTzPoRsm2eFz4gbk77amzjSHloHNIwVZYYh8ZmhDE3StDEVweIoiBe - GaXp29V1KXVVSECrJZVq6fl6Pdzh59lMXI9WENTxavgwi7SyXocIOUjhAMNShza5salRXeusvvdwbe8R - 09m3ej688+0P735/0yGeE4hxhV23zLIuPcroGapxnKQdBfWeoBrAyrrQwmg5I1BGk3w9sxkJ5mJlN1zU - DRX0VPB7KgR9ACJSMoCRAdmOEDVTxOopTNUUSddHUjRReOqi4i6LfrE12uYwUHMzEE8+gfnKk/Kt+f48 - Qn0Wqr4IE8cxR+XqQbpqmm9vpUm7iao2mlTBKrEKUPtTvu8dPXC9f+RsQ/eVhpG3Ow7+sG/tx/1r73cd - +kHHyjdjM++0HvpWbOHdxIHvNyy9E5xfYXo7i5QjcMs8KTCHD89hYrOIxonSyFhBaCQvOFDqboUbvOWc - JoqqEa1uQ1q70O5uujfGqqpGITT4Ir2wVFMFsdgpzmpeQCM1MjB6aqWNh7RyYS45Pmrmhe2CWEjRO2Dr - GDbE+kXN0/Klc/4/fvTC+78+t+mkJHSI41xhph9imqcYQcyS9JOEtJpAevahJd1oUQrO8xYQhV/a0wTl - gJrYgRS1VHA/mwu74KIulKQXJwcKHQL6JeuBcx7Ga1MwbgLHDWBJhxujp3paAxKOtLwY++STzKd2uPNR - kRJyqJTsKsZ64fh2In9aa5tXu9p5arowVyApEHPzdPxyt5y8kow8Pzz+2tDSteTk9djk93oP/6D38FuJ - 6e+2LX2748BPhs886xw8a+w4V9U6S6hrzhYFn6HPoT0HKLFZZHgZk5iHNY0VhgZzXD2ZlvaC6kAuO1DK - TiKVbTDjAMIzgA61450hsroah5NgCzSsYgU9r5pRFpXwO3RGD4vjZTPDfLafTW2UCBMKZave0FNvH457 - e5I2v5cbiLJGZ+wrx2KxLummE+LgEa77IIBIr10gGeZJhhmCbhynAgMJGEuAT+xECcHYECgkib+0J17J - 7iWr2gDW9C1Q8Hlh+oYyTtZPUg1RtUPUqn6Cth+rnWCYR+nVPVSZuxwdpdHGrKZLwz37G8OKoiL53rxw - BakdGG+iNIHh15VgkmROL13ZShV5+Awydy9bnCOTFim5RXxkloWO2x+OvX/o/HcnTrzWsfyTyTN/OXD9 - j4uXvt+3eiU0PKcI9FNr+wg1beWaxmxRYBvT9zRjoLh2Edcwi4guopLTFY19uc72rOpkprixgOPKxsUr - ee1QTQ/EMo1unMA3JdFWL0lWTcAIUDlSTI4Gme8mYHoEmgGBtZdj72TVttB0LXTNkLSulWHsE7nHdA2z - zuZxT9SvkKRc1aE6qYRfxhTmbDoi8BwTeADERbJpkWycBfmI045iFIOAIELcCRe0I3itKGGohCr5ckas - nNmJl7WghAkYtxkBLKSwCyvtJShAt0k3HBKYlHVDJEMfUCKUF4fSkwRWm0B0bah/NujycRkaCESZXWDM - LI1j2Ekcv52iiKOFMSonRqXGGDQmPYPNzlKryjWyMhm7UEos0pNQC6HoT45d/tmBZ3+2ePn9qdPv9K28 - 3jxxxd87LqofFztnZYFRjnOc6U6Wqn07uZ5nOPE9qtFK7zQyNl7ZMFgaaC+qaSoRRiCkYDnWW4puqmS3 - lSq7c8xLmOYpfMJbqtSXkzkleTxolhZfasdhmunKBXlkiOzvwwSnGalJanSCHBjE1fei60co0XF2akKY - WjH3DihC/aaAT65loyuI+Nx0YwEcDzBs80Q9gAgITmDUwyhZH1zcBRO0Q3mtMA6AGCmjS7+WGYHQWzFi - 0F6AJJMwXgucD5QIOLaDBIfzU5XcZAW/uULcjpA2Q3mNlbQYmlqdVzjnrp/02FebG+NSkRND8CNIvnJC - DM1uJkrjaFGcwndRMHZaBY+1T8DMlvOKJcwCHn4fo2K3joQ4OzD44+OXvjNz/Aezp98ePHitcfBKoOtM - XfOaObGkjUxKvAOs+kGWuxVVY9/BjuXr+uHuCWzDNCE1jk72Vnpb0VUtbF4jhxCiIsNYTGMlvSlHmNyl - bd1bG9yrUe8gMHcVkPbukkALTViEA0Hrpbv2y/uHSK1tlQ2L7MFRVLSn2NFbUjcKDU6jEmOIxkFkaIwc - HaAGu3nBlNwfqrL3tzRtWk6/lcuxTLPMEfUgnSexmjFUeiLugQk7oPy2Sm4zlJ2E8yLlDNljWaFSapog - lNNQxgAc03qE8RIV7IYiaiiPGAQTdAGtsZSTSl/fZ8QqKKFKvHzX3iGj/mA8PGAzOWlkTVFxXTkyiqRG - kcwoktMA4yWJkiiNFaISXAwsl5nJoe5l4HZT4TsYlbt5lTlrfR0/OHXm7aUjrwwtXOsYf75l9FR9Ylnt - HuXUdBC1CYw6ga1OEcxJtNmdI2uG2UfJDUOYyAi2cQDR0IlwdvI1nTWclIkQlSLjbEIMTk3kipIZWu9m - mekZJm9zBfbJPYTtOyWFJcZSjKtU2EsIjVI7hshdjSW+MVprKEeTKNC3FtQMlQWmoM0jZdFRqH8K7xxA - mkYo4TFZx8n21XeefX3TIsOyQDUvUMzzpHQuAxmOoJTAsnTDhECGLZWcFJQN+km4nC7/Rra/hBKHcRvK - mYEicriUFoXQG0powXyiJxMNIphLiEM4LTBxspznz8UFi/HeEpStpKJHpZzz1c/4na1VSgsaWY/AuCpQ - 7gJkGM6MowQJrDhG4vpZ5MGAhUHfxaDupmC3UdHbOdhMMb6grb7qUGdirbNtKdww4/CNmhzdUl0HS9lM - ACVVGgbfi2RIkmobkMZGhLkT7+3C+DqhniFMwxQ1NcT09ldVdTpZLXWkkATWLKQ1whmDyNoZQritss6a - x1fk4Tn7SkhbMyR7y2qyyMECdR860o1qTMECHYRgJ9nhKmC5cpihPFlLSV1/eVNvSXQMHhxFmnpK5MuE - 5BHx6KJ+6Ezv6iYwNU8SqmdIxgWKaRpfNQ4gopUDSGk3HEDktgAZQtkNlUxgcWRP5npLyA1QdghCc+fh - vfkEfwHRn4d3ZaKcexC+LGy8lNGGELehpCmoIJCLa4BQ6nOh3kpMlEZfCnpmA66ESqytKDHDYfVwRARF - 9ZQS/RBqpJLdhBcmBeIUV2gjoCjU7QT8M0TsFgZxt0GGcFZRrWK8R850i5huPisklwRlkqhE5iGxg2Qh - mNgaSFUpmiWEqI7ATXG4LVVR117unCQ2TVObRjnufo2m3cRsUGL8THgjldqOkc8zQ8uC5j66v7aCpyon - yCFozp5SYza5qaKqrdQ6iAy3VrqbYDX93LokTVRfATPnl9lyiIF8TaLY014aHoCFhpHOUahjGdt8kNk3 - KWgbqWndNM+wTJOMUwT9BK5qDKMeRasGkfI+uKgDVMNyVrKcES+nB0opXghV+lSeJQsJxmdvEakuC2XN - gNkz4PUZiLrdMFcGMlpIaYPxOzGyNrQsUcEN5RMiRcRAMTqCIMao9KEaQ5dReyARcTFJwtxMJxFbD0P7 - IfhgISlSwYyD6RXHAfoa1lqr8RVY7NMI5GM43Ga1rEyvgHEImSxkhhhXIMGX8vGlUgaiikcysMhmKtWK - Z3hIojBJE8boGhCmNoyztdLRXGRpzq3tLQetoK6Xp40zGSES3gvFgN7YhzSNEnzdRFcQX6WGkgXlCAUU - b4DQA2XKfoynB+LqLHW2lNU2IeQJEivBQTbyyp3oPEtxuQ8iTlTWt1eGBjGxMVx0HBVZJLfOMtuGRE19 - xqZN09SaKbJxmmiYxOumidUA4gBC1lnJby5jNZWCAkeNQqieIqIbQpE/U2DYCw1WMOrysJa9cNOOcvPO - CkcG3LkX6c/GJctYnQhRJ1rajBA3lrGiRaRoETEGIUThRCcUFaTRliL+9hpNFbpcDSvkZe+sx2O9lcQo - hBKGUHzl5BiG3U5TdrKqpmqtLRalnFJoIEBr2WiRMI9C3I5HbKaid1BQu0nEbCwhi0zM55LLpWSEjoy3 - kOg+iiRCVPvLFeESbQpS21XmmMY2LJMSs6TAAN7YVM5NQoWNufzWHPU41NdR5qgvlCshZGZFORNersaT - DWVMd4EiWWTtKfX2VfhTJfpYJSdJI3TKKzs1JQlhsRNZ2oAWdeCd/bjYMKFxEBvurnRP01Pzys7BqkTS - 4N80iteNAg2CwGom8VUjGNUQKu0QgZduruDESmihYqI9D1NXTJBsztNlVHggFGs2ypwBNW6DAIjufWhQ - ExtL6O1wQS9G2oYSx6G8GITZUEJpKqEkKqiNCGoARWgRi+dDniG3pbdeL6nMsZBh+spyL4zQiue3EyQx - DCuKZMWwPB+MNGWzD9Yah1WmQaV5xZuIUDkODp5C2Q6HPY7GbilBPFmG3Yaj5+KJOVxmuYZH0DNJZiLN - RRBYihkBiCKUr2qFWCfQkWViYh4dHi6zd+frhkotE8XuyYLQTEWio8JjKBRgsvMhRTvg0L1sRIUoB1O9 - ixXaVzOKbpmj9gzjgn1kXTMF1yEqG9JVtInLQ3hYGMFqQZv6cP4hfHiIFO4nBXvowUFlPKHy1sn1m0Zw - VUMYTT9c3lUm6Cjh9lZ+9pCgaoio7sJI4xVMXyHeko0056O5j+1Vbi92lpBqs5HGPZX67RDLHliaIITR - CuP3YGV9WHkrUhSrYMfKGEDFKRDl1BiU7INiqouKzFjYkNs80VBHyX3GzkHJ8vMMuWWNWFYCz+ukqyKV - tDiG5y7HD2h0Cy53v1zfTJf2MTRdVFUKx0/gBGEStxaKE8BKirCbYbQ9pZgtWGq2UIiQ8zAMaLEGR6yG - kt1ouTVf0IKqG8aHp7DRkVLXaImje59hvjI0X9I4k5ecLGtuhNQJcgh5mVt3FXwtt/xJFDSHV4wwFHIa - K+vGqd2LnIlxcls/sS6JoSZJld0CRCeX0ExmxxHSDqR1AOMbJPgGGIEhSXRYFx+0JhtNbpNSuWmWaZmm - mEax2q5yYUsRq7mQ2VzCbivjgMEuVcFpLGOA+ay+CF9biKV/Zadoc66tEGfcC6vaVmLYWebMwTaWMYFD - 7EJL+rHyRxCFjVBOvIKVLGMAiAkIOVKCc5ci6uDwWa9jLGiP6flgLkbs/pKDhGuk8f2VpDiW20KWNWFF - bVgR6LmdHPl4Te2wxtTLqhoQ6iMoegBK8JfgIghWAiNKEaReIg1C3JqPfqKSshPPzQMo0egsBq5MRiSo - 0FR5CdmF1gSg1YnK2l6oow9ij+yULBCj/SX1fcWe1lKnvVhJLYbuLXhqS/mXsnFPQlEZHESFEUn3ItWt - +HAvrq0DGu9Ceodplg68oIsk6CTJpkWBYUqwo9LTB/P3430JSu2cp+tAy1izLWBWqHQayaYlnmORUzdL - M4/htKCltBSzGvOooSycNwPl2Yf25eGCJSQXhGwrJTK/vof/ZJYxC67ZUareUmTNhAOXAwi2p+8iSPow - sh60tAUhABAby9NKTBRT4kWEUAHGWQTVZOeakBVRDa/Xb2iul6Oyv26lYlwofARFi6BYERQ7RZS1CZTN - KEH6MUaSsg0v7eXoOqiKKIEJqkEDmu6FkIBDiEI5CYJoqNaGYWeTxflUeTFRlI+gZkIQu0rL9pTk7YFl - 51Lz4dwcnLFMFEIb3MWyMETZT6/3l4h9EImjXKSEUIiVJbnQrU9XfDmT+HgJagsVky2CFahLkPUV6miF - J1bs68M0zLAaRymeHrRtiBg6rJiaoQ825flThe5+ZrRRXDvb3PPc2ukapYKAh4nktE0zjNqZ9GWomklS - 9QRR14eUdVQK4kW0QDbOCTpvBsyaAa3NRVlKCKxvZHKf2KfeBVFsLTTsrvAVkRIIXgdG0oESdyFE3Ugx - aCwpGK+hghWF0GLF5HghKVaA9+ejHYVQQ3Gpi0acjjnbXZpIDYdesTVhlvlIFGcl2lOIiiBZaYgUWR9d - 3U2Ut+Ek/bzqHpZ2RGDqp2kayKwAmhKGUkJF5GglC2g2SRb2e63OsJAkyMELc9C8nL3lj23L/8qegqcy - c7eUFGVBC0uIRUheKVkD5QSZhjqMSJwFV5ZgVXCCFItjEeFQbM42yON7MU8VYbcTyXvpyG3MgszqckZd - cZU31zxMTE6Qk+OkRKLQ2YdsOSpbXZMfG8b0Jsv8UYqtTqz0mPUNASdfQMHSKsl8xKZxQvUYvmqMUDWC - VQ9iFP1oWQ9K1A7jgZEjmE9wZEAN24qqdpXqc+H8LbmsJ/YKtuRKtxVYc1HRSkYzgIgSdiIEHXB+G5zf - DOPGK1nRcnq4lBoqIoUKgL3Cu/JRlgKorrCkqrK0Qc3tcqun22x8zE67FOMkERwIeBRNC8EYMRQ/CeN2 - oEXtFFknTdMvMIyJzZMSaw+rqp0sbyEr2nHSJigrUkYNQmkdHPVqsLWjvVaigtHERVRZSQF2y9aSr+5D - bt0H25YN3V2MKMzMzSwpKmISKBqWgFRQhtmXi8/NY8EqhBQ0kwKDwPfuLn16Z+Uz2ZjtCMpeHHYXqXyv - HIY2QfiuYm0fITxBTR4UDMVyPM2liQnqxJJoaZLVH0M769gqg0rA5eMobASJh8ByKmDUgk1TxOoxnGYY - o+yFS9oruM1lTOANUxXMRAWjoZTiy0Xb9lboM8q02ZXCXQXUJ/cwN2dKdhRYC9EAYrKS1VbJ7oBy26Hp - wSZeyWyooIPXCaZDfxHZnU905GEBbmM+tLq4XF6SH6/i9/urmmxso7gEUfx1SXG2i4RzwjGBcjIwcTEI - AwyRSTQ/rUqspIek6GZrejkG0FuSSH4nUd5NUbYRpU14PkjzOVOwXaAMK4U8QSlXWl5B3LOt+Kt7oE9m - Irfshm3JROzZU56RU5lTAi8qLcsryttbUZwFyduJqszBovKQ6Ozcsi27IU9uKX1sR/mTecjtEOROeOUu - MiSPXwTTl9KDcE0X0T3JbOlExZrKwvGKUCPc24SzOXBSg4IvVBLIQhheUAllFRUT92Ujtm6aJusBxIFH - tqYXLU1C6HEIDUQjhAZGjmAh3pWHrsmFa3OhnG3ZuMe20zbvFe0qqMlHBsso8TJ6M2jN5SwQiQpmQ/ln - BMmBYrK3kOjIxQMzZMpGqDNLJZm5vKwME6kyqKHa5YjumAJT8XUVtVBSlOUk4HxQUqiQFC4kN0HZ7ThJ - E4zThhWDaMGJ0hrEy7qIsg68FBDs5xnb8JI+TnUnRTGurp/WuUF34jKLyPT8vLJn9hQ/nln59M6yb+yu - fGZ35bZd5dt2lmzdXbAls3BbVsGWnPzNxWXbIdCdcNzeCvyevWXfeCpv09N5X84ofWp33hPZOU+VZD4D - 27uTWwipriC7sbImurWBaHdVGpyVWhdCWodl6egkBg+K5ZfgJOWV3IJcwu4d5U+A77hpgqQDBLthks8u - r/bgJB1oYTOM01jBiJSSfYW4+jyUMRcuzYLgHt9e/g9P4J/axduVr8uBukoIEWAGS6mpUnoKwgDcgXLD - pWTQiHyFRFcezp6Nrd2H1O+DqrMgxnJ4FbTcQIKmrGIRbo+aW1BR9CU6ZZuRUl6LRjbCGA3FZDC9xMqZ - rXhJG07UjhGn0II2giyJ4AGsIFoJkn6+sYMkbyeli2YfqwoodJBvXHHEvXS6k0kPsLkOGEFeWZ5V/LgU - UaEkoncWfSOrYltu5c59kK27ch/PyPtGbunTJfCtRHYBlpm9q/DrX9+1afO+r+ZAtmfnb83P3gbN20uF - lArKoNVYWj1L4uQqqvE8bglWBCVUkcgaKkYiRDOUCKIKipGXF7OzdiKe3l7+eBF+16ZxSvU0s2aOZ53l - WSbYxlFGVS9Z0YoTxRHsaCUtUEp0FeN0eTBuRmHFl58q+IevIp/awdqdp8qpsBdhfcWEhiJSUxGlqZga - L6FES8jBYqKvCOcuwDpzsbYsjHEfQrevUrUPIsrMExfkG8kIj4rKQuyQMnIUgnwo9EsCUmYjkd0MYyWh - rChovuX0BEbQjBO0E0Xjcns7ECBB0oGTNGNF7SRFM1o4wNP30NQg+phgZBYBkQ7xjf0c/YzRN6Gtb6GI - Axj6uMI+bw4EqBw9EV8O3wuBZRRV7Nyb/1ROyWYIchcUv5uvQqDp+7blfvXJPV/Khexk8wlyOZtHJYiI - ZDNHYmXKXDyti69V4ZiMSjSmtAwJK6FREFQqlCsjcXV0igqPlFQWs3NySLuLKZkYbvGm8+bkOUvqlKlx - v9w5zKhOIbiNUGYQjGKlJB+E6CklOEvx2gIYK7MQ8tWncv7hq7Cnd1D35EpzykwFSEce2p+Hi+QTYvnE - aD4hmI/zFmBdwNOACQc09CzUI4jQqny4CYrVwuGM/L01PHStDFuZ+2U2ZQ+VvJ1E3uLGY3pp8jYsvwnO - jkAZDUjusKxmyR5ZcSfG5NZxmW1UZR9TOboZml66aoBdnRCKOmjyFF7cRgVOSNJDVw9w9SDBQSMa5hh6 - 2No+rnHeElqxRy+0jZbmbi0t2FlUsL2gYAcUkU2gFbNEUJ2NiaTu3VnwD9uzvoTA5Pv91p62pvpqvRjH - kCFZZrLKJ7D6hDYlWkgrJ/EpXJFITOfS8Qw8Q8iUGlQMORfBwcB4cCgPkkPYmYV4ZtM5S3JB7OjCKYJF - FFsG3LyrzLCjVLutUANiRzoUOwokORBGVkHxY09l/sNXIE9twezIYGcWqHLKa7Khjix4+h0Z2ehANsqT - jXTlouoLUHV5KFsusjYHbcxG6bIRyqwKYWahrBTCLNhXJ6G1+LRCUp5Vh5dyCyWcAh4ty0qET1c5BkFH - 1tX76AwzBcFmZ7A5GWzuHhOpIi6QePA0JarCzCIlmfJxqXVMZWtjKDrx0m66cpCr7xCqRoSmCbGlj6vv - Zmk7WFWdJMWowDRT4z3TMSYkYGUMsoxLE3FJUgm52sRTG+k4Vn5uxRN7c79eVpYh5lHNWqWcxlIRefQ8 - nKiYVUe1pKpSfmmoimYK1DYmY93GGgebL9LoDQ6fv9pqE2pVTCWvkleaTdgJoWdvSlbyPNl46y64ZRfU - thdh3l1u2AXRbi9SbM4VP7WP+/Vd5C89Q9++D7d7X+HjQP5fyf3Gk2VbtuN3ZvL3FmgyIebMCkcm1LGn - 0r673Lan3Lqv0poLteUjrfmomhxQEBFVWYiqPJSqACrMK2LkZCJ2PWXiY1v9urhTXsWFSYiFMkoxF5dN - hm7Dl28mw7ciSx/n07O4tEwJP1+tgJhNaKMeLRdW1uppyUbDiMt+0JVI4cQJBL8FK2zC8ppJctC4+0CC - 83T9PMOQsKaNIO1laHvByMhQT1R7TjcPtbtC8Tp3wGKprVYq5EyFmk7nw+C4rMLCZ2CQTBqmkoVGcuA4 - JZZLz8bRMki1eEtEkuwwj8T0Pb2RhfHuY21Nk0adOxpujTd11HtCapOBq+ZCudAKTkkZM2eTYw/SmYkJ - FlJj5aw4jButoIcr6f5yiqMAY8qqVO0oYD2xG/H1Z0oefzr3sScyv/549pNPlWzdjti2m7xjn3BnnmZn - kQ5o9sls9RNZ2s15+t0ltflQezHaVoQxZMFVu8sVuysUGZXC3cW0bfuwW7ZBn368XkyfafH7Ndx+n0WN - q1BiymSYEk7FPhm+WEEqoZTt4KD3ymiF9TryUEvt/onITL/nyHjzC0dnrh2deu7o+KzX005WxGWSLrGm - kyBLwLkAIqiS7UzFgKRmWGCaUtVNKOzABg1LrCDNh8XmgZrQXGpkItnX29hi1VW5HTUyOUMowBORhWR4 - ER1ZRigtZpTB9VSJiayWlYlrCbagINFrmx0NHhmLn5zpvLg0fLU/dXB2+FRnasrpaHD7giQ2ni5nwwUV - eaQ9m3oJqgFKVS9J046VJlGCcBk1UEZxlxDswCTnIcw5MCA39OPb8r/6jcyvfH3P176e+cSTeZufKd28 - DbV5J+XpPZwn9/IfzxB9fY/8yazqnSXWAqQTSqgrx5vyEcpdpYLN+YLNhcKtJYynshBffhr7xDb05s3C - krwWo3o64pmL+CMSoQoKUVQW6wlwLabcwsJJEQVKbHHUIFjqDh0eblrpj56caL0+P3qqr/3SeN/p4fbj - g6m1sdY5j2fO7RlSm7ppyh6KspUkB536WLi9USiphkMbsJxmlnKAbwBjz1qs57VDp/Z7u4/2rBweWO4M - JLsbky6zyaKVW5UiAQ5JKMnH5ueh9+Vxy/EyGFdYwnMwXC26vn77wnjw+HT8wmL784cG3zg0/Ppi//Xh - lmNdibnW5kGZVslRsWHsMggzd9Oq2j/KMCRhglAxNVBEdmQhbPvgpj3lup0lut0l1RkQ1Z5i0I5hW3Zl - fvWxrf/wD5u/9KWtX/5KxlcfK/zqE5VfeRr/1W2sx3aLn87W7YHYCzFOKKkOhjcWw+W7i1lPZNK+uof5 - 9WzOE3mcp/JYm7O523M4u7NlhcUJuXQxFHBSKCtRMIqK5CVFZhyKl7vXTEC1GVTjfvvx/pbz412rnQ3L - LcEzQ+3nezsWfO7VxvDBxsBCuH4+5llM+GZ89fsbg1P1jm6O+kC4ebDaEqMJFfRKgxAnI1dUlUKbGNI4 - W9FVZV90dD43fuJ09/Gp4OhUw/B0aiSkr68VyCNGs19XzYbDKzP2wvZkVe7OYRYR+KUcJ9cTlqWSuqG+ - +oMT0fPT8atLLa/PN78+Frs6nroy1npmoHW/yx0gcwg4HhItLt3kycDYd8Acu5GuLIwrB+vOw3oKcK58 - rCMf7SrCukvx9hKsphRFzi7If+qZPV9/bPtjj+18/PHspzaXb9mB37aXuytfta/ckI+wFGPryok1pUh5 - ViF/Zzb9yd3kr+4AEHlPFkq3lmkzEKY8rDarUpNTriussCPQKbF40e8ftlhiQkGAxeBnZ7RqFUO2mivD - vVcnBs8PdR5uja0kQstNgbmIa9JhGbcaO7XyHoOyXSfuMEpmAraVuG9/0ruQ8A4HLfVSWi2fYBdTHXKm - XcaoZuCpRbk+uarD7m9W1A5a42d7Tz8/cS3KD835J071HolrA2aa0isz9niiLQ6fisIiFpZjsku5lTQd - WWvnOi0sr1uUbK6Z7nMd7XEeGw1cWWp+faIh/ctAhxrOz3RebksMy6tUHBWDKIFu6scqB/HqDoQkWclt - gnL8BXgfmFLAtJcJrd1bYdhVKt+ax9mdj9i6O+/xp/Ke2Zq7c2ferp2lezKw2fnsgjJZEbSqCFGdD1ft - K5PsLmRvzSQ9uYX4jS3kx3cwn8qU7SjT78PU5hLNuQRLHtEJoYYxHC+cbIHAQ1TGWipuJ2ECXMaRVMNq - MnKqKwXiaEvscHN0tTlyKBUGcaQ1drIrsT/quTba8+xw+6uLQ8+Ot18cSZ7qa5gJWkY9ht46VbdNbWaj - q0iVRgbazCNqGTgtlcgsLbOwJA5O1ZivpzfaNd86N+IfMuL1yw1zz09enguOSyBsBZzrlZqDWls1U0Iu - gePyoUIMx8QzOWVetzQSULU2mUbbrHOttXMdtv3D/lPDgTOD/jODobND0dMjrUfdnhBLSGMqyJsOSd3D - RG0Cwo6V0Jsq2c1IXhLJjZbTgGGuy4bXZJQrtxVQn9lb+JUndm76hz1ff3zP00/teurJfZs35z31TPHj - m6Ffewb99a34r2/DfWUL+h+exj+2hb51F3v7XuGufHVWZW0RyVnG8lXw/OU8TzHDX8b0QMimrArl9mzx - zgxxXsaY23S2H2RI5w9OH3hhdqjfpjuU/h0DrS/ND7+8MHJ1sveF2cFvH5l/89Dkt45Mv7w8cGYoPhez - DHrU/R7VQsp+pCu40FQXUNPMbKSaUCrHlei5BAkZxUcj6RAoHlVYVrQPXl5sUGtD9X4lW27gVc81Tx/r - Xx3292lxcj6EYaSobXyDgiRE5VSwkXQRUahlV1eza60iX9TYGTcPNdUMNVuGe9xTzZbBqK671TY9GDw6 - Fjs7Gj7Tk5wzWc02X82mlnLeKKX6sMp/QO4aomjjZcxQMcmfT/TmYr35OF8+zp6Lku2DQJ/YtmvTl7Zu - +octX/ryM1/+yo6vfC3rq98o/OqTFV/djHlsG/3pvYLtefKMElV2qTq/RFdYVlOCckDIngqWv4zrL+UG - SjjhCr6niGbaCwXusianQrYnS5S/105DHuuMfevw7M8uHXt+ZhAEQPmt1flvrc69ODd8bar/8mjXWkfs - wkjr4Y7w8b7YdIO1t17VXCPsdsg76qRd9cpmm9gpwevplVXUMgW+RIAposHzSWUFSNie0uLtubnPZGZu - xmFhbCalrLCIS2U1eRuGW/rjroiExGOUk/kwjoqskBAk6HwMuhDDxvBFZIWUqqvm1bs1CZcq5dO2JGq7 - hiITwaqgTehoNLUMhuYHA4st1qGYvreveW5weHjTUV1kkmNuR0qCuaT63UiwdeyCuTMwkXwyiEA23pGJ - MuajGbsLy7+2peRrm8ue2lG5dQ9ixz5SZgErByLKrVDlw3U5cGM2wl6AcUCw9RVoNxQfgNMiUFa4nBMp - 4QQLWd48mr+QYc/C1eyD10PwhtwKGwxtw6MnffbnJgZeXph4bXn61aXJ84Mdz473/+D04fdOrV4Z7T3W - Hl/rSIDtQtQ94bP211V3mFXNBmlSL2mpkbZaFXGDMKBm1kuJgCAXlsks340r3Fy+96vlZVsKS57OL96c - X7K1oGR7EWRPQdHuwsIMFKJMKuQ4LGZTtRYPR1KRZClFrmUbLFJnjbhOTqvi4eUcnExI1qrZNoPQVyMK - 26WNAV1zq7Pbo3Z7te5mR3OPb3A4OhnSheK1QyNNxw4sntgUKWI6M7BxCHeAWDXLsS4KnKeN8fOm1FFl - 8KDEu59fP043xbBiK5QqySzHP7EH+fgO3OZM6q58QU65JKdSnl1pBOyKia5CYrCYEiwneyvwvgqiv4wc - LKEGC+nBPEYgl+7NpnpyKZ5CSl0R1gOj1JbAWyWyI4mGF2dHrk0OnutvB8jAzrPjvS/Ojr62PAX2j7U1 - Lsf88yHXuNvSopOltJLmKmmqSprQihs1ggY1P6Lh+hWMejFJR61kQnbCM75WuetLsMyvlJfvgFTsKIHu - zC17JqPw8X2lT+VAnimo2F6G2FtSmYFAF5IoCDwBUVFWioPjhFR5jbQ+YErViHx8tIaDUbGxCiGlSs40 - K9l1SrrbyG3yarpD+rZoTVObp6PT393m6gHh1Xg63fsHwsfGO45tihQw53iONW3siDJ80dx63tj8im/o - krntkNi7poycq06erm5aUvlGxNYESWHKx/K3FNAez6Q/mSXaVVpbSgphhP4KliuP6M0heDNxzn1IZz6q - Pg/lysV4c4jBXFqkgB0r5qagki6iZohn6uZqJqttUzW2VyfGv7Uy+8r86Pn+tktDHef6Wo63x7+5NHF5 - uOt0d/JQIjQXdAzZ9c0acUhAdzEIPi41LGY1yLkNCk5IyvQIKVYWWkcqF8NzaEXb8dlPkPKf4cIypMT8 - /OJtuZBtOWXbciq37ij8+t7yJ3NgmyGE3UXobfmwLeWYvXB8IRRVDIWVETFEGUdtUXnq1FEN08FGaNgo - NRenFlK0cpZeI7CYJH6nsiNqnPBqesKmnt7Q5FDjTKtzImxobzAn+gLLow2nRiKnNp0xpI4oowfF/qOK - yMWatpddQxdNrUtc5zLbea4qedXSdc3adam27aS+8ZgudkAT7Kbo6nIJVTsqE3jFiiF62Bgf59S2Vopb - IPyOMlFbpSCF4DcjBR1o6RCxeppp3y/yga9/prb1gqvzpDO5Whd6oWvwpaGRn51ae31x4qWZgeNt0fN9 - qWdHOtdaoxf6ms90J44kgwshx5BNF5exXXR0HQnhpON9HIqXQ6ln4G1UZA0RqkYUicr28SB7hZVZSlyx - mY1wych5JVuzirZkFW/Nh+6BEPIgpNwyWg5WDIFzc6HsrApmRh766VL8ThglH0mCkGgYkUCoklRrhbXV - gnol3SbAVAtwOhnNpGQblFydWqAzSs1+Q7zJPuBUpSySaLNzdKr1RMI659P2Rmp6B8KzQ8GFdsfopiOK - 6JoqdsHY9mxt1wuO/is1nTM06yKz/kV7/3uNSz+IL38vPPvd4PSrdf3PW7pfdg5csXQeUUdXNdHTta1r - +qbDysh5U8tlY9tpZcNlXeql+r7nPX3XXD3X6ntfdA1+0z/5dsP8t+OLr0UnL/u6l02+NV/snYWlby/M - vjo7+txIx8X+1OGE71xP0/XxrtOdjSfawmst4ZWG+tG66qSC7aQi7MRKLxMbETEbZbywkOlk4OvoGAcD - aybD3UJSUMFs0PHZzAIkcU8pcns+dFsRYk85oQDFhuKESKIMTVJiiCoEQVmBkRXj5IUQxq487NZCzK5S - DBiSkVKZRMSX88gyBdMkIhqE+GoJyaBk1uiElmqJSSfRm+Q1DbbGZH1rvdpnFjqj5o5Wz2iybsilbrZK - G7q8wyOx6YQtsWlNET9b1XxKnTwqjp7VpC7o2qZItVf0He8nD30nMPuWa+JV6+Cr5r7v1I/+KLTwfsPS - DxqWvhOefdk9siL0DWH1+/neV9zD78WXv+2f+m5g5t3GxW/HZt8ITbzsGnmhbuB5+9ALdUPXHAOnjIlF - pauHq151B14ZG355avBcD1CcbzFkXW1yXxpIXuhrAgTP9TSO1lX11ciSClaAg/Wx0GE+MS5lpNTCDr2y - tUrWpBS06WUDdfqBesN83D3f5B70Gxm8HCw3A87YU0HZg2QVEEVwogyLl6JxUhROjiIokXgFFCuHoKVF - cEFuCXX3XujTu4ufyindg8Ej2Uweny6XMfUKZg0HpZRSDHphnV5kNStsdp3LpQ8k3e1NjtaAIRo0NjVa - Oxrrkilnm1PjrxW5Wup7uvyDsdqGTddtgxcNncsc3xLT86Jt6KgoOoIyvmQb+l548YKq+UVz/9uuqe84 - xn/TdPjXTYdfMfVeq+54zTH8bE3XMsdzwdD2w5bVb0fmr9v6X3WOvFo/crW2G1SD8/rWc7qWi7r2Z43d - Vy39z9l6j+oaVnS+UbnhgMe7HHAfTvhX4q7ROs3Bxvq1Fv+huBNsT7aHpj2GMB8PIsTDNUoo3QbRkFXZ - bZC0V0t7arSdBlVzlaTXop0M2ifDjnaLMm4Q+RU0pnwfSbEHJ81ACjIw4gIiQCaFoURQlAiGlSHxciRO - DkNLyxGiIgQ/D8rOzkFufWof8L1fLYLk8zh8OV/DxomxxQw2UiYh6bTcWrO83q5x+8yxhrrOgLklZutM - uvo7AmMRS0vK05mobwsaG0KmRLt7otHS3eLq3HSlpmeJ7e2uVJ9SJs5rWybxltPK5Ct1I5eq2p6t7nwn - MP9m/cRrlqEfBhffrp+8om1/1T7yUt3IMtc3Sqh9wTn6Znj+orn7vLHzgqnrOWvfmarUCWX8mDR6XNZ4 - RtUC4rA4Os9xjjLNgxx9iioYrNItBuonPMZRt27Qphx1aIdtquNtwfO9jUCAMTHZRijzs9FJJXPQopgL - mKfc+g6doNOgAN25SS1K6aRJnTisYHtFNAcXZ6BCFdgCinonUbMdJX0Gyt+CFGcSVKUEZSVKXAYXQOD8 - MpSgAiOCYsSVKGEJjJMLoe4pwO7YnPWVr23ZtG3X03AYjE3l66WWKn6tXmC3KTx6vrWKV2NRuvzm5oC5 - q06d8BraEq7RjuBMo6MnWNvaaO9KuQeGm1ZSdfNh42DKObppiesdxdcMYQyrwtCarGGaZLti7HjW2HWp - uu111/hrdcPPVXe+Zh/5lmfqiq79pDz+gn3omm1gnu2ZYTivOUeeqx86rGk6pGo8pIwd1SRWxMFlvm+F - 7z8oDK2KGw4IwnMM5yjFPEDV97KqwjhGn1Y75bLMRey9dsWATbU/Vr/c4DjQ6Bx16nxsrJOBaNcJ2/XC - LoNkyK6ZD1kXI/Yxp37QoW81KBsUfL+E6eDgq4kVcmSRHF0oReWLUDkSXAFGvQ0qfqKU841KwTacKp9c - VY5XlKNFpQhuMYJTjOJCMLwyDK8Ewc2Hs7MhpD078h97cueXd+7dnJO9rxIC0wj1Nq3HVxOL17f5TY16 - fm0Vz2JXNzq0LXphuEYaC5h7QpYuf023Q530GduT7rGOwGSre8xb1VavTmzqQWp6kZopmvWg0L/C9yxz - Pc+aO08qG89pE686hy9WNZ9VJ77pGn3BPnBIGDgoCj5r7Tlvap9h1R+SR6+5hk4YW+fF/lmRd0bonZP4 - Jzn1kwzbHLt+nuOaYzknKPYhfE0vrrqbVNVBV7kRpGaxZNhumos6Wo3i/jrNbMg25jYOOXQdJmlMxmo3 - SqZ8tVOB2pmAdT5StxB1jLmMrXpJVMWrYxO12HIprEBQnsUuyWCX7hUicvmIHDY0kwXLZMMzywVPl7Cf - gHCegYl241VFZE0FSVmBF5dhuMVodjGGU5Le4ebh+IVQWvaeoic27/7anqytWVkZZSXlfJpILdDX6Xzh - umTQ2mRXe5WsGqu6UcX1avkBozRSp02aZZE6TXO1IGSWNUat3U3OllZPh7sqWKfwb2qrlPZhq6bo1mPK - 6CzTfkDoPSoPH5NHTqsbT6pih8WBs9rE83X9p6tTM8y6ZaHvvLn9RFVijus6UZ08V9uxLAuOse0jTNsY - pw7ECNMyRKsZZdSOUGsH8MYelK4brevC6brIVS0UhQdF9ZCoXQbNoMMQ1/LbaxQ9Nm1XrarHqgHRbpSB - /YG66s8+7LNXgW2qShgQ03UEqLAyj16wh5q/k1qwk1GawYflyomlGibUwEfXSPA1UhA4gwIX0Ss1DCRR - WUTVlFNU5QQJBMstRNHz0fR8FCMPwchCs/Ng5Ow9BU9845kvb976jYy9O+GVMA6VJ2RKlXxdrbreXROu - VbvICGHmNhi0iCVmWgyKQJXYBc6jhu+tEgSi9p6Eq6e7YTDlao+Y4wln56bmSnE/QTdE0h9VRYYJ1ROU - mhGi/og8dErbOAc0xbCtKaNHVdF5gXuYbFoQuE8BX6luWBJ5Dyuj83zXKNXcg9d1oNW9JEMPEShO10Wq - 6iJq2zCqJFSWqJS2wJWtGHU7SdtEkvpxzOoyaFTIjauEEQU3phYk9dKUXhbXCsNydlDKAsXOL6I7OAQH - m+Dik108ch0Lb6GjuZAsRvFedlmWAFEgQheKMIUSfImej7GpqPU6lkVN1fDhYnqpnYI/1tDdRVP1srSd - WlNPa5ikAFlcUE7MKEJtK8HsKCPsguB2FSN37sl94qvf+NJXH/vS7j3bSoqLyHgyi8plknhsskgtMkg4 - OgyUlZ0BzdxZDisl8xlqtcSsk9v0CofHlpgbOjY/dLgjOppy9bWHRvrj05uixawenKqPoJnn13UipR0I - WRdKNsu2rohdk1TTKEG3LHBOMa2DZGMvVjvNtq9pYiti3yTdMkE1d8LkfRhtF0KZKOF3/f8qsremNA4o - DuD5Bl5rRRRQEVh2gd2FvcHel9teWBaRBYKkxhigaAQVYlBCIDWoKWqMmWkm7XQm7WTa6afoR+t25jyc - h/P0m3PmPPyxwhDJDSJGn8ieY/oprHVBuQsqrwJ6D872IkYHV1pkPOt0V1C4maCPc8mWHj+wyFLMNo1a - u9ZIsydb6ZaeaKrci4x0kpePN1PWQEPmDMynRTy5KFTg4E0moFE+lfLqjN8QoAzvF3FXDFkUo65zJXcp - FS8sxP8zlsJ9of71eHD75d22wZV4vCbyJgL78AWQWAJQuxuweQEnAKx7PW7rvcSibJRgUZiK8xmGSoVh - zrkCzUzZHcsePBKTk5kwTIUgrFysnnbPLvr3b88n48Gn8eD+8923R/uu6FssO2FLE6Y4hNURolnNCM1c - U1sPYvUqkvsc3/3AVa+p0hgr3PM7f2bbv0h7o4Bu1ZknNSHLl1ih502NCfMNnD1D1Fdh5SWqdGGlE1Q6 - AbUDqSeQ3AKTh3CiGREV+1p8ZfkpR7Zy6b00U+EiZQYtRkNVDmuofEMTmrr0RCQes+GdOFVTuFYu1avk - +k/yR6b8XGNLIprG3VxwhQs6KGCRgpaigWUEmAv6pmK4vSbSV3L5WipdSaVLwbwznv2x3//ndPx39+LX - 591Pj5uvea1O0pTqE3REzkclmWAEjKQiJEUwLM8LCTGuSJJGkpKl6nB6p6cX5ucX3BtrfhByOFwOhxNB - QyQVDYWCvCDSNJ01jHa7/aixRg8x44NQvaXLP6HZEaJfMtY9mmO6eMNv38RKH9nqe6LwM1WcUMUH4Ycv - Sv2O3R7CmRGafQNnLoj8WUjt+BNdMNXaEI790hEoHQLij17+AEzUPHx9g28FUvt+4UVIqgUZYx3AZ2cr - XKxupKupWJ4OldiwaSEK+JGpHpjyU503k4SEuhXSn6WgCocdZuK9vNYxUrsSoUXcLGjDPd8hq3OQfRpY - moEcc/61WTi0kJB9ignu6cxLLf1azNxu7n1tDf797a9vR0ML8UbbeTCefdR2b42d30fv+u/bQgHmc4ig - Y6Ia45MMnxASiqwZW4yQjLFJnOTdXmj++8WZ+Snb8sy6d9XuWFpx2VbdNn/Q5wFWgygUIWCGj5nl/H+e - bI0KWoBxQgAAAABJRU5ErkJggg== - - - - - /9j/4AAQSkZJRgABAgEAAAAAAAD/7gAOQWRvYmUAZAAAAAAB/+wAEUR1Y2t5AAEABAAAAFoAAP/bAEMA - AQEBAQEBAQEBAQIBAQECAgIBAQICAgICAgICAgMCAwMDAwIDAwQEBAQEAwUFBQUFBQcHBwcHCAgICAgI - CAgICP/bAEMBAQEBAgICBQMDBQcFBAUHCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI - CAgICAgICAgICAgICP/AABEIAPABQAMBEQACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUG - BwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQz - YnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaH - iImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy - 8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAAB - AncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6 - Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqy - s7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APmO - ysRJkNHuVyAxA4+Xj8iK/stNH8xwjY3bTTVZgJgxk/gHt05J6YzWt47LVG6Wm50ltpfmbZCMkHgnH8Ix - gH+VTKTve/kRZM6rTdN+bYy5U5809QSw6dqIyZdtWfE37faR/wDCvbi8s9W/sjX/AA1p1zcaVNIiul7a - zlILm3QlcJMo2Op+8RnHevm+KYf7NJp2aT6fhc9vh/Suo7q/9fI/ndlk81mGGYSOWfv1wT9a/FbaH6bf - QrvjcpUHGMEH5s4+tS3oO+wvl5KHZwRt57Z5556VLZUbne+GtIjurs219A88wXEcUbgbDuX55CARsXOS - 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 - IUvI8epXtTcWf//Z - - - - - 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 - TkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA - CvYBwq9wAwAABKNJREFUeF7tnC12HFcYRBXmbQSEBXgLCUxYWEK9h5DAaANZhKGht2EoGGoWGgXJjUZf - 3Vead+Z0y+n3Xt1zrkn/jFRVoM/MWHchhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIX4mngw2D4UrcYxgM - V+Iew2C4EvcYTo4W9vHhuvfvr/rD5yexuf/xhp1ooK70qim9mgGMhwbqSq+a0qsZwHhooK70qim9mgGM - hwv14uPDdT9/UHuD2Kv5GcNOXKgXXenVDGB8XKgXXenVDGB8XKgXXenVDGA8NED3oHdNFNz49hcV17PQ - x8dHFQPj+bT5fW53OTQAFNTVlV7NAE6PBoCCurrSqxnA6dEAUFBXV3o1AxgOCYQFUD700WYQ7+5VDOLT - 9prV7YcQeX8Oxo3iFvn7by6HBOBKr7IQmgGMhwTgSq+yEJoBjIcE4EqvshCaAYyPBOJGUGWhTeGdh8Kv - Ln4/4/JIIK70ahNwBjA8EogrvdoEnAEMjwTiSq82AWcAw6EBuNCqfMhjwTzOQfD1Xtlff/5RNOcsjwbi - Sq+y4AxgeDQQV3qVBWcAw6OBuNKrLDgDmA4NiAXD5o0VDgb3YyF//fm7yONvvnkj/vPvfyLP5/34+rye - xzeXRwMxpVczgPnQQEzp1QxgPjQQU3o1A5gPDYQPcXzIQ+H8sIb3Y0GUhXIAlOfz9ZoPk/BGVgbRogFk - AMuhAWQAy6EBZADL40J5tjMInu9KvyYLpjyfr9cbAOX1m8vjQnk2A5geF8qzGcD0uFCezQCWQwO6cQC9 - AvfK1zvAADSgDGA5NKAMYDk0oAxgOVxIL/r9d99e9ehBmJ8hHIwL+UVd6dUMYDxcyC/qSq9mAOPhQn5R - V3o1AxgPCbj5QggfCnG+G0GVg6Cu9CrP5+tvhp1IoBnAekigGcB6SKAZQJCAmy+EdAZxqyyY8nzC45th - JxJoBrAeEmgGsB4SaAYwPxogP/xh4fxSKeX9eD2PdyTmnLATDTQDWA4NNANYDg00A1geDbhXcMfmjSUc - f9xKvWYzSFy/GQ5GA84AlkMDzgCWQwPOAKZHA+0Ufv/b3+Kn+yeR5//04Uls7s+HRBTeXI/7b4adaKAs - CMczgPnQQFkQjmcA86GBsiAczwDmRwPuFcbjvB7yobB56OvfL7wyGjgLyQCmRwNnIRnA9GjgLCQDmB4N - HA9lTWE43lwP+QUT/kEH/gEIc4/wymjgKDgDmB8NHAVnAPOjgaPgDGB+NHAU/PGPt+LD+3cir+cbRzzO - +3Mgzfnh1dHAUVAGMD8aOArKAOZHA0dBGcB6SAEsfPtH5PkZwPhIARnAekgBGcB6SAEZQHClXGThvS+M - NB8uUZ4f/ndcKRczgPlxpVzMAObHlXIxA1iMXuF0u+RWw5nJABYnA1icDGA9tCB+idM9yFV5Pu8XTo8W - xkJd6VWez/uF06OFsVBXepXn837h9GhhLNSVXuX5vF84PVJY9z964MMeXm8MJ0cKywDWQwrLANZDCssA - 1kMK6w4AD318Y4hvJPH+m+FkSEEZwHpIQRnAekhBGUBwpR1pODmutCMNJ8eVdqTh5LjSjvTE3N19AXuR - auxwSbrOAAAAAElFTkSuQmCC - - - - - /9j/4AAQSkZJRgABAQEAZABkAAD/7gAOQWRvYmUAZAAAAAAB/+EW+EV4aWYAAE1NACoAAAAIAAcBEgAD - AAAAAQABAAABGgAFAAAAAQAAAGIBGwAFAAAAAQAAAGoBKAADAAAAAQACAAABMQACAAAAHAAAAHIBMgAC - AAAAFAAAAI6HaQAEAAAAAQAAAKIAAADCAGQAAAABAAAAZAAAAAEAAEFkb2JlIFBob3Rvc2hvcCBDUzUg - V2luZG93cwAyMDExOjAxOjE2IDIyOjQzOjM2AAACoAIABAAAAAEAAAChoAMABAAAAAEAAAChAAAAAAAA - AAYBAwADAAAAAQAGAAABGgAFAAAAAQAAARABGwAFAAAAAQAAARgBKAADAAAAAQACAAACAQAEAAAAAQAA - ASACAgAEAAAAAQAAFc8AAAAAAAAASAAAAAEAAABIAAAAAf/Y/+0ADEFkb2JlX0NNAAH/7gAOQWRvYmUA - ZIAAAAAB/9sAhAAMCAgICQgMCQkMEQsKCxEVDwwMDxUYExMVExMYEQwMDAwMDBEMDAwMDAwMDAwMDAwM - DAwMDAwMDAwMDAwMDAwMAQ0LCw0ODRAODhAUDg4OFBQODg4OFBEMDAwMDBERDAwMDAwMEQwMDAwMDAwM - DAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCACgAKADASIAAhEBAxEB/90ABAAK/8QBPwAAAQUBAQEBAQEA - AAAAAAAAAwABAgQFBgcICQoLAQABBQEBAQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIFBwYI - BQMMMwEAAhEDBCESMQVBUWETInGBMgYUkaGxQiMkFVLBYjM0coLRQwclklPw4fFjczUWorKDJkSTVGRF - wqN0NhfSVeJl8rOEw9N14/NGJ5SkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9xEA - AgIBAgQEAwQFBgcHBgU1AQACEQMhMRIEQVFhcSITBTKBkRShsUIjwVLR8DMkYuFygpJDUxVjczTxJQYW - orKDByY1wtJEk1SjF2RFVTZ0ZeLys4TD03Xj80aUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9ic3R1dn - d4eXp7fH/9oADAMBAAIRAxEAPwD1VJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUp - 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 - /d/vfvut07GFNQEdldTNAaITprKpJJJJT//X9VSSSSUpJJJJSxEiFmdU6TTl1lr2z3HkfJaiaJSQQCKI - sF81659WKrm7Mun7Qxsiuz6NrOfoWth3530P5v8AkLj8z6kv3E4GS0t1Pp5ALXAfmt9Wpr22Pd/xNC9y - yMKu4EELBz/q3XYSWjXyT+MH5hfjsWP2pR/m5cI/cl64fT9OP+M+KX/VzrmOGl+HY4v4FW20/wCbjutc - mb0z6wMptobgZQrvLTa30LYcWa1/mea9Sv6Bm1E+m93z1/Kqb+ndVadD/wBEJejvJV5h+jA+UpR/7h85 - o+r/AF3IsLG4VrXASfVHojXzyTStPF+pWUWi3Pya8asiS1vvcDP829zvSoZ7fz22Xrrj03qz9DYR8AB+ - ICnV9WMi1wdbuefFxJP4pXAdCfPRVZj1hDyvIf8AncDjYdPSumEjpdBuyOPtFmru/wDhIbt+ltd9mrpZ - Yr2J0rMz7m2ZBLiPoiIA/qtXTYH1VY2C5q6LD6TTQBDQgZE6bDsEwxRieI3Kf78tZf4P7v8AguZ0boTK - Gglq6KutrGgBO1gaICkmsikkkklKSSSSU//Q9VSSSSUpJJJJSkkkklKTEA8p0klI3UVu5CE7AoPZWUkl - NUdPo8AiNxam8BGSSUxDGjgKSSSSlJJJJKUkkkkpSSSSSn//2QD/7R5EUGhvdG9zaG9wIDMuMAA4QklN - BCUAAAAAABAAAAAAAAAAAAAAAAAAAAAAOEJJTQQ6AAAAAACTAAAAEAAAAAEAAAAAAAtwcmludE91dHB1 - dAAAAAUAAAAAQ2xyU2VudW0AAAAAQ2xyUwAAAABSR0JDAAAAAEludGVlbnVtAAAAAEludGUAAAAAQ2xy - bQAAAABNcEJsYm9vbAEAAAAPcHJpbnRTaXh0ZWVuQml0Ym9vbAAAAAALcHJpbnRlck5hbWVURVhUAAAA - AQAAADhCSU0EOwAAAAABsgAAABAAAAABAAAAAAAScHJpbnRPdXRwdXRPcHRpb25zAAAAEgAAAABDcHRu - Ym9vbAAAAAAAQ2xicmJvb2wAAAAAAFJnc01ib29sAAAAAABDcm5DYm9vbAAAAAAAQ250Q2Jvb2wAAAAA - AExibHNib29sAAAAAABOZ3R2Ym9vbAAAAAAARW1sRGJvb2wAAAAAAEludHJib29sAAAAAABCY2tnT2Jq - YwAAAAEAAAAAAABSR0JDAAAAAwAAAABSZCAgZG91YkBv4AAAAAAAAAAAAEdybiBkb3ViQG/gAAAAAAAA - AAAAQmwgIGRvdWJAb+AAAAAAAAAAAABCcmRUVW50RiNSbHQAAAAAAAAAAAAAAABCbGQgVW50RiNSbHQA - AAAAAAAAAAAAAABSc2x0VW50RiNQeGxAWQAAAAAAAAAAAAp2ZWN0b3JEYXRhYm9vbAEAAAAAUGdQc2Vu - dW0AAAAAUGdQcwAAAABQZ1BDAAAAAExlZnRVbnRGI1JsdAAAAAAAAAAAAAAAAFRvcCBVbnRGI1JsdAAA - AAAAAAAAAAAAAFNjbCBVbnRGI1ByY0BZAAAAAAAAOEJJTQPtAAAAAAAQAGQAAAABAAEAZAAAAAEAAThC - SU0EJgAAAAAADgAAAAAAAAAAAAA/gAAAOEJJTQQNAAAAAAAEAAAAfThCSU0EGQAAAAAABAAAAB44QklN - A/MAAAAAAAkAAAAAAAAAAAEAOEJJTScQAAAAAAAKAAEAAAAAAAAAAjhCSU0D9QAAAAAASAAvZmYAAQBs - ZmYABgAAAAAAAQAvZmYAAQChmZoABgAAAAAAAQAyAAAAAQBaAAAABgAAAAAAAQA1AAAAAQAtAAAABgAA - AAAAAThCSU0D+AAAAAAAcAAA/////////////////////////////wPoAAAAAP////////////////// - //////////8D6AAAAAD/////////////////////////////A+gAAAAA//////////////////////// - /////wPoAAA4QklNBAAAAAAAAAIAAjhCSU0EAgAAAAAAEAAAAAAAAAAAAAAAAAAAAAA4QklNBDAAAAAA - AAgBAQEBAQEBAThCSU0ELQAAAAAABgABAAAACjhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklN - BB4AAAAAAAQAAAAAOEJJTQQaAAAAAANJAAAABgAAAAAAAAAAAAAAoQAAAKEAAAAKAFUAbgB0AGkAdABs - AGUAZAAtADEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAKEAAAChAAAAAAAAAAAAAAAA - AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEAAAAAAABudWxsAAAAAgAAAAZib3VuZHNPYmpjAAAA - AQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcA - AAChAAAAAFJnaHRsb25nAAAAoQAAAAZzbGljZXNWbExzAAAAAU9iamMAAAABAAAAAAAFc2xpY2UAAAAS - AAAAB3NsaWNlSURsb25nAAAAAAAAAAdncm91cElEbG9uZwAAAAAAAAAGb3JpZ2luZW51bQAAAAxFU2xp - Y2VPcmlnaW4AAAANYXV0b0dlbmVyYXRlZAAAAABUeXBlZW51bQAAAApFU2xpY2VUeXBlAAAAAEltZyAA - AAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcA - AAAAAAAAAEJ0b21sb25nAAAAoQAAAABSZ2h0bG9uZwAAAKEAAAADdXJsVEVYVAAAAAEAAAAAAABudWxs - VEVYVAAAAAEAAAAAAABNc2dlVEVYVAAAAAEAAAAAAAZhbHRUYWdURVhUAAAAAQAAAAAADmNlbGxUZXh0 - SXNIVE1MYm9vbAEAAAAIY2VsbFRleHRURVhUAAAAAQAAAAAACWhvcnpBbGlnbmVudW0AAAAPRVNsaWNl - SG9yekFsaWduAAAAB2RlZmF1bHQAAAAJdmVydEFsaWduZW51bQAAAA9FU2xpY2VWZXJ0QWxpZ24AAAAH - ZGVmYXVsdAAAAAtiZ0NvbG9yVHlwZWVudW0AAAARRVNsaWNlQkdDb2xvclR5cGUAAAAATm9uZQAAAAl0 - b3BPdXRzZXRsb25nAAAAAAAAAApsZWZ0T3V0c2V0bG9uZwAAAAAAAAAMYm90dG9tT3V0c2V0bG9uZwAA - AAAAAAALcmlnaHRPdXRzZXRsb25nAAAAAAA4QklNBCgAAAAAAAwAAAACP/AAAAAAAAA4QklNBBQAAAAA - AAQAAAAQOEJJTQQMAAAAABXrAAAAAQAAAKAAAACgAAAB4AABLAAAABXPABgAAf/Y/+0ADEFkb2JlX0NN - AAH/7gAOQWRvYmUAZIAAAAAB/9sAhAAMCAgICQgMCQkMEQsKCxEVDwwMDxUYExMVExMYEQwMDAwMDBEM - DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQ0LCw0ODRAODhAUDg4OFBQODg4OFBEMDAwMDBERDAwM - DAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCACgAKADASIAAhEBAxEB/90ABAAK/8QB - PwAAAQUBAQEBAQEAAAAAAAAAAwABAgQFBgcICQoLAQABBQEBAQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQ - AAEEAQMCBAIFBwYIBQMMMwEAAhEDBCESMQVBUWETInGBMgYUkaGxQiMkFVLBYjM0coLRQwclklPw4fFj - czUWorKDJkSTVGRFwqN0NhfSVeJl8rOEw9N14/NGJ5SkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2N0dX - Z3eHl6e3x9fn9xEAAgIBAgQEAwQFBgcHBgU1AQACEQMhMRIEQVFhcSITBTKBkRShsUIjwVLR8DMkYuFy - gpJDUxVjczTxJQYWorKDByY1wtJEk1SjF2RFVTZ0ZeLys4TD03Xj80aUpIW0lcTU5PSltcXV5fVWZnaG - lqa2xtbm9ic3R1dnd4eXp7fH/9oADAMBAAIRAxEAPwD1VJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJ - JJJSkkkklKSSSSUpJJJJT//Q9VSSSSUpJJJJSkkkklKSWf1rreB0PD+255eKdwafTYbHCfztjPdsb+8s - 1tP1l6uX1Zb29O6dkVb4oDm5bHEua3Ee+3cz+a2W35FTa/0n6tT/ANyElPRJLkMj6hXeiDi9ez6cluOz - GFznNePTa/1bPYBS79J9D+e9n5/qqPQsfK6tkM6kcjLxc/Gfaxzc8Oc51D2+jTdTj1twMKr6HqV/oMr/ - AIf1klPYpLkDn/XzpLZycOvq2Njte+59bpyLdzv1dmKzHrq9zJb62/Ar/kLR/wCefRqr8bEzzdgZmUwP - bRfTY0tn2u32bPTaxlns9bd6P8tJTvJKFd1VoJreHgclplTSUpJJJJSkkkklKSSSSU//0fVUkkklKSSS - SUpQttqprdbc9tdbBLnuIa0D+U5yD1DqGL07FdlZLtrG6ADVznH6LGN/Oc5cd1V3UOqDHu6g40UZloZi - 4bSQRWA62zId/wAJ6TP0d37/APN/o0JyEMc8s9IY4mcu9QHEeFZKfrjjgOLJMgAdI8X6U0l/1j6E/r2T - 1FrbMnMxKBjYLa2WvJDxY+/9FWDXsfb6LfUu2f5iz/qr9cBivy6/rRmV4fV78j1X1XSxgqLGNpbXa4ux - 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 - 3UVu5CE7AoPZWUklNUdPo8AiNxam8BGSSUxDGjgKSSSSlJJJJKUkkkkpSSSSSn//2QA4QklNBCEAAAAA - AFUAAAABAQAAAA8AQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAAAATAEEAZABvAGIAZQAgAFAA - aABvAHQAbwBzAGgAbwBwACAAQwBTADUAAAABADhCSU0EBgAAAAAABwAEAAEAAQEA/+EOOWh0dHA6Ly9u - cy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpy - ZVN6TlRjemtjOWQiPz4NCjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9 - IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAg - ICAgIj4NCgk8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRm - LXN5bnRheC1ucyMiPg0KCQk8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0 - dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxl - bWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8x - LjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RF - dnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNy - ZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcDpDcmVhdGVEYXRlPSIyMDEx - LTAxLTE2VDIyOjIxOjU3LTA2OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxMS0wMS0xNlQyMjo0MzozNi0w - NjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxMS0wMS0xNlQyMjo0MzozNi0wNjowMCIgZGM6Zm9ybWF0 - PSJpbWFnZS9qcGVnIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0i - c1JHQiBJRUM2MTk2Ni0yLjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDM2QkIxNThGNDIxRTAx - MThBNDVDNDZCQzcxMUYyMEYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDI2QkIxNThGNDIxRTAx - MThBNDVDNDZCQzcxMUYyMEYiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMjZCQjE1 - OEY0MjFFMDExOEE0NUM0NkJDNzExRjIwRiI+DQoJCQk8eG1wTU06SGlzdG9yeT4NCgkJCQk8cmRmOlNl - cT4NCgkJCQkJPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9Inht - cC5paWQ6MDI2QkIxNThGNDIxRTAxMThBNDVDNDZCQzcxMUYyMEYiIHN0RXZ0OndoZW49IjIwMTEtMDEt - MTZUMjI6MjE6NTctMDY6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzUg - V2luZG93cyIvPg0KCQkJCQk8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJh - bWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvanBlZyIv - Pg0KCQkJCQk8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5p - aWQ6MDM2QkIxNThGNDIxRTAxMThBNDVDNDZCQzcxMUYyMEYiIHN0RXZ0OndoZW49IjIwMTEtMDEtMTZU - MjI6NDM6MzYtMDY6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzUgV2lu - ZG93cyIgc3RFdnQ6Y2hhbmdlZD0iLyIvPg0KCQkJCTwvcmRmOlNlcT4NCgkJCTwveG1wTU06SGlzdG9y - eT4NCgkJPC9yZGY6RGVzY3JpcHRpb24+DQoJPC9yZGY6UkRGPg0KPC94OnhtcG1ldGE+DQogICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg - ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg - ICAgICAgICAgICAgPD94cGFja2V0IGVuZD0ndyc/Pv/iDFhJQ0NfUFJPRklMRQABAQAADEhMaW5vAhAA - AG1udHJSR0IgWFlaIAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAABAAD2 - 1gABAAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - EWNwcnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIYAAAA - FGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAA - hnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAI - DGdUUkMAAAQ8AAAIDGJUUkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQt - UGFja2FyZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNS - R0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAG+iAAA4 - 9QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPZGVzYwAAAAAAAAAWSUVD - IGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0y - LjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2Ni0yLjEg - RGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAA - AAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAs - UmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAA - AABXH+dtZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAA - AAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEA - hgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8B - JQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoC - AwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyED - LQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoE - qAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoG - ewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYI - qgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyIL - OQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMO - Lg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0R - jBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQV - VhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZ - kRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYe - QB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgj - ZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQp - Bik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4v - JC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1 - wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ8 - 4z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdE - ikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJM - uk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShV - dVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxe - vV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9o - lmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZz - AXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+ - AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJ - mYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+V - yZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiai - lqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uw - ALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++ - Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXM - tc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724Dc - BdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr - ++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8 - mP0p/br+S/7c/23////bAEMABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoKDBAMDAwMDAwQDAwMDAwM - DAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/bAEMBBwcHDQwNGBAQGBQODg4UFA4ODg4UEQwMDAwMEREMDAwM - DAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIAKEAoQMBEQACEQEDEQH/xAAfAAABBQEB - AQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEH - InEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2Rl - ZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU - 1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/ - xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ0 - 4SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqS - k5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4 - +fr/2gAMAwEAAhEDEQA/APqmgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAC - gAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAo - AKACgAoAKACgAoAKACgAoAKAMfxV4s0XwtpD6trEjxWUbKrvGjSsNxxnagLbV+8zfwrQBzttc+O/EspU - hNG8O3sLOs6qy6jHh8RxFZPl3TxFZHkVf3PzQr+8/e0AYd38FNdFlCLHxzq0WoQWb2kdzL5brmWTe77F - CH7vyqu/+7uelYdyv4QtNW8QX6XA1W/i1XRLpo1bUlYRz20cbQ+bFBCtvFtMh3ZZ5t+3941AFybXfjP4 - fkla50mHXtMglnnuLlJEFy1suTHHBFEIy0xG35Ps7/8AXR6ANofF/wALWkOljX47vQb/AFRAYrG+tZ1d - XABdSwQqdmfmk/1f+1TEdlb3lpcjNvMkwwDlGDDB6dKAJqACgAoAKACgAoAKACgAoAKACgAoAKAGzTRQ - xNLM6xxIMvI5CqAO5J4FAm0ldnkOv+OfAdx44bUriaS7uNGtfI02CNZZUka43i4PkorhxhYlVnX/AMdr - OvVhR/iSjD/ExUJe1+BORy3wz+M86apq3/CeX8Gj6zd3EclrY3BaFFtVjCoELExBd2443b97Pu/hqKGI - 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 - AADABwAA4A8AAPBfAAD4fwAA - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/Api/ApiManager.cs b/BizHawk.Client.EmuHawk/Api/ApiManager.cs index e7d733e26e..ea14bf4d1d 100644 --- a/BizHawk.Client.EmuHawk/Api/ApiManager.cs +++ b/BizHawk.Client.EmuHawk/Api/ApiManager.cs @@ -17,21 +17,10 @@ namespace BizHawk.Client.EmuHawk private static ApiContainer container; private static void Register(IEmulatorServiceProvider serviceProvider) { - // Register external apis - var apis = Assembly - .Load("BizHawk.Client.ApiHawk") - .GetTypes() - .Where(t => typeof(IExternalApi).IsAssignableFrom(t)) - .Where(t => t.IsSealed) - .Where(t => ServiceInjector.IsAvailable(serviceProvider, t)) - .Concat(Assembly - .GetAssembly(typeof(ApiContainer)) - .GetTypes() - .Where(t => typeof(IExternalApi).IsAssignableFrom(t)) - .Where(t => t.IsSealed) - .Where(t => ServiceInjector.IsAvailable(serviceProvider, t))); - - foreach (var api in apis) + foreach (var api in Assembly.Load("BizHawk.Client.Common").GetTypes() + .Concat(Assembly.Load("BizHawk.Client.ApiHawk").GetTypes()) + .Concat(Assembly.GetAssembly(typeof(ApiContainer)).GetTypes()) + .Where(t => typeof(IExternalApi).IsAssignableFrom(t) && t.IsSealed && ServiceInjector.IsAvailable(serviceProvider, t))) { var instance = (IExternalApi)Activator.CreateInstance(api); ServiceInjector.UpdateServices(serviceProvider, instance); diff --git a/BizHawk.Client.EmuHawk/ArgParser.cs b/BizHawk.Client.EmuHawk/ArgParser.cs index d97ac32c79..9258c0e3d2 100644 --- a/BizHawk.Client.EmuHawk/ArgParser.cs +++ b/BizHawk.Client.EmuHawk/ArgParser.cs @@ -2,11 +2,10 @@ using System.Collections.Generic; using System.Linq; using System.IO; -using System.Windows.Forms; namespace BizHawk.Client.EmuHawk { - class ArgParser + public class ArgParser //parses command line arguments and adds the values to a class attribute //default values are null for strings and false for boolean //the last value will overwrite previously set values @@ -161,7 +160,7 @@ namespace BizHawk.Client.EmuHawk } } - //inititalize socket server + // initialize socket server if (socket_ip != null && socket_port > 0) { GlobalWin.socketServer = new Communication.SocketServer(); @@ -185,13 +184,8 @@ namespace BizHawk.Client.EmuHawk return args.FirstOrDefault(arg => arg.StartsWith("--config=", StringComparison.InvariantCultureIgnoreCase))?.Substring(9); } } - - class ArgParserException : Exception + public class ArgParserException : Exception { - public ArgParserException() - { - } - public ArgParserException(string message) : base(message) { } diff --git a/BizHawk.Client.EmuHawk/BizBox.Designer.cs b/BizHawk.Client.EmuHawk/BizBox.Designer.cs index 630b994d1e..698a2a038e 100644 --- a/BizHawk.Client.EmuHawk/BizBox.Designer.cs +++ b/BizHawk.Client.EmuHawk/BizBox.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BizBox)); this.OK = new System.Windows.Forms.Button(); this.pictureBox1 = new System.Windows.Forms.PictureBox(); this.linkLabel1 = new System.Windows.Forms.LinkLabel(); @@ -181,7 +180,7 @@ this.Controls.Add(this.linkLabel1); this.Controls.Add(this.pictureBox1); this.Controls.Add(this.OK); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.logo; this.MinimumSize = new System.Drawing.Size(453, 253); this.Name = "BizBox"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; diff --git a/BizHawk.Client.EmuHawk/BizBox.resx b/BizHawk.Client.EmuHawk/BizBox.resx index 6862218d0f..29dcb1b3a3 100644 --- a/BizHawk.Client.EmuHawk/BizBox.resx +++ b/BizHawk.Client.EmuHawk/BizBox.resx @@ -117,30 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAEAEBEAAAEAIACsBAAAFgAAACgAAAAQAAAAIgAAAAEAIAAAAAAAAAAAAGEPAABhDwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAANTMxiCyrZv/nZyJ/5OVg/+Ym5D/ra2t/9LU2BUAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA3tvJHZyZco5UVjrYPTYe/zUvFP84NBb/Tkss/29rTP+Afma0pqasVwAA - AAAAAAAAAAAAAAAAAAAAAAAAyM2sQlVUL+UXEA3/CQYA/wABAP9LTEv/EQ8Q/wUEAP8SFAb/REUo/25r - T9WblpVvAAAAAAAAAAAAAAAA0tOwPDw6HvwAAAD/Cw4H/wEFAP86Pjv/z9DP/2dkZv8HAQH/FQ0J/wsF - AP8yMBb/cHBK3qijrloAAAAA7e3ZCFVPNd0CAAD/DxUK/woOAP8WGBT/uby2/2NkY/+8vLz/Ozs5/w0O - Av8RFQv/BQIF/z04G/+FgWuu087QG52dcv8GBgr/Cg0H/xcXDf8AAAD/fXyD/83Mzv8TEhT/pKOj/6+v - rf8MCQT/GRcK/xEODf8NDwb/XV84/62vpv+Hdkr/AAEG/xQTDP8NDQb/Fg8Q/9ja3f+FhYb/AAAA/2Je - YP/u7+7/MDIt/xMPBf8ZFgv/AAAG/0REJf+poYv/0aFw/z8qEP8MDQf/AwYB/ysqLf/5+fr/qaao/woD - Bv+Df4D//////1taV/8KBAD/GRUG/xMMBf+ngU//tKeL/+iwd/+/kEn/IiMO/wABAv9GRkr/+vn7/+De - 3/8zLS7/u7e4//////94dnb/EhYU/xUWDP+Kbjj/6bJu/7eujP/kt2///daQ/5uIS/8YFQn/Ojw//8nF - yP/a2dn/OTQ1/6Wio//V2Nj/jY+T/1ZTT/98aTX/89GR/+S4Yv/AvJv/17pu//jaov/03qL/gmcn/xgX - GP8gIyb/U1VU/2FfXv+Eh4T/oKam/5+mrv+BeGf/3MaQ///lrf/buWP7ydLGNdbOnP/rznn///vN/9i7 - e/8jHBX/AgAE/xINDf96fXr/r6+w/8zQ1P/S2Nr/pqej/97Qu//82oL/ysmJrgAAAADj6tYN38x40ezY - kv+Hp6P/KTIv/wMdJv8WKTH/am5v/5ucmv/g4uX/6evw/8PExf/ZxHv/5c90293bxDkAAAAAAAAAAOjg - vUPCv3XZFJ7N/wCTyP8LbZP/EDM//0JJTv/Gx8X/5+fn/+zq8P+2rpr/1cVo89/aq2kAAAAAAAAAAAAA - AAAAAAAA1duzWEOltf8Hkbz/Fkdc/zNDRv9KWFr/kpKW//z7/P/f4dv/qqWCvt3YsV0AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADi3tYNj4+Wp8rKzP/x8vD/6PLw/+fo6//b294ImJuRntfZyygAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN3azx3Gysv/qK+x/8C5uP/Dw8P/wcfJOQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPwfAADwDwAA4AcAAMADAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAIAD - AADABwAA4A8AAPBfAAD4fwAA - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj index b34dec2252..9295779bce 100644 --- a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj +++ b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj @@ -1,5 +1,7 @@  + + Debug x86 @@ -71,23 +73,25 @@ ..\References\GongShell.dll - - ..\References\ICSharpCode.SharpZipLib.dll + + ../packages/SharpZipLib.1.1.0/lib/net45/ICSharpCode.SharpZipLib.dll + True - - ..\References\Newtonsoft.Json.dll + + ../packages/Newtonsoft.Json.12.0.3/lib/net45/Newtonsoft.Json.dll + True False ..\output\dll\nlua\NLua.dll False - - False - ..\References\OpenTK.dll + + ../packages/OpenTK.3.0.1/lib/net20/OpenTK.dll + True ..\References\x64\SlimDX.dll @@ -740,9 +744,7 @@ - - True - True + Resources.resx @@ -972,9 +974,6 @@ LuaWinform.cs - - Component - Form @@ -1224,7 +1223,7 @@ - + @@ -1485,6 +1484,202 @@ PrereqsAlert.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MainForm.cs Designer @@ -1505,11 +1700,13 @@ PlatformChooser.cs - - ResXFileCodeGenerator - Designer - Resources.Designer.cs - + + + + + + + RomStatusPicker.cs @@ -1791,11 +1988,6 @@ SoundConfig.cs Designer - - - - - LogWindow.cs @@ -1823,373 +2015,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/BizHawk.Client.EmuHawk/CoreFeatureAnalysis.Designer.cs b/BizHawk.Client.EmuHawk/CoreFeatureAnalysis.Designer.cs index 57da4ec9c8..4eba94c323 100644 --- a/BizHawk.Client.EmuHawk/CoreFeatureAnalysis.Designer.cs +++ b/BizHawk.Client.EmuHawk/CoreFeatureAnalysis.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CoreFeatureAnalysis)); this.CoreTree = new System.Windows.Forms.TreeView(); this.tabControl1 = new System.Windows.Forms.TabControl(); this.tabPage1 = new System.Windows.Forms.TabPage(); @@ -130,7 +129,7 @@ this.Controls.Add(this.statusStrip1); this.Controls.Add(this.tabControl1); this.Controls.Add(this.menuStrip1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.logo; this.MainMenuStrip = this.menuStrip1; this.Name = "CoreFeatureAnalysis"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; diff --git a/BizHawk.Client.EmuHawk/CoreFeatureAnalysis.resx b/BizHawk.Client.EmuHawk/CoreFeatureAnalysis.resx index 47a90c8c86..aa707c530a 100644 --- a/BizHawk.Client.EmuHawk/CoreFeatureAnalysis.resx +++ b/BizHawk.Client.EmuHawk/CoreFeatureAnalysis.resx @@ -123,30 +123,4 @@ 126, 17 - - - - AAABAAEAEBEAAAEAIACsBAAAFgAAACgAAAAQAAAAIgAAAAEAIAAAAAAAAAAAAGEPAABhDwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAANTMxiCyrZv/nZyJ/5OVg/+Ym5D/ra2t/9LU2BUAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA3tvJHZyZco5UVjrYPTYe/zUvFP84NBb/Tkss/29rTP+Afma0pqasVwAA - AAAAAAAAAAAAAAAAAAAAAAAAyM2sQlVUL+UXEA3/CQYA/wABAP9LTEv/EQ8Q/wUEAP8SFAb/REUo/25r - T9WblpVvAAAAAAAAAAAAAAAA0tOwPDw6HvwAAAD/Cw4H/wEFAP86Pjv/z9DP/2dkZv8HAQH/FQ0J/wsF - AP8yMBb/cHBK3qijrloAAAAA7e3ZCFVPNd0CAAD/DxUK/woOAP8WGBT/uby2/2NkY/+8vLz/Ozs5/w0O - Av8RFQv/BQIF/z04G/+FgWuu087QG52dcv8GBgr/Cg0H/xcXDf8AAAD/fXyD/83Mzv8TEhT/pKOj/6+v - rf8MCQT/GRcK/xEODf8NDwb/XV84/62vpv+Hdkr/AAEG/xQTDP8NDQb/Fg8Q/9ja3f+FhYb/AAAA/2Je - YP/u7+7/MDIt/xMPBf8ZFgv/AAAG/0REJf+poYv/0aFw/z8qEP8MDQf/AwYB/ysqLf/5+fr/qaao/woD - Bv+Df4D//////1taV/8KBAD/GRUG/xMMBf+ngU//tKeL/+iwd/+/kEn/IiMO/wABAv9GRkr/+vn7/+De - 3/8zLS7/u7e4//////94dnb/EhYU/xUWDP+Kbjj/6bJu/7eujP/kt2///daQ/5uIS/8YFQn/Ojw//8nF - yP/a2dn/OTQ1/6Wio//V2Nj/jY+T/1ZTT/98aTX/89GR/+S4Yv/AvJv/17pu//jaov/03qL/gmcn/xgX - GP8gIyb/U1VU/2FfXv+Eh4T/oKam/5+mrv+BeGf/3MaQ///lrf/buWP7ydLGNdbOnP/rznn///vN/9i7 - e/8jHBX/AgAE/xINDf96fXr/r6+w/8zQ1P/S2Nr/pqej/97Qu//82oL/ysmJrgAAAADj6tYN38x40ezY - kv+Hp6P/KTIv/wMdJv8WKTH/am5v/5ucmv/g4uX/6evw/8PExf/ZxHv/5c90293bxDkAAAAAAAAAAOjg - vUPCv3XZFJ7N/wCTyP8LbZP/EDM//0JJTv/Gx8X/5+fn/+zq8P+2rpr/1cVo89/aq2kAAAAAAAAAAAAA - AAAAAAAA1duzWEOltf8Hkbz/Fkdc/zNDRv9KWFr/kpKW//z7/P/f4dv/qqWCvt3YsV0AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADi3tYNj4+Wp8rKzP/x8vD/6PLw/+fo6//b294ImJuRntfZyygAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN3azx3Gysv/qK+x/8C5uP/Dw8P/wcfJOQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPwfAADwDwAA4AcAAMADAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAIAD - AADABwAA4A8AAPBfAAD4fwAA - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/CustomControls/ControlRenderer/GdiPlusRenderer.cs b/BizHawk.Client.EmuHawk/CustomControls/ControlRenderer/GdiPlusRenderer.cs index 2d158351a9..401b9805c4 100644 --- a/BizHawk.Client.EmuHawk/CustomControls/ControlRenderer/GdiPlusRenderer.cs +++ b/BizHawk.Client.EmuHawk/CustomControls/ControlRenderer/GdiPlusRenderer.cs @@ -40,33 +40,29 @@ namespace BizHawk.Client.EmuHawk.CustomControls _graphics.DrawImage(bitmap, point); } - public void DrawRectangle(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect) + public void DrawRectangle(Rectangle rect) { - _graphics.DrawRectangle( - _currentPen, - new Rectangle(nLeftRect, nTopRect, nRightRect - nLeftRect, nBottomRect - nTopRect)); + _graphics.DrawRectangle(_currentPen, rect); } - public void DrawString(string str, Point point) + public void DrawString(string str, Rectangle rect) { if (_rotateString) { - _graphics.TranslateTransform(point.X, point.Y); + _graphics.TranslateTransform(rect.X, rect.Y); _graphics.RotateTransform(90); _graphics.DrawString(str, _currentFont, _currentStringBrush, Point.Empty); _graphics.ResetTransform(); } else { - _graphics.DrawString(str, _currentFont, _currentStringBrush, point); + _graphics.DrawString(str, _currentFont, _currentStringBrush, rect); } } - public void FillRectangle(int x, int y, int w, int h) + public void FillRectangle(Rectangle rect) { - _graphics.FillRectangle( - _currentBrush, - new Rectangle(x, y, w, h)); + _graphics.FillRectangle(_currentBrush, rect); } public void Line(int x1, int y1, int x2, int y2) @@ -74,16 +70,15 @@ namespace BizHawk.Client.EmuHawk.CustomControls _graphics.DrawLine(_currentPen, x1, y1, x2, y2); } - public IDisposable LockGraphics(Graphics g, int width, int height) + public IDisposable LockGraphics(Graphics g) { _graphics = g; return new GdiPlusGraphicsLock(); } - public Size MeasureString(string str, Font font) + public SizeF MeasureString(string str, Font font) { - var size = _graphics.MeasureString(str, font); - return new Size((int)(size.Width + 0.5), (int)(size.Height + 0.5)); + return _graphics.MeasureString(str, font); } public void PrepDrawString(Font font, Color color, bool rotate = false) diff --git a/BizHawk.Client.EmuHawk/CustomControls/ControlRenderer/IControlRenderer.cs b/BizHawk.Client.EmuHawk/CustomControls/ControlRenderer/IControlRenderer.cs index 9a5475cd9e..fb78f4f6e3 100644 --- a/BizHawk.Client.EmuHawk/CustomControls/ControlRenderer/IControlRenderer.cs +++ b/BizHawk.Client.EmuHawk/CustomControls/ControlRenderer/IControlRenderer.cs @@ -8,13 +8,13 @@ namespace BizHawk.Client.EmuHawk.CustomControls /// /// Required to use before calling drawing methods /// - IDisposable LockGraphics(Graphics g, int width, int height); + IDisposable LockGraphics(Graphics g); /// /// Measure the width and height of string when drawn /// using the given font /// - Size MeasureString(string str, Font font); + SizeF MeasureString(string str, Font font); void SetBrush(Color color); void SetSolidPen(Color color); @@ -22,12 +22,13 @@ namespace BizHawk.Client.EmuHawk.CustomControls void PrepDrawString(Font font, Color color, bool rotate = false); /// - /// Draw the given string using the given font and foreground color at given location + /// Draw the given string using the given font and foreground color at the X/Y of the given rect. + /// Text not fitting inside of the rect will be truncated /// - void DrawString(string str, Point point); + void DrawString(string str, Rectangle rect); - void DrawRectangle(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect); - void FillRectangle(int x, int y, int w, int h); + void DrawRectangle(Rectangle rect); + void FillRectangle(Rectangle rect); /// /// Draw a bitmap object at the given position diff --git a/BizHawk.Client.EmuHawk/CustomControls/InputRoll/Cell.cs b/BizHawk.Client.EmuHawk/CustomControls/InputRoll/Cell.cs index aaf49dae40..311a42e638 100644 --- a/BizHawk.Client.EmuHawk/CustomControls/InputRoll/Cell.cs +++ b/BizHawk.Client.EmuHawk/CustomControls/InputRoll/Cell.cs @@ -19,8 +19,6 @@ namespace BizHawk.Client.EmuHawk RowIndex = cell.RowIndex; } - public bool IsDataCell => Column != null && RowIndex.HasValue; - public override bool Equals(object obj) { var cell = obj as Cell; diff --git a/BizHawk.Client.EmuHawk/CustomControls/InputRoll/InputRoll.Drawing.cs b/BizHawk.Client.EmuHawk/CustomControls/InputRoll/InputRoll.Drawing.cs index 19b6988c27..325a290b84 100644 --- a/BizHawk.Client.EmuHawk/CustomControls/InputRoll/InputRoll.Drawing.cs +++ b/BizHawk.Client.EmuHawk/CustomControls/InputRoll/InputRoll.Drawing.cs @@ -11,54 +11,64 @@ namespace BizHawk.Client.EmuHawk { protected override void OnPaint(PaintEventArgs e) { - using (_renderer.LockGraphics(e.Graphics, Width, Height)) + using (_renderer.LockGraphics(e.Graphics)) { // White Background _renderer.SetBrush(Color.White); _renderer.SetSolidPen(Color.White); - _renderer.FillRectangle(0, CellHeight, _drawWidth, _drawHeight); + _renderer.FillRectangle(e.ClipRectangle); // Lag frame calculations SetLagFramesArray(); - var visibleColumns = _columns.VisibleColumns.ToList(); + List visibleColumns; - CalculateHorizontalColumnPositions(visibleColumns); - - if (visibleColumns.Any()) + if (HorizontalOrientation) { - DrawColumnBg(visibleColumns); + CalculateHorizontalColumnPositions(VisibleColumns.ToList()); + visibleColumns = VisibleColumns + .Take(_horizontalColumnTops.Count(c => c < e.ClipRectangle.Height)) + .ToList(); + } + else + { + visibleColumns = _columns.VisibleColumns + .Where(c => c.Right > _hBar.Value) + .Where(c => c.Left - _hBar.Value < e.ClipRectangle.Width) + .ToList(); + } + + var firstVisibleRow = Math.Max(FirstVisibleRow, 0); + var visibleRows = HorizontalOrientation + ? e.ClipRectangle.Width / CellWidth + : e.ClipRectangle.Height / CellHeight; + + var lastVisibleRow = firstVisibleRow + visibleRows; + + var needsColumnRedraw = HorizontalOrientation || e.ClipRectangle.Y < ColumnHeight; + if (visibleColumns.Any() && needsColumnRedraw) + { + DrawColumnBg(visibleColumns, e.ClipRectangle); DrawColumnText(visibleColumns); } // Background - DrawBg(visibleColumns); + DrawBg(visibleColumns, e.ClipRectangle, firstVisibleRow, lastVisibleRow); // Foreground - DrawData(visibleColumns); + DrawData(visibleColumns, firstVisibleRow, lastVisibleRow); DrawColumnDrag(visibleColumns); DrawCellDrag(visibleColumns); } } - private void DrawString(string text, int? width, Point point) + private void DrawString(string text, Rectangle rect) { - if (string.IsNullOrWhiteSpace(text)) + if (!string.IsNullOrWhiteSpace(text)) { - return; + _renderer.DrawString(text, rect); } - - if (width.HasValue) - { - var max = (width.Value - CellWidthPadding) / _charSize.Width; - if (text.Length >= max) - { - text = text.Substring(0, max); - } - } - - _renderer.DrawString(text, point); } protected override void OnPaintBackground(PaintEventArgs e) @@ -68,6 +78,8 @@ namespace BizHawk.Client.EmuHawk private void CalculateHorizontalColumnPositions(List visibleColumns) { + int firstVisibleRow = FirstVisibleRow; + if (!HorizontalOrientation) { _horizontalColumnHeights = null; @@ -79,7 +91,7 @@ namespace BizHawk.Client.EmuHawk _horizontalColumnTops = new int[visibleColumns.Count]; int top = 0; - int startRow = FirstVisibleRow; + int startRow = firstVisibleRow; for (int j = 0; j < visibleColumns.Count; j++) { RollColumn col = visibleColumns[j]; @@ -90,11 +102,10 @@ namespace BizHawk.Client.EmuHawk } else if (col.Rotatable) { - string text; int strOffsetX = 0; int strOffsetY = 0; - QueryItemText(startRow, col, out text, ref strOffsetX, ref strOffsetY); - int textWidth = _renderer.MeasureString(text, Font).Width; + QueryItemText(startRow, col, out var text, ref strOffsetX, ref strOffsetY); + int textWidth = (int)_renderer.MeasureString(text, Font).Width; height = Math.Max(height, textWidth + (CellWidthPadding * 2)); } _horizontalColumnHeights[j] = height; @@ -105,38 +116,45 @@ namespace BizHawk.Client.EmuHawk private void DrawColumnDrag(List visibleColumns) { - if (_columnDown?.Width != null && _columnDownMoved && _currentX.HasValue && _currentY.HasValue && IsHoveringOnColumnCell) + if (!(_columnDown?.Width > 0) + || !_columnDownMoved + || !_currentX.HasValue + || !_currentY.HasValue + || !IsHoveringOnColumnCell) { - int columnWidth = _columnDown.Width.Value; - int columnHeight = CellHeight; - if (HorizontalOrientation) - { - int columnIndex = visibleColumns.IndexOf(_columnDown); - columnWidth = ColumnWidth; - columnHeight = GetHColHeight(columnIndex); - } - int x1 = _currentX.Value - (columnWidth / 2); - int y1 = _currentY.Value - (columnHeight / 2); - int x2 = x1 + columnWidth; - int y2 = y1 + columnHeight; - int textOffsetY = CellHeightPadding; - if (HorizontalOrientation) - { - int textHeight = _renderer.MeasureString(_columnDown.Text, Font).Height; - textOffsetY = (columnHeight - textHeight) / 2; - } - - _renderer.SetSolidPen(_backColor); - _renderer.DrawRectangle(x1, y1, x2, y2); - _renderer.PrepDrawString(Font, _foreColor); - _renderer.DrawString(_columnDown.Text, new Point(x1 + CellWidthPadding, y1 + textOffsetY)); + return; } + + int columnWidth = _columnDown.Width; + int columnHeight = CellHeight; + if (HorizontalOrientation) + { + int columnIndex = visibleColumns.IndexOf(_columnDown); + columnWidth = MaxColumnWidth; + columnHeight = GetHColHeight(columnIndex); + } + + int x1 = _currentX.Value - (columnWidth / 2); + int y1 = _currentY.Value - (columnHeight / 2); + int textOffsetY = CellHeightPadding; + if (HorizontalOrientation) + { + int textHeight = (int)_renderer.MeasureString(_columnDown.Text, Font).Height; + textOffsetY = (columnHeight - textHeight) / 2; + } + + _renderer.SetSolidPen(_backColor); + _renderer.DrawRectangle(new Rectangle(x1, y1, columnWidth, columnHeight)); + _renderer.PrepDrawString(Font, _foreColor); + _renderer.DrawString(_columnDown.Text, new Rectangle(x1 + CellWidthPadding, y1 + textOffsetY, columnWidth, columnHeight)); } private void DrawCellDrag(List visibleColumns) { - if (_draggingCell != null && _draggingCell.RowIndex.HasValue && _draggingCell.Column.Width.HasValue - && _currentX.HasValue && _currentY.HasValue) + if (_draggingCell?.RowIndex != null + && _draggingCell.Column.Width > 0 + && _currentX.HasValue + && _currentY.HasValue) { var text = ""; int offsetX = 0; @@ -152,238 +170,224 @@ namespace BizHawk.Client.EmuHawk int columnIndex = visibleColumns.IndexOf(_draggingCell.Column); columnHeight = GetHColHeight(columnIndex); } - int x1 = _currentX.Value - (_draggingCell.Column.Width.Value / 2); + int x1 = _currentX.Value - (_draggingCell.Column.Width / 2); int y1 = _currentY.Value - (columnHeight / 2); - int x2 = x1 + _draggingCell.Column.Width.Value; + int x2 = x1 + _draggingCell.Column.Width; int y2 = y1 + columnHeight; _renderer.SetBrush(bgColor); - _renderer.FillRectangle(x1, y1, x2 - x1, y2 - y1); + _renderer.FillRectangle(new Rectangle(x1, y1, x2 - x1, y2 - y1)); _renderer.PrepDrawString(Font, _foreColor); - _renderer.DrawString(text, new Point(x1 + CellWidthPadding + offsetX, y1 + CellHeightPadding + offsetY)); + _renderer.DrawString(text, new Rectangle(x1 + CellWidthPadding + offsetX, y1 + CellHeightPadding + offsetY, x2 - x1, y2 - y1)); } } private void DrawColumnText(List visibleColumns) { - if (HorizontalOrientation) + _renderer.PrepDrawString(Font, _foreColor); + + int h = ColumnHeight; + int yOffset = HorizontalOrientation ? -_vBar.Value : 0; + + for (int j = 0; j < visibleColumns.Count; j++) { - int y = -_vBar.Value; + var column = visibleColumns[j]; + var w = column.Width; + int x, y; - _renderer.PrepDrawString(Font, _foreColor); - - for(int j = 0; j < visibleColumns.Count; j++) + if (HorizontalOrientation) { - var column = visibleColumns[j]; var columnHeight = GetHColHeight(j); - var textHeight = _renderer.MeasureString(column.Text, Font).Height; - var point = new Point(CellWidthPadding, y + ((columnHeight - textHeight) / 2)); - - if (IsHoveringOnColumnCell && column == CurrentCell.Column) - { - _renderer.PrepDrawString(Font, SystemColors.HighlightText); - DrawString(column.Text, column.Width, point); - _renderer.PrepDrawString(Font, _foreColor); - } - else - { - DrawString(column.Text, column.Width, point); - } - - y += columnHeight; + var textHeight = (int)_renderer.MeasureString(column.Text, Font).Height; + x = CellWidthPadding; + y = yOffset + ((columnHeight - textHeight) / 2); + yOffset += columnHeight; } - } - else - { - _renderer.PrepDrawString(Font, _foreColor); - - foreach (var column in visibleColumns) + else { - var point = new Point(column.Left.Value + 2 * CellWidthPadding - _hBar.Value, CellHeightPadding); // TODO: fix this CellPadding issue (2 * CellPadding vs just CellPadding) + x = column.Left + 2 * CellWidthPadding - _hBar.Value; + // TODO: fix this CellPadding issue (2 * CellPadding vs just CellPadding) + y = CellHeightPadding; + } - if (IsHoveringOnColumnCell && column == CurrentCell.Column) - { - _renderer.PrepDrawString(Font, SystemColors.HighlightText); - DrawString(column.Text, column.Width, point); - _renderer.PrepDrawString(Font, _foreColor); - } - else - { - DrawString(column.Text, column.Width, point); - } + if (IsHoveringOnColumnCell && column == CurrentCell.Column) + { + _renderer.PrepDrawString(Font, SystemColors.HighlightText); + DrawString(column.Text, new Rectangle(x, y, column.Width, h)); + _renderer.PrepDrawString(Font, _foreColor); + } + else + { + DrawString(column.Text, new Rectangle(x, y, w, h)); } } } - private void DrawData(List visibleColumns) + private void DrawData(List visibleColumns, int firstVisibleRow, int lastVisibleRow) { - // Prevent exceptions with small TAStudio windows - if (visibleColumns.Count == 0) + if (QueryItemText == null) { return; } - if (QueryItemText != null) + if (!visibleColumns.Any()) { - if (HorizontalOrientation) + return; + } + + int startRow = firstVisibleRow; + int range = Math.Min(lastVisibleRow, RowCount - 1) - startRow + 1; + _renderer.PrepDrawString(Font, _foreColor); + + if (HorizontalOrientation) + { + for (int j = 0; j < visibleColumns.Count; j++) { - int startRow = FirstVisibleRow; - int range = Math.Min(LastVisibleRow, RowCount - 1) - startRow + 1; + RollColumn col = visibleColumns[j]; + int colHeight = GetHColHeight(j); - _renderer.PrepDrawString(Font, _foreColor); - int lastVisible = LastVisibleColumnIndex; - for (int j = FirstVisibleColumn; j <= lastVisible; j++) - { - RollColumn col = visibleColumns[j]; - int colHeight = GetHColHeight(j); - - for (int i = 0, f = 0; f < range; i++, f++) - { - f += _lagFrames[i]; - - int baseX = RowsToPixels(i) + (col.Rotatable ? CellWidth : 0); - int baseY = GetHColTop(j) - _vBar.Value; - - if (!col.Rotatable) - { - Bitmap image = null; - int bitmapOffsetX = 0; - int bitmapOffsetY = 0; - - QueryItemIcon?.Invoke(f + startRow, col, ref image, ref bitmapOffsetX, ref bitmapOffsetY); - - if (image != null) - { - int x = baseX + CellWidthPadding + bitmapOffsetX; - int y = baseY + CellHeightPadding + bitmapOffsetY; - _renderer.DrawBitmap(image, new Point(x, y)); - } - } - - int strOffsetX = 0; - int strOffsetY = 0; - QueryItemText(f + startRow, col, out var text, ref strOffsetX, ref strOffsetY); - - int textWidth = _renderer.MeasureString(text, Font).Width; - if (col.Rotatable) - { - // Center Text - int textX = Math.Max(((colHeight - textWidth) / 2), CellWidthPadding) + strOffsetX; - int textY = CellWidthPadding + strOffsetY; - var point = new Point(baseX - textY, baseY + textX); - - _renderer.PrepDrawString(Font, _foreColor, rotate: true); - DrawString(text, null, point); - _renderer.PrepDrawString(Font, _foreColor, rotate: false); - } - else - { - // Center Text - int textX = Math.Max(((CellWidth - textWidth) / 2), CellWidthPadding) + strOffsetX; - int textY = CellHeightPadding + strOffsetY; - var point = new Point(baseX + textX, baseY + textY); - - DrawString(text, ColumnWidth, point); - } - } - } - } - else - { - int startRow = FirstVisibleRow; - int range = Math.Min(LastVisibleRow, RowCount - 1) - startRow + 1; - - _renderer.PrepDrawString(Font, _foreColor); - int xPadding = CellWidthPadding + 1 - _hBar.Value; - for (int i = 0, f = 0; f < range; i++, f++) // Vertical + for (int i = 0, f = 0; f < range; i++, f++) { f += _lagFrames[i]; - int lastVisible = LastVisibleColumnIndex; - for (int j = FirstVisibleColumn; j <= lastVisible; j++) // Horizontal + + int baseX = RowsToPixels(i) + (col.Rotatable ? CellWidth : 0); + int baseY = GetHColTop(j) - _vBar.Value; + + if (!col.Rotatable) { - RollColumn col = visibleColumns[j]; - - int strOffsetX = 0; - int strOffsetY = 0; - Point point = new Point(col.Left.Value + xPadding, RowsToPixels(i) + CellHeightPadding); - Bitmap image = null; int bitmapOffsetX = 0; int bitmapOffsetY = 0; - QueryItemIcon?.Invoke(f + startRow, visibleColumns[j], ref image, ref bitmapOffsetX, ref bitmapOffsetY); + QueryItemIcon?.Invoke(f + startRow, col, ref image, ref bitmapOffsetX, ref bitmapOffsetY); if (image != null) { - _renderer.DrawBitmap(image, new Point(point.X + bitmapOffsetX, point.Y + bitmapOffsetY + CellHeightPadding)); + int x = baseX + CellWidthPadding + bitmapOffsetX; + int y = baseY + CellHeightPadding + bitmapOffsetY; + _renderer.DrawBitmap(image, new Point(x, y)); } + } - QueryItemText(f + startRow, visibleColumns[j], out var text, ref strOffsetX, ref strOffsetY); + int strOffsetX = 0; + int strOffsetY = 0; + QueryItemText(f + startRow, col, out var text, ref strOffsetX, ref strOffsetY); - bool rePrep = false; - if (_selectedItems.Contains(new Cell { Column = visibleColumns[j], RowIndex = f + startRow })) - { - _renderer.PrepDrawString(Font, SystemColors.HighlightText); - rePrep = true; - } + int textWidth = (int)_renderer.MeasureString(text, Font).Width; + if (col.Rotatable) + { + // Center Text + int textX = Math.Max(((colHeight - textWidth) / 2), CellWidthPadding) + strOffsetX; + int textY = CellWidthPadding + strOffsetY; - DrawString(text, col.Width, new Point(point.X + strOffsetX, point.Y + strOffsetY)); + _renderer.PrepDrawString(Font, _foreColor, rotate: true); + DrawString(text, new Rectangle(baseX - textY, baseY + textX, 999, CellHeight)); + _renderer.PrepDrawString(Font, _foreColor, rotate: false); + } + else + { + // Center Text + int textX = Math.Max(((CellWidth - textWidth) / 2), CellWidthPadding) + strOffsetX; + int textY = CellHeightPadding + strOffsetY; - if (rePrep) - { - _renderer.PrepDrawString(Font, _foreColor); - } + DrawString(text, new Rectangle(baseX + textX, baseY + textY, MaxColumnWidth, CellHeight)); + } + } + } + } + else + { + int xPadding = CellWidthPadding + 1 - _hBar.Value; + for (int i = 0, f = 0; f < range; i++, f++) // Vertical + { + f += _lagFrames[i]; + foreach (var column in visibleColumns) + { + RollColumn col = column; + + int strOffsetX = 0; + int strOffsetY = 0; + Point point = new Point(col.Left + xPadding, RowsToPixels(i) + CellHeightPadding); + + Bitmap image = null; + int bitmapOffsetX = 0; + int bitmapOffsetY = 0; + + QueryItemIcon?.Invoke(f + startRow, column, ref image, ref bitmapOffsetX, ref bitmapOffsetY); + + if (image != null) + { + _renderer.DrawBitmap(image, new Point(point.X + bitmapOffsetX, point.Y + bitmapOffsetY + CellHeightPadding)); + } + + QueryItemText(f + startRow, column, out var text, ref strOffsetX, ref strOffsetY); + + bool rePrep = false; + if (_selectedItems.Contains(new Cell { Column = column, RowIndex = f + startRow })) + { + _renderer.PrepDrawString(Font, SystemColors.HighlightText); + rePrep = true; + } + + DrawString(text, new Rectangle(point.X + strOffsetX, point.Y + strOffsetY, col.Width, ColumnHeight)); + + if (rePrep) + { + _renderer.PrepDrawString(Font, _foreColor); } } } } } - private void DrawColumnBg(List visibleColumns) + private void DrawColumnBg(List visibleColumns, Rectangle rect) { _renderer.SetBrush(SystemColors.ControlLight); _renderer.SetSolidPen(Color.Black); if (HorizontalOrientation) { - _renderer.FillRectangle(0, 0, ColumnWidth + 1, _drawHeight + 1); + _renderer.FillRectangle(new Rectangle(0, 0, MaxColumnWidth + 1, rect.Height)); int y = -_vBar.Value; for (int j = 0; j < visibleColumns.Count; j++) { - _renderer.Line(1, y, ColumnWidth, y); + _renderer.Line(1, y, MaxColumnWidth, y); y += GetHColHeight(j); } if (visibleColumns.Any()) { - _renderer.Line(1, y, ColumnWidth, y); + _renderer.Line(1, y, MaxColumnWidth, y); } - _renderer.Line(0, 0, 0, y + 1); - _renderer.Line(ColumnWidth, 0, ColumnWidth, y + 1); + _renderer.Line(0, 0, 0, y); + _renderer.Line(MaxColumnWidth, 0, MaxColumnWidth, y); } else { int bottomEdge = RowsToPixels(0); // Gray column box and black line underneath - _renderer.FillRectangle(0, 0, _drawWidth + 1, bottomEdge + 1); - _renderer.Line(0, 0, TotalColWidth.Value + 1, 0); - _renderer.Line(0, bottomEdge, TotalColWidth.Value + 1, bottomEdge); + _renderer.FillRectangle(new Rectangle(0, 0, rect.Width, bottomEdge + 1)); + _renderer.Line(0, 0, rect.Width, 0); + _renderer.Line(0, bottomEdge, rect.Width, bottomEdge); // Vertical black separators foreach (var column in visibleColumns) { - int pos = column.Left.Value - _hBar.Value; + int pos = column.Left - _hBar.Value; _renderer.Line(pos, 0, pos, bottomEdge); } // Draw right most line if (visibleColumns.Any()) { - int right = TotalColWidth.Value - _hBar.Value; - _renderer.Line(right, 0, right, bottomEdge); + int right = TotalColWidth - _hBar.Value; + if (right <= rect.Left + rect.Width) + { + _renderer.Line(right, 0, right, bottomEdge); + } } } @@ -394,11 +398,11 @@ namespace BizHawk.Client.EmuHawk if (HorizontalOrientation) { int columnIndex = visibleColumns.IndexOf(column); - _renderer.FillRectangle(1, GetHColTop(columnIndex) + 1, ColumnWidth - 1, GetHColHeight(columnIndex) - 1); + _renderer.FillRectangle(new Rectangle(1, GetHColTop(columnIndex) + 1, MaxColumnWidth - 1, GetHColHeight(columnIndex) - 1)); } else { - _renderer.FillRectangle(column.Left.Value + 1 - _hBar.Value, 1, column.Width.Value - 1, ColumnHeight - 1); + _renderer.FillRectangle(new Rectangle(column.Left + 1 - _hBar.Value, 1, column.Width - 1, ColumnHeight - 1)); } } @@ -421,7 +425,7 @@ namespace BizHawk.Client.EmuHawk ? SystemColors.Highlight.Add(0x00222222) : SystemColors.Highlight); - _renderer.FillRectangle(1, top + 1, ColumnWidth - 1, height - 1); + _renderer.FillRectangle(new Rectangle(1, top + 1, MaxColumnWidth - 1, height - 1)); } } else @@ -432,19 +436,19 @@ namespace BizHawk.Client.EmuHawk if (column == CurrentCell.Column) { // Left of column is to the right of the viewable area or right of column is to the left of the viewable area - if (column.Left.Value - _hBar.Value > Width || column.Right.Value - _hBar.Value < 0) + if (column.Left - _hBar.Value > Width || column.Right - _hBar.Value < 0) { continue; } - int left = column.Left.Value - _hBar.Value; - int width = column.Right.Value - _hBar.Value - left; + int left = column.Left - _hBar.Value; + int width = column.Right - _hBar.Value - left; _renderer.SetBrush(CurrentCell.Column.Emphasis ? SystemColors.Highlight.Add(0x00550000) : SystemColors.Highlight); - _renderer.FillRectangle(left + 1, 1, width - 1, ColumnHeight - 1); + _renderer.FillRectangle(new Rectangle(left + 1, 1, width - 1, ColumnHeight - 1)); } } } @@ -452,14 +456,12 @@ namespace BizHawk.Client.EmuHawk } // TODO refactor this and DoBackGroundCallback functions. - /// - /// Draw Gridlines and background colors using QueryItemBkColor. - /// - private void DrawBg(List visibleColumns) + // Draw Gridlines and background colors using QueryItemBkColor. + private void DrawBg(List visibleColumns, Rectangle rect, int firstVisibleRow, int lastVisibleRow) { if (QueryItemBkColor != null) { - DoBackGroundCallback(visibleColumns); + DoBackGroundCallback(visibleColumns, rect, firstVisibleRow, lastVisibleRow); } if (GridLines) @@ -468,17 +470,20 @@ namespace BizHawk.Client.EmuHawk if (HorizontalOrientation) { // Columns - for (int i = 1; i < VisibleRows + 1; i++) + for (int i = 1; i < lastVisibleRow - firstVisibleRow + 1; i++) { int x = RowsToPixels(i); - _renderer.Line(x, 1, x, _drawHeight); + _renderer.Line(x, 1, x, rect.Height); } // Rows for (int i = 0; i < visibleColumns.Count + 1; i++) { + // TODO: MaxColumnWidth shouldn't be necessary + // This also makes too many assumptions, the parameters need to drive what is being drawn int y = GetHColTop(i) - _vBar.Value; - _renderer.Line(RowsToPixels(0) + 1, y, _drawWidth, y); + int x = RowsToPixels(0) + 1; + _renderer.Line(x, y, rect.Width + MaxColumnWidth, y); } } else @@ -487,45 +492,46 @@ namespace BizHawk.Client.EmuHawk int y = ColumnHeight + 1; foreach (var column in visibleColumns) { - int x = (column.Left ?? 0) - _hBar.Value; - _renderer.Line(x, y, x, Height - 1); + int x = column.Left - _hBar.Value; + _renderer.Line(x, y, x, rect.Height - 1); } if (visibleColumns.Any()) { - int x = (TotalColWidth ?? 0) - _hBar.Value; - _renderer.Line(x, y, x, Height - 1); + int x = TotalColWidth - _hBar.Value; + _renderer.Line(x, y, x, rect.Height - 1); } // Rows for (int i = 1; i < VisibleRows + 1; i++) { - _renderer.Line(0, RowsToPixels(i), Width + 1, RowsToPixels(i)); + _renderer.Line(0, RowsToPixels(i), rect.Width + 1, RowsToPixels(i)); } } } if (_selectedItems.Any()) { - DoSelectionBG(visibleColumns); + DoSelectionBG(visibleColumns, rect); } } - private void DoSelectionBG(List visibleColumns) + private void DoSelectionBG(List visibleColumns, Rectangle rect) { Color rowColor = Color.White; + int firstVisibleRow = FirstVisibleRow; int lastVisibleRow = LastVisibleRow; int lastRow = -1; foreach (Cell cell in _selectedItems) { - if (cell.RowIndex > lastVisibleRow || cell.RowIndex < FirstVisibleRow || !VisibleColumns.Contains(cell.Column)) + if (!cell.RowIndex.HasValue || cell.RowIndex > lastVisibleRow || cell.RowIndex < firstVisibleRow || !VisibleColumns.Contains(cell.Column)) { continue; } Cell relativeCell = new Cell { - RowIndex = cell.RowIndex - FirstVisibleRow, + RowIndex = cell.RowIndex - firstVisibleRow, Column = cell.Column, }; relativeCell.RowIndex -= CountLagFramesAbsolute(relativeCell.RowIndex.Value); @@ -553,28 +559,26 @@ namespace BizHawk.Client.EmuHawk cellColor = Color.FromArgb(cellColor.R - (int)((cellColor.R - SystemColors.Highlight.R) * alpha), cellColor.G - (int)((cellColor.G - SystemColors.Highlight.G) * alpha), cellColor.B - (int)((cellColor.B - SystemColors.Highlight.B) * alpha)); - DrawCellBG(cellColor, relativeCell, visibleColumns); + DrawCellBG(cellColor, relativeCell, visibleColumns, rect); } } - /// - /// Given a cell with RowIndex in between 0 and VisibleRows, it draws the background color specified. Do not call with absolute row indices. - /// - private void DrawCellBG(Color color, Cell cell, List visibleColumns) + // Given a cell with RowIndex in between 0 and VisibleRows, it draws the background color specified. Do not call with absolute row indices. + private void DrawCellBG(Color color, Cell cell, List visibleColumns, Rectangle rect) { int x, y, w, h; if (HorizontalOrientation) { x = RowsToPixels(cell.RowIndex.Value) + 1; - if (x < ColumnWidth) + if (x < MaxColumnWidth) { return; } int columnIndex = visibleColumns.IndexOf(cell.Column); w = CellWidth - 1; - y = GetHColTop(columnIndex) - _vBar.Value + 1; // We can't draw without row and column, so assume they exist and fail catastrophically if they don't + y = GetHColTop(columnIndex) - _vBar.Value + 1; h = GetHColHeight(columnIndex) - 1; } else @@ -585,108 +589,57 @@ namespace BizHawk.Client.EmuHawk return; } - x = cell.Column.Left.Value - _hBar.Value + 1; - w = cell.Column.Width.Value - 1; + x = cell.Column.Left - _hBar.Value + 1; + w = cell.Column.Width - 1; h = CellHeight - 1; } - // Don't draw if off screen. - if (x > _drawWidth || y > _drawHeight) - { - return; - } - _renderer.SetBrush(color); - _renderer.FillRectangle(x, y, w, h); + _renderer.FillRectangle(new Rectangle(x, y, w, h)); } - /// - /// Calls QueryItemBkColor callback for all visible cells and fills in the background of those cells. - /// - private void DoBackGroundCallback(List visibleColumns) + // Calls QueryItemBkColor callback for all visible cells and fills in the background of those cells. + private void DoBackGroundCallback(List visibleColumns, Rectangle rect, int firstVisibleRow, int lastVisibleRow) { - int startIndex = FirstVisibleRow; - int range = Math.Min(LastVisibleRow, RowCount - 1) - startIndex + 1; - int lastVisibleColumn = LastVisibleColumnIndex; - int firstVisibleColumn = FirstVisibleColumn; - - // Prevent exceptions with small TAStudio windows - if (firstVisibleColumn < 0) + if (!visibleColumns.Any()) { return; } - if (HorizontalOrientation) + int startIndex = firstVisibleRow; + int range = Math.Min(lastVisibleRow, RowCount - 1) - startIndex + 1; + + for (int i = 0, f = 0; f < range; i++, f++) { - for (int i = 0, f = 0; f < range; i++, f++) + f += _lagFrames[i]; + Color rowColor = Color.White; + QueryRowBkColor?.Invoke(f + startIndex, ref rowColor); + + foreach (var column in visibleColumns) { - f += _lagFrames[i]; - - Color rowColor = Color.White; - QueryRowBkColor?.Invoke(f + startIndex, ref rowColor); + Color itemColor = Color.White; + QueryItemBkColor?.Invoke(f + startIndex, column, ref itemColor); - for (int j = firstVisibleColumn; j <= lastVisibleColumn; j++) + if (itemColor == Color.White) { - Color itemColor = Color.White; - QueryItemBkColor?.Invoke(f + startIndex, visibleColumns[j], ref itemColor); - if (itemColor == Color.White) - { - itemColor = rowColor; - } - else if (itemColor.A != 255 && itemColor.A != 0) - { - float alpha = (float)itemColor.A / 255; - itemColor = Color.FromArgb(rowColor.R - (int)((rowColor.R - itemColor.R) * alpha), - rowColor.G - (int)((rowColor.G - itemColor.G) * alpha), - rowColor.B - (int)((rowColor.B - itemColor.B) * alpha)); - } - - if (itemColor != Color.White) // An easy optimization, don't draw unless the user specified something other than the default - { - var cell = new Cell - { - Column = visibleColumns[j], - RowIndex = i - }; - DrawCellBG(itemColor, cell, visibleColumns); - } + itemColor = rowColor; } - } - } - else - { - for (int i = 0, f = 0; f < range; i++, f++) // Vertical - { - f += _lagFrames[i]; - - Color rowColor = Color.White; - QueryRowBkColor?.Invoke(f + startIndex, ref rowColor); - - for (int j = FirstVisibleColumn; j <= lastVisibleColumn; j++) // Horizontal + else if (itemColor.A != 255 && itemColor.A != 0) { - Color itemColor = Color.White; - QueryItemBkColor?.Invoke(f + startIndex, visibleColumns[j], ref itemColor); - if (itemColor == Color.White) - { - itemColor = rowColor; - } - else if (itemColor.A != 255 && itemColor.A != 0) - { - float alpha = (float)itemColor.A / 255; - itemColor = Color.FromArgb(rowColor.R - (int)((rowColor.R - itemColor.R) * alpha), - rowColor.G - (int)((rowColor.G - itemColor.G) * alpha), - rowColor.B - (int)((rowColor.B - itemColor.B) * alpha)); - } + float alpha = (float)itemColor.A / 255; + itemColor = Color.FromArgb(rowColor.R - (int)((rowColor.R - itemColor.R) * alpha), + rowColor.G - (int)((rowColor.G - itemColor.G) * alpha), + rowColor.B - (int)((rowColor.B - itemColor.B) * alpha)); + } - if (itemColor != Color.White) // An easy optimization, don't draw unless the user specified something other than the default + if (itemColor != Color.White) // An easy optimization, don't draw unless the user specified something other than the default + { + var cell = new Cell { - var cell = new Cell - { - Column = visibleColumns[j], - RowIndex = i - }; - DrawCellBG(itemColor, cell, visibleColumns); - } + Column = column, + RowIndex = i + }; + DrawCellBG(itemColor, cell, visibleColumns, rect); } } } diff --git a/BizHawk.Client.EmuHawk/CustomControls/InputRoll/InputRoll.cs b/BizHawk.Client.EmuHawk/CustomControls/InputRoll/InputRoll.cs index 0a85ed865e..42bcdca05f 100644 --- a/BizHawk.Client.EmuHawk/CustomControls/InputRoll/InputRoll.cs +++ b/BizHawk.Client.EmuHawk/CustomControls/InputRoll/InputRoll.cs @@ -31,10 +31,9 @@ namespace BizHawk.Client.EmuHawk private RollColumns _columns = new RollColumns(); private bool _horizontalOrientation; private bool _programmaticallyUpdatingScrollBarValues; - private int _maxCharactersInHorizontal = 1; private int _rowCount; - private Size _charSize; + private SizeF _charSize; // Updated on paint private int[] _horizontalColumnHeights; @@ -127,6 +126,25 @@ namespace BizHawk.Client.EmuHawk base.Dispose(disposing); } + public void ExpandColumnToFitText(string columnName, string text) + { + var column = AllColumns.SingleOrDefault(c => c.Name == columnName); + if (column != null) + { + using var g = CreateGraphics(); + using (_renderer.LockGraphics(g)) + { + var strLength = (int)_renderer.MeasureString(text, Font).Width + (CellWidthPadding * 2); + if (column.Width < strLength) + { + column.Width = strLength; + AllColumns.ColumnsChanged(); + Refresh(); + } + } + } + } + protected override void OnDoubleClick(EventArgs e) { if (IsHoveringOnColumnEdge) @@ -151,7 +169,7 @@ namespace BizHawk.Client.EmuHawk } var newWidth = (maxLength * _charSize.Width) + (CellWidthPadding * 2); - CurrentCell.Column.Width = newWidth; + CurrentCell.Column.Width = (int)newWidth; _columns.ColumnsChanged(); Refresh(); } @@ -243,17 +261,58 @@ namespace BizHawk.Client.EmuHawk get => _rowCount; set { + bool fullRefresh = false; if (_rowCount != value) { - RecalculateScrollBars(); + if (value < _rowCount && IsVisible(value)) + { + fullRefresh = true; + } + _rowCount = value; _selectedItems.RemoveWhere(i => i.RowIndex >= _rowCount); + RecalculateScrollBars(); } // Similarly to ListView in virtual mode, we want to always refresh // when setting row count, that gives the calling code assurance that // redraw will happen - Refresh(); + if (fullRefresh) + { + Refresh(); + } + else + { + FastDraw(); + } + } + } + + private void FastDraw() + { + if (HorizontalOrientation) + { + int x = MaxColumnWidth; + int y = 0; + int w = Width - x; + int h = VisibleColumns.Any() + ? GetHColBottom(VisibleColumns.Count() - 1) + : 0; + h = Math.Min(h, _drawHeight); + + Invalidate(new Rectangle(x, y, w, h)); + } + else + { + int x = 0; + int y = ColumnHeight + 1; + + int w = VisibleColumns.Any() + ? Math.Min(VisibleColumns.Max(c => c.Right) - _hBar.Value, Width) + : 0; + + int h = Math.Min(RowCount * CellHeight, Height - y); + Invalidate(new Rectangle(x, y, w, h)); } } @@ -330,6 +389,13 @@ namespace BizHawk.Client.EmuHawk set => _hoverTimer.Interval = value; } + /// + /// Gets or sets a value indicating whether or not the control can be toggled into HorizontalOrientation mode + /// + [DefaultValue(false)] + [Category("Behavior")] + public bool Rotatable { get; set; } + #endregion #region Event Handlers @@ -566,21 +632,6 @@ namespace BizHawk.Client.EmuHawk [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public bool IsPaintDown { get; private set; } - /// - /// Gets or sets the width of data cells when in Horizontal orientation. - /// - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public int MaxCharactersInHorizontal - { - get => _maxCharactersInHorizontal; - set - { - _maxCharactersInHorizontal = value; - UpdateCellSize(); - } - } - [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public bool RightButtonHeld { get; private set; } @@ -685,9 +736,16 @@ namespace BizHawk.Client.EmuHawk get { int halfRow = 0; - if ((_drawHeight - ColumnHeight - 3) % CellHeight < CellHeight / 2) + if (HorizontalOrientation) { - halfRow = 1; + halfRow = 1; // TODO: A more precise calculation, but it really isn't important, you have to be pixel perfect for this to be off by 1 and even then it doesn't look bad because the 1 pixel is the border + } + else + { + if ((_drawHeight - ColumnHeight - 3) % CellHeight < CellHeight / 2) + { + halfRow = 1; + } } return FirstVisibleRow + VisibleRows - halfRow + CountLagFramesDisplay(VisibleRows - halfRow); @@ -700,9 +758,16 @@ namespace BizHawk.Client.EmuHawk set { int halfRow = 0; - if ((_drawHeight - ColumnHeight - 3) % CellHeight < CellHeight / 2) + if (HorizontalOrientation) { - halfRow = 1; + halfRow = 1; // TODO: A more precise calculation, but it really isn't important, you have to be pixel perfect for this to be off by 1 and even then it doesn't look bad because the 1 pixel is the border + } + else + { + if ((_drawHeight - ColumnHeight - 3) % CellHeight < CellHeight / 2) + { + halfRow = 1; + } } if (LagFramesToHide == 0) @@ -761,44 +826,13 @@ namespace BizHawk.Client.EmuHawk { if (HorizontalOrientation) { - return (_drawWidth - ColumnWidth) / CellWidth; + return (_drawWidth - MaxColumnWidth) / CellWidth; } return (_drawHeight - ColumnHeight - 3) / CellHeight; // Minus three makes it work } } - private int FirstVisibleColumn - { - get - { - var columnList = VisibleColumns.ToList(); - - if (HorizontalOrientation) - { - return Enumerable.Range(0, columnList.Count).First(i => GetHColBottom(i) > _vBar.Value); - } - - return columnList.FindIndex(c => c.Right > _hBar.Value); - } - } - - private int LastVisibleColumnIndex - { - get - { - var columnList = VisibleColumns.ToList(); - - if (HorizontalOrientation) - { - int count = columnList.Count; - return Enumerable.Range(0, count).Select(i => count - 1 - i).First(i => GetHColTop(i) <= _drawWidth + _hBar.Value); - } - - return columnList.FindLastIndex(c => c.Left <= _drawWidth + _hBar.Value); - } - } - private Cell _draggingCell; public void DragCurrentCell() @@ -909,21 +943,21 @@ namespace BizHawk.Client.EmuHawk public IEnumerable GenerateContextMenuItems() { - yield return new ToolStripSeparator(); - - var rotate = new ToolStripMenuItem + if (Rotatable) { - Name = "RotateMenuItem", - Text = "Rotate", - ShortcutKeyDisplayString = RotateHotkeyStr, - }; + yield return new ToolStripSeparator(); - rotate.Click += (o, ev) => - { - HorizontalOrientation ^= true; - }; + var rotate = new ToolStripMenuItem + { + Name = "RotateMenuItem", + Text = "Rotate", + ShortcutKeyDisplayString = RotateHotkeyStr, + }; - yield return rotate; + rotate.Click += (o, ev) => { HorizontalOrientation ^= true; }; + + yield return rotate; + } } public string RotateHotkeyStr => "Ctrl+Shift+F"; @@ -974,7 +1008,12 @@ namespace BizHawk.Client.EmuHawk { if (_currentX != _previousX) { - _columnResizing.Width += _currentX - _previousX; + _columnResizing.Width += _currentX.Value - _previousX; + if (_columnResizing.Width <= 0) + { + _columnResizing.Width = 1; + } + _columns.ColumnsChanged(); Refresh(); } @@ -1309,7 +1348,10 @@ namespace BizHawk.Client.EmuHawk { if (e.Control && !e.Alt && e.Shift && e.KeyCode == Keys.F) // Ctrl+Shift+F { - HorizontalOrientation ^= true; + if (Rotatable) + { + HorizontalOrientation ^= true; + } } // Scroll else if (!e.Control && !e.Alt && !e.Shift && e.KeyCode == Keys.PageUp) // Page Up @@ -1505,17 +1547,13 @@ namespace BizHawk.Client.EmuHawk { RecalculateScrollBars(); base.OnResize(e); - Refresh(); + FastDraw(); } private void OrientationChanged() { - RecalculateScrollBars(); - // TODO scroll to correct positions ColumnChangedCallback(); - RecalculateScrollBars(); - Refresh(); } @@ -1582,7 +1620,7 @@ namespace BizHawk.Client.EmuHawk RecalculateScrollBars(); if (_columns.VisibleColumns.Any()) { - ColumnWidth = _columns.VisibleColumns.Max(c => c.Width.Value) + CellWidthPadding * 4; + MaxColumnWidth = _columns.VisibleColumns.Max(c => c.Width) + CellWidthPadding * 4; } } @@ -1621,7 +1659,7 @@ namespace BizHawk.Client.EmuHawk else { NeedsVScrollbar = ColumnHeight + (RowCount * CellHeight) > Height; - NeedsHScrollbar = TotalColWidth.HasValue && TotalColWidth.Value - _drawWidth + 1 > 0; + NeedsHScrollbar = TotalColWidth - _drawWidth + 1 > 0; } UpdateDrawSize(); @@ -1682,7 +1720,7 @@ namespace BizHawk.Client.EmuHawk } else { - _hBar.Maximum = TotalColWidth.Value - _drawWidth + _hBar.LargeChange; + _hBar.Maximum = TotalColWidth - _drawWidth + _hBar.LargeChange; } _hBar.Location = new Point(0, Height - _hBar.Height); @@ -1833,13 +1871,10 @@ namespace BizHawk.Client.EmuHawk // A boolean that indicates if the InputRoll is too large horizontally and requires a horizontal scrollbar. private bool NeedsHScrollbar { get; set; } - /// - /// Gets the total width of all the columns by using the last column's Right property. - /// - /// A nullable Int representing total width. - private int? TotalColWidth => _columns.VisibleColumns.Any() + // Gets the total width of all the columns by using the last column's Right property. + private int TotalColWidth => _columns.VisibleColumns.Any() ? _columns.VisibleColumns.Last().Right - : null; + : 0; /// /// Returns the RollColumn object at the specified visible pixel coordinate. @@ -1862,7 +1897,7 @@ namespace BizHawk.Client.EmuHawk { foreach (RollColumn column in _columns.VisibleColumns) { - if (column.Left.Value - _hBar.Value <= pixel && column.Right.Value - _hBar.Value >= pixel) + if (column.Left - _hBar.Value <= pixel && column.Right - _hBar.Value >= pixel) { return column; } @@ -1880,7 +1915,7 @@ namespace BizHawk.Client.EmuHawk { if (_horizontalOrientation) { - return (index * CellWidth) + ColumnWidth; + return (index * CellWidth) + MaxColumnWidth; } return (index * CellHeight) + ColumnHeight; @@ -1896,7 +1931,7 @@ namespace BizHawk.Client.EmuHawk // Using Math.Floor and float because integer division rounds towards 0 but we want to round down. if (_horizontalOrientation) { - return (int)Math.Floor((float)(pixels - ColumnWidth) / CellWidth); + return (int)Math.Floor((float)(pixels - MaxColumnWidth) / CellWidth); } return (int)Math.Floor((float)(pixels - ColumnHeight) / CellHeight); @@ -1905,17 +1940,26 @@ namespace BizHawk.Client.EmuHawk private int GetHColHeight(int index) => _horizontalColumnHeights != null && index < _horizontalColumnHeights.Length ? _horizontalColumnHeights[index] : CellHeight; - private int GetHColTop(int index) => - _horizontalColumnTops != null && index < _horizontalColumnTops.Length ? _horizontalColumnTops[index] : (index * CellHeight); + private int GetHColTop(int index) + { + if (_horizontalColumnTops == null) + { + return 0; + } + + return index >= 0 && index < _horizontalColumnTops.Length + ? _horizontalColumnTops[index] + : _horizontalColumnTops.Last() + CellHeight; + } private int GetHColBottom(int index) => GetHColTop(index) + GetHColHeight(index); // The width of the largest column cell in Horizontal Orientation - private int ColumnWidth { get; set; } + private int MaxColumnWidth { get; set; } // The height of a column cell in Vertical Orientation. - private int ColumnHeight { get; set; } + private int ColumnHeight => CellHeight + 2; // The width of a cell in Horizontal Orientation. Only can be changed by changing the Font or CellPadding. private int CellWidth { get; set; } @@ -1931,18 +1975,22 @@ namespace BizHawk.Client.EmuHawk private void UpdateCellSize() { using (var g = CreateGraphics()) - using (_renderer.LockGraphics(g, Width, Height)) + using (_renderer.LockGraphics(g)) { // Measure width change to ignore extra padding at start/end var size1 = _renderer.MeasureString("A", Font); var size2 = _renderer.MeasureString("AA", Font); - _charSize = new Size(size2.Width - size1.Width, size1.Height); // TODO make this a property so changing it updates other values. + _charSize = new SizeF(size2.Width - size1.Width, size1.Height); // TODO make this a property so changing it updates other values. } - CellHeight = _charSize.Height + (CellHeightPadding * 2); - CellWidth = (_charSize.Width * MaxCharactersInHorizontal) + (CellWidthPadding * 4); // Double the padding for horizontal because it looks better - ColumnWidth = CellWidth; - ColumnHeight = CellHeight + 2; + // TODO: Should we round instead of truncate? + CellHeight = (int)_charSize.Height + (CellHeightPadding * 2); + CellWidth = (int)_charSize.Width + (CellWidthPadding * 4); // Double the padding for horizontal because it looks better + + if (_columns.VisibleColumns.Any()) + { + MaxColumnWidth = _columns.VisibleColumns.Max(c => c.Width) + CellWidthPadding * 4; + } } protected override void OnFontChanged(EventArgs e) @@ -1986,6 +2034,8 @@ namespace BizHawk.Client.EmuHawk private void SetLagFramesArray() { + int firstVisibleRow = FirstVisibleRow; + int visibleRows = VisibleRows; if (QueryFrameLag != null && LagFramesToHide != 0) { bool showNext = false; @@ -1993,19 +2043,19 @@ namespace BizHawk.Client.EmuHawk // First one needs to check BACKWARDS for lag frame count. SetLagFramesFirst(); int f = _lagFrames[0]; - if (QueryFrameLag(FirstVisibleRow + f, HideWasLagFrames)) + if (QueryFrameLag(firstVisibleRow + f, HideWasLagFrames)) { showNext = true; } - for (int i = 1; i <= VisibleRows; i++) + for (int i = 1; i <= visibleRows; i++) { _lagFrames[i] = 0; if (!showNext) { for (; _lagFrames[i] < LagFramesToHide; _lagFrames[i]++) { - if (!QueryFrameLag(FirstVisibleRow + i + f, HideWasLagFrames)) + if (!QueryFrameLag(firstVisibleRow + i + f, HideWasLagFrames)) { break; } @@ -2015,13 +2065,13 @@ namespace BizHawk.Client.EmuHawk } else { - if (!QueryFrameLag(FirstVisibleRow + i + f, HideWasLagFrames)) + if (!QueryFrameLag(firstVisibleRow + i + f, HideWasLagFrames)) { showNext = false; } } - if (_lagFrames[i] == LagFramesToHide && QueryFrameLag(FirstVisibleRow + i + f, HideWasLagFrames)) + if (_lagFrames[i] == LagFramesToHide && QueryFrameLag(firstVisibleRow + i + f, HideWasLagFrames)) { showNext = true; } @@ -2029,7 +2079,7 @@ namespace BizHawk.Client.EmuHawk } else { - for (int i = 0; i <= VisibleRows; i++) + for (int i = 0; i <= visibleRows; i++) { _lagFrames[i] = 0; } @@ -2037,6 +2087,7 @@ namespace BizHawk.Client.EmuHawk } private void SetLagFramesFirst() { + int firstVisibleRow = FirstVisibleRow; if (QueryFrameLag != null && LagFramesToHide != 0) { // Count how many lag frames are above displayed area. @@ -2045,7 +2096,7 @@ namespace BizHawk.Client.EmuHawk { count++; } - while (QueryFrameLag(FirstVisibleRow - count, HideWasLagFrames) && count <= LagFramesToHide); + while (QueryFrameLag(firstVisibleRow - count, HideWasLagFrames) && count <= LagFramesToHide); count--; // Count forward @@ -2054,7 +2105,7 @@ namespace BizHawk.Client.EmuHawk { fCount++; } - while (QueryFrameLag(FirstVisibleRow + fCount, HideWasLagFrames) && count + fCount < LagFramesToHide); + while (QueryFrameLag(firstVisibleRow + fCount, HideWasLagFrames) && count + fCount < LagFramesToHide); _lagFrames[0] = (byte)fCount; } else diff --git a/BizHawk.Client.EmuHawk/CustomControls/InputRoll/RollColumn.cs b/BizHawk.Client.EmuHawk/CustomControls/InputRoll/RollColumn.cs index dd0710e525..89896d9ee0 100644 --- a/BizHawk.Client.EmuHawk/CustomControls/InputRoll/RollColumn.cs +++ b/BizHawk.Client.EmuHawk/CustomControls/InputRoll/RollColumn.cs @@ -1,13 +1,11 @@ -using System; - -namespace BizHawk.Client.EmuHawk +namespace BizHawk.Client.EmuHawk { public class RollColumn { public string Group { get; set; } - public int? Width { get; set; } - public int? Left { get; set; } - public int? Right { get; set; } + public int Width { get; set; } + public int Left { get; set; } + public int Right { get; set; } public string Name { get; set; } public string Text { get; set; } public ColumnType Type { get; set; } diff --git a/BizHawk.Client.EmuHawk/CustomControls/InputRoll/RollColumns.cs b/BizHawk.Client.EmuHawk/CustomControls/InputRoll/RollColumns.cs index 96ee91ea59..af4228aed6 100644 --- a/BizHawk.Client.EmuHawk/CustomControls/InputRoll/RollColumns.cs +++ b/BizHawk.Client.EmuHawk/CustomControls/InputRoll/RollColumns.cs @@ -20,7 +20,7 @@ namespace BizHawk.Client.EmuHawk foreach (var col in VisibleColumns) { col.Left = pos; - pos += col.Width ?? 0; + pos += col.Width; col.Right = pos; } diff --git a/BizHawk.Client.EmuHawk/CustomControls/MsgBox.designer.cs b/BizHawk.Client.EmuHawk/CustomControls/MsgBox.designer.cs index ccdd5ea1dd..4e467db7c1 100644 --- a/BizHawk.Client.EmuHawk/CustomControls/MsgBox.designer.cs +++ b/BizHawk.Client.EmuHawk/CustomControls/MsgBox.designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MsgBox)); this.chkBx = new System.Windows.Forms.CheckBox(); this.btn1 = new System.Windows.Forms.Button(); this.btn2 = new System.Windows.Forms.Button(); @@ -111,7 +110,7 @@ this.Controls.Add(this.btn2); this.Controls.Add(this.messageLbl); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.MsgBox_MultiSize; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "DialogBox"; diff --git a/BizHawk.Client.EmuHawk/CustomControls/MsgBox.resx b/BizHawk.Client.EmuHawk/CustomControls/MsgBox.resx index 4369d0a05f..ff31a6db56 100644 --- a/BizHawk.Client.EmuHawk/CustomControls/MsgBox.resx +++ b/BizHawk.Client.EmuHawk/CustomControls/MsgBox.resx @@ -117,261 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAMAMDAAAAEAIACoJQAANgAAACAgAAABACAAqBAAAN4lAAAQEAAAAQAgAGgEAACGNgAAKAAAADAA - AABgAAAAAQAgAAAAAACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkJ - CSoJCQlhAAAAhgAAAKQAAAC3AAAAvwAAAL8AAAC1AAAAoQAAAIIRERFdHBwcJQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4e - HjcNDQ2TBQUF4gAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gUF - BeAODg6RHh4eNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZ - GQEdHR1UCAgIzAAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gcHB8gcHBxQHBwcAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAGxsbNggICMoAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/CAgIxh8fHzIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAB0dHQUSEhKJAQEB/AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEB - AfsRERGDISEhBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAISEhFwoKCsQAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/CgoKwB4eHhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWFhYjBgYG3gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wUFBdkjIyMfAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4eHiECAgLjAAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4EBATdCAgIqw0NDYUSEhJsGBgYYBgYGGATExNtDQ0NhQkJ - CawFBQXfAAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8HBwffHBwcHQAA - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///////wAA///AA///AAD//gAAf/8AAP/wAAAP/wAA/+AAAAf/AAD/gAAAAf8AAP8A - AAAA/wAA/gAAAAB/AAD8AAAAAD8AAPgAH/gAHwAA8AD//wAfAADwA///wA8AAOAH///gBwAA4Avw//AH - AADAOQAH/AMAAMBwAAH8AwAAgHAAAH4BAACA8AAAPwEAAIHgDwA/gQAAgeAfgB+BAAAD4A+AH8AAAAPg - P4APwAAAB///gA/gAAAH//8AD+AAAAf//gAP4AAAB//4AB/gAAAH/8AAH+AAAA//AAA/8AAAD/4AAP/w - AAAP/AAB//AAAIf4AA//4QAAh/AAP//hAACH8AD//+EAAMfwAf//4wAAx/AB/8fjAADD8AHwB8MAAOP4 - AfAHxwAA8fgA+AePAADx/AAAD48AAPj+AAAPHwAA/H8AAA4/AAD+P8AADH8AAP8f+AOY/wAA/4////H/ - AAD/x///4/8AAP/z///P/wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAQEBBAAAABwAAAApAAAAKQAAABoBAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAwPAAAMIQAAJABAACYCQAAxiMAAPfvAAA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/CustomControls/Win32.cs b/BizHawk.Client.EmuHawk/CustomControls/Win32.cs index 6c53604b4a..d849bafec7 100644 --- a/BizHawk.Client.EmuHawk/CustomControls/Win32.cs +++ b/BizHawk.Client.EmuHawk/CustomControls/Win32.cs @@ -1,52 +1,14 @@ using System; -using System.Collections.Generic; -using System.Windows.Forms; using System.Drawing; using System.Runtime.InteropServices; using Microsoft.Win32.SafeHandles; namespace BizHawk.Client.EmuHawk { - public unsafe static class Win32 + public static unsafe class Win32 { - public static bool Is64BitProcess { get { return (IntPtr.Size == 8); } } - public static bool Is64BitOperatingSystem { get { return Is64BitProcess || InternalCheckIsWow64(); } } - - [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] - [return: MarshalAs(UnmanagedType.Bool)] - private static extern bool IsWow64Process( - [In] IntPtr hProcess, - [Out] out bool wow64Process - ); - [DllImport("kernel32.dll")] public static extern IntPtr LoadLibrary(string dllToLoad); - [DllImport("kernel32.dll")] - public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName); - [DllImport("kernel32.dll")] - public static extern bool FreeLibrary(IntPtr hModule); - - - static bool InternalCheckIsWow64() - { - if ((Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor >= 1) || - Environment.OSVersion.Version.Major >= 6) - { - using (var p = System.Diagnostics.Process.GetCurrentProcess()) - { - bool retVal; - if (!IsWow64Process(p.Handle, out retVal)) - { - return false; - } - return retVal; - } - } - else - { - return false; - } - } [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct RECT @@ -238,7 +200,6 @@ namespace BizHawk.Client.EmuHawk public const int WAVE_FORMAT_PCM = 1; public const int AVIIF_KEYFRAME = 0x00000010; - [Flags] public enum OpenFileStyle : uint { @@ -434,13 +395,11 @@ namespace BizHawk.Client.EmuHawk // Release an open AVI stream [DllImport("avifil32.dll")] - public static extern int AVIStreamRelease( - IntPtr pavi); + public static extern int AVIStreamRelease(IntPtr pavi); // Release an open AVI stream [DllImport("avifil32.dll")] - public static extern int AVIFileRelease( - IntPtr pfile); + public static extern int AVIFileRelease(IntPtr pfile); // Replacement of mmioFOURCC macros diff --git a/BizHawk.Client.EmuHawk/DisplayManager/Filters/Retro.cs b/BizHawk.Client.EmuHawk/DisplayManager/Filters/Retro.cs index 72e20b9c7f..ca756988c6 100644 --- a/BizHawk.Client.EmuHawk/DisplayManager/Filters/Retro.cs +++ b/BizHawk.Client.EmuHawk/DisplayManager/Filters/Retro.cs @@ -45,36 +45,39 @@ namespace BizHawk.Client.EmuHawk.Filters Owner = owner; this.Preset = preset; Passes = preset.Passes.ToArray(); - - bool ok = true; Errors = ""; //load up the shaders Shaders = new RetroShader[preset.Passes.Count]; - for (int i = 0; i < preset.Passes.Count; i++) + for (var i = 0; i < preset.Passes.Count; i++) { - RetroShaderPreset.ShaderPass pass = preset.Passes[i]; - //acquire content - string path = Path.Combine(baseDirectory, pass.ShaderPath); - if (!File.Exists(path)) + var path = Path.Combine(baseDirectory, preset.Passes[i].ShaderPath); + string content; + try { - ok = false; - break; + content = ResolveIncludes(File.ReadAllText(path), Path.GetDirectoryName(path)); + } + catch (DirectoryNotFoundException e) + { + Errors += $"caught {nameof(DirectoryNotFoundException)}: {e.Message}\n"; + return; + } + catch (FileNotFoundException e) + { + Errors += $"could not read file {e.FileName}\n"; + return; } - string content = ResolveIncludes(File.ReadAllText(path), Path.GetDirectoryName(path)); - - var shader = new RetroShader(Owner, content, debug); - Shaders[i] = shader; + var shader = Shaders[i] = new RetroShader(Owner, content, debug); if (!shader.Available) { - Errors += $"===================\r\nPass {i}:\r\n{shader.Errors}"; - ok = false; + Errors += $"===================\r\nPass {i}:\r\n{shader.Errors}\n"; + return; } } - Available = ok; + Available = true; } public void Dispose() @@ -85,12 +88,9 @@ namespace BizHawk.Client.EmuHawk.Filters _isDisposed = true; } - /// - /// Whether this shader chain is available (it wont be available if some resources failed to load or compile) - /// - public bool Available { get; private set; } - public string Errors { get; private set; } - + /// Whether this shader chain is available (it wont be available if some resources failed to load or compile) + public readonly bool Available; + public readonly string Errors; public readonly IGL Owner; public readonly RetroShaderPreset Preset; public readonly RetroShader[] Shaders; diff --git a/BizHawk.Client.EmuHawk/DisplayManager/OSDManager.cs b/BizHawk.Client.EmuHawk/DisplayManager/OSDManager.cs index b4555283ae..ab7d406c5f 100644 --- a/BizHawk.Client.EmuHawk/DisplayManager/OSDManager.cs +++ b/BizHawk.Client.EmuHawk/DisplayManager/OSDManager.cs @@ -293,7 +293,7 @@ namespace BizHawk.Client.EmuHawk /// public void DrawScreenInfo(IBlitter g) { - if (Global.Config.DisplayFrameCounter && !Global.Game.IsNullInstance) + if (Global.Config.DisplayFrameCounter && !Global.Game.IsNullInstance()) { string message = MakeFrameCounter(); float x = GetX(g, Global.Config.DispFrameCx, Global.Config.DispFrameanchor, message); @@ -307,7 +307,7 @@ namespace BizHawk.Client.EmuHawk } } - if (Global.Config.DisplayInput && !Global.Game.IsNullInstance) + if (Global.Config.DisplayInput && !Global.Game.IsNullInstance()) { if ((Global.MovieSession.Movie.IsPlaying && !Global.MovieSession.Movie.IsFinished) || (Global.MovieSession.Movie.IsFinished && Global.Emulator.Frame == Global.MovieSession.Movie.InputLogLength)) // Account for the last frame of the movie, the movie state is immediately "Finished" here but we still want to show the input diff --git a/BizHawk.Client.EmuHawk/Extensions/ToolExtensions.cs b/BizHawk.Client.EmuHawk/Extensions/ToolExtensions.cs index 3e71f5ff11..5a69c03c8c 100644 --- a/BizHawk.Client.EmuHawk/Extensions/ToolExtensions.cs +++ b/BizHawk.Client.EmuHawk/Extensions/ToolExtensions.cs @@ -14,7 +14,7 @@ namespace BizHawk.Client.EmuHawk.ToolExtensions { public static class ToolExtensions { - public static ToolStripItem[] RecentMenu(this RecentFiles recent, Action loadFileCallback, bool autoload = false, bool romloading = false) + public static ToolStripItem[] RecentMenu(this RecentFiles recent, Action loadFileCallback, bool autoload = false, bool romLoading = false) { var items = new List(); @@ -33,7 +33,7 @@ namespace BizHawk.Client.EmuHawk.ToolExtensions bool crazyStuff = true; //sentinel for newer format OpenAdvanced type code - if (romloading) + if (romLoading) { if (filename.StartsWith("*")) { @@ -41,15 +41,15 @@ namespace BizHawk.Client.EmuHawk.ToolExtensions caption = oa.DisplayName; crazyStuff = false; - if (oa is OpenAdvanced_OpenRom) + if (oa is OpenAdvanced_OpenRom openRom) { crazyStuff = true; - physicalPath = ((oa as OpenAdvanced_OpenRom).Path); + physicalPath = openRom.Path; } } } - //TODO - do TSMI and TSDD need disposing? yuck + // TODO - do TSMI and TSDD need disposing? yuck var item = new ToolStripMenuItem { Text = caption.Replace("&", "&&") }; items.Add(item); @@ -65,9 +65,7 @@ namespace BizHawk.Client.EmuHawk.ToolExtensions //TODO - use standard methods to split filename (hawkfile acquire?) var hf = new HawkFile(); hf.Parse(physicalPath); - bool canExplore = true; - if (!File.Exists(hf.FullPathWithoutMember)) - canExplore = false; + bool canExplore = File.Exists(hf.FullPathWithoutMember); if (canExplore) { @@ -82,11 +80,11 @@ namespace BizHawk.Client.EmuHawk.ToolExtensions { //make a menuitem to let you copy the path var tsmiCopyCanonicalPath = new ToolStripMenuItem { Text = "&Copy Canonical Path" }; - tsmiCopyCanonicalPath.Click += (o, ev) => { System.Windows.Forms.Clipboard.SetText(physicalPath); }; + tsmiCopyCanonicalPath.Click += (o, ev) => { Clipboard.SetText(physicalPath); }; tsdd.Items.Add(tsmiCopyCanonicalPath); var tsmiCopyArchivePath = new ToolStripMenuItem { Text = "Copy Archive Path" }; - tsmiCopyArchivePath.Click += (o, ev) => { System.Windows.Forms.Clipboard.SetText(hf.FullPathWithoutMember); }; + tsmiCopyArchivePath.Click += (o, ev) => { Clipboard.SetText(hf.FullPathWithoutMember); }; tsdd.Items.Add(tsmiCopyArchivePath); var tsmiOpenArchive = new ToolStripMenuItem { Text = "Open &Archive" }; @@ -95,24 +93,27 @@ namespace BizHawk.Client.EmuHawk.ToolExtensions } else { - //make a menuitem to let you copy the path + // make a menuitem to let you copy the path var tsmiCopyPath = new ToolStripMenuItem { Text = "&Copy Path" }; - tsmiCopyPath.Click += (o, ev) => { System.Windows.Forms.Clipboard.SetText(physicalPath); }; + tsmiCopyPath.Click += (o, ev) => { Clipboard.SetText(physicalPath); }; tsdd.Items.Add(tsmiCopyPath); } tsdd.Items.Add(new ToolStripSeparator()); - //make a menuitem to let you explore to it + // make a menuitem to let you explore to it var tsmiExplore = new ToolStripMenuItem { Text = "&Explore" }; string explorePath = $"\"{hf.FullPathWithoutMember}\""; tsmiExplore.Click += (o, ev) => { System.Diagnostics.Process.Start("explorer.exe", $"/select, {explorePath}"); }; tsdd.Items.Add(tsmiExplore); var tsmiCopyFile = new ToolStripMenuItem { Text = "Copy &File" }; - var lame = new System.Collections.Specialized.StringCollection(); - lame.Add(hf.FullPathWithoutMember); - tsmiCopyFile.Click += (o, ev) => { System.Windows.Forms.Clipboard.SetFileDropList(lame); }; + var lame = new System.Collections.Specialized.StringCollection + { + hf.FullPathWithoutMember + }; + + tsmiCopyFile.Click += (o, ev) => { Clipboard.SetFileDropList(lame); }; tsdd.Items.Add(tsmiCopyFile); var tsmiTest = new ToolStripMenuItem { Text = "&Shell Context Menu" }; @@ -173,13 +174,13 @@ namespace BizHawk.Client.EmuHawk.ToolExtensions items.Add(new ToolStripSeparator()); - var clearitem = new ToolStripMenuItem { Text = "&Clear", Enabled = !recent.Frozen }; - clearitem.Click += (o, ev) => recent.Clear(); - items.Add(clearitem); + var clearItem = new ToolStripMenuItem { Text = "&Clear", Enabled = !recent.Frozen }; + clearItem.Click += (o, ev) => recent.Clear(); + items.Add(clearItem); - var freezeitem = new ToolStripMenuItem { Text = recent.Frozen ? "&Unfreeze" : "&Freeze" }; - freezeitem.Click += (o, ev) => recent.Frozen ^= true; - items.Add(freezeitem); + var freezeItem = new ToolStripMenuItem { Text = recent.Frozen ? "&Unfreeze" : "&Freeze" }; + freezeItem.Click += (o, ev) => recent.Frozen ^= true; + items.Add(freezeItem); if (autoload) { @@ -188,26 +189,24 @@ namespace BizHawk.Client.EmuHawk.ToolExtensions items.Add(auto); } - var settingsitem = new ToolStripMenuItem { Text = "&Recent Settings..." }; - settingsitem.Click += (o, ev) => + var settingsItem = new ToolStripMenuItem { Text = "&Recent Settings..." }; + settingsItem.Click += (o, ev) => { - using (var prompt = new InputPrompt + using var prompt = new InputPrompt { TextInputType = InputPrompt.InputType.Unsigned, Message = "Number of recent files to track", InitialValue = recent.MAX_RECENT_FILES.ToString() - }) + }; + var result = prompt.ShowDialog(); + if (result == DialogResult.OK) { - var result = prompt.ShowDialog(); - if (result == DialogResult.OK) - { - int val = int.Parse(prompt.PromptText); - if (val > 0) - recent.MAX_RECENT_FILES = val; - } + int val = int.Parse(prompt.PromptText); + if (val > 0) + recent.MAX_RECENT_FILES = val; } }; - items.Add(settingsitem); + items.Add(settingsItem); return items.ToArray(); } @@ -217,18 +216,15 @@ namespace BizHawk.Client.EmuHawk.ToolExtensions GlobalWin.Sound.StopSound(); if (recent.Frozen) { - var result = MessageBox.Show($"Could not open {path}", "File not found", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show($"Could not open {path}", "File not found", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { // ensure topmost, not to have to minimize everything to see and use our modal window, if it somehow got covered - var result = MessageBox.Show(new Form(){TopMost = true}, $"Could not open {path}\nRemove from list?", "File not found", MessageBoxButtons.YesNo, MessageBoxIcon.Error); + var result = MessageBox.Show(new Form { TopMost = true }, $"Could not open {path}\nRemove from list?", "File not found", MessageBoxButtons.YesNo, MessageBoxIcon.Error); if (result == DialogResult.Yes) { - if (encodedPath != null) - recent.Remove(encodedPath); - else - recent.Remove(path); + recent.Remove(encodedPath ?? path); } } diff --git a/BizHawk.Client.EmuHawk/IControlMainform.cs b/BizHawk.Client.EmuHawk/IControlMainform.cs index 4579ee8a0b..792dd83da3 100644 --- a/BizHawk.Client.EmuHawk/IControlMainform.cs +++ b/BizHawk.Client.EmuHawk/IControlMainform.cs @@ -10,9 +10,15 @@ void LoadStateAs(); void SaveQuickSave(int slot); void LoadQuickSave(int slot); - void SelectSlot(int slot); - void PreviousSlot(); - void NextSlot(); + + /// + /// Overrides the select slot method + /// + /// Returns whether the function is handled. + /// If false, the mainform should continue with its logic + bool SelectSlot(int slot); + bool PreviousSlot(); + bool NextSlot(); bool WantsToControlReadOnly { get; } @@ -31,7 +37,7 @@ /// Should not be called directly. /// Like MainForm's StopMovie(), saving the movie is part of this function's responsibility. /// - void StopMovie(bool supressSave); + void StopMovie(bool suppressSave); bool WantsToControlRewind { get; } diff --git a/BizHawk.Client.EmuHawk/MainForm.Designer.cs b/BizHawk.Client.EmuHawk/MainForm.Designer.cs index cf88006485..ef618fa03c 100644 --- a/BizHawk.Client.EmuHawk/MainForm.Designer.cs +++ b/BizHawk.Client.EmuHawk/MainForm.Designer.cs @@ -18,7 +18,6 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); this.MainformMenu = new MenuStripEx(); this.FileSubMenu = new System.Windows.Forms.ToolStripMenuItem(); this.OpenRomMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -358,10 +357,6 @@ this.GB4xsettingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.GGLSubMenu = new System.Windows.Forms.ToolStripMenuItem(); this.GGLsettingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.VectrexSubMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.VectrexsettingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.O2HawkSubMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.O2HawksettingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.GenesisSubMenu = new System.Windows.Forms.ToolStripMenuItem(); this.vDPViewerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.GenesisGameGenieECDC = new System.Windows.Forms.ToolStripMenuItem(); @@ -399,6 +394,10 @@ this.ZXSpectrumDisksSubMenu = new System.Windows.Forms.ToolStripMenuItem(); this.zxt2ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.ZXSpectrumExportSnapshotMenuItemMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.VectrexSubMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.VectrexsettingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.O2HawkSubMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.O2HawksettingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.HelpSubMenu = new System.Windows.Forms.ToolStripMenuItem(); this.OnlineHelpMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.ForumsMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -414,6 +413,8 @@ this.cpct1ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.AmstradCPCDisksSubMenu = new System.Windows.Forms.ToolStripMenuItem(); this.cpcd1ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.arcadeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.settingsToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); this.Atari7800HawkCoreMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.MainStatusBar = new StatusStripEx(); this.DumpStatusButton = new System.Windows.Forms.ToolStripDropDownButton(); @@ -530,12 +531,13 @@ this.zXSpectrumToolStripMenuItem, this.VectrexSubMenu, this.O2HawkSubMenu, - this.HelpSubMenu, - this.amstradCPCToolStripMenuItem}); + this.amstradCPCToolStripMenuItem, + this.arcadeToolStripMenuItem, + this.HelpSubMenu}); this.MainformMenu.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Flow; this.MainformMenu.Location = new System.Drawing.Point(0, 0); this.MainformMenu.Name = "MainformMenu"; - this.MainformMenu.Size = new System.Drawing.Size(470, 99); + this.MainformMenu.Size = new System.Drawing.Size(470, 89); this.MainformMenu.TabIndex = 0; this.MainformMenu.Text = "menuStrip1"; this.MainformMenu.MenuActivate += new System.EventHandler(this.MainformMenu_MenuActivate); @@ -561,15 +563,14 @@ this.toolStripSeparator4, this.ExitMenuItem}); this.FileSubMenu.Name = "FileSubMenu"; - this.FileSubMenu.Size = new System.Drawing.Size(37, 19); + this.FileSubMenu.Size = new System.Drawing.Size(35, 17); this.FileSubMenu.Text = "&File"; this.FileSubMenu.DropDownOpened += new System.EventHandler(this.FileSubMenu_DropDownOpened); // // OpenRomMenuItem // - this.OpenRomMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.OpenFile; this.OpenRomMenuItem.Name = "OpenRomMenuItem"; - this.OpenRomMenuItem.Size = new System.Drawing.Size(159, 22); + this.OpenRomMenuItem.Size = new System.Drawing.Size(151, 22); this.OpenRomMenuItem.Text = "&Open ROM"; this.OpenRomMenuItem.Click += new System.EventHandler(this.OpenRomMenuItem_Click); // @@ -577,9 +578,8 @@ // this.RecentRomSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripSeparator3}); - this.RecentRomSubMenu.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Recent; this.RecentRomSubMenu.Name = "RecentRomSubMenu"; - this.RecentRomSubMenu.Size = new System.Drawing.Size(159, 22); + this.RecentRomSubMenu.Size = new System.Drawing.Size(151, 22); this.RecentRomSubMenu.Text = "&Recent ROM"; this.RecentRomSubMenu.DropDownOpened += new System.EventHandler(this.RecentRomMenuItem_DropDownOpened); // @@ -591,22 +591,21 @@ // OpenAdvancedMenuItem // this.OpenAdvancedMenuItem.Name = "OpenAdvancedMenuItem"; - this.OpenAdvancedMenuItem.Size = new System.Drawing.Size(159, 22); + this.OpenAdvancedMenuItem.Size = new System.Drawing.Size(151, 22); this.OpenAdvancedMenuItem.Text = "Open Ad&vanced"; this.OpenAdvancedMenuItem.Click += new System.EventHandler(this.OpenAdvancedMenuItem_Click); // // CloseRomMenuItem // - this.CloseRomMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Close; this.CloseRomMenuItem.Name = "CloseRomMenuItem"; - this.CloseRomMenuItem.Size = new System.Drawing.Size(159, 22); + this.CloseRomMenuItem.Size = new System.Drawing.Size(151, 22); this.CloseRomMenuItem.Text = "&Close ROM"; this.CloseRomMenuItem.Click += new System.EventHandler(this.CloseRomMenuItem_Click); // // toolStripMenuItem1 // this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(156, 6); + this.toolStripMenuItem1.Size = new System.Drawing.Size(148, 6); // // SaveStateSubMenu // @@ -624,89 +623,89 @@ this.toolStripSeparator6, this.SaveNamedStateMenuItem}); this.SaveStateSubMenu.Name = "SaveStateSubMenu"; - this.SaveStateSubMenu.Size = new System.Drawing.Size(159, 22); + this.SaveStateSubMenu.Size = new System.Drawing.Size(151, 22); this.SaveStateSubMenu.Text = "&Save State"; this.SaveStateSubMenu.DropDownOpened += new System.EventHandler(this.SaveStateSubMenu_DropDownOpened); // // SaveState1MenuItem // this.SaveState1MenuItem.Name = "SaveState1MenuItem"; - this.SaveState1MenuItem.Size = new System.Drawing.Size(178, 22); + this.SaveState1MenuItem.Size = new System.Drawing.Size(175, 22); this.SaveState1MenuItem.Text = "1"; this.SaveState1MenuItem.Click += new System.EventHandler(this.Savestate1MenuItem_Click); // // SaveState2MenuItem // this.SaveState2MenuItem.Name = "SaveState2MenuItem"; - this.SaveState2MenuItem.Size = new System.Drawing.Size(178, 22); + this.SaveState2MenuItem.Size = new System.Drawing.Size(175, 22); this.SaveState2MenuItem.Text = "2"; this.SaveState2MenuItem.Click += new System.EventHandler(this.Savestate2MenuItem_Click); // // SaveState3MenuItem // this.SaveState3MenuItem.Name = "SaveState3MenuItem"; - this.SaveState3MenuItem.Size = new System.Drawing.Size(178, 22); + this.SaveState3MenuItem.Size = new System.Drawing.Size(175, 22); this.SaveState3MenuItem.Text = "3"; this.SaveState3MenuItem.Click += new System.EventHandler(this.Savestate3MenuItem_Click); // // SaveState4MenuItem // this.SaveState4MenuItem.Name = "SaveState4MenuItem"; - this.SaveState4MenuItem.Size = new System.Drawing.Size(178, 22); + this.SaveState4MenuItem.Size = new System.Drawing.Size(175, 22); this.SaveState4MenuItem.Text = "4"; this.SaveState4MenuItem.Click += new System.EventHandler(this.Savestate4MenuItem_Click); // // SaveState5MenuItem // this.SaveState5MenuItem.Name = "SaveState5MenuItem"; - this.SaveState5MenuItem.Size = new System.Drawing.Size(178, 22); + this.SaveState5MenuItem.Size = new System.Drawing.Size(175, 22); this.SaveState5MenuItem.Text = "5"; this.SaveState5MenuItem.Click += new System.EventHandler(this.Savestate5MenuItem_Click); // // SaveState6MenuItem // this.SaveState6MenuItem.Name = "SaveState6MenuItem"; - this.SaveState6MenuItem.Size = new System.Drawing.Size(178, 22); + this.SaveState6MenuItem.Size = new System.Drawing.Size(175, 22); this.SaveState6MenuItem.Text = "6"; this.SaveState6MenuItem.Click += new System.EventHandler(this.Savestate6MenuItem_Click); // // SaveState7MenuItem // this.SaveState7MenuItem.Name = "SaveState7MenuItem"; - this.SaveState7MenuItem.Size = new System.Drawing.Size(178, 22); + this.SaveState7MenuItem.Size = new System.Drawing.Size(175, 22); this.SaveState7MenuItem.Text = "7"; this.SaveState7MenuItem.Click += new System.EventHandler(this.Savestate7MenuItem_Click); // // SaveState8MenuItem // this.SaveState8MenuItem.Name = "SaveState8MenuItem"; - this.SaveState8MenuItem.Size = new System.Drawing.Size(178, 22); + this.SaveState8MenuItem.Size = new System.Drawing.Size(175, 22); this.SaveState8MenuItem.Text = "8"; this.SaveState8MenuItem.Click += new System.EventHandler(this.Savestate8MenuItem_Click); // // SaveState9MenuItem // this.SaveState9MenuItem.Name = "SaveState9MenuItem"; - this.SaveState9MenuItem.Size = new System.Drawing.Size(178, 22); + this.SaveState9MenuItem.Size = new System.Drawing.Size(175, 22); this.SaveState9MenuItem.Text = "9"; this.SaveState9MenuItem.Click += new System.EventHandler(this.Savestate9MenuItem_Click); // // SaveState0MenuItem // this.SaveState0MenuItem.Name = "SaveState0MenuItem"; - this.SaveState0MenuItem.Size = new System.Drawing.Size(178, 22); + this.SaveState0MenuItem.Size = new System.Drawing.Size(175, 22); this.SaveState0MenuItem.Text = "0"; this.SaveState0MenuItem.Click += new System.EventHandler(this.Savestate0MenuItem_Click); // // toolStripSeparator6 // this.toolStripSeparator6.Name = "toolStripSeparator6"; - this.toolStripSeparator6.Size = new System.Drawing.Size(175, 6); + this.toolStripSeparator6.Size = new System.Drawing.Size(172, 6); // // SaveNamedStateMenuItem // this.SaveNamedStateMenuItem.Name = "SaveNamedStateMenuItem"; - this.SaveNamedStateMenuItem.Size = new System.Drawing.Size(178, 22); + this.SaveNamedStateMenuItem.Size = new System.Drawing.Size(175, 22); this.SaveNamedStateMenuItem.Text = "Save Named State..."; this.SaveNamedStateMenuItem.Click += new System.EventHandler(this.SaveNamedStateMenuItem_Click); // @@ -728,101 +727,101 @@ this.toolStripSeparator21, this.AutoloadLastSlotMenuItem}); this.LoadStateSubMenu.Name = "LoadStateSubMenu"; - this.LoadStateSubMenu.Size = new System.Drawing.Size(159, 22); + this.LoadStateSubMenu.Size = new System.Drawing.Size(151, 22); this.LoadStateSubMenu.Text = "&Load State"; this.LoadStateSubMenu.DropDownOpened += new System.EventHandler(this.LoadStateSubMenu_DropDownOpened); // // LoadState1MenuItem // this.LoadState1MenuItem.Name = "LoadState1MenuItem"; - this.LoadState1MenuItem.Size = new System.Drawing.Size(180, 22); + this.LoadState1MenuItem.Size = new System.Drawing.Size(174, 22); this.LoadState1MenuItem.Text = "1"; this.LoadState1MenuItem.Click += new System.EventHandler(this.Loadstate1MenuItem_Click); // // LoadState2MenuItem // this.LoadState2MenuItem.Name = "LoadState2MenuItem"; - this.LoadState2MenuItem.Size = new System.Drawing.Size(180, 22); + this.LoadState2MenuItem.Size = new System.Drawing.Size(174, 22); this.LoadState2MenuItem.Text = "2"; this.LoadState2MenuItem.Click += new System.EventHandler(this.Loadstate2MenuItem_Click); // // LoadState3MenuItem // this.LoadState3MenuItem.Name = "LoadState3MenuItem"; - this.LoadState3MenuItem.Size = new System.Drawing.Size(180, 22); + this.LoadState3MenuItem.Size = new System.Drawing.Size(174, 22); this.LoadState3MenuItem.Text = "3"; this.LoadState3MenuItem.Click += new System.EventHandler(this.Loadstate3MenuItem_Click); // // LoadState4MenuItem // this.LoadState4MenuItem.Name = "LoadState4MenuItem"; - this.LoadState4MenuItem.Size = new System.Drawing.Size(180, 22); + this.LoadState4MenuItem.Size = new System.Drawing.Size(174, 22); this.LoadState4MenuItem.Text = "4"; this.LoadState4MenuItem.Click += new System.EventHandler(this.Loadstate4MenuItem_Click); // // LoadState5MenuItem // this.LoadState5MenuItem.Name = "LoadState5MenuItem"; - this.LoadState5MenuItem.Size = new System.Drawing.Size(180, 22); + this.LoadState5MenuItem.Size = new System.Drawing.Size(174, 22); this.LoadState5MenuItem.Text = "5"; this.LoadState5MenuItem.Click += new System.EventHandler(this.Loadstate5MenuItem_Click); // // LoadState6MenuItem // this.LoadState6MenuItem.Name = "LoadState6MenuItem"; - this.LoadState6MenuItem.Size = new System.Drawing.Size(180, 22); + this.LoadState6MenuItem.Size = new System.Drawing.Size(174, 22); this.LoadState6MenuItem.Text = "6"; this.LoadState6MenuItem.Click += new System.EventHandler(this.Loadstate6MenuItem_Click); // // LoadState7MenuItem // this.LoadState7MenuItem.Name = "LoadState7MenuItem"; - this.LoadState7MenuItem.Size = new System.Drawing.Size(180, 22); + this.LoadState7MenuItem.Size = new System.Drawing.Size(174, 22); this.LoadState7MenuItem.Text = "7"; this.LoadState7MenuItem.Click += new System.EventHandler(this.Loadstate7MenuItem_Click); // // LoadState8MenuItem // this.LoadState8MenuItem.Name = "LoadState8MenuItem"; - this.LoadState8MenuItem.Size = new System.Drawing.Size(180, 22); + this.LoadState8MenuItem.Size = new System.Drawing.Size(174, 22); this.LoadState8MenuItem.Text = "8"; this.LoadState8MenuItem.Click += new System.EventHandler(this.Loadstate8MenuItem_Click); // // LoadState9MenuItem // this.LoadState9MenuItem.Name = "LoadState9MenuItem"; - this.LoadState9MenuItem.Size = new System.Drawing.Size(180, 22); + this.LoadState9MenuItem.Size = new System.Drawing.Size(174, 22); this.LoadState9MenuItem.Text = "9"; this.LoadState9MenuItem.Click += new System.EventHandler(this.Loadstate9MenuItem_Click); // // LoadState0MenuItem // this.LoadState0MenuItem.Name = "LoadState0MenuItem"; - this.LoadState0MenuItem.Size = new System.Drawing.Size(180, 22); + this.LoadState0MenuItem.Size = new System.Drawing.Size(174, 22); this.LoadState0MenuItem.Text = "0"; this.LoadState0MenuItem.Click += new System.EventHandler(this.Loadstate0MenuItem_Click); // // toolStripSeparator7 // this.toolStripSeparator7.Name = "toolStripSeparator7"; - this.toolStripSeparator7.Size = new System.Drawing.Size(177, 6); + this.toolStripSeparator7.Size = new System.Drawing.Size(171, 6); // // LoadNamedStateMenuItem // this.LoadNamedStateMenuItem.Name = "LoadNamedStateMenuItem"; - this.LoadNamedStateMenuItem.Size = new System.Drawing.Size(180, 22); + this.LoadNamedStateMenuItem.Size = new System.Drawing.Size(174, 22); this.LoadNamedStateMenuItem.Text = "Load Named State..."; this.LoadNamedStateMenuItem.Click += new System.EventHandler(this.LoadNamedStateMenuItem_Click); // // toolStripSeparator21 // this.toolStripSeparator21.Name = "toolStripSeparator21"; - this.toolStripSeparator21.Size = new System.Drawing.Size(177, 6); + this.toolStripSeparator21.Size = new System.Drawing.Size(171, 6); // // AutoloadLastSlotMenuItem // this.AutoloadLastSlotMenuItem.Name = "AutoloadLastSlotMenuItem"; - this.AutoloadLastSlotMenuItem.Size = new System.Drawing.Size(180, 22); + this.AutoloadLastSlotMenuItem.Size = new System.Drawing.Size(174, 22); this.AutoloadLastSlotMenuItem.Text = "Autoload last Slot"; this.AutoloadLastSlotMenuItem.Click += new System.EventHandler(this.AutoloadLastSlotMenuItem_Click); // @@ -845,112 +844,110 @@ this.SaveToCurrentSlotMenuItem, this.LoadCurrentSlotMenuItem}); this.SaveSlotSubMenu.Name = "SaveSlotSubMenu"; - this.SaveSlotSubMenu.Size = new System.Drawing.Size(159, 22); + this.SaveSlotSubMenu.Size = new System.Drawing.Size(151, 22); this.SaveSlotSubMenu.Text = "Save S&lot"; this.SaveSlotSubMenu.DropDownOpened += new System.EventHandler(this.SaveSlotSubMenu_DropDownOpened); // // SelectSlot0MenuItem // this.SelectSlot0MenuItem.Name = "SelectSlot0MenuItem"; - this.SelectSlot0MenuItem.Size = new System.Drawing.Size(178, 22); + this.SelectSlot0MenuItem.Size = new System.Drawing.Size(172, 22); this.SelectSlot0MenuItem.Text = "Select Slot 0"; this.SelectSlot0MenuItem.Click += new System.EventHandler(this.SelectSlotMenuItems_Click); // // SelectSlot1MenuItem // this.SelectSlot1MenuItem.Name = "SelectSlot1MenuItem"; - this.SelectSlot1MenuItem.Size = new System.Drawing.Size(178, 22); + this.SelectSlot1MenuItem.Size = new System.Drawing.Size(172, 22); this.SelectSlot1MenuItem.Text = "Select Slot 1"; this.SelectSlot1MenuItem.Click += new System.EventHandler(this.SelectSlotMenuItems_Click); // // SelectSlot2MenuItem // this.SelectSlot2MenuItem.Name = "SelectSlot2MenuItem"; - this.SelectSlot2MenuItem.Size = new System.Drawing.Size(178, 22); + this.SelectSlot2MenuItem.Size = new System.Drawing.Size(172, 22); this.SelectSlot2MenuItem.Text = "Select Slot 2"; this.SelectSlot2MenuItem.Click += new System.EventHandler(this.SelectSlotMenuItems_Click); // // SelectSlot3MenuItem // this.SelectSlot3MenuItem.Name = "SelectSlot3MenuItem"; - this.SelectSlot3MenuItem.Size = new System.Drawing.Size(178, 22); + this.SelectSlot3MenuItem.Size = new System.Drawing.Size(172, 22); this.SelectSlot3MenuItem.Text = "Select Slot 3"; this.SelectSlot3MenuItem.Click += new System.EventHandler(this.SelectSlotMenuItems_Click); // // SelectSlot4MenuItem // this.SelectSlot4MenuItem.Name = "SelectSlot4MenuItem"; - this.SelectSlot4MenuItem.Size = new System.Drawing.Size(178, 22); + this.SelectSlot4MenuItem.Size = new System.Drawing.Size(172, 22); this.SelectSlot4MenuItem.Text = "Select Slot 4"; this.SelectSlot4MenuItem.Click += new System.EventHandler(this.SelectSlotMenuItems_Click); // // SelectSlot5MenuItem // this.SelectSlot5MenuItem.Name = "SelectSlot5MenuItem"; - this.SelectSlot5MenuItem.Size = new System.Drawing.Size(178, 22); + this.SelectSlot5MenuItem.Size = new System.Drawing.Size(172, 22); this.SelectSlot5MenuItem.Text = "Select Slot 5"; this.SelectSlot5MenuItem.Click += new System.EventHandler(this.SelectSlotMenuItems_Click); // // SelectSlot6MenuItem // this.SelectSlot6MenuItem.Name = "SelectSlot6MenuItem"; - this.SelectSlot6MenuItem.Size = new System.Drawing.Size(178, 22); + this.SelectSlot6MenuItem.Size = new System.Drawing.Size(172, 22); this.SelectSlot6MenuItem.Text = "Select Slot 6"; this.SelectSlot6MenuItem.Click += new System.EventHandler(this.SelectSlotMenuItems_Click); // // SelectSlot7MenuItem // this.SelectSlot7MenuItem.Name = "SelectSlot7MenuItem"; - this.SelectSlot7MenuItem.Size = new System.Drawing.Size(178, 22); + this.SelectSlot7MenuItem.Size = new System.Drawing.Size(172, 22); this.SelectSlot7MenuItem.Text = "Select Slot 7"; this.SelectSlot7MenuItem.Click += new System.EventHandler(this.SelectSlotMenuItems_Click); // // SelectSlot8MenuItem // this.SelectSlot8MenuItem.Name = "SelectSlot8MenuItem"; - this.SelectSlot8MenuItem.Size = new System.Drawing.Size(178, 22); + this.SelectSlot8MenuItem.Size = new System.Drawing.Size(172, 22); this.SelectSlot8MenuItem.Text = "Select Slot 8"; this.SelectSlot8MenuItem.Click += new System.EventHandler(this.SelectSlotMenuItems_Click); // // SelectSlot9MenuItem // this.SelectSlot9MenuItem.Name = "SelectSlot9MenuItem"; - this.SelectSlot9MenuItem.Size = new System.Drawing.Size(178, 22); + this.SelectSlot9MenuItem.Size = new System.Drawing.Size(172, 22); this.SelectSlot9MenuItem.Text = "Select Slot 9"; this.SelectSlot9MenuItem.Click += new System.EventHandler(this.SelectSlotMenuItems_Click); // // PreviousSlotMenuItem // - this.PreviousSlotMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.MoveLeft; this.PreviousSlotMenuItem.Name = "PreviousSlotMenuItem"; - this.PreviousSlotMenuItem.Size = new System.Drawing.Size(178, 22); + this.PreviousSlotMenuItem.Size = new System.Drawing.Size(172, 22); this.PreviousSlotMenuItem.Text = "Previous Slot"; this.PreviousSlotMenuItem.Click += new System.EventHandler(this.PreviousSlotMenuItem_Click); // // NextSlotMenuItem // - this.NextSlotMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.MoveRight; this.NextSlotMenuItem.Name = "NextSlotMenuItem"; - this.NextSlotMenuItem.Size = new System.Drawing.Size(178, 22); + this.NextSlotMenuItem.Size = new System.Drawing.Size(172, 22); this.NextSlotMenuItem.Text = "Next Slot"; this.NextSlotMenuItem.Click += new System.EventHandler(this.NextSlotMenuItem_Click); // // toolStripSeparator5 // this.toolStripSeparator5.Name = "toolStripSeparator5"; - this.toolStripSeparator5.Size = new System.Drawing.Size(175, 6); + this.toolStripSeparator5.Size = new System.Drawing.Size(169, 6); // // SaveToCurrentSlotMenuItem // this.SaveToCurrentSlotMenuItem.Name = "SaveToCurrentSlotMenuItem"; - this.SaveToCurrentSlotMenuItem.Size = new System.Drawing.Size(178, 22); + this.SaveToCurrentSlotMenuItem.Size = new System.Drawing.Size(172, 22); this.SaveToCurrentSlotMenuItem.Text = "Save to Current Slot"; this.SaveToCurrentSlotMenuItem.Click += new System.EventHandler(this.SaveToCurrentSlotMenuItem_Click); // // LoadCurrentSlotMenuItem // this.LoadCurrentSlotMenuItem.Name = "LoadCurrentSlotMenuItem"; - this.LoadCurrentSlotMenuItem.Size = new System.Drawing.Size(178, 22); + this.LoadCurrentSlotMenuItem.Size = new System.Drawing.Size(172, 22); this.LoadCurrentSlotMenuItem.Text = "Load Current Slot"; this.LoadCurrentSlotMenuItem.Click += new System.EventHandler(this.LoadCurrentSlotMenuItem_Click); // @@ -959,21 +956,21 @@ this.SaveRAMSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.FlushSaveRAMMenuItem}); this.SaveRAMSubMenu.Name = "SaveRAMSubMenu"; - this.SaveRAMSubMenu.Size = new System.Drawing.Size(159, 22); + this.SaveRAMSubMenu.Size = new System.Drawing.Size(151, 22); this.SaveRAMSubMenu.Text = "Save &RAM"; this.SaveRAMSubMenu.DropDownOpened += new System.EventHandler(this.SaveRAMSubMenu_DropDownOpened); // // FlushSaveRAMMenuItem // this.FlushSaveRAMMenuItem.Name = "FlushSaveRAMMenuItem"; - this.FlushSaveRAMMenuItem.Size = new System.Drawing.Size(156, 22); + this.FlushSaveRAMMenuItem.Size = new System.Drawing.Size(150, 22); this.FlushSaveRAMMenuItem.Text = "&Flush Save Ram"; this.FlushSaveRAMMenuItem.Click += new System.EventHandler(this.FlushSaveRAMMenuItem_Click); // // toolStripMenuItem2 // this.toolStripMenuItem2.Name = "toolStripMenuItem2"; - this.toolStripMenuItem2.Size = new System.Drawing.Size(156, 6); + this.toolStripMenuItem2.Size = new System.Drawing.Size(148, 6); // // MovieSubMenu // @@ -994,30 +991,28 @@ this.FullMovieLoadstatesMenuItem, this.MovieEndSubMenu}); this.MovieSubMenu.Name = "MovieSubMenu"; - this.MovieSubMenu.Size = new System.Drawing.Size(159, 22); + this.MovieSubMenu.Size = new System.Drawing.Size(151, 22); this.MovieSubMenu.Text = "&Movie"; this.MovieSubMenu.DropDownOpened += new System.EventHandler(this.MovieSubMenu_DropDownOpened); // // ReadonlyMenuItem // - this.ReadonlyMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.ReadOnly; this.ReadonlyMenuItem.Name = "ReadonlyMenuItem"; - this.ReadonlyMenuItem.Size = new System.Drawing.Size(231, 22); + this.ReadonlyMenuItem.Size = new System.Drawing.Size(211, 22); this.ReadonlyMenuItem.Text = "Read-only"; this.ReadonlyMenuItem.Click += new System.EventHandler(this.ReadonlyMenuItem_Click); // // toolStripSeparator15 // this.toolStripSeparator15.Name = "toolStripSeparator15"; - this.toolStripSeparator15.Size = new System.Drawing.Size(228, 6); + this.toolStripSeparator15.Size = new System.Drawing.Size(208, 6); // // RecentMovieSubMenu // this.RecentMovieSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripSeparator16}); - this.RecentMovieSubMenu.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Recent; this.RecentMovieSubMenu.Name = "RecentMovieSubMenu"; - this.RecentMovieSubMenu.Size = new System.Drawing.Size(231, 22); + this.RecentMovieSubMenu.Size = new System.Drawing.Size(211, 22); this.RecentMovieSubMenu.Text = "Recent"; this.RecentMovieSubMenu.DropDownOpened += new System.EventHandler(this.RecentMovieSubMenu_DropDownOpened); // @@ -1028,84 +1023,76 @@ // // RecordMovieMenuItem // - this.RecordMovieMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.RecordHS; this.RecordMovieMenuItem.Name = "RecordMovieMenuItem"; - this.RecordMovieMenuItem.Size = new System.Drawing.Size(231, 22); + this.RecordMovieMenuItem.Size = new System.Drawing.Size(211, 22); this.RecordMovieMenuItem.Text = "&Record Movie..."; this.RecordMovieMenuItem.Click += new System.EventHandler(this.RecordMovieMenuItem_Click); // // PlayMovieMenuItem // - this.PlayMovieMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Play; this.PlayMovieMenuItem.Name = "PlayMovieMenuItem"; - this.PlayMovieMenuItem.Size = new System.Drawing.Size(231, 22); + this.PlayMovieMenuItem.Size = new System.Drawing.Size(211, 22); this.PlayMovieMenuItem.Text = "&Play Movie..."; this.PlayMovieMenuItem.Click += new System.EventHandler(this.PlayMovieMenuItem_Click); // // StopMovieMenuItem // - this.StopMovieMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Stop; this.StopMovieMenuItem.Name = "StopMovieMenuItem"; - this.StopMovieMenuItem.Size = new System.Drawing.Size(231, 22); + this.StopMovieMenuItem.Size = new System.Drawing.Size(211, 22); this.StopMovieMenuItem.Text = "Stop Movie"; this.StopMovieMenuItem.Click += new System.EventHandler(this.StopMovieMenuItem_Click); // // PlayFromBeginningMenuItem // - this.PlayFromBeginningMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.restart; this.PlayFromBeginningMenuItem.Name = "PlayFromBeginningMenuItem"; - this.PlayFromBeginningMenuItem.Size = new System.Drawing.Size(231, 22); + this.PlayFromBeginningMenuItem.Size = new System.Drawing.Size(211, 22); this.PlayFromBeginningMenuItem.Text = "Play from Beginning"; this.PlayFromBeginningMenuItem.Click += new System.EventHandler(this.PlayFromBeginningMenuItem_Click); // // ImportMoviesMenuItem // - this.ImportMoviesMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Import; this.ImportMoviesMenuItem.Name = "ImportMoviesMenuItem"; - this.ImportMoviesMenuItem.Size = new System.Drawing.Size(231, 22); + this.ImportMoviesMenuItem.Size = new System.Drawing.Size(211, 22); this.ImportMoviesMenuItem.Text = "Import Movies..."; this.ImportMoviesMenuItem.Click += new System.EventHandler(this.ImportMovieMenuItem_Click); // // SaveMovieMenuItem // - this.SaveMovieMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.SaveAs; this.SaveMovieMenuItem.Name = "SaveMovieMenuItem"; - this.SaveMovieMenuItem.Size = new System.Drawing.Size(231, 22); + this.SaveMovieMenuItem.Size = new System.Drawing.Size(211, 22); this.SaveMovieMenuItem.Text = "&Save Movie"; this.SaveMovieMenuItem.Click += new System.EventHandler(this.SaveMovieMenuItem_Click); // // SaveMovieAsMenuItem // - this.SaveMovieAsMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.SaveAs; this.SaveMovieAsMenuItem.Name = "SaveMovieAsMenuItem"; - this.SaveMovieAsMenuItem.Size = new System.Drawing.Size(231, 22); + this.SaveMovieAsMenuItem.Size = new System.Drawing.Size(211, 22); this.SaveMovieAsMenuItem.Text = "Save Movie As..."; this.SaveMovieAsMenuItem.Click += new System.EventHandler(this.SaveMovieAsMenuItem_Click); // // StopMovieWithoutSavingMenuItem // - this.StopMovieWithoutSavingMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Stop; this.StopMovieWithoutSavingMenuItem.Name = "StopMovieWithoutSavingMenuItem"; - this.StopMovieWithoutSavingMenuItem.Size = new System.Drawing.Size(231, 22); + this.StopMovieWithoutSavingMenuItem.Size = new System.Drawing.Size(211, 22); this.StopMovieWithoutSavingMenuItem.Text = "Stop Movie without Saving"; this.StopMovieWithoutSavingMenuItem.Click += new System.EventHandler(this.StopMovieWithoutSavingMenuItem_Click); // // toolStripSeparator14 // this.toolStripSeparator14.Name = "toolStripSeparator14"; - this.toolStripSeparator14.Size = new System.Drawing.Size(228, 6); + this.toolStripSeparator14.Size = new System.Drawing.Size(208, 6); // // AutomaticallyBackupMoviesMenuItem // this.AutomaticallyBackupMoviesMenuItem.Name = "AutomaticallyBackupMoviesMenuItem"; - this.AutomaticallyBackupMoviesMenuItem.Size = new System.Drawing.Size(231, 22); + this.AutomaticallyBackupMoviesMenuItem.Size = new System.Drawing.Size(211, 22); this.AutomaticallyBackupMoviesMenuItem.Text = "Automatically Backup Movies"; this.AutomaticallyBackupMoviesMenuItem.Click += new System.EventHandler(this.AutomaticMovieBackupMenuItem_Click); // // FullMovieLoadstatesMenuItem // this.FullMovieLoadstatesMenuItem.Name = "FullMovieLoadstatesMenuItem"; - this.FullMovieLoadstatesMenuItem.Size = new System.Drawing.Size(231, 22); + this.FullMovieLoadstatesMenuItem.Size = new System.Drawing.Size(211, 22); this.FullMovieLoadstatesMenuItem.Text = "Full Movie Loadstates"; this.FullMovieLoadstatesMenuItem.Click += new System.EventHandler(this.FullMovieLoadstatesMenuItem_Click); // @@ -1117,35 +1104,35 @@ this.MovieEndStopMenuItem, this.MovieEndPauseMenuItem}); this.MovieEndSubMenu.Name = "MovieEndSubMenu"; - this.MovieEndSubMenu.Size = new System.Drawing.Size(231, 22); + this.MovieEndSubMenu.Size = new System.Drawing.Size(211, 22); this.MovieEndSubMenu.Text = "On Movie End"; this.MovieEndSubMenu.DropDownOpened += new System.EventHandler(this.MovieEndSubMenu_DropDownOpened); // // MovieEndFinishMenuItem // this.MovieEndFinishMenuItem.Name = "MovieEndFinishMenuItem"; - this.MovieEndFinishMenuItem.Size = new System.Drawing.Size(170, 22); + this.MovieEndFinishMenuItem.Size = new System.Drawing.Size(160, 22); this.MovieEndFinishMenuItem.Text = "Switch to Finished"; this.MovieEndFinishMenuItem.Click += new System.EventHandler(this.MovieEndFinishMenuItem_Click); // // MovieEndRecordMenuItem // this.MovieEndRecordMenuItem.Name = "MovieEndRecordMenuItem"; - this.MovieEndRecordMenuItem.Size = new System.Drawing.Size(170, 22); + this.MovieEndRecordMenuItem.Size = new System.Drawing.Size(160, 22); this.MovieEndRecordMenuItem.Text = "Switch To Record"; this.MovieEndRecordMenuItem.Click += new System.EventHandler(this.MovieEndRecordMenuItem_Click); // // MovieEndStopMenuItem // this.MovieEndStopMenuItem.Name = "MovieEndStopMenuItem"; - this.MovieEndStopMenuItem.Size = new System.Drawing.Size(170, 22); + this.MovieEndStopMenuItem.Size = new System.Drawing.Size(160, 22); this.MovieEndStopMenuItem.Text = "Stop"; this.MovieEndStopMenuItem.Click += new System.EventHandler(this.MovieEndStopMenuItem_Click); // // MovieEndPauseMenuItem // this.MovieEndPauseMenuItem.Name = "MovieEndPauseMenuItem"; - this.MovieEndPauseMenuItem.Size = new System.Drawing.Size(170, 22); + this.MovieEndPauseMenuItem.Size = new System.Drawing.Size(160, 22); this.MovieEndPauseMenuItem.Text = "Pause"; this.MovieEndPauseMenuItem.Click += new System.EventHandler(this.MovieEndPauseMenuItem_Click); // @@ -1159,50 +1146,47 @@ this.CaptureOSDMenuItem, this.SynclessRecordingMenuItem}); this.AVSubMenu.Name = "AVSubMenu"; - this.AVSubMenu.Size = new System.Drawing.Size(159, 22); + this.AVSubMenu.Size = new System.Drawing.Size(151, 22); this.AVSubMenu.Text = "&AVI/WAV"; this.AVSubMenu.DropDownOpened += new System.EventHandler(this.AVSubMenu_DropDownOpened); // // RecordAVMenuItem // - this.RecordAVMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.RecordHS; this.RecordAVMenuItem.Name = "RecordAVMenuItem"; - this.RecordAVMenuItem.Size = new System.Drawing.Size(223, 22); + this.RecordAVMenuItem.Size = new System.Drawing.Size(210, 22); this.RecordAVMenuItem.Text = "&Record AVI/WAV"; this.RecordAVMenuItem.Click += new System.EventHandler(this.RecordAVMenuItem_Click); // // ConfigAndRecordAVMenuItem // - this.ConfigAndRecordAVMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.AVI; this.ConfigAndRecordAVMenuItem.Name = "ConfigAndRecordAVMenuItem"; - this.ConfigAndRecordAVMenuItem.Size = new System.Drawing.Size(223, 22); + this.ConfigAndRecordAVMenuItem.Size = new System.Drawing.Size(210, 22); this.ConfigAndRecordAVMenuItem.Text = "Config and Record AVI/WAV"; this.ConfigAndRecordAVMenuItem.Click += new System.EventHandler(this.ConfigAndRecordAVMenuItem_Click); // // StopAVIMenuItem // - this.StopAVIMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Stop; this.StopAVIMenuItem.Name = "StopAVIMenuItem"; - this.StopAVIMenuItem.Size = new System.Drawing.Size(223, 22); + this.StopAVIMenuItem.Size = new System.Drawing.Size(210, 22); this.StopAVIMenuItem.Text = "&Stop AVI/WAV"; this.StopAVIMenuItem.Click += new System.EventHandler(this.StopAVMenuItem_Click); // // toolStripSeparator19 // this.toolStripSeparator19.Name = "toolStripSeparator19"; - this.toolStripSeparator19.Size = new System.Drawing.Size(220, 6); + this.toolStripSeparator19.Size = new System.Drawing.Size(207, 6); // // CaptureOSDMenuItem // this.CaptureOSDMenuItem.Name = "CaptureOSDMenuItem"; - this.CaptureOSDMenuItem.Size = new System.Drawing.Size(223, 22); + this.CaptureOSDMenuItem.Size = new System.Drawing.Size(210, 22); this.CaptureOSDMenuItem.Text = "Capture OSD"; this.CaptureOSDMenuItem.Click += new System.EventHandler(this.CaptureOSDMenuItem_Click); // // SynclessRecordingMenuItem // this.SynclessRecordingMenuItem.Name = "SynclessRecordingMenuItem"; - this.SynclessRecordingMenuItem.Size = new System.Drawing.Size(223, 22); + this.SynclessRecordingMenuItem.Size = new System.Drawing.Size(210, 22); this.SynclessRecordingMenuItem.Text = "S&yncless Recording Tools"; this.SynclessRecordingMenuItem.Click += new System.EventHandler(this.SynclessRecordingMenuItem_Click); // @@ -1216,61 +1200,60 @@ this.toolStripSeparator20, this.ScreenshotCaptureOSDMenuItem1}); this.ScreenshotSubMenu.Name = "ScreenshotSubMenu"; - this.ScreenshotSubMenu.Size = new System.Drawing.Size(159, 22); + this.ScreenshotSubMenu.Size = new System.Drawing.Size(151, 22); this.ScreenshotSubMenu.Text = "Scree&nshot"; this.ScreenshotSubMenu.DropDownOpening += new System.EventHandler(this.ScreenshotSubMenu_DropDownOpening); // // ScreenshotMenuItem // - this.ScreenshotMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.camera; this.ScreenshotMenuItem.Name = "ScreenshotMenuItem"; - this.ScreenshotMenuItem.Size = new System.Drawing.Size(243, 22); + this.ScreenshotMenuItem.Size = new System.Drawing.Size(227, 22); this.ScreenshotMenuItem.Text = "Screenshot"; this.ScreenshotMenuItem.Click += new System.EventHandler(this.ScreenshotMenuItem_Click); // // ScreenshotAsMenuItem // this.ScreenshotAsMenuItem.Name = "ScreenshotAsMenuItem"; - this.ScreenshotAsMenuItem.Size = new System.Drawing.Size(243, 22); + this.ScreenshotAsMenuItem.Size = new System.Drawing.Size(227, 22); this.ScreenshotAsMenuItem.Text = "Screenshot As..."; this.ScreenshotAsMenuItem.Click += new System.EventHandler(this.ScreenshotAsMenuItem_Click); // // ScreenshotClipboardMenuItem // this.ScreenshotClipboardMenuItem.Name = "ScreenshotClipboardMenuItem"; - this.ScreenshotClipboardMenuItem.Size = new System.Drawing.Size(243, 22); + this.ScreenshotClipboardMenuItem.Size = new System.Drawing.Size(227, 22); this.ScreenshotClipboardMenuItem.Text = "Screenshot (raw) -> Clipboard"; this.ScreenshotClipboardMenuItem.Click += new System.EventHandler(this.ScreenshotClipboardMenuItem_Click); // // ScreenshotClientClipboardMenuItem // this.ScreenshotClientClipboardMenuItem.Name = "ScreenshotClientClipboardMenuItem"; - this.ScreenshotClientClipboardMenuItem.Size = new System.Drawing.Size(243, 22); + this.ScreenshotClientClipboardMenuItem.Size = new System.Drawing.Size(227, 22); this.ScreenshotClientClipboardMenuItem.Text = "Screenshot (client) -> Clipboard"; this.ScreenshotClientClipboardMenuItem.Click += new System.EventHandler(this.ScreenshotClientClipboardMenuItem_Click); // // toolStripSeparator20 // this.toolStripSeparator20.Name = "toolStripSeparator20"; - this.toolStripSeparator20.Size = new System.Drawing.Size(240, 6); + this.toolStripSeparator20.Size = new System.Drawing.Size(224, 6); // // ScreenshotCaptureOSDMenuItem1 // this.ScreenshotCaptureOSDMenuItem1.Name = "ScreenshotCaptureOSDMenuItem1"; - this.ScreenshotCaptureOSDMenuItem1.Size = new System.Drawing.Size(243, 22); + this.ScreenshotCaptureOSDMenuItem1.Size = new System.Drawing.Size(227, 22); this.ScreenshotCaptureOSDMenuItem1.Text = "Capture OSD"; this.ScreenshotCaptureOSDMenuItem1.Click += new System.EventHandler(this.ScreenshotCaptureOSDMenuItem_Click); // // toolStripSeparator4 // this.toolStripSeparator4.Name = "toolStripSeparator4"; - this.toolStripSeparator4.Size = new System.Drawing.Size(156, 6); + this.toolStripSeparator4.Size = new System.Drawing.Size(148, 6); // // ExitMenuItem // this.ExitMenuItem.Name = "ExitMenuItem"; this.ExitMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4))); - this.ExitMenuItem.Size = new System.Drawing.Size(159, 22); + this.ExitMenuItem.Size = new System.Drawing.Size(151, 22); this.ExitMenuItem.Text = "E&xit"; this.ExitMenuItem.Click += new System.EventHandler(this.ExitMenuItem_Click); // @@ -1283,42 +1266,40 @@ this.SoftResetMenuItem, this.HardResetMenuItem}); this.EmulationSubMenu.Name = "EmulationSubMenu"; - this.EmulationSubMenu.Size = new System.Drawing.Size(73, 19); + this.EmulationSubMenu.Size = new System.Drawing.Size(65, 17); this.EmulationSubMenu.Text = "&Emulation"; this.EmulationSubMenu.DropDownOpened += new System.EventHandler(this.EmulationMenuItem_DropDownOpened); // // PauseMenuItem // - this.PauseMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Pause; this.PauseMenuItem.Name = "PauseMenuItem"; - this.PauseMenuItem.Size = new System.Drawing.Size(140, 22); + this.PauseMenuItem.Size = new System.Drawing.Size(135, 22); this.PauseMenuItem.Text = "&Pause"; this.PauseMenuItem.Click += new System.EventHandler(this.PauseMenuItem_Click); // // RebootCoreMenuItem // - this.RebootCoreMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.reboot; this.RebootCoreMenuItem.Name = "RebootCoreMenuItem"; - this.RebootCoreMenuItem.Size = new System.Drawing.Size(140, 22); + this.RebootCoreMenuItem.Size = new System.Drawing.Size(135, 22); this.RebootCoreMenuItem.Text = "&Reboot Core"; this.RebootCoreMenuItem.Click += new System.EventHandler(this.PowerMenuItem_Click); // // toolStripSeparator1 // this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(137, 6); + this.toolStripSeparator1.Size = new System.Drawing.Size(132, 6); // // SoftResetMenuItem // this.SoftResetMenuItem.Name = "SoftResetMenuItem"; - this.SoftResetMenuItem.Size = new System.Drawing.Size(140, 22); + this.SoftResetMenuItem.Size = new System.Drawing.Size(135, 22); this.SoftResetMenuItem.Text = "&Soft Reset"; this.SoftResetMenuItem.Click += new System.EventHandler(this.SoftResetMenuItem_Click); // // HardResetMenuItem // this.HardResetMenuItem.Name = "HardResetMenuItem"; - this.HardResetMenuItem.Size = new System.Drawing.Size(140, 22); + this.HardResetMenuItem.Size = new System.Drawing.Size(135, 22); this.HardResetMenuItem.Text = "&Hard Reset"; this.HardResetMenuItem.Click += new System.EventHandler(this.HardResetMenuItem_Click); // @@ -1339,7 +1320,7 @@ this.DisplayMessagesMenuItem, this.DisplayLogWindowMenuItem}); this.ViewSubMenu.Name = "ViewSubMenu"; - this.ViewSubMenu.Size = new System.Drawing.Size(44, 19); + this.ViewSubMenu.Size = new System.Drawing.Size(41, 17); this.ViewSubMenu.Text = "&View"; this.ViewSubMenu.DropDownOpened += new System.EventHandler(this.ViewSubMenu_DropDownOpened); // @@ -1353,130 +1334,129 @@ this.x5MenuItem, this.mzMenuItem}); this.WindowSizeSubMenu.Name = "WindowSizeSubMenu"; - this.WindowSizeSubMenu.Size = new System.Drawing.Size(198, 22); + this.WindowSizeSubMenu.Size = new System.Drawing.Size(187, 22); this.WindowSizeSubMenu.Text = "&Window Size"; this.WindowSizeSubMenu.DropDownOpened += new System.EventHandler(this.WindowSizeSubMenu_DropDownOpened); // // x1MenuItem // this.x1MenuItem.Name = "x1MenuItem"; - this.x1MenuItem.Size = new System.Drawing.Size(96, 22); + this.x1MenuItem.Size = new System.Drawing.Size(94, 22); this.x1MenuItem.Text = "&1x"; this.x1MenuItem.Click += new System.EventHandler(this.WindowSize_Click); // // x2MenuItem // this.x2MenuItem.Name = "x2MenuItem"; - this.x2MenuItem.Size = new System.Drawing.Size(96, 22); + this.x2MenuItem.Size = new System.Drawing.Size(94, 22); this.x2MenuItem.Text = "&2x"; this.x2MenuItem.Click += new System.EventHandler(this.WindowSize_Click); // // x3MenuItem // this.x3MenuItem.Name = "x3MenuItem"; - this.x3MenuItem.Size = new System.Drawing.Size(96, 22); + this.x3MenuItem.Size = new System.Drawing.Size(94, 22); this.x3MenuItem.Text = "&3x"; this.x3MenuItem.Click += new System.EventHandler(this.WindowSize_Click); // // x4MenuItem // this.x4MenuItem.Name = "x4MenuItem"; - this.x4MenuItem.Size = new System.Drawing.Size(96, 22); + this.x4MenuItem.Size = new System.Drawing.Size(94, 22); this.x4MenuItem.Text = "&4x"; this.x4MenuItem.Click += new System.EventHandler(this.WindowSize_Click); // // x5MenuItem // this.x5MenuItem.Name = "x5MenuItem"; - this.x5MenuItem.Size = new System.Drawing.Size(96, 22); + this.x5MenuItem.Size = new System.Drawing.Size(94, 22); this.x5MenuItem.Text = "&5x"; this.x5MenuItem.Click += new System.EventHandler(this.WindowSize_Click); // // mzMenuItem // this.mzMenuItem.Name = "mzMenuItem"; - this.mzMenuItem.Size = new System.Drawing.Size(96, 22); + this.mzMenuItem.Size = new System.Drawing.Size(94, 22); this.mzMenuItem.Text = "&Max"; this.mzMenuItem.Click += new System.EventHandler(this.WindowSize_Click); // // SwitchToFullscreenMenuItem // - this.SwitchToFullscreenMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Fullscreen; this.SwitchToFullscreenMenuItem.Name = "SwitchToFullscreenMenuItem"; - this.SwitchToFullscreenMenuItem.Size = new System.Drawing.Size(198, 22); + this.SwitchToFullscreenMenuItem.Size = new System.Drawing.Size(187, 22); this.SwitchToFullscreenMenuItem.Text = "Switch to Fullscreen"; this.SwitchToFullscreenMenuItem.Click += new System.EventHandler(this.SwitchToFullscreenMenuItem_Click); // // toolStripSeparator2 // this.toolStripSeparator2.Name = "toolStripSeparator2"; - this.toolStripSeparator2.Size = new System.Drawing.Size(195, 6); + this.toolStripSeparator2.Size = new System.Drawing.Size(184, 6); // // DisplayFPSMenuItem // this.DisplayFPSMenuItem.Name = "DisplayFPSMenuItem"; - this.DisplayFPSMenuItem.Size = new System.Drawing.Size(198, 22); + this.DisplayFPSMenuItem.Size = new System.Drawing.Size(187, 22); this.DisplayFPSMenuItem.Text = "Display FPS"; this.DisplayFPSMenuItem.Click += new System.EventHandler(this.DisplayFpsMenuItem_Click); // // DisplayFrameCounterMenuItem // this.DisplayFrameCounterMenuItem.Name = "DisplayFrameCounterMenuItem"; - this.DisplayFrameCounterMenuItem.Size = new System.Drawing.Size(198, 22); + this.DisplayFrameCounterMenuItem.Size = new System.Drawing.Size(187, 22); this.DisplayFrameCounterMenuItem.Text = "Display FrameCounter"; this.DisplayFrameCounterMenuItem.Click += new System.EventHandler(this.DisplayFrameCounterMenuItem_Click); // // DisplayLagCounterMenuItem // this.DisplayLagCounterMenuItem.Name = "DisplayLagCounterMenuItem"; - this.DisplayLagCounterMenuItem.Size = new System.Drawing.Size(198, 22); + this.DisplayLagCounterMenuItem.Size = new System.Drawing.Size(187, 22); this.DisplayLagCounterMenuItem.Text = "Display Lag Counter"; this.DisplayLagCounterMenuItem.Click += new System.EventHandler(this.DisplayLagCounterMenuItem_Click); // // DisplayInputMenuItem // this.DisplayInputMenuItem.Name = "DisplayInputMenuItem"; - this.DisplayInputMenuItem.Size = new System.Drawing.Size(198, 22); + this.DisplayInputMenuItem.Size = new System.Drawing.Size(187, 22); this.DisplayInputMenuItem.Text = "Display Input"; this.DisplayInputMenuItem.Click += new System.EventHandler(this.DisplayInputMenuItem_Click); // // DisplayRerecordCountMenuItem // this.DisplayRerecordCountMenuItem.Name = "DisplayRerecordCountMenuItem"; - this.DisplayRerecordCountMenuItem.Size = new System.Drawing.Size(198, 22); + this.DisplayRerecordCountMenuItem.Size = new System.Drawing.Size(187, 22); this.DisplayRerecordCountMenuItem.Text = "Display Rerecord Count"; this.DisplayRerecordCountMenuItem.Click += new System.EventHandler(this.DisplayRerecordsMenuItem_Click); // // DisplaySubtitlesMenuItem // this.DisplaySubtitlesMenuItem.Name = "DisplaySubtitlesMenuItem"; - this.DisplaySubtitlesMenuItem.Size = new System.Drawing.Size(198, 22); + this.DisplaySubtitlesMenuItem.Size = new System.Drawing.Size(187, 22); this.DisplaySubtitlesMenuItem.Text = "Display Subtitles"; this.DisplaySubtitlesMenuItem.Click += new System.EventHandler(this.DisplaySubtitlesMenuItem_Click); // // toolStripMenuItem4 // this.toolStripMenuItem4.Name = "toolStripMenuItem4"; - this.toolStripMenuItem4.Size = new System.Drawing.Size(195, 6); + this.toolStripMenuItem4.Size = new System.Drawing.Size(184, 6); // // DisplayStatusBarMenuItem // this.DisplayStatusBarMenuItem.Name = "DisplayStatusBarMenuItem"; - this.DisplayStatusBarMenuItem.Size = new System.Drawing.Size(198, 22); + this.DisplayStatusBarMenuItem.Size = new System.Drawing.Size(187, 22); this.DisplayStatusBarMenuItem.Text = "Display Status Bar"; this.DisplayStatusBarMenuItem.Click += new System.EventHandler(this.DisplayStatusBarMenuItem_Click); // // DisplayMessagesMenuItem // this.DisplayMessagesMenuItem.Name = "DisplayMessagesMenuItem"; - this.DisplayMessagesMenuItem.Size = new System.Drawing.Size(198, 22); + this.DisplayMessagesMenuItem.Size = new System.Drawing.Size(187, 22); this.DisplayMessagesMenuItem.Text = "Display Messages"; this.DisplayMessagesMenuItem.Click += new System.EventHandler(this.DisplayMessagesMenuItem_Click); // // DisplayLogWindowMenuItem // this.DisplayLogWindowMenuItem.Name = "DisplayLogWindowMenuItem"; - this.DisplayLogWindowMenuItem.Size = new System.Drawing.Size(198, 22); + this.DisplayLogWindowMenuItem.Size = new System.Drawing.Size(187, 22); this.DisplayLogWindowMenuItem.Text = "Display Log Window"; this.DisplayLogWindowMenuItem.Click += new System.EventHandler(this.DisplayLogWindowMenuItem_Click); // @@ -1505,108 +1485,98 @@ this.LoadConfigMenuItem, this.LoadConfigFromMenuItem}); this.ConfigSubMenu.Name = "ConfigSubMenu"; - this.ConfigSubMenu.Size = new System.Drawing.Size(55, 19); + this.ConfigSubMenu.Size = new System.Drawing.Size(50, 17); this.ConfigSubMenu.Text = "&Config"; this.ConfigSubMenu.DropDownOpened += new System.EventHandler(this.ConfigSubMenu_DropDownOpened); // // ControllersMenuItem // - this.ControllersMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController; this.ControllersMenuItem.Name = "ControllersMenuItem"; - this.ControllersMenuItem.Size = new System.Drawing.Size(180, 22); + this.ControllersMenuItem.Size = new System.Drawing.Size(170, 22); this.ControllersMenuItem.Text = "&Controllers..."; this.ControllersMenuItem.Click += new System.EventHandler(this.ControllersMenuItem_Click); // // HotkeysMenuItem // - this.HotkeysMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.HotKeys; this.HotkeysMenuItem.Name = "HotkeysMenuItem"; - this.HotkeysMenuItem.Size = new System.Drawing.Size(180, 22); + this.HotkeysMenuItem.Size = new System.Drawing.Size(170, 22); this.HotkeysMenuItem.Text = "&Hotkeys..."; this.HotkeysMenuItem.Click += new System.EventHandler(this.HotkeysMenuItem_Click); // // DisplayConfigMenuItem // - this.DisplayConfigMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("DisplayConfigMenuItem.Image"))); this.DisplayConfigMenuItem.Name = "DisplayConfigMenuItem"; - this.DisplayConfigMenuItem.Size = new System.Drawing.Size(180, 22); + this.DisplayConfigMenuItem.Size = new System.Drawing.Size(170, 22); this.DisplayConfigMenuItem.Text = "Display..."; this.DisplayConfigMenuItem.Click += new System.EventHandler(this.DisplayConfigMenuItem_Click); // // SoundMenuItem // - this.SoundMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.AudioHS; this.SoundMenuItem.Name = "SoundMenuItem"; - this.SoundMenuItem.Size = new System.Drawing.Size(180, 22); + this.SoundMenuItem.Size = new System.Drawing.Size(170, 22); this.SoundMenuItem.Text = "&Sound..."; this.SoundMenuItem.Click += new System.EventHandler(this.SoundMenuItem_Click); // // PathsMenuItem // - this.PathsMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.CopyFolderHS; this.PathsMenuItem.Name = "PathsMenuItem"; - this.PathsMenuItem.Size = new System.Drawing.Size(180, 22); + this.PathsMenuItem.Size = new System.Drawing.Size(170, 22); this.PathsMenuItem.Text = "Paths..."; this.PathsMenuItem.Click += new System.EventHandler(this.PathsMenuItem_Click); // // FirmwaresMenuItem // - this.FirmwaresMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("FirmwaresMenuItem.Image"))); this.FirmwaresMenuItem.Name = "FirmwaresMenuItem"; - this.FirmwaresMenuItem.Size = new System.Drawing.Size(180, 22); + this.FirmwaresMenuItem.Size = new System.Drawing.Size(170, 22); this.FirmwaresMenuItem.Text = "&Firmwares..."; this.FirmwaresMenuItem.Click += new System.EventHandler(this.FirmwaresMenuItem_Click); // // MessagesMenuItem // - this.MessagesMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.MessageConfig; this.MessagesMenuItem.Name = "MessagesMenuItem"; - this.MessagesMenuItem.Size = new System.Drawing.Size(180, 22); + this.MessagesMenuItem.Size = new System.Drawing.Size(170, 22); this.MessagesMenuItem.Text = "&Messages..."; this.MessagesMenuItem.Click += new System.EventHandler(this.MessagesMenuItem_Click); // // AutofireMenuItem // - this.AutofireMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Lightning; this.AutofireMenuItem.Name = "AutofireMenuItem"; - this.AutofireMenuItem.Size = new System.Drawing.Size(180, 22); + this.AutofireMenuItem.Size = new System.Drawing.Size(170, 22); this.AutofireMenuItem.Text = "&Autofire..."; this.AutofireMenuItem.Click += new System.EventHandler(this.AutofireMenuItem_Click); // // RewindOptionsMenuItem // - this.RewindOptionsMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Previous; this.RewindOptionsMenuItem.Name = "RewindOptionsMenuItem"; - this.RewindOptionsMenuItem.Size = new System.Drawing.Size(180, 22); + this.RewindOptionsMenuItem.Size = new System.Drawing.Size(170, 22); this.RewindOptionsMenuItem.Text = "&Rewind && States..."; this.RewindOptionsMenuItem.Click += new System.EventHandler(this.RewindOptionsMenuItem_Click); // // extensionsToolStripMenuItem // this.extensionsToolStripMenuItem.Name = "extensionsToolStripMenuItem"; - this.extensionsToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.extensionsToolStripMenuItem.Size = new System.Drawing.Size(170, 22); this.extensionsToolStripMenuItem.Text = "File Extensions..."; this.extensionsToolStripMenuItem.Click += new System.EventHandler(this.FileExtensionsMenuItem_Click); // // ClientOptionsMenuItem // this.ClientOptionsMenuItem.Name = "ClientOptionsMenuItem"; - this.ClientOptionsMenuItem.Size = new System.Drawing.Size(180, 22); + this.ClientOptionsMenuItem.Size = new System.Drawing.Size(170, 22); this.ClientOptionsMenuItem.Text = "&Customize..."; this.ClientOptionsMenuItem.Click += new System.EventHandler(this.CustomizeMenuItem_Click); // // ProfilesMenuItem // - this.ProfilesMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.user_blue_small; this.ProfilesMenuItem.Name = "ProfilesMenuItem"; - this.ProfilesMenuItem.Size = new System.Drawing.Size(180, 22); + this.ProfilesMenuItem.Size = new System.Drawing.Size(170, 22); this.ProfilesMenuItem.Text = "&Profiles..."; this.ProfilesMenuItem.Click += new System.EventHandler(this.ProfilesMenuItem_Click); // // toolStripSeparator9 // this.toolStripSeparator9.Name = "toolStripSeparator9"; - this.toolStripSeparator9.Size = new System.Drawing.Size(177, 6); + this.toolStripSeparator9.Size = new System.Drawing.Size(167, 6); // // SpeedSkipSubMenu // @@ -1629,66 +1599,66 @@ this.Speed200MenuItem, this.Speed400MenuItem}); this.SpeedSkipSubMenu.Name = "SpeedSkipSubMenu"; - this.SpeedSkipSubMenu.Size = new System.Drawing.Size(180, 22); + this.SpeedSkipSubMenu.Size = new System.Drawing.Size(170, 22); this.SpeedSkipSubMenu.Text = "Speed/Skip"; this.SpeedSkipSubMenu.DropDownOpened += new System.EventHandler(this.FrameSkipMenuItem_DropDownOpened); // // ClockThrottleMenuItem // this.ClockThrottleMenuItem.Name = "ClockThrottleMenuItem"; - this.ClockThrottleMenuItem.Size = new System.Drawing.Size(202, 22); + this.ClockThrottleMenuItem.Size = new System.Drawing.Size(181, 22); this.ClockThrottleMenuItem.Text = "Clock Throttle"; this.ClockThrottleMenuItem.Click += new System.EventHandler(this.ClockThrottleMenuItem_Click); // // AudioThrottleMenuItem // this.AudioThrottleMenuItem.Name = "AudioThrottleMenuItem"; - this.AudioThrottleMenuItem.Size = new System.Drawing.Size(202, 22); + this.AudioThrottleMenuItem.Size = new System.Drawing.Size(181, 22); this.AudioThrottleMenuItem.Text = "Audio Throttle"; this.AudioThrottleMenuItem.Click += new System.EventHandler(this.AudioThrottleMenuItem_Click); // // VsyncThrottleMenuItem // this.VsyncThrottleMenuItem.Name = "VsyncThrottleMenuItem"; - this.VsyncThrottleMenuItem.Size = new System.Drawing.Size(202, 22); + this.VsyncThrottleMenuItem.Size = new System.Drawing.Size(181, 22); this.VsyncThrottleMenuItem.Text = "VSync Throttle"; this.VsyncThrottleMenuItem.Click += new System.EventHandler(this.VsyncThrottleMenuItem_Click); // // toolStripSeparator27 // this.toolStripSeparator27.Name = "toolStripSeparator27"; - this.toolStripSeparator27.Size = new System.Drawing.Size(199, 6); + this.toolStripSeparator27.Size = new System.Drawing.Size(178, 6); // // VsyncEnabledMenuItem // this.VsyncEnabledMenuItem.Name = "VsyncEnabledMenuItem"; - this.VsyncEnabledMenuItem.Size = new System.Drawing.Size(202, 22); + this.VsyncEnabledMenuItem.Size = new System.Drawing.Size(181, 22); this.VsyncEnabledMenuItem.Text = "VSync Enabled"; this.VsyncEnabledMenuItem.Click += new System.EventHandler(this.VsyncEnabledMenuItem_Click); // // toolStripMenuItem3 // this.toolStripMenuItem3.Name = "toolStripMenuItem3"; - this.toolStripMenuItem3.Size = new System.Drawing.Size(199, 6); + this.toolStripMenuItem3.Size = new System.Drawing.Size(178, 6); // // miUnthrottled // this.miUnthrottled.Name = "miUnthrottled"; - this.miUnthrottled.Size = new System.Drawing.Size(202, 22); + this.miUnthrottled.Size = new System.Drawing.Size(181, 22); this.miUnthrottled.Text = "Unthrottled"; this.miUnthrottled.Click += new System.EventHandler(this.UnthrottledMenuItem_Click); // // MinimizeSkippingMenuItem // this.MinimizeSkippingMenuItem.Name = "MinimizeSkippingMenuItem"; - this.MinimizeSkippingMenuItem.Size = new System.Drawing.Size(202, 22); + this.MinimizeSkippingMenuItem.Size = new System.Drawing.Size(181, 22); this.MinimizeSkippingMenuItem.Text = "Auto-minimize skipping"; this.MinimizeSkippingMenuItem.Click += new System.EventHandler(this.MinimizeSkippingMenuItem_Click); // // NeverSkipMenuItem // this.NeverSkipMenuItem.Name = "NeverSkipMenuItem"; - this.NeverSkipMenuItem.Size = new System.Drawing.Size(202, 22); + this.NeverSkipMenuItem.Size = new System.Drawing.Size(181, 22); this.NeverSkipMenuItem.Text = "Skip 0 (never)"; this.NeverSkipMenuItem.Click += new System.EventHandler(this.NeverSkipMenuItem_Click); // @@ -1705,7 +1675,7 @@ this.Frameskip8MenuItem, this.Frameskip9MenuItem}); this.toolStripMenuItem17.Name = "toolStripMenuItem17"; - this.toolStripMenuItem17.Size = new System.Drawing.Size(202, 22); + this.toolStripMenuItem17.Size = new System.Drawing.Size(181, 22); this.toolStripMenuItem17.Text = "Skip 1..9"; // // Frameskip1MenuItem @@ -1774,47 +1744,47 @@ // toolStripMenuItem5 // this.toolStripMenuItem5.Name = "toolStripMenuItem5"; - this.toolStripMenuItem5.Size = new System.Drawing.Size(199, 6); + this.toolStripMenuItem5.Size = new System.Drawing.Size(178, 6); // // Speed50MenuItem // this.Speed50MenuItem.Name = "Speed50MenuItem"; - this.Speed50MenuItem.Size = new System.Drawing.Size(202, 22); + this.Speed50MenuItem.Size = new System.Drawing.Size(181, 22); this.Speed50MenuItem.Text = "Speed 50%"; this.Speed50MenuItem.Click += new System.EventHandler(this.Speed50MenuItem_Click); // // Speed75MenuItem // this.Speed75MenuItem.Name = "Speed75MenuItem"; - this.Speed75MenuItem.Size = new System.Drawing.Size(202, 22); + this.Speed75MenuItem.Size = new System.Drawing.Size(181, 22); this.Speed75MenuItem.Text = "Speed 75%"; this.Speed75MenuItem.Click += new System.EventHandler(this.Speed75MenuItem_Click); // // Speed100MenuItem // this.Speed100MenuItem.Name = "Speed100MenuItem"; - this.Speed100MenuItem.Size = new System.Drawing.Size(202, 22); + this.Speed100MenuItem.Size = new System.Drawing.Size(181, 22); this.Speed100MenuItem.Text = "Speed 100%"; this.Speed100MenuItem.Click += new System.EventHandler(this.Speed100MenuItem_Click); // // Speed150MenuItem // this.Speed150MenuItem.Name = "Speed150MenuItem"; - this.Speed150MenuItem.Size = new System.Drawing.Size(202, 22); + this.Speed150MenuItem.Size = new System.Drawing.Size(181, 22); this.Speed150MenuItem.Text = "Speed 150%"; this.Speed150MenuItem.Click += new System.EventHandler(this.Speed150MenuItem_Click); // // Speed200MenuItem // this.Speed200MenuItem.Name = "Speed200MenuItem"; - this.Speed200MenuItem.Size = new System.Drawing.Size(202, 22); + this.Speed200MenuItem.Size = new System.Drawing.Size(181, 22); this.Speed200MenuItem.Text = "Speed 200%"; this.Speed200MenuItem.Click += new System.EventHandler(this.Speed200MenuItem_Click); // // Speed400MenuItem // this.Speed400MenuItem.Name = "Speed400MenuItem"; - this.Speed400MenuItem.Size = new System.Drawing.Size(202, 22); + this.Speed400MenuItem.Size = new System.Drawing.Size(181, 22); this.Speed400MenuItem.Text = "Speed 400%"; this.Speed400MenuItem.Click += new System.EventHandler(this.Speed400MenuItem_Click); // @@ -1825,28 +1795,28 @@ this.InputOverHkMenuItem, this.HkOverInputMenuItem}); this.KeyPrioritySubMenu.Name = "KeyPrioritySubMenu"; - this.KeyPrioritySubMenu.Size = new System.Drawing.Size(180, 22); + this.KeyPrioritySubMenu.Size = new System.Drawing.Size(170, 22); this.KeyPrioritySubMenu.Text = "Key Priority"; this.KeyPrioritySubMenu.DropDownOpened += new System.EventHandler(this.KeyPriorityMenuItem_DropDownOpened); // // BothHkAndControllerMenuItem // this.BothHkAndControllerMenuItem.Name = "BothHkAndControllerMenuItem"; - this.BothHkAndControllerMenuItem.Size = new System.Drawing.Size(229, 22); + this.BothHkAndControllerMenuItem.Size = new System.Drawing.Size(214, 22); this.BothHkAndControllerMenuItem.Text = "Both Hotkeys and Controllers"; this.BothHkAndControllerMenuItem.Click += new System.EventHandler(this.BothHkAndControllerMenuItem_Click); // // InputOverHkMenuItem // this.InputOverHkMenuItem.Name = "InputOverHkMenuItem"; - this.InputOverHkMenuItem.Size = new System.Drawing.Size(229, 22); + this.InputOverHkMenuItem.Size = new System.Drawing.Size(214, 22); this.InputOverHkMenuItem.Text = "Input overrides Hotkeys"; this.InputOverHkMenuItem.Click += new System.EventHandler(this.InputOverHkMenuItem_Click); // // HkOverInputMenuItem // this.HkOverInputMenuItem.Name = "HkOverInputMenuItem"; - this.HkOverInputMenuItem.Size = new System.Drawing.Size(229, 22); + this.HkOverInputMenuItem.Size = new System.Drawing.Size(214, 22); this.HkOverInputMenuItem.Text = "Hotkeys override Input"; this.HkOverInputMenuItem.Click += new System.EventHandler(this.HkOverInputMenuItem_Click); // @@ -1865,7 +1835,7 @@ this.N64VideoPluginSettingsMenuItem, this.setLibretroCoreToolStripMenuItem}); this.CoresSubMenu.Name = "CoresSubMenu"; - this.CoresSubMenu.Size = new System.Drawing.Size(180, 22); + this.CoresSubMenu.Size = new System.Drawing.Size(170, 22); this.CoresSubMenu.Text = "Cores"; this.CoresSubMenu.DropDownOpened += new System.EventHandler(this.CoresSubMenu_DropDownOpened); // @@ -1877,33 +1847,33 @@ this.toolStripSeparator38, this.SubNesHawkMenuItem}); this.NesCoreSubMenu.Name = "NesCoreSubMenu"; - this.NesCoreSubMenu.Size = new System.Drawing.Size(239, 22); + this.NesCoreSubMenu.Size = new System.Drawing.Size(223, 22); this.NesCoreSubMenu.Text = "NES"; this.NesCoreSubMenu.DropDownOpened += new System.EventHandler(this.NesCoreSubMenu_DropDownOpened); // // QuicknesCoreMenuItem // this.QuicknesCoreMenuItem.Name = "QuicknesCoreMenuItem"; - this.QuicknesCoreMenuItem.Size = new System.Drawing.Size(223, 22); + this.QuicknesCoreMenuItem.Size = new System.Drawing.Size(209, 22); this.QuicknesCoreMenuItem.Text = "QuickNES"; this.QuicknesCoreMenuItem.Click += new System.EventHandler(this.NesCorePick_Click); // // NesCoreMenuItem // this.NesCoreMenuItem.Name = "NesCoreMenuItem"; - this.NesCoreMenuItem.Size = new System.Drawing.Size(223, 22); + this.NesCoreMenuItem.Size = new System.Drawing.Size(209, 22); this.NesCoreMenuItem.Text = "NesHawk"; this.NesCoreMenuItem.Click += new System.EventHandler(this.NesCorePick_Click); // // toolStripSeparator38 // this.toolStripSeparator38.Name = "toolStripSeparator38"; - this.toolStripSeparator38.Size = new System.Drawing.Size(220, 6); + this.toolStripSeparator38.Size = new System.Drawing.Size(206, 6); // - // subFrameNesHawkTASOnlyToolStripMenuItem + // SubNesHawkMenuItem // this.SubNesHawkMenuItem.Name = "SubNesHawkMenuItem"; - this.SubNesHawkMenuItem.Size = new System.Drawing.Size(223, 22); + this.SubNesHawkMenuItem.Size = new System.Drawing.Size(209, 22); this.SubNesHawkMenuItem.Text = "SubNesHawk (Experimental)"; this.SubNesHawkMenuItem.Click += new System.EventHandler(this.SubNesCorePick_Click); // @@ -1913,7 +1883,7 @@ this.Coresnes9xMenuItem, this.CorebsnesMenuItem}); this.CoreSNESSubMenu.Name = "CoreSNESSubMenu"; - this.CoreSNESSubMenu.Size = new System.Drawing.Size(239, 22); + this.CoreSNESSubMenu.Size = new System.Drawing.Size(223, 22); this.CoreSNESSubMenu.Text = "SNES"; this.CoreSNESSubMenu.DropDownOpened += new System.EventHandler(this.CoreSNESSubMenu_DropDownOpened); // @@ -1937,21 +1907,21 @@ this.VbaNextCoreMenuItem, this.MgbaCoreMenuItem}); this.GbaCoreSubMenu.Name = "GbaCoreSubMenu"; - this.GbaCoreSubMenu.Size = new System.Drawing.Size(239, 22); + this.GbaCoreSubMenu.Size = new System.Drawing.Size(223, 22); this.GbaCoreSubMenu.Text = "GBA"; this.GbaCoreSubMenu.DropDownOpened += new System.EventHandler(this.GbaCoreSubMenu_DropDownOpened); // // VbaNextCoreMenuItem // this.VbaNextCoreMenuItem.Name = "VbaNextCoreMenuItem"; - this.VbaNextCoreMenuItem.Size = new System.Drawing.Size(125, 22); + this.VbaNextCoreMenuItem.Size = new System.Drawing.Size(120, 22); this.VbaNextCoreMenuItem.Text = "VBA-Next"; this.VbaNextCoreMenuItem.Click += new System.EventHandler(this.GbaCorePick_Click); // // MgbaCoreMenuItem // this.MgbaCoreMenuItem.Name = "MgbaCoreMenuItem"; - this.MgbaCoreMenuItem.Size = new System.Drawing.Size(125, 22); + this.MgbaCoreMenuItem.Size = new System.Drawing.Size(120, 22); this.MgbaCoreMenuItem.Text = "mGBA"; this.MgbaCoreMenuItem.Click += new System.EventHandler(this.GbaCorePick_Click); // @@ -1961,21 +1931,21 @@ this.SgbBsnesMenuItem, this.SgbSameBoyMenuItem}); this.SGBCoreSubmenu.Name = "SGBCoreSubmenu"; - this.SGBCoreSubmenu.Size = new System.Drawing.Size(239, 22); + this.SGBCoreSubmenu.Size = new System.Drawing.Size(223, 22); this.SGBCoreSubmenu.Text = "SGB"; this.SGBCoreSubmenu.DropDownOpened += new System.EventHandler(this.SGBCoreSubmenu_DropDownOpened); // // SgbBsnesMenuItem // this.SgbBsnesMenuItem.Name = "SgbBsnesMenuItem"; - this.SgbBsnesMenuItem.Size = new System.Drawing.Size(123, 22); + this.SgbBsnesMenuItem.Size = new System.Drawing.Size(118, 22); this.SgbBsnesMenuItem.Text = "BSNES"; this.SgbBsnesMenuItem.Click += new System.EventHandler(this.SgbCorePick_Click); // // SgbSameBoyMenuItem // this.SgbSameBoyMenuItem.Name = "SgbSameBoyMenuItem"; - this.SgbSameBoyMenuItem.Size = new System.Drawing.Size(123, 22); + this.SgbSameBoyMenuItem.Size = new System.Drawing.Size(118, 22); this.SgbSameBoyMenuItem.Text = "SameBoy"; this.SgbSameBoyMenuItem.Click += new System.EventHandler(this.SgbCorePick_Click); // @@ -1985,95 +1955,92 @@ this.GBGambatteMenuItem, this.GBGBHawkMenuItem}); this.GBCoreSubmenu.Name = "GBCoreSubmenu"; - this.GBCoreSubmenu.Size = new System.Drawing.Size(239, 22); + this.GBCoreSubmenu.Size = new System.Drawing.Size(223, 22); this.GBCoreSubmenu.Text = "GB"; this.GBCoreSubmenu.DropDownOpened += new System.EventHandler(this.GBCoreSubmenu_DropDownOpened); // // GBGambatteMenuItem // this.GBGambatteMenuItem.Name = "GBGambatteMenuItem"; - this.GBGambatteMenuItem.Size = new System.Drawing.Size(126, 22); + this.GBGambatteMenuItem.Size = new System.Drawing.Size(121, 22); this.GBGambatteMenuItem.Text = "Gambatte"; this.GBGambatteMenuItem.Click += new System.EventHandler(this.GBCorePick_Click); // // GBGBHawkMenuItem // this.GBGBHawkMenuItem.Name = "GBGBHawkMenuItem"; - this.GBGBHawkMenuItem.Size = new System.Drawing.Size(126, 22); + this.GBGBHawkMenuItem.Size = new System.Drawing.Size(121, 22); this.GBGBHawkMenuItem.Text = "GBHawk"; this.GBGBHawkMenuItem.Click += new System.EventHandler(this.GBCorePick_Click); // // GBInSGBMenuItem // this.GBInSGBMenuItem.Name = "GBInSGBMenuItem"; - this.GBInSGBMenuItem.Size = new System.Drawing.Size(239, 22); + this.GBInSGBMenuItem.Size = new System.Drawing.Size(223, 22); this.GBInSGBMenuItem.Text = "GB in SGB"; this.GBInSGBMenuItem.Click += new System.EventHandler(this.GbInSgbMenuItem_Click); // // toolStripMenuItem16 // this.toolStripMenuItem16.Name = "toolStripMenuItem16"; - this.toolStripMenuItem16.Size = new System.Drawing.Size(236, 6); + this.toolStripMenuItem16.Size = new System.Drawing.Size(220, 6); // // allowGameDBCoreOverridesToolStripMenuItem // this.allowGameDBCoreOverridesToolStripMenuItem.Name = "allowGameDBCoreOverridesToolStripMenuItem"; - this.allowGameDBCoreOverridesToolStripMenuItem.Size = new System.Drawing.Size(239, 22); + this.allowGameDBCoreOverridesToolStripMenuItem.Size = new System.Drawing.Size(223, 22); this.allowGameDBCoreOverridesToolStripMenuItem.Text = "Follow GameDB Core Overrides"; this.allowGameDBCoreOverridesToolStripMenuItem.Click += new System.EventHandler(this.AllowGameDBCoreOverridesToolStripMenuItem_Click); // // toolStripSeparator8 // this.toolStripSeparator8.Name = "toolStripSeparator8"; - this.toolStripSeparator8.Size = new System.Drawing.Size(236, 6); + this.toolStripSeparator8.Size = new System.Drawing.Size(220, 6); // // N64VideoPluginSettingsMenuItem // - this.N64VideoPluginSettingsMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.monitor; this.N64VideoPluginSettingsMenuItem.Name = "N64VideoPluginSettingsMenuItem"; - this.N64VideoPluginSettingsMenuItem.Size = new System.Drawing.Size(239, 22); + this.N64VideoPluginSettingsMenuItem.Size = new System.Drawing.Size(223, 22); this.N64VideoPluginSettingsMenuItem.Text = "N64 Video Plugin Settings"; this.N64VideoPluginSettingsMenuItem.Click += new System.EventHandler(this.N64VideoPluginSettingsMenuItem_Click); // // setLibretroCoreToolStripMenuItem // this.setLibretroCoreToolStripMenuItem.Name = "setLibretroCoreToolStripMenuItem"; - this.setLibretroCoreToolStripMenuItem.Size = new System.Drawing.Size(239, 22); + this.setLibretroCoreToolStripMenuItem.Size = new System.Drawing.Size(223, 22); this.setLibretroCoreToolStripMenuItem.Text = "Set Libretro Core"; this.setLibretroCoreToolStripMenuItem.Click += new System.EventHandler(this.SetLibretroCoreMenuItem_Click); // // toolStripSeparator10 // this.toolStripSeparator10.Name = "toolStripSeparator10"; - this.toolStripSeparator10.Size = new System.Drawing.Size(177, 6); + this.toolStripSeparator10.Size = new System.Drawing.Size(167, 6); // // SaveConfigMenuItem // - this.SaveConfigMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Save; this.SaveConfigMenuItem.Name = "SaveConfigMenuItem"; - this.SaveConfigMenuItem.Size = new System.Drawing.Size(180, 22); + this.SaveConfigMenuItem.Size = new System.Drawing.Size(170, 22); this.SaveConfigMenuItem.Text = "Save Config"; this.SaveConfigMenuItem.Click += new System.EventHandler(this.SaveConfigMenuItem_Click); // // SaveConfigAsMenuItem // this.SaveConfigAsMenuItem.Name = "SaveConfigAsMenuItem"; - this.SaveConfigAsMenuItem.Size = new System.Drawing.Size(180, 22); + this.SaveConfigAsMenuItem.Size = new System.Drawing.Size(170, 22); this.SaveConfigAsMenuItem.Text = "Save Config As..."; this.SaveConfigAsMenuItem.Click += new System.EventHandler(this.SaveConfigAsMenuItem_Click); // // LoadConfigMenuItem // - this.LoadConfigMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.LoadConfig; this.LoadConfigMenuItem.Name = "LoadConfigMenuItem"; - this.LoadConfigMenuItem.Size = new System.Drawing.Size(180, 22); + this.LoadConfigMenuItem.Size = new System.Drawing.Size(170, 22); this.LoadConfigMenuItem.Text = "Load Config"; this.LoadConfigMenuItem.Click += new System.EventHandler(this.LoadConfigMenuItem_Click); // // LoadConfigFromMenuItem // this.LoadConfigFromMenuItem.Name = "LoadConfigFromMenuItem"; - this.LoadConfigFromMenuItem.Size = new System.Drawing.Size(180, 22); + this.LoadConfigFromMenuItem.Size = new System.Drawing.Size(170, 22); this.LoadConfigFromMenuItem.Text = "Load Config From..."; this.LoadConfigFromMenuItem.Click += new System.EventHandler(this.LoadConfigFromMenuItem_Click); // @@ -2101,140 +2068,127 @@ this.externalToolToolStripMenuItem, this.batchRunnerToolStripMenuItem}); this.ToolsSubMenu.Name = "ToolsSubMenu"; - this.ToolsSubMenu.Size = new System.Drawing.Size(47, 19); + this.ToolsSubMenu.Size = new System.Drawing.Size(44, 17); this.ToolsSubMenu.Text = "&Tools"; this.ToolsSubMenu.DropDownOpened += new System.EventHandler(this.ToolsSubMenu_DropDownOpened); // // ToolBoxMenuItem // - this.ToolBoxMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.ToolBox; this.ToolBoxMenuItem.Name = "ToolBoxMenuItem"; - this.ToolBoxMenuItem.Size = new System.Drawing.Size(191, 22); + this.ToolBoxMenuItem.Size = new System.Drawing.Size(183, 22); this.ToolBoxMenuItem.Text = "&Tool Box"; this.ToolBoxMenuItem.Click += new System.EventHandler(this.ToolBoxMenuItem_Click); // // toolStripSeparator12 // this.toolStripSeparator12.Name = "toolStripSeparator12"; - this.toolStripSeparator12.Size = new System.Drawing.Size(188, 6); + this.toolStripSeparator12.Size = new System.Drawing.Size(180, 6); // // RamWatchMenuItem // - this.RamWatchMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.watch; this.RamWatchMenuItem.Name = "RamWatchMenuItem"; - this.RamWatchMenuItem.Size = new System.Drawing.Size(191, 22); + this.RamWatchMenuItem.Size = new System.Drawing.Size(183, 22); this.RamWatchMenuItem.Text = "RAM &Watch"; this.RamWatchMenuItem.Click += new System.EventHandler(this.RamWatchMenuItem_Click); // // RamSearchMenuItem // - this.RamSearchMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.search; this.RamSearchMenuItem.Name = "RamSearchMenuItem"; - this.RamSearchMenuItem.Size = new System.Drawing.Size(191, 22); + this.RamSearchMenuItem.Size = new System.Drawing.Size(183, 22); this.RamSearchMenuItem.Text = "RAM &Search"; this.RamSearchMenuItem.Click += new System.EventHandler(this.RamSearchMenuItem_Click); // // LuaConsoleMenuItem // - this.LuaConsoleMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Lua; this.LuaConsoleMenuItem.Name = "LuaConsoleMenuItem"; - this.LuaConsoleMenuItem.Size = new System.Drawing.Size(191, 22); + this.LuaConsoleMenuItem.Size = new System.Drawing.Size(183, 22); this.LuaConsoleMenuItem.Text = "Lua Console"; this.LuaConsoleMenuItem.Click += new System.EventHandler(this.LuaConsoleMenuItem_Click); // // TAStudioMenuItem // - this.TAStudioMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.TAStudio; this.TAStudioMenuItem.Name = "TAStudioMenuItem"; - this.TAStudioMenuItem.Size = new System.Drawing.Size(191, 22); + this.TAStudioMenuItem.Size = new System.Drawing.Size(183, 22); this.TAStudioMenuItem.Text = "&TAStudio"; this.TAStudioMenuItem.Click += new System.EventHandler(this.TAStudioMenuItem_Click); // // HexEditorMenuItem // - this.HexEditorMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.poke; this.HexEditorMenuItem.Name = "HexEditorMenuItem"; - this.HexEditorMenuItem.Size = new System.Drawing.Size(191, 22); + this.HexEditorMenuItem.Size = new System.Drawing.Size(183, 22); this.HexEditorMenuItem.Text = "&Hex Editor"; this.HexEditorMenuItem.Click += new System.EventHandler(this.HexEditorMenuItem_Click); // // TraceLoggerMenuItem // - this.TraceLoggerMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.pencil; this.TraceLoggerMenuItem.Name = "TraceLoggerMenuItem"; - this.TraceLoggerMenuItem.Size = new System.Drawing.Size(191, 22); + this.TraceLoggerMenuItem.Size = new System.Drawing.Size(183, 22); this.TraceLoggerMenuItem.Text = "Trace &Logger"; this.TraceLoggerMenuItem.Click += new System.EventHandler(this.TraceLoggerMenuItem_Click); // // DebuggerMenuItem // - this.DebuggerMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Bug; this.DebuggerMenuItem.Name = "DebuggerMenuItem"; - this.DebuggerMenuItem.Size = new System.Drawing.Size(191, 22); + this.DebuggerMenuItem.Size = new System.Drawing.Size(183, 22); this.DebuggerMenuItem.Text = "&Debugger"; this.DebuggerMenuItem.Click += new System.EventHandler(this.DebuggerMenuItem_Click); // // CodeDataLoggerMenuItem // - this.CodeDataLoggerMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.cdlogger; this.CodeDataLoggerMenuItem.Name = "CodeDataLoggerMenuItem"; - this.CodeDataLoggerMenuItem.Size = new System.Drawing.Size(191, 22); + this.CodeDataLoggerMenuItem.Size = new System.Drawing.Size(183, 22); this.CodeDataLoggerMenuItem.Text = "Code-Data Logger"; this.CodeDataLoggerMenuItem.Click += new System.EventHandler(this.CodeDataLoggerMenuItem_Click); // // MacroToolMenuItem // this.MacroToolMenuItem.Name = "MacroToolMenuItem"; - this.MacroToolMenuItem.Size = new System.Drawing.Size(191, 22); + this.MacroToolMenuItem.Size = new System.Drawing.Size(183, 22); this.MacroToolMenuItem.Text = "&Macro Tool"; this.MacroToolMenuItem.Click += new System.EventHandler(this.MacroToolMenuItem_Click); // // VirtualPadMenuItem // - this.VirtualPadMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController; this.VirtualPadMenuItem.Name = "VirtualPadMenuItem"; - this.VirtualPadMenuItem.Size = new System.Drawing.Size(191, 22); + this.VirtualPadMenuItem.Size = new System.Drawing.Size(183, 22); this.VirtualPadMenuItem.Text = "Virtual Pad"; this.VirtualPadMenuItem.Click += new System.EventHandler(this.VirtualPadMenuItem_Click); // // BasicBotMenuItem // this.BasicBotMenuItem.Name = "BasicBotMenuItem"; - this.BasicBotMenuItem.Size = new System.Drawing.Size(191, 22); + this.BasicBotMenuItem.Size = new System.Drawing.Size(183, 22); this.BasicBotMenuItem.Text = "Basic Bot"; this.BasicBotMenuItem.Click += new System.EventHandler(this.BasicBotMenuItem_Click); // // toolStripSeparator11 // this.toolStripSeparator11.Name = "toolStripSeparator11"; - this.toolStripSeparator11.Size = new System.Drawing.Size(188, 6); + this.toolStripSeparator11.Size = new System.Drawing.Size(180, 6); // // CheatsMenuItem // - this.CheatsMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Freeze; this.CheatsMenuItem.Name = "CheatsMenuItem"; - this.CheatsMenuItem.Size = new System.Drawing.Size(191, 22); + this.CheatsMenuItem.Size = new System.Drawing.Size(183, 22); this.CheatsMenuItem.Text = "Cheats"; this.CheatsMenuItem.Click += new System.EventHandler(this.CheatsMenuItem_Click); // // gameSharkConverterToolStripMenuItem // - this.gameSharkConverterToolStripMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Shark; this.gameSharkConverterToolStripMenuItem.Name = "gameSharkConverterToolStripMenuItem"; - this.gameSharkConverterToolStripMenuItem.Size = new System.Drawing.Size(191, 22); + this.gameSharkConverterToolStripMenuItem.Size = new System.Drawing.Size(183, 22); this.gameSharkConverterToolStripMenuItem.Text = "Cheat Code Converter"; this.gameSharkConverterToolStripMenuItem.Click += new System.EventHandler(this.CheatCodeConverterMenuItem_Click); // // toolStripSeparator29 // this.toolStripSeparator29.Name = "toolStripSeparator29"; - this.toolStripSeparator29.Size = new System.Drawing.Size(188, 6); + this.toolStripSeparator29.Size = new System.Drawing.Size(180, 6); // // MultiDiskBundlerFileMenuItem // - this.MultiDiskBundlerFileMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.SaveConfig; this.MultiDiskBundlerFileMenuItem.Name = "MultiDiskBundlerFileMenuItem"; - this.MultiDiskBundlerFileMenuItem.Size = new System.Drawing.Size(191, 22); + this.MultiDiskBundlerFileMenuItem.Size = new System.Drawing.Size(183, 22); this.MultiDiskBundlerFileMenuItem.Text = "Multi-disk Bundler"; this.MultiDiskBundlerFileMenuItem.Click += new System.EventHandler(this.MultidiskBundlerMenuItem_Click); // @@ -2243,20 +2197,20 @@ this.externalToolToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.dummyExternalTool}); this.externalToolToolStripMenuItem.Name = "externalToolToolStripMenuItem"; - this.externalToolToolStripMenuItem.Size = new System.Drawing.Size(191, 22); + this.externalToolToolStripMenuItem.Size = new System.Drawing.Size(183, 22); this.externalToolToolStripMenuItem.Text = "External Tool"; this.externalToolToolStripMenuItem.DropDownOpening += new System.EventHandler(this.ExternalToolToolStripMenuItem_DropDownOpening); // // dummyExternalTool // this.dummyExternalTool.Name = "dummyExternalTool"; - this.dummyExternalTool.Size = new System.Drawing.Size(103, 22); + this.dummyExternalTool.Size = new System.Drawing.Size(99, 22); this.dummyExternalTool.Text = "None"; // // batchRunnerToolStripMenuItem // this.batchRunnerToolStripMenuItem.Name = "batchRunnerToolStripMenuItem"; - this.batchRunnerToolStripMenuItem.Size = new System.Drawing.Size(191, 22); + this.batchRunnerToolStripMenuItem.Size = new System.Drawing.Size(183, 22); this.batchRunnerToolStripMenuItem.Text = "Batch Runner"; this.batchRunnerToolStripMenuItem.Visible = false; this.batchRunnerToolStripMenuItem.Click += new System.EventHandler(this.BatchRunnerToolStripMenuItem_Click); @@ -2281,7 +2235,7 @@ this.VSControlsMenuItem, this.barcodeReaderToolStripMenuItem}); this.NESSubMenu.Name = "NESSubMenu"; - this.NESSubMenu.Size = new System.Drawing.Size(40, 19); + this.NESSubMenu.Size = new System.Drawing.Size(38, 17); this.NESSubMenu.Text = "&NES"; this.NESSubMenu.DropDownOpened += new System.EventHandler(this.NESSubMenu_DropDownOpened); // @@ -2291,118 +2245,115 @@ this.quickNESToolStripMenuItem, this.nesHawkToolStripMenuItem}); this.coreToolStripMenuItem.Name = "coreToolStripMenuItem"; - this.coreToolStripMenuItem.Size = new System.Drawing.Size(233, 22); + this.coreToolStripMenuItem.Size = new System.Drawing.Size(217, 22); this.coreToolStripMenuItem.Text = "&Core"; this.coreToolStripMenuItem.DropDownOpened += new System.EventHandler(this.CoreToolStripMenuItem_DropDownOpened); // // quickNESToolStripMenuItem // this.quickNESToolStripMenuItem.Name = "quickNESToolStripMenuItem"; - this.quickNESToolStripMenuItem.Size = new System.Drawing.Size(125, 22); + this.quickNESToolStripMenuItem.Size = new System.Drawing.Size(118, 22); this.quickNESToolStripMenuItem.Text = "&QuickNes"; this.quickNESToolStripMenuItem.Click += new System.EventHandler(this.QuickNesToolStripMenuItem_Click); // // nesHawkToolStripMenuItem // this.nesHawkToolStripMenuItem.Name = "nesHawkToolStripMenuItem"; - this.nesHawkToolStripMenuItem.Size = new System.Drawing.Size(125, 22); + this.nesHawkToolStripMenuItem.Size = new System.Drawing.Size(118, 22); this.nesHawkToolStripMenuItem.Text = "&NesHawk"; this.nesHawkToolStripMenuItem.Click += new System.EventHandler(this.NesHawkToolStripMenuItem_Click); // // toolStripSeparator34 // this.toolStripSeparator34.Name = "toolStripSeparator34"; - this.toolStripSeparator34.Size = new System.Drawing.Size(230, 6); + this.toolStripSeparator34.Size = new System.Drawing.Size(214, 6); // // NESPPUViewerMenuItem // this.NESPPUViewerMenuItem.Name = "NESPPUViewerMenuItem"; - this.NESPPUViewerMenuItem.Size = new System.Drawing.Size(233, 22); + this.NESPPUViewerMenuItem.Size = new System.Drawing.Size(217, 22); this.NESPPUViewerMenuItem.Text = "&PPU Viewer"; this.NESPPUViewerMenuItem.Click += new System.EventHandler(this.NesPPUViewerMenuItem_Click); // // NESNametableViewerMenuItem // this.NESNametableViewerMenuItem.Name = "NESNametableViewerMenuItem"; - this.NESNametableViewerMenuItem.Size = new System.Drawing.Size(233, 22); + this.NESNametableViewerMenuItem.Size = new System.Drawing.Size(217, 22); this.NESNametableViewerMenuItem.Text = "&Nametable Viewer"; this.NESNametableViewerMenuItem.Click += new System.EventHandler(this.NESNametableViewerMenuItem_Click); // // NESGameGenieCodesMenuItem // this.NESGameGenieCodesMenuItem.Name = "NESGameGenieCodesMenuItem"; - this.NESGameGenieCodesMenuItem.Size = new System.Drawing.Size(233, 22); + this.NESGameGenieCodesMenuItem.Size = new System.Drawing.Size(217, 22); this.NESGameGenieCodesMenuItem.Text = "&Game Genie Encoder/Decoder"; this.NESGameGenieCodesMenuItem.Click += new System.EventHandler(this.NESGameGenieCodesMenuItem_Click); // // musicRipperToolStripMenuItem // this.musicRipperToolStripMenuItem.Name = "musicRipperToolStripMenuItem"; - this.musicRipperToolStripMenuItem.Size = new System.Drawing.Size(233, 22); + this.musicRipperToolStripMenuItem.Size = new System.Drawing.Size(217, 22); this.musicRipperToolStripMenuItem.Text = "Music Ripper"; this.musicRipperToolStripMenuItem.Click += new System.EventHandler(this.MusicRipperMenuItem_Click); // // toolStripSeparator17 // this.toolStripSeparator17.Name = "toolStripSeparator17"; - this.toolStripSeparator17.Size = new System.Drawing.Size(230, 6); + this.toolStripSeparator17.Size = new System.Drawing.Size(214, 6); // // NesControllerSettingsMenuItem // - this.NesControllerSettingsMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController; this.NesControllerSettingsMenuItem.Name = "NesControllerSettingsMenuItem"; - this.NesControllerSettingsMenuItem.Size = new System.Drawing.Size(233, 22); + this.NesControllerSettingsMenuItem.Size = new System.Drawing.Size(217, 22); this.NesControllerSettingsMenuItem.Text = "Controller Settings..."; this.NesControllerSettingsMenuItem.Click += new System.EventHandler(this.NesControllerSettingsMenuItem_Click); // // NESGraphicSettingsMenuItem // - this.NESGraphicSettingsMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.tvIcon; this.NESGraphicSettingsMenuItem.Name = "NESGraphicSettingsMenuItem"; - this.NESGraphicSettingsMenuItem.Size = new System.Drawing.Size(233, 22); + this.NESGraphicSettingsMenuItem.Size = new System.Drawing.Size(217, 22); this.NESGraphicSettingsMenuItem.Text = "Graphics Settings..."; this.NESGraphicSettingsMenuItem.Click += new System.EventHandler(this.NESGraphicSettingsMenuItem_Click); // // NESSoundChannelsMenuItem // - this.NESSoundChannelsMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.AudioHS; this.NESSoundChannelsMenuItem.Name = "NESSoundChannelsMenuItem"; - this.NESSoundChannelsMenuItem.Size = new System.Drawing.Size(233, 22); + this.NESSoundChannelsMenuItem.Size = new System.Drawing.Size(217, 22); this.NESSoundChannelsMenuItem.Text = "Sound Channels..."; this.NESSoundChannelsMenuItem.Click += new System.EventHandler(this.NESSoundChannelsMenuItem_Click); // // VSSettingsMenuItem // this.VSSettingsMenuItem.Name = "VSSettingsMenuItem"; - this.VSSettingsMenuItem.Size = new System.Drawing.Size(233, 22); + this.VSSettingsMenuItem.Size = new System.Drawing.Size(217, 22); this.VSSettingsMenuItem.Text = "VS Settings..."; this.VSSettingsMenuItem.Click += new System.EventHandler(this.VsSettingsMenuItem_Click); // // MovieSettingsMenuItem // this.MovieSettingsMenuItem.Name = "MovieSettingsMenuItem"; - this.MovieSettingsMenuItem.Size = new System.Drawing.Size(233, 22); + this.MovieSettingsMenuItem.Size = new System.Drawing.Size(217, 22); this.MovieSettingsMenuItem.Text = "Advanced Settings..."; this.MovieSettingsMenuItem.Click += new System.EventHandler(this.MovieSettingsMenuItem_Click); // // toolStripSeparator22 // this.toolStripSeparator22.Name = "toolStripSeparator22"; - this.toolStripSeparator22.Size = new System.Drawing.Size(230, 6); + this.toolStripSeparator22.Size = new System.Drawing.Size(214, 6); // // FDSControlsMenuItem // this.FDSControlsMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.FdsEjectDiskMenuItem}); this.FDSControlsMenuItem.Name = "FDSControlsMenuItem"; - this.FDSControlsMenuItem.Size = new System.Drawing.Size(233, 22); + this.FDSControlsMenuItem.Size = new System.Drawing.Size(217, 22); this.FDSControlsMenuItem.Text = "FDS Controls"; this.FDSControlsMenuItem.DropDownOpened += new System.EventHandler(this.FdsControlsMenuItem_DropDownOpened); // // FdsEjectDiskMenuItem // this.FdsEjectDiskMenuItem.Name = "FdsEjectDiskMenuItem"; - this.FdsEjectDiskMenuItem.Size = new System.Drawing.Size(124, 22); + this.FdsEjectDiskMenuItem.Size = new System.Drawing.Size(120, 22); this.FdsEjectDiskMenuItem.Text = "&Eject Disk"; this.FdsEjectDiskMenuItem.Click += new System.EventHandler(this.FdsEjectDiskMenuItem_Click); // @@ -2413,34 +2364,34 @@ this.VSInsertCoinP2MenuItem, this.VSServiceSwitchMenuItem}); this.VSControlsMenuItem.Name = "VSControlsMenuItem"; - this.VSControlsMenuItem.Size = new System.Drawing.Size(233, 22); + this.VSControlsMenuItem.Size = new System.Drawing.Size(217, 22); this.VSControlsMenuItem.Text = "VS Controls"; // // VSInsertCoinP1MenuItem // this.VSInsertCoinP1MenuItem.Name = "VSInsertCoinP1MenuItem"; - this.VSInsertCoinP1MenuItem.Size = new System.Drawing.Size(149, 22); + this.VSInsertCoinP1MenuItem.Size = new System.Drawing.Size(143, 22); this.VSInsertCoinP1MenuItem.Text = "Insert Coin P1"; this.VSInsertCoinP1MenuItem.Click += new System.EventHandler(this.VsInsertCoinP1MenuItem_Click); // // VSInsertCoinP2MenuItem // this.VSInsertCoinP2MenuItem.Name = "VSInsertCoinP2MenuItem"; - this.VSInsertCoinP2MenuItem.Size = new System.Drawing.Size(149, 22); + this.VSInsertCoinP2MenuItem.Size = new System.Drawing.Size(143, 22); this.VSInsertCoinP2MenuItem.Text = "Insert Coin P2"; this.VSInsertCoinP2MenuItem.Click += new System.EventHandler(this.VsInsertCoinP2MenuItem_Click); // // VSServiceSwitchMenuItem // this.VSServiceSwitchMenuItem.Name = "VSServiceSwitchMenuItem"; - this.VSServiceSwitchMenuItem.Size = new System.Drawing.Size(149, 22); + this.VSServiceSwitchMenuItem.Size = new System.Drawing.Size(143, 22); this.VSServiceSwitchMenuItem.Text = "Service Switch"; this.VSServiceSwitchMenuItem.Click += new System.EventHandler(this.VsServiceSwitchMenuItem_Click); // // barcodeReaderToolStripMenuItem // this.barcodeReaderToolStripMenuItem.Name = "barcodeReaderToolStripMenuItem"; - this.barcodeReaderToolStripMenuItem.Size = new System.Drawing.Size(233, 22); + this.barcodeReaderToolStripMenuItem.Size = new System.Drawing.Size(217, 22); this.barcodeReaderToolStripMenuItem.Text = "Barcode Reader"; this.barcodeReaderToolStripMenuItem.Click += new System.EventHandler(this.BarcodeReaderMenuItem_Click); // @@ -2458,75 +2409,73 @@ this.PCEAlwaysEqualizeVolumesMenuItem, this.PCEArcadeCardRewindEnableMenuItem}); this.PCESubMenu.Name = "PCESubMenu"; - this.PCESubMenu.Size = new System.Drawing.Size(40, 19); + this.PCESubMenu.Size = new System.Drawing.Size(38, 17); this.PCESubMenu.Text = "&PCE"; this.PCESubMenu.DropDownOpened += new System.EventHandler(this.PCESubMenu_DropDownOpened); // // PceControllerSettingsMenuItem // - this.PceControllerSettingsMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController; this.PceControllerSettingsMenuItem.Name = "PceControllerSettingsMenuItem"; - this.PceControllerSettingsMenuItem.Size = new System.Drawing.Size(258, 22); + this.PceControllerSettingsMenuItem.Size = new System.Drawing.Size(240, 22); this.PceControllerSettingsMenuItem.Text = "Controller Settings"; this.PceControllerSettingsMenuItem.Click += new System.EventHandler(this.PceControllerSettingsMenuItem_Click); // // PCEGraphicsSettingsMenuItem // - this.PCEGraphicsSettingsMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.tvIcon; this.PCEGraphicsSettingsMenuItem.Name = "PCEGraphicsSettingsMenuItem"; - this.PCEGraphicsSettingsMenuItem.Size = new System.Drawing.Size(258, 22); + this.PCEGraphicsSettingsMenuItem.Size = new System.Drawing.Size(240, 22); this.PCEGraphicsSettingsMenuItem.Text = "Graphics Settings"; this.PCEGraphicsSettingsMenuItem.Click += new System.EventHandler(this.PceGraphicsSettingsMenuItem_Click); // // toolStripSeparator32 // this.toolStripSeparator32.Name = "toolStripSeparator32"; - this.toolStripSeparator32.Size = new System.Drawing.Size(255, 6); + this.toolStripSeparator32.Size = new System.Drawing.Size(237, 6); // // PCEBGViewerMenuItem // this.PCEBGViewerMenuItem.Name = "PCEBGViewerMenuItem"; - this.PCEBGViewerMenuItem.Size = new System.Drawing.Size(258, 22); + this.PCEBGViewerMenuItem.Size = new System.Drawing.Size(240, 22); this.PCEBGViewerMenuItem.Text = "&BG Viewer"; this.PCEBGViewerMenuItem.Click += new System.EventHandler(this.PceBgViewerMenuItem_Click); // // PCEtileViewerToolStripMenuItem // this.PCEtileViewerToolStripMenuItem.Name = "PCEtileViewerToolStripMenuItem"; - this.PCEtileViewerToolStripMenuItem.Size = new System.Drawing.Size(258, 22); + this.PCEtileViewerToolStripMenuItem.Size = new System.Drawing.Size(240, 22); this.PCEtileViewerToolStripMenuItem.Text = "&Tile Viewer"; this.PCEtileViewerToolStripMenuItem.Click += new System.EventHandler(this.PceTileViewerMenuItem_Click); // // PceSoundDebuggerToolStripMenuItem // this.PceSoundDebuggerToolStripMenuItem.Name = "PceSoundDebuggerToolStripMenuItem"; - this.PceSoundDebuggerToolStripMenuItem.Size = new System.Drawing.Size(258, 22); + this.PceSoundDebuggerToolStripMenuItem.Size = new System.Drawing.Size(240, 22); this.PceSoundDebuggerToolStripMenuItem.Text = "&Sound Debugger"; this.PceSoundDebuggerToolStripMenuItem.Click += new System.EventHandler(this.PceSoundDebuggerMenuItem_Click); // // toolStripSeparator25 // this.toolStripSeparator25.Name = "toolStripSeparator25"; - this.toolStripSeparator25.Size = new System.Drawing.Size(255, 6); + this.toolStripSeparator25.Size = new System.Drawing.Size(237, 6); // // PCEAlwaysPerformSpriteLimitMenuItem // this.PCEAlwaysPerformSpriteLimitMenuItem.Name = "PCEAlwaysPerformSpriteLimitMenuItem"; - this.PCEAlwaysPerformSpriteLimitMenuItem.Size = new System.Drawing.Size(258, 22); + this.PCEAlwaysPerformSpriteLimitMenuItem.Size = new System.Drawing.Size(240, 22); this.PCEAlwaysPerformSpriteLimitMenuItem.Text = "Always Perform Sprite Limit"; this.PCEAlwaysPerformSpriteLimitMenuItem.Click += new System.EventHandler(this.PCEAlwaysPerformSpriteLimitMenuItem_Click); // // PCEAlwaysEqualizeVolumesMenuItem // this.PCEAlwaysEqualizeVolumesMenuItem.Name = "PCEAlwaysEqualizeVolumesMenuItem"; - this.PCEAlwaysEqualizeVolumesMenuItem.Size = new System.Drawing.Size(258, 22); + this.PCEAlwaysEqualizeVolumesMenuItem.Size = new System.Drawing.Size(240, 22); this.PCEAlwaysEqualizeVolumesMenuItem.Text = "Always Equalize Volumes (PCE-CD)"; this.PCEAlwaysEqualizeVolumesMenuItem.Click += new System.EventHandler(this.PCEAlwaysEqualizeVolumesMenuItem_Click); // // PCEArcadeCardRewindEnableMenuItem // this.PCEArcadeCardRewindEnableMenuItem.Name = "PCEArcadeCardRewindEnableMenuItem"; - this.PCEArcadeCardRewindEnableMenuItem.Size = new System.Drawing.Size(258, 22); + this.PCEArcadeCardRewindEnableMenuItem.Size = new System.Drawing.Size(240, 22); this.PCEArcadeCardRewindEnableMenuItem.Text = "Arcade Card Rewind-Enable Hack"; this.PCEArcadeCardRewindEnableMenuItem.Click += new System.EventHandler(this.PCEArcadeCardRewindEnableMenuItem_Click); // @@ -2551,7 +2500,7 @@ this.SMSVDPViewerToolStripMenuItem, this.GGGameGenieMenuItem}); this.SMSSubMenu.Name = "SMSSubMenu"; - this.SMSSubMenu.Size = new System.Drawing.Size(42, 19); + this.SMSSubMenu.Size = new System.Drawing.Size(39, 17); this.SMSSubMenu.Text = "&SMS"; this.SMSSubMenu.DropDownOpened += new System.EventHandler(this.SMSSubMenu_DropDownOpened); // @@ -2563,34 +2512,34 @@ this.SMSregionKoreaToolStripMenuItem, this.SMSregionAutoToolStripMenuItem}); this.SMSregionToolStripMenuItem.Name = "SMSregionToolStripMenuItem"; - this.SMSregionToolStripMenuItem.Size = new System.Drawing.Size(277, 22); + this.SMSregionToolStripMenuItem.Size = new System.Drawing.Size(262, 22); this.SMSregionToolStripMenuItem.Text = "Region"; // // SMSregionExportToolStripMenuItem // this.SMSregionExportToolStripMenuItem.Name = "SMSregionExportToolStripMenuItem"; - this.SMSregionExportToolStripMenuItem.Size = new System.Drawing.Size(107, 22); + this.SMSregionExportToolStripMenuItem.Size = new System.Drawing.Size(106, 22); this.SMSregionExportToolStripMenuItem.Text = "Export"; this.SMSregionExportToolStripMenuItem.Click += new System.EventHandler(this.SMS_RegionExport_Click); // // SMSregionJapanToolStripMenuItem // this.SMSregionJapanToolStripMenuItem.Name = "SMSregionJapanToolStripMenuItem"; - this.SMSregionJapanToolStripMenuItem.Size = new System.Drawing.Size(107, 22); + this.SMSregionJapanToolStripMenuItem.Size = new System.Drawing.Size(106, 22); this.SMSregionJapanToolStripMenuItem.Text = "Japan"; this.SMSregionJapanToolStripMenuItem.Click += new System.EventHandler(this.SMS_RegionJapan_Click); // // SMSregionKoreaToolStripMenuItem // this.SMSregionKoreaToolStripMenuItem.Name = "SMSregionKoreaToolStripMenuItem"; - this.SMSregionKoreaToolStripMenuItem.Size = new System.Drawing.Size(107, 22); + this.SMSregionKoreaToolStripMenuItem.Size = new System.Drawing.Size(106, 22); this.SMSregionKoreaToolStripMenuItem.Text = "Korea"; this.SMSregionKoreaToolStripMenuItem.Click += new System.EventHandler(this.SMS_RegionKorea_Click); // // SMSregionAutoToolStripMenuItem // this.SMSregionAutoToolStripMenuItem.Name = "SMSregionAutoToolStripMenuItem"; - this.SMSregionAutoToolStripMenuItem.Size = new System.Drawing.Size(107, 22); + this.SMSregionAutoToolStripMenuItem.Size = new System.Drawing.Size(106, 22); this.SMSregionAutoToolStripMenuItem.Text = "Auto"; this.SMSregionAutoToolStripMenuItem.Click += new System.EventHandler(this.SMS_RegionAuto_Click); // @@ -2601,27 +2550,27 @@ this.SMSdisplayPalToolStripMenuItem, this.SMSdisplayAutoToolStripMenuItem}); this.SMSdisplayToolStripMenuItem.Name = "SMSdisplayToolStripMenuItem"; - this.SMSdisplayToolStripMenuItem.Size = new System.Drawing.Size(277, 22); + this.SMSdisplayToolStripMenuItem.Size = new System.Drawing.Size(262, 22); this.SMSdisplayToolStripMenuItem.Text = "Display Type"; // // SMSdisplayNtscToolStripMenuItem // this.SMSdisplayNtscToolStripMenuItem.Name = "SMSdisplayNtscToolStripMenuItem"; - this.SMSdisplayNtscToolStripMenuItem.Size = new System.Drawing.Size(104, 22); + this.SMSdisplayNtscToolStripMenuItem.Size = new System.Drawing.Size(100, 22); this.SMSdisplayNtscToolStripMenuItem.Text = "NTSC"; this.SMSdisplayNtscToolStripMenuItem.Click += new System.EventHandler(this.SMS_DisplayNTSC_Click); // // SMSdisplayPalToolStripMenuItem // this.SMSdisplayPalToolStripMenuItem.Name = "SMSdisplayPalToolStripMenuItem"; - this.SMSdisplayPalToolStripMenuItem.Size = new System.Drawing.Size(104, 22); + this.SMSdisplayPalToolStripMenuItem.Size = new System.Drawing.Size(100, 22); this.SMSdisplayPalToolStripMenuItem.Text = "PAL"; this.SMSdisplayPalToolStripMenuItem.Click += new System.EventHandler(this.SMS_DisplayPAL_Click); // // SMSdisplayAutoToolStripMenuItem // this.SMSdisplayAutoToolStripMenuItem.Name = "SMSdisplayAutoToolStripMenuItem"; - this.SMSdisplayAutoToolStripMenuItem.Size = new System.Drawing.Size(104, 22); + this.SMSdisplayAutoToolStripMenuItem.Size = new System.Drawing.Size(100, 22); this.SMSdisplayAutoToolStripMenuItem.Text = "Auto"; this.SMSdisplayAutoToolStripMenuItem.Click += new System.EventHandler(this.SMS_DisplayAuto_Click); // @@ -2634,135 +2583,135 @@ this.SMSControllerSportsPadToolStripMenuItem, this.SMSControllerKeyboardToolStripMenuItem}); this.SMSControllerToolStripMenuItem.Name = "SMSControllerToolStripMenuItem"; - this.SMSControllerToolStripMenuItem.Size = new System.Drawing.Size(277, 22); + this.SMSControllerToolStripMenuItem.Size = new System.Drawing.Size(262, 22); this.SMSControllerToolStripMenuItem.Text = "&Controller Type"; // // SMSControllerStandardToolStripMenuItem // this.SMSControllerStandardToolStripMenuItem.Name = "SMSControllerStandardToolStripMenuItem"; - this.SMSControllerStandardToolStripMenuItem.Size = new System.Drawing.Size(139, 22); + this.SMSControllerStandardToolStripMenuItem.Size = new System.Drawing.Size(133, 22); this.SMSControllerStandardToolStripMenuItem.Text = "Standard"; this.SMSControllerStandardToolStripMenuItem.Click += new System.EventHandler(this.SMSControllerStandardToolStripMenuItem_Click); // // SMSControllerPaddleToolStripMenuItem // this.SMSControllerPaddleToolStripMenuItem.Name = "SMSControllerPaddleToolStripMenuItem"; - this.SMSControllerPaddleToolStripMenuItem.Size = new System.Drawing.Size(139, 22); + this.SMSControllerPaddleToolStripMenuItem.Size = new System.Drawing.Size(133, 22); this.SMSControllerPaddleToolStripMenuItem.Text = "Paddle"; this.SMSControllerPaddleToolStripMenuItem.Click += new System.EventHandler(this.SMSControllerPaddleToolStripMenuItem_Click); // // SMSControllerLightPhaserToolStripMenuItem // this.SMSControllerLightPhaserToolStripMenuItem.Name = "SMSControllerLightPhaserToolStripMenuItem"; - this.SMSControllerLightPhaserToolStripMenuItem.Size = new System.Drawing.Size(139, 22); + this.SMSControllerLightPhaserToolStripMenuItem.Size = new System.Drawing.Size(133, 22); this.SMSControllerLightPhaserToolStripMenuItem.Text = "Light Phaser"; this.SMSControllerLightPhaserToolStripMenuItem.Click += new System.EventHandler(this.SMSControllerLightPhaserToolStripMenuItem_Click); // // SMSControllerSportsPadToolStripMenuItem // this.SMSControllerSportsPadToolStripMenuItem.Name = "SMSControllerSportsPadToolStripMenuItem"; - this.SMSControllerSportsPadToolStripMenuItem.Size = new System.Drawing.Size(139, 22); + this.SMSControllerSportsPadToolStripMenuItem.Size = new System.Drawing.Size(133, 22); this.SMSControllerSportsPadToolStripMenuItem.Text = "Sports Pad"; this.SMSControllerSportsPadToolStripMenuItem.Click += new System.EventHandler(this.SMSControllerSportsPadToolStripMenuItem_Click); // // SMSControllerKeyboardToolStripMenuItem // this.SMSControllerKeyboardToolStripMenuItem.Name = "SMSControllerKeyboardToolStripMenuItem"; - this.SMSControllerKeyboardToolStripMenuItem.Size = new System.Drawing.Size(139, 22); + this.SMSControllerKeyboardToolStripMenuItem.Size = new System.Drawing.Size(133, 22); this.SMSControllerKeyboardToolStripMenuItem.Text = "Keyboard"; this.SMSControllerKeyboardToolStripMenuItem.Click += new System.EventHandler(this.SMSControllerKeyboardToolStripMenuItem_Click); // // SMStoolStripMenuItem2 // this.SMStoolStripMenuItem2.Name = "SMStoolStripMenuItem2"; - this.SMStoolStripMenuItem2.Size = new System.Drawing.Size(274, 6); + this.SMStoolStripMenuItem2.Size = new System.Drawing.Size(259, 6); // // SMSenableBIOSToolStripMenuItem // this.SMSenableBIOSToolStripMenuItem.Name = "SMSenableBIOSToolStripMenuItem"; - this.SMSenableBIOSToolStripMenuItem.Size = new System.Drawing.Size(277, 22); + this.SMSenableBIOSToolStripMenuItem.Size = new System.Drawing.Size(262, 22); this.SMSenableBIOSToolStripMenuItem.Text = "Enable BIOS (Must be Enabled for TAS)"; this.SMSenableBIOSToolStripMenuItem.Click += new System.EventHandler(this.SmsBiosMenuItem_Click); // // SMSEnableFMChipMenuItem // this.SMSEnableFMChipMenuItem.Name = "SMSEnableFMChipMenuItem"; - this.SMSEnableFMChipMenuItem.Size = new System.Drawing.Size(277, 22); + this.SMSEnableFMChipMenuItem.Size = new System.Drawing.Size(262, 22); this.SMSEnableFMChipMenuItem.Text = "&Enable FM Chip"; this.SMSEnableFMChipMenuItem.Click += new System.EventHandler(this.SmsEnableFmChipMenuItem_Click); // // SMSOverclockMenuItem // this.SMSOverclockMenuItem.Name = "SMSOverclockMenuItem"; - this.SMSOverclockMenuItem.Size = new System.Drawing.Size(277, 22); + this.SMSOverclockMenuItem.Size = new System.Drawing.Size(262, 22); this.SMSOverclockMenuItem.Text = "&Overclock when Known Safe"; this.SMSOverclockMenuItem.Click += new System.EventHandler(this.SMSOverclockMenuItem_Click); // // SMSForceStereoMenuItem // this.SMSForceStereoMenuItem.Name = "SMSForceStereoMenuItem"; - this.SMSForceStereoMenuItem.Size = new System.Drawing.Size(277, 22); + this.SMSForceStereoMenuItem.Size = new System.Drawing.Size(262, 22); this.SMSForceStereoMenuItem.Text = "&Force Stereo Separation"; this.SMSForceStereoMenuItem.Click += new System.EventHandler(this.SMSForceStereoMenuItem_Click); // // SMSSpriteLimitMenuItem // this.SMSSpriteLimitMenuItem.Name = "SMSSpriteLimitMenuItem"; - this.SMSSpriteLimitMenuItem.Size = new System.Drawing.Size(277, 22); + this.SMSSpriteLimitMenuItem.Size = new System.Drawing.Size(262, 22); this.SMSSpriteLimitMenuItem.Text = "Sprite &Limit"; this.SMSSpriteLimitMenuItem.Click += new System.EventHandler(this.SMSSpriteLimitMenuItem_Click); // // SMSDisplayOverscanMenuItem // this.SMSDisplayOverscanMenuItem.Name = "SMSDisplayOverscanMenuItem"; - this.SMSDisplayOverscanMenuItem.Size = new System.Drawing.Size(277, 22); + this.SMSDisplayOverscanMenuItem.Size = new System.Drawing.Size(262, 22); this.SMSDisplayOverscanMenuItem.Text = "Display Overscan"; this.SMSDisplayOverscanMenuItem.Click += new System.EventHandler(this.SMSDisplayOverscanMenuItem_Click); // // SMSFix3DGameDisplayToolStripMenuItem // this.SMSFix3DGameDisplayToolStripMenuItem.Name = "SMSFix3DGameDisplayToolStripMenuItem"; - this.SMSFix3DGameDisplayToolStripMenuItem.Size = new System.Drawing.Size(277, 22); + this.SMSFix3DGameDisplayToolStripMenuItem.Size = new System.Drawing.Size(262, 22); this.SMSFix3DGameDisplayToolStripMenuItem.Text = "Fix 3D Game Display"; this.SMSFix3DGameDisplayToolStripMenuItem.Click += new System.EventHandler(this.SMSFix3DDisplayMenuItem_Click); // // ShowClippedRegionsMenuItem // this.ShowClippedRegionsMenuItem.Name = "ShowClippedRegionsMenuItem"; - this.ShowClippedRegionsMenuItem.Size = new System.Drawing.Size(277, 22); + this.ShowClippedRegionsMenuItem.Size = new System.Drawing.Size(262, 22); this.ShowClippedRegionsMenuItem.Text = "&Show Clipped Regions"; this.ShowClippedRegionsMenuItem.Click += new System.EventHandler(this.ShowClippedRegionsMenuItem_Click); // // HighlightActiveDisplayRegionMenuItem // this.HighlightActiveDisplayRegionMenuItem.Name = "HighlightActiveDisplayRegionMenuItem"; - this.HighlightActiveDisplayRegionMenuItem.Size = new System.Drawing.Size(277, 22); + this.HighlightActiveDisplayRegionMenuItem.Size = new System.Drawing.Size(262, 22); this.HighlightActiveDisplayRegionMenuItem.Text = "&Highlight Active Display Region"; this.HighlightActiveDisplayRegionMenuItem.Click += new System.EventHandler(this.HighlightActiveDisplayRegionMenuItem_Click); // // SMSGraphicsSettingsMenuItem // this.SMSGraphicsSettingsMenuItem.Name = "SMSGraphicsSettingsMenuItem"; - this.SMSGraphicsSettingsMenuItem.Size = new System.Drawing.Size(277, 22); + this.SMSGraphicsSettingsMenuItem.Size = new System.Drawing.Size(262, 22); this.SMSGraphicsSettingsMenuItem.Text = "&Graphics Settings..."; this.SMSGraphicsSettingsMenuItem.Click += new System.EventHandler(this.SMSGraphicsSettingsMenuItem_Click); // // toolStripSeparator24 // this.toolStripSeparator24.Name = "toolStripSeparator24"; - this.toolStripSeparator24.Size = new System.Drawing.Size(274, 6); + this.toolStripSeparator24.Size = new System.Drawing.Size(259, 6); // // SMSVDPViewerToolStripMenuItem // this.SMSVDPViewerToolStripMenuItem.Name = "SMSVDPViewerToolStripMenuItem"; - this.SMSVDPViewerToolStripMenuItem.Size = new System.Drawing.Size(277, 22); + this.SMSVDPViewerToolStripMenuItem.Size = new System.Drawing.Size(262, 22); this.SMSVDPViewerToolStripMenuItem.Text = "&VDP Viewer"; this.SMSVDPViewerToolStripMenuItem.Click += new System.EventHandler(this.SmsVdpViewerMenuItem_Click); // // GGGameGenieMenuItem // this.GGGameGenieMenuItem.Name = "GGGameGenieMenuItem"; - this.GGGameGenieMenuItem.Size = new System.Drawing.Size(277, 22); + this.GGGameGenieMenuItem.Size = new System.Drawing.Size(262, 22); this.GGGameGenieMenuItem.Text = "&Game Genie Encoder/Decoder"; this.GGGameGenieMenuItem.Click += new System.EventHandler(this.GGGameGenieMenuItem_Click); // @@ -2775,43 +2724,42 @@ this.AutoloadKeypadMenuItem, this.paletteToolStripMenuItem}); this.TI83SubMenu.Name = "TI83SubMenu"; - this.TI83SubMenu.Size = new System.Drawing.Size(41, 19); + this.TI83SubMenu.Size = new System.Drawing.Size(41, 17); this.TI83SubMenu.Text = "TI83"; this.TI83SubMenu.DropDownOpened += new System.EventHandler(this.TI83SubMenu_DropDownOpened); // // KeypadMenuItem // - this.KeypadMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.calculator; this.KeypadMenuItem.Name = "KeypadMenuItem"; - this.KeypadMenuItem.Size = new System.Drawing.Size(165, 22); + this.KeypadMenuItem.Size = new System.Drawing.Size(157, 22); this.KeypadMenuItem.Text = "Keypad"; this.KeypadMenuItem.Click += new System.EventHandler(this.KeypadMenuItem_Click); // // LoadTIFileMenuItem // this.LoadTIFileMenuItem.Name = "LoadTIFileMenuItem"; - this.LoadTIFileMenuItem.Size = new System.Drawing.Size(165, 22); + this.LoadTIFileMenuItem.Size = new System.Drawing.Size(157, 22); this.LoadTIFileMenuItem.Text = "Load TI-83 File..."; this.LoadTIFileMenuItem.Click += new System.EventHandler(this.LoadTIFileMenuItem_Click); // // toolStripSeparator13 // this.toolStripSeparator13.Name = "toolStripSeparator13"; - this.toolStripSeparator13.Size = new System.Drawing.Size(162, 6); + this.toolStripSeparator13.Size = new System.Drawing.Size(154, 6); // // AutoloadKeypadMenuItem // this.AutoloadKeypadMenuItem.Checked = true; this.AutoloadKeypadMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; this.AutoloadKeypadMenuItem.Name = "AutoloadKeypadMenuItem"; - this.AutoloadKeypadMenuItem.Size = new System.Drawing.Size(165, 22); + this.AutoloadKeypadMenuItem.Size = new System.Drawing.Size(157, 22); this.AutoloadKeypadMenuItem.Text = "Autoload Keypad"; this.AutoloadKeypadMenuItem.Click += new System.EventHandler(this.AutoloadKeypadMenuItem_Click); // // paletteToolStripMenuItem // this.paletteToolStripMenuItem.Name = "paletteToolStripMenuItem"; - this.paletteToolStripMenuItem.Size = new System.Drawing.Size(165, 22); + this.paletteToolStripMenuItem.Size = new System.Drawing.Size(157, 22); this.paletteToolStripMenuItem.Text = "Palette..."; this.paletteToolStripMenuItem.Click += new System.EventHandler(this.TI83PaletteMenuItem_Click); // @@ -2820,7 +2768,7 @@ this.AtariSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.AtariSettingsToolStripMenuItem}); this.AtariSubMenu.Name = "AtariSubMenu"; - this.AtariSubMenu.Size = new System.Drawing.Size(44, 19); + this.AtariSubMenu.Size = new System.Drawing.Size(42, 17); this.AtariSubMenu.Text = "&Atari"; // // AtariSettingsToolStripMenuItem @@ -2836,21 +2784,21 @@ this.A7800ControllerSettingsMenuItem, this.A7800FilterSettingsMenuItem}); this.A7800SubMenu.Name = "A7800SubMenu"; - this.A7800SubMenu.Size = new System.Drawing.Size(51, 19); + this.A7800SubMenu.Size = new System.Drawing.Size(50, 17); this.A7800SubMenu.Text = "&A7800"; this.A7800SubMenu.DropDownOpened += new System.EventHandler(this.A7800SubMenu_DropDownOpened); // // A7800ControllerSettingsMenuItem // this.A7800ControllerSettingsMenuItem.Name = "A7800ControllerSettingsMenuItem"; - this.A7800ControllerSettingsMenuItem.Size = new System.Drawing.Size(172, 22); + this.A7800ControllerSettingsMenuItem.Size = new System.Drawing.Size(163, 22); this.A7800ControllerSettingsMenuItem.Text = "Controller Settings"; this.A7800ControllerSettingsMenuItem.Click += new System.EventHandler(this.A7800ControllerSettingsToolStripMenuItem_Click); // // A7800FilterSettingsMenuItem // this.A7800FilterSettingsMenuItem.Name = "A7800FilterSettingsMenuItem"; - this.A7800FilterSettingsMenuItem.Size = new System.Drawing.Size(172, 22); + this.A7800FilterSettingsMenuItem.Size = new System.Drawing.Size(163, 22); this.A7800FilterSettingsMenuItem.Text = "Filter Settings"; this.A7800FilterSettingsMenuItem.Click += new System.EventHandler(this.A7800FilterSettingsToolStripMenuItem_Click); // @@ -2864,47 +2812,47 @@ this.GBGameGenieMenuItem, this.GBPrinterViewerMenuItem}); this.GBSubMenu.Name = "GBSubMenu"; - this.GBSubMenu.Size = new System.Drawing.Size(34, 19); + this.GBSubMenu.Size = new System.Drawing.Size(32, 17); this.GBSubMenu.Text = "&GB"; this.GBSubMenu.DropDownOpened += new System.EventHandler(this.GBSubMenu_DropDownOpened); // // GBcoreSettingsToolStripMenuItem // this.GBcoreSettingsToolStripMenuItem.Name = "GBcoreSettingsToolStripMenuItem"; - this.GBcoreSettingsToolStripMenuItem.Size = new System.Drawing.Size(233, 22); + this.GBcoreSettingsToolStripMenuItem.Size = new System.Drawing.Size(217, 22); this.GBcoreSettingsToolStripMenuItem.Text = "Settings..."; this.GBcoreSettingsToolStripMenuItem.Click += new System.EventHandler(this.GBCoreSettingsMenuItem_Click); // // LoadGBInSGBMenuItem // this.LoadGBInSGBMenuItem.Name = "LoadGBInSGBMenuItem"; - this.LoadGBInSGBMenuItem.Size = new System.Drawing.Size(233, 22); + this.LoadGBInSGBMenuItem.Size = new System.Drawing.Size(217, 22); this.LoadGBInSGBMenuItem.Text = "Load GB in SGB"; this.LoadGBInSGBMenuItem.Click += new System.EventHandler(this.LoadGbInSgbMenuItem_Click); // // toolStripSeparator28 // this.toolStripSeparator28.Name = "toolStripSeparator28"; - this.toolStripSeparator28.Size = new System.Drawing.Size(230, 6); + this.toolStripSeparator28.Size = new System.Drawing.Size(214, 6); // // GBGPUViewerMenuItem // this.GBGPUViewerMenuItem.Name = "GBGPUViewerMenuItem"; - this.GBGPUViewerMenuItem.Size = new System.Drawing.Size(233, 22); + this.GBGPUViewerMenuItem.Size = new System.Drawing.Size(217, 22); this.GBGPUViewerMenuItem.Text = "GPU Viewer"; this.GBGPUViewerMenuItem.Click += new System.EventHandler(this.GbGpuViewerMenuItem_Click); // // GBGameGenieMenuItem // this.GBGameGenieMenuItem.Name = "GBGameGenieMenuItem"; - this.GBGameGenieMenuItem.Size = new System.Drawing.Size(233, 22); + this.GBGameGenieMenuItem.Size = new System.Drawing.Size(217, 22); this.GBGameGenieMenuItem.Text = "&Game Genie Encoder/Decoder"; this.GBGameGenieMenuItem.Click += new System.EventHandler(this.GBGameGenieMenuItem_Click); // // GBPrinterViewerMenuItem // this.GBPrinterViewerMenuItem.Name = "GBPrinterViewerMenuItem"; - this.GBPrinterViewerMenuItem.Size = new System.Drawing.Size(233, 22); + this.GBPrinterViewerMenuItem.Size = new System.Drawing.Size(217, 22); this.GBPrinterViewerMenuItem.Text = "&Printer Viewer"; this.GBPrinterViewerMenuItem.Click += new System.EventHandler(this.GBPrinterViewerMenuItem_Click); // @@ -2916,7 +2864,7 @@ this.toolStripSeparator33, this.GbaGpuViewerMenuItem}); this.GBASubMenu.Name = "GBASubMenu"; - this.GBASubMenu.Size = new System.Drawing.Size(42, 19); + this.GBASubMenu.Size = new System.Drawing.Size(39, 17); this.GBASubMenu.Text = "GBA"; // // GBACoreSelectionSubMenu @@ -2925,40 +2873,40 @@ this.GBAmGBAMenuItem, this.GBAVBANextMenuItem}); this.GBACoreSelectionSubMenu.Name = "GBACoreSelectionSubMenu"; - this.GBACoreSelectionSubMenu.Size = new System.Drawing.Size(135, 22); + this.GBACoreSelectionSubMenu.Size = new System.Drawing.Size(129, 22); this.GBACoreSelectionSubMenu.Text = "&Core"; this.GBACoreSelectionSubMenu.DropDownOpened += new System.EventHandler(this.GBACoreSelectionSubMenu_DropDownOpened); // // GBAmGBAMenuItem // this.GBAmGBAMenuItem.Name = "GBAmGBAMenuItem"; - this.GBAmGBAMenuItem.Size = new System.Drawing.Size(125, 22); + this.GBAmGBAMenuItem.Size = new System.Drawing.Size(120, 22); this.GBAmGBAMenuItem.Text = "mGBA"; this.GBAmGBAMenuItem.Click += new System.EventHandler(this.UsemGBAMenuItem_Click); // // GBAVBANextMenuItem // this.GBAVBANextMenuItem.Name = "GBAVBANextMenuItem"; - this.GBAVBANextMenuItem.Size = new System.Drawing.Size(125, 22); + this.GBAVBANextMenuItem.Size = new System.Drawing.Size(120, 22); this.GBAVBANextMenuItem.Text = "&VBA-Next"; this.GBAVBANextMenuItem.Click += new System.EventHandler(this.UseVbaNextMenuItem_Click); // // GBAcoresettingsToolStripMenuItem1 // this.GBAcoresettingsToolStripMenuItem1.Name = "GBAcoresettingsToolStripMenuItem1"; - this.GBAcoresettingsToolStripMenuItem1.Size = new System.Drawing.Size(135, 22); + this.GBAcoresettingsToolStripMenuItem1.Size = new System.Drawing.Size(129, 22); this.GBAcoresettingsToolStripMenuItem1.Text = "&Settings..."; this.GBAcoresettingsToolStripMenuItem1.Click += new System.EventHandler(this.GBACoreSettingsToolStripMenuItem_Click); // // toolStripSeparator33 // this.toolStripSeparator33.Name = "toolStripSeparator33"; - this.toolStripSeparator33.Size = new System.Drawing.Size(132, 6); + this.toolStripSeparator33.Size = new System.Drawing.Size(126, 6); // // GbaGpuViewerMenuItem // this.GbaGpuViewerMenuItem.Name = "GbaGpuViewerMenuItem"; - this.GbaGpuViewerMenuItem.Size = new System.Drawing.Size(135, 22); + this.GbaGpuViewerMenuItem.Size = new System.Drawing.Size(129, 22); this.GbaGpuViewerMenuItem.Text = "GPU Viewer"; this.GbaGpuViewerMenuItem.Click += new System.EventHandler(this.GbaGpuViewerMenuItem_Click); // @@ -2970,36 +2918,35 @@ this.PSXDiscControlsMenuItem, this.PSXHashDiscsToolStripMenuItem}); this.PSXSubMenu.Name = "PSXSubMenu"; - this.PSXSubMenu.Size = new System.Drawing.Size(39, 19); + this.PSXSubMenu.Size = new System.Drawing.Size(37, 17); this.PSXSubMenu.Text = "PSX"; this.PSXSubMenu.DropDownOpened += new System.EventHandler(this.PSXSubMenu_DropDownOpened); // // PSXControllerSettingsMenuItem // - this.PSXControllerSettingsMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController; this.PSXControllerSettingsMenuItem.Name = "PSXControllerSettingsMenuItem"; - this.PSXControllerSettingsMenuItem.Size = new System.Drawing.Size(234, 22); + this.PSXControllerSettingsMenuItem.Size = new System.Drawing.Size(216, 22); this.PSXControllerSettingsMenuItem.Text = "Controller / Memcard Settings"; this.PSXControllerSettingsMenuItem.Click += new System.EventHandler(this.PSXControllerSettingsMenuItem_Click); // // PSXOptionsMenuItem // this.PSXOptionsMenuItem.Name = "PSXOptionsMenuItem"; - this.PSXOptionsMenuItem.Size = new System.Drawing.Size(234, 22); + this.PSXOptionsMenuItem.Size = new System.Drawing.Size(216, 22); this.PSXOptionsMenuItem.Text = "&Options"; this.PSXOptionsMenuItem.Click += new System.EventHandler(this.PSXOptionsMenuItem_Click); // // PSXDiscControlsMenuItem // this.PSXDiscControlsMenuItem.Name = "PSXDiscControlsMenuItem"; - this.PSXDiscControlsMenuItem.Size = new System.Drawing.Size(234, 22); + this.PSXDiscControlsMenuItem.Size = new System.Drawing.Size(216, 22); this.PSXDiscControlsMenuItem.Text = "&Disc Controls"; this.PSXDiscControlsMenuItem.Click += new System.EventHandler(this.PSXDiscControlsMenuItem_Click); // // PSXHashDiscsToolStripMenuItem // this.PSXHashDiscsToolStripMenuItem.Name = "PSXHashDiscsToolStripMenuItem"; - this.PSXHashDiscsToolStripMenuItem.Size = new System.Drawing.Size(234, 22); + this.PSXHashDiscsToolStripMenuItem.Size = new System.Drawing.Size(216, 22); this.PSXHashDiscsToolStripMenuItem.Text = "&Hash Discs"; this.PSXHashDiscsToolStripMenuItem.Click += new System.EventHandler(this.PSXHashDiscsToolStripMenuItem_Click); // @@ -3013,49 +2960,47 @@ this.SnesGameGenieMenuItem, this.SnesOptionsMenuItem}); this.SNESSubMenu.Name = "SNESSubMenu"; - this.SNESSubMenu.Size = new System.Drawing.Size(46, 19); + this.SNESSubMenu.Size = new System.Drawing.Size(44, 17); this.SNESSubMenu.Text = "&SNES"; this.SNESSubMenu.DropDownOpened += new System.EventHandler(this.SNESSubMenu_DropDownOpened); // // SNESControllerConfigurationMenuItem // - this.SNESControllerConfigurationMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController; this.SNESControllerConfigurationMenuItem.Name = "SNESControllerConfigurationMenuItem"; - this.SNESControllerConfigurationMenuItem.Size = new System.Drawing.Size(233, 22); + this.SNESControllerConfigurationMenuItem.Size = new System.Drawing.Size(217, 22); this.SNESControllerConfigurationMenuItem.Text = "Controller Configuration"; this.SNESControllerConfigurationMenuItem.Click += new System.EventHandler(this.SNESControllerConfigurationMenuItem_Click); // // toolStripSeparator18 // this.toolStripSeparator18.Name = "toolStripSeparator18"; - this.toolStripSeparator18.Size = new System.Drawing.Size(230, 6); + this.toolStripSeparator18.Size = new System.Drawing.Size(214, 6); // // SnesGfxDebuggerMenuItem // - this.SnesGfxDebuggerMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Bug; this.SnesGfxDebuggerMenuItem.Name = "SnesGfxDebuggerMenuItem"; - this.SnesGfxDebuggerMenuItem.Size = new System.Drawing.Size(233, 22); + this.SnesGfxDebuggerMenuItem.Size = new System.Drawing.Size(217, 22); this.SnesGfxDebuggerMenuItem.Text = "Graphics Debugger"; this.SnesGfxDebuggerMenuItem.Click += new System.EventHandler(this.SnesGfxDebuggerMenuItem_Click); // // SnesGBInSGBMenuItem // this.SnesGBInSGBMenuItem.Name = "SnesGBInSGBMenuItem"; - this.SnesGBInSGBMenuItem.Size = new System.Drawing.Size(233, 22); + this.SnesGBInSGBMenuItem.Size = new System.Drawing.Size(217, 22); this.SnesGBInSGBMenuItem.Text = "Load GB in SGB"; this.SnesGBInSGBMenuItem.Click += new System.EventHandler(this.SnesGbInSgbMenuItem_Click); // // SnesGameGenieMenuItem // this.SnesGameGenieMenuItem.Name = "SnesGameGenieMenuItem"; - this.SnesGameGenieMenuItem.Size = new System.Drawing.Size(233, 22); + this.SnesGameGenieMenuItem.Size = new System.Drawing.Size(217, 22); this.SnesGameGenieMenuItem.Text = "&Game Genie Encoder/Decoder"; this.SnesGameGenieMenuItem.Click += new System.EventHandler(this.SnesGameGenieMenuItem_Click); // // SnesOptionsMenuItem // this.SnesOptionsMenuItem.Name = "SnesOptionsMenuItem"; - this.SnesOptionsMenuItem.Size = new System.Drawing.Size(233, 22); + this.SnesOptionsMenuItem.Size = new System.Drawing.Size(217, 22); this.SnesOptionsMenuItem.Text = "&Options"; this.SnesOptionsMenuItem.Click += new System.EventHandler(this.SnesOptionsMenuItem_Click); // @@ -3067,34 +3012,33 @@ this.ColecoSkipBiosMenuItem, this.ColecoUseSGMMenuItem}); this.ColecoSubMenu.Name = "ColecoSubMenu"; - this.ColecoSubMenu.Size = new System.Drawing.Size(56, 19); + this.ColecoSubMenu.Size = new System.Drawing.Size(51, 17); this.ColecoSubMenu.Text = "&Coleco"; this.ColecoSubMenu.DropDownOpened += new System.EventHandler(this.ColecoSubMenu_DropDownOpened); // // ColecoControllerSettingsMenuItem // - this.ColecoControllerSettingsMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController; this.ColecoControllerSettingsMenuItem.Name = "ColecoControllerSettingsMenuItem"; - this.ColecoControllerSettingsMenuItem.Size = new System.Drawing.Size(253, 22); + this.ColecoControllerSettingsMenuItem.Size = new System.Drawing.Size(235, 22); this.ColecoControllerSettingsMenuItem.Text = "&Controller Settings..."; this.ColecoControllerSettingsMenuItem.Click += new System.EventHandler(this.ColecoControllerSettingsMenuItem_Click); // // toolStripSeparator35 // this.toolStripSeparator35.Name = "toolStripSeparator35"; - this.toolStripSeparator35.Size = new System.Drawing.Size(250, 6); + this.toolStripSeparator35.Size = new System.Drawing.Size(232, 6); // // ColecoSkipBiosMenuItem // this.ColecoSkipBiosMenuItem.Name = "ColecoSkipBiosMenuItem"; - this.ColecoSkipBiosMenuItem.Size = new System.Drawing.Size(253, 22); + this.ColecoSkipBiosMenuItem.Size = new System.Drawing.Size(235, 22); this.ColecoSkipBiosMenuItem.Text = "&Skip BIOS intro (When Applicable)"; this.ColecoSkipBiosMenuItem.Click += new System.EventHandler(this.ColecoSkipBiosMenuItem_Click); // // ColecoUseSGMMenuItem // this.ColecoUseSGMMenuItem.Name = "ColecoUseSGMMenuItem"; - this.ColecoUseSGMMenuItem.Size = new System.Drawing.Size(253, 22); + this.ColecoUseSGMMenuItem.Size = new System.Drawing.Size(235, 22); this.ColecoUseSGMMenuItem.Text = "&Use the Super Game Module"; this.ColecoUseSGMMenuItem.Click += new System.EventHandler(this.ColecoUseSGMMenuItem_Click); // @@ -3108,49 +3052,47 @@ this.MupenStyleLagMenuItem, this.N64ExpansionSlotMenuItem}); this.N64SubMenu.Name = "N64SubMenu"; - this.N64SubMenu.Size = new System.Drawing.Size(40, 19); + this.N64SubMenu.Size = new System.Drawing.Size(38, 17); this.N64SubMenu.Text = "N64"; this.N64SubMenu.DropDownOpened += new System.EventHandler(this.N64SubMenu_DropDownOpened); // // N64PluginSettingsMenuItem // - this.N64PluginSettingsMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("N64PluginSettingsMenuItem.Image"))); this.N64PluginSettingsMenuItem.Name = "N64PluginSettingsMenuItem"; - this.N64PluginSettingsMenuItem.Size = new System.Drawing.Size(192, 22); + this.N64PluginSettingsMenuItem.Size = new System.Drawing.Size(180, 22); this.N64PluginSettingsMenuItem.Text = "Plugins"; this.N64PluginSettingsMenuItem.Click += new System.EventHandler(this.N64PluginSettingsMenuItem_Click); // // N64ControllerSettingsMenuItem // - this.N64ControllerSettingsMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController; this.N64ControllerSettingsMenuItem.Name = "N64ControllerSettingsMenuItem"; - this.N64ControllerSettingsMenuItem.Size = new System.Drawing.Size(192, 22); + this.N64ControllerSettingsMenuItem.Size = new System.Drawing.Size(180, 22); this.N64ControllerSettingsMenuItem.Text = "Controller Settings..."; this.N64ControllerSettingsMenuItem.Click += new System.EventHandler(this.N64ControllerSettingsMenuItem_Click); // // toolStripSeparator23 // this.toolStripSeparator23.Name = "toolStripSeparator23"; - this.toolStripSeparator23.Size = new System.Drawing.Size(189, 6); + this.toolStripSeparator23.Size = new System.Drawing.Size(177, 6); // // N64CircularAnalogRangeMenuItem // this.N64CircularAnalogRangeMenuItem.Name = "N64CircularAnalogRangeMenuItem"; - this.N64CircularAnalogRangeMenuItem.Size = new System.Drawing.Size(192, 22); + this.N64CircularAnalogRangeMenuItem.Size = new System.Drawing.Size(180, 22); this.N64CircularAnalogRangeMenuItem.Text = "Circular Analog Range"; this.N64CircularAnalogRangeMenuItem.Click += new System.EventHandler(this.N64CircularAnalogRangeMenuItem_Click); // // MupenStyleLagMenuItem // this.MupenStyleLagMenuItem.Name = "MupenStyleLagMenuItem"; - this.MupenStyleLagMenuItem.Size = new System.Drawing.Size(192, 22); + this.MupenStyleLagMenuItem.Size = new System.Drawing.Size(180, 22); this.MupenStyleLagMenuItem.Text = "&Non-VI Lag Frames"; this.MupenStyleLagMenuItem.Click += new System.EventHandler(this.MupenStyleLagMenuItem_Click); // // N64ExpansionSlotMenuItem // this.N64ExpansionSlotMenuItem.Name = "N64ExpansionSlotMenuItem"; - this.N64ExpansionSlotMenuItem.Size = new System.Drawing.Size(192, 22); + this.N64ExpansionSlotMenuItem.Size = new System.Drawing.Size(180, 22); this.N64ExpansionSlotMenuItem.Text = "&Use Expansion Slot"; this.N64ExpansionSlotMenuItem.Click += new System.EventHandler(this.N64ExpansionSlotMenuItem_Click); // @@ -3159,7 +3101,7 @@ this.SaturnSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.SaturnPreferencesMenuItem}); this.SaturnSubMenu.Name = "SaturnSubMenu"; - this.SaturnSubMenu.Size = new System.Drawing.Size(53, 19); + this.SaturnSubMenu.Size = new System.Drawing.Size(51, 17); this.SaturnSubMenu.Text = "&Saturn"; // // SaturnPreferencesMenuItem @@ -3174,7 +3116,7 @@ this.DGBSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.DGBsettingsToolStripMenuItem}); this.DGBSubMenu.Name = "DGBSubMenu"; - this.DGBSubMenu.Size = new System.Drawing.Size(59, 19); + this.DGBSubMenu.Size = new System.Drawing.Size(53, 17); this.DGBSubMenu.Text = "&GB Link"; // // DGBsettingsToolStripMenuItem @@ -3189,7 +3131,7 @@ this.DGBHawkSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.DGBHawksettingsToolStripMenuItem}); this.DGBHawkSubMenu.Name = "DGBHawkSubMenu"; - this.DGBHawkSubMenu.Size = new System.Drawing.Size(59, 19); + this.DGBHawkSubMenu.Size = new System.Drawing.Size(53, 17); this.DGBHawkSubMenu.Text = "&GB Link"; // // DGBHawksettingsToolStripMenuItem @@ -3204,7 +3146,7 @@ this.GB3xSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.GB3xsettingsToolStripMenuItem}); this.GB3xSubMenu.Name = "GB3xSubMenu"; - this.GB3xSubMenu.Size = new System.Drawing.Size(59, 19); + this.GB3xSubMenu.Size = new System.Drawing.Size(68, 17); this.GB3xSubMenu.Text = "&GB Link 3x"; // // GB3xsettingsToolStripMenuItem @@ -3219,7 +3161,7 @@ this.GB4xSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.GB4xsettingsToolStripMenuItem}); this.GB4xSubMenu.Name = "GB4xSubMenu"; - this.GB4xSubMenu.Size = new System.Drawing.Size(59, 19); + this.GB4xSubMenu.Size = new System.Drawing.Size(68, 17); this.GB4xSubMenu.Text = "&GB Link 4x"; // // GB4xsettingsToolStripMenuItem @@ -3234,7 +3176,7 @@ this.GGLSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.GGLsettingsToolStripMenuItem}); this.GGLSubMenu.Name = "GGLSubMenu"; - this.GGLSubMenu.Size = new System.Drawing.Size(60, 19); + this.GGLSubMenu.Size = new System.Drawing.Size(54, 17); this.GGLSubMenu.Text = "&GG Link"; // // GGLsettingsToolStripMenuItem @@ -3244,36 +3186,6 @@ this.GGLsettingsToolStripMenuItem.Text = "Settings..."; this.GGLsettingsToolStripMenuItem.Click += new System.EventHandler(this.GGLSettingsMenuItem_Click); // - // VectrexSubMenu - // - this.VectrexSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.VectrexsettingsToolStripMenuItem}); - this.VectrexSubMenu.Name = "VectrexSubMenu"; - this.VectrexSubMenu.Size = new System.Drawing.Size(60, 19); - this.VectrexSubMenu.Text = "&Vectrex"; - // - // VectrexsettingsToolStripMenuItem - // - this.VectrexsettingsToolStripMenuItem.Name = "VectrexsettingsToolStripMenuItem"; - this.VectrexsettingsToolStripMenuItem.Size = new System.Drawing.Size(125, 22); - this.VectrexsettingsToolStripMenuItem.Text = "Settings..."; - this.VectrexsettingsToolStripMenuItem.Click += new System.EventHandler(this.VectrexSettingsMenuItem_Click); - // - // O2HawkSubMenu - // - this.O2HawkSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.O2HawksettingsToolStripMenuItem}); - this.O2HawkSubMenu.Name = "O2HawkSubMenu"; - this.O2HawkSubMenu.Size = new System.Drawing.Size(60, 19); - this.O2HawkSubMenu.Text = "&O2Hawk"; - // - // O2HawksettingsToolStripMenuItem - // - this.O2HawksettingsToolStripMenuItem.Name = "O2HawksettingsToolStripMenuItem"; - this.O2HawksettingsToolStripMenuItem.Size = new System.Drawing.Size(125, 22); - this.O2HawksettingsToolStripMenuItem.Text = "Settings..."; - this.O2HawksettingsToolStripMenuItem.Click += new System.EventHandler(this.O2HawkSettingsMenuItem_Click); - // // GenesisSubMenu // this.GenesisSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -3282,32 +3194,32 @@ this.toolStripSeparator26, this.GenesisSettingsToolStripMenuItem}); this.GenesisSubMenu.Name = "GenesisSubMenu"; - this.GenesisSubMenu.Size = new System.Drawing.Size(59, 19); + this.GenesisSubMenu.Size = new System.Drawing.Size(56, 17); this.GenesisSubMenu.Text = "&Genesis"; // // vDPViewerToolStripMenuItem // this.vDPViewerToolStripMenuItem.Name = "vDPViewerToolStripMenuItem"; - this.vDPViewerToolStripMenuItem.Size = new System.Drawing.Size(233, 22); + this.vDPViewerToolStripMenuItem.Size = new System.Drawing.Size(217, 22); this.vDPViewerToolStripMenuItem.Text = "&VDP Viewer"; this.vDPViewerToolStripMenuItem.Click += new System.EventHandler(this.GenVdpViewerMenuItem_Click); // // GenesisGameGenieECDC // this.GenesisGameGenieECDC.Name = "GenesisGameGenieECDC"; - this.GenesisGameGenieECDC.Size = new System.Drawing.Size(233, 22); + this.GenesisGameGenieECDC.Size = new System.Drawing.Size(217, 22); this.GenesisGameGenieECDC.Text = "&Game Genie Encoder/Decoder"; this.GenesisGameGenieECDC.Click += new System.EventHandler(this.GenesisGameGenieEcDc_Click); // // toolStripSeparator26 // this.toolStripSeparator26.Name = "toolStripSeparator26"; - this.toolStripSeparator26.Size = new System.Drawing.Size(230, 6); + this.toolStripSeparator26.Size = new System.Drawing.Size(214, 6); // // GenesisSettingsToolStripMenuItem // this.GenesisSettingsToolStripMenuItem.Name = "GenesisSettingsToolStripMenuItem"; - this.GenesisSettingsToolStripMenuItem.Size = new System.Drawing.Size(233, 22); + this.GenesisSettingsToolStripMenuItem.Size = new System.Drawing.Size(217, 22); this.GenesisSettingsToolStripMenuItem.Text = "&Settings..."; this.GenesisSettingsToolStripMenuItem.Click += new System.EventHandler(this.GenesisSettingsMenuItem_Click); // @@ -3316,7 +3228,7 @@ this.wonderSwanToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.settingsToolStripMenuItem}); this.wonderSwanToolStripMenuItem.Name = "wonderSwanToolStripMenuItem"; - this.wonderSwanToolStripMenuItem.Size = new System.Drawing.Size(89, 19); + this.wonderSwanToolStripMenuItem.Size = new System.Drawing.Size(83, 17); this.wonderSwanToolStripMenuItem.Text = "&WonderSwan"; // // settingsToolStripMenuItem @@ -3332,7 +3244,7 @@ this.AppleDisksSubMenu, this.settingsToolStripMenuItem1}); this.AppleSubMenu.Name = "AppleSubMenu"; - this.AppleSubMenu.Size = new System.Drawing.Size(50, 19); + this.AppleSubMenu.Size = new System.Drawing.Size(46, 17); this.AppleSubMenu.Text = "Apple"; this.AppleSubMenu.DropDownOpened += new System.EventHandler(this.AppleSubMenu_DropDownOpened); // @@ -3363,7 +3275,7 @@ this.C64DisksSubMenu, this.C64SettingsMenuItem}); this.C64SubMenu.Name = "C64SubMenu"; - this.C64SubMenu.Size = new System.Drawing.Size(39, 19); + this.C64SubMenu.Size = new System.Drawing.Size(38, 17); this.C64SubMenu.Text = "&C64"; this.C64SubMenu.DropDownOpened += new System.EventHandler(this.C64SubMenu_DropDownOpened); // @@ -3393,15 +3305,14 @@ this.IntvSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.IntVControllerSettingsMenuItem}); this.IntvSubMenu.Name = "IntvSubMenu"; - this.IntvSubMenu.Size = new System.Drawing.Size(39, 19); + this.IntvSubMenu.Size = new System.Drawing.Size(39, 17); this.IntvSubMenu.Text = "&Intv"; this.IntvSubMenu.DropDownOpened += new System.EventHandler(this.IntVSubMenu_DropDownOpened); // // IntVControllerSettingsMenuItem // - this.IntVControllerSettingsMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController; this.IntVControllerSettingsMenuItem.Name = "IntVControllerSettingsMenuItem"; - this.IntVControllerSettingsMenuItem.Size = new System.Drawing.Size(181, 22); + this.IntVControllerSettingsMenuItem.Size = new System.Drawing.Size(175, 22); this.IntVControllerSettingsMenuItem.Text = "Controller Settings..."; this.IntVControllerSettingsMenuItem.Click += new System.EventHandler(this.IntVControllerSettingsMenuItem_Click); // @@ -3410,7 +3321,7 @@ this.sNESToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.preferencesToolStripMenuItem}); this.sNESToolStripMenuItem.Name = "sNESToolStripMenuItem"; - this.sNESToolStripMenuItem.Size = new System.Drawing.Size(46, 19); + this.sNESToolStripMenuItem.Size = new System.Drawing.Size(44, 17); this.sNESToolStripMenuItem.Text = "&SNES"; // // preferencesToolStripMenuItem @@ -3425,7 +3336,7 @@ this.pCFXToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.preferencesToolStripMenuItem3}); this.pCFXToolStripMenuItem.Name = "pCFXToolStripMenuItem"; - this.pCFXToolStripMenuItem.Size = new System.Drawing.Size(52, 19); + this.pCFXToolStripMenuItem.Size = new System.Drawing.Size(48, 17); this.pCFXToolStripMenuItem.Text = "&PC-FX"; // // preferencesToolStripMenuItem3 @@ -3440,7 +3351,7 @@ this.virtualBoyToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.preferencesToolStripMenuItem1}); this.virtualBoyToolStripMenuItem.Name = "virtualBoyToolStripMenuItem"; - this.virtualBoyToolStripMenuItem.Size = new System.Drawing.Size(73, 19); + this.virtualBoyToolStripMenuItem.Size = new System.Drawing.Size(67, 17); this.virtualBoyToolStripMenuItem.Text = "&VirtualBoy"; // // preferencesToolStripMenuItem1 @@ -3455,7 +3366,7 @@ this.neoGeoPocketToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.preferencesToolStripMenuItem2}); this.neoGeoPocketToolStripMenuItem.Name = "neoGeoPocketToolStripMenuItem"; - this.neoGeoPocketToolStripMenuItem.Size = new System.Drawing.Size(101, 19); + this.neoGeoPocketToolStripMenuItem.Size = new System.Drawing.Size(92, 17); this.neoGeoPocketToolStripMenuItem.Text = "&NeoGeo Pocket"; // // preferencesToolStripMenuItem2 @@ -3475,41 +3386,41 @@ this.ZXSpectrumPokeMemoryMenuItem, this.ZXSpectrumMediaMenuItem}); this.zXSpectrumToolStripMenuItem.Name = "zXSpectrumToolStripMenuItem"; - this.zXSpectrumToolStripMenuItem.Size = new System.Drawing.Size(87, 19); + this.zXSpectrumToolStripMenuItem.Size = new System.Drawing.Size(79, 17); this.zXSpectrumToolStripMenuItem.Text = "ZX Spectrum"; // // ZXSpectrumCoreEmulationSettingsMenuItem // this.ZXSpectrumCoreEmulationSettingsMenuItem.Name = "ZXSpectrumCoreEmulationSettingsMenuItem"; - this.ZXSpectrumCoreEmulationSettingsMenuItem.Size = new System.Drawing.Size(201, 22); + this.ZXSpectrumCoreEmulationSettingsMenuItem.Size = new System.Drawing.Size(188, 22); this.ZXSpectrumCoreEmulationSettingsMenuItem.Text = "Core Emulation Settings"; this.ZXSpectrumCoreEmulationSettingsMenuItem.Click += new System.EventHandler(this.ZXSpectrumCoreEmulationSettingsMenuItem_Click); // // ZXSpectrumControllerConfigurationMenuItem // this.ZXSpectrumControllerConfigurationMenuItem.Name = "ZXSpectrumControllerConfigurationMenuItem"; - this.ZXSpectrumControllerConfigurationMenuItem.Size = new System.Drawing.Size(201, 22); + this.ZXSpectrumControllerConfigurationMenuItem.Size = new System.Drawing.Size(188, 22); this.ZXSpectrumControllerConfigurationMenuItem.Text = "Joystick Configuration"; this.ZXSpectrumControllerConfigurationMenuItem.Click += new System.EventHandler(this.ZXSpectrumControllerConfigurationMenuItem_Click); // // ZXSpectrumAudioSettingsMenuItem // this.ZXSpectrumAudioSettingsMenuItem.Name = "ZXSpectrumAudioSettingsMenuItem"; - this.ZXSpectrumAudioSettingsMenuItem.Size = new System.Drawing.Size(201, 22); + this.ZXSpectrumAudioSettingsMenuItem.Size = new System.Drawing.Size(188, 22); this.ZXSpectrumAudioSettingsMenuItem.Text = "Audio Settings"; this.ZXSpectrumAudioSettingsMenuItem.Click += new System.EventHandler(this.ZXSpectrumAudioSettingsMenuItem_Click); // // ZXSpectrumNonSyncSettingsMenuItem // this.ZXSpectrumNonSyncSettingsMenuItem.Name = "ZXSpectrumNonSyncSettingsMenuItem"; - this.ZXSpectrumNonSyncSettingsMenuItem.Size = new System.Drawing.Size(201, 22); + this.ZXSpectrumNonSyncSettingsMenuItem.Size = new System.Drawing.Size(188, 22); this.ZXSpectrumNonSyncSettingsMenuItem.Text = "Non-Sync Settings"; this.ZXSpectrumNonSyncSettingsMenuItem.Click += new System.EventHandler(this.ZXSpectrumNonSyncSettingsMenuItem_Click); // // ZXSpectrumPokeMemoryMenuItem // this.ZXSpectrumPokeMemoryMenuItem.Name = "ZXSpectrumPokeMemoryMenuItem"; - this.ZXSpectrumPokeMemoryMenuItem.Size = new System.Drawing.Size(201, 22); + this.ZXSpectrumPokeMemoryMenuItem.Size = new System.Drawing.Size(188, 22); this.ZXSpectrumPokeMemoryMenuItem.Text = "POKE Memory"; this.ZXSpectrumPokeMemoryMenuItem.Click += new System.EventHandler(this.ZXSpectrumPokeMemoryMenuItem_Click); // @@ -3520,7 +3431,7 @@ this.ZXSpectrumDisksSubMenu, this.ZXSpectrumExportSnapshotMenuItemMenuItem}); this.ZXSpectrumMediaMenuItem.Name = "ZXSpectrumMediaMenuItem"; - this.ZXSpectrumMediaMenuItem.Size = new System.Drawing.Size(201, 22); + this.ZXSpectrumMediaMenuItem.Size = new System.Drawing.Size(188, 22); this.ZXSpectrumMediaMenuItem.Text = "Media"; this.ZXSpectrumMediaMenuItem.DropDownOpened += new System.EventHandler(this.ZXSpectrumMediaMenuItem_DropDownOpened); // @@ -3529,14 +3440,14 @@ this.ZXSpectrumTapesSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.zxt1ToolStripMenuItem}); this.ZXSpectrumTapesSubMenu.Name = "ZXSpectrumTapesSubMenu"; - this.ZXSpectrumTapesSubMenu.Size = new System.Drawing.Size(159, 22); + this.ZXSpectrumTapesSubMenu.Size = new System.Drawing.Size(154, 22); this.ZXSpectrumTapesSubMenu.Text = "Tapes"; this.ZXSpectrumTapesSubMenu.DropDownOpened += new System.EventHandler(this.ZXSpectrumTapesSubMenu_DropDownOpened); // // zxt1ToolStripMenuItem // this.zxt1ToolStripMenuItem.Name = "zxt1ToolStripMenuItem"; - this.zxt1ToolStripMenuItem.Size = new System.Drawing.Size(94, 22); + this.zxt1ToolStripMenuItem.Size = new System.Drawing.Size(95, 22); this.zxt1ToolStripMenuItem.Text = "zxt1"; // // ZXSpectrumDisksSubMenu @@ -3544,23 +3455,53 @@ this.ZXSpectrumDisksSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.zxt2ToolStripMenuItem}); this.ZXSpectrumDisksSubMenu.Name = "ZXSpectrumDisksSubMenu"; - this.ZXSpectrumDisksSubMenu.Size = new System.Drawing.Size(159, 22); + this.ZXSpectrumDisksSubMenu.Size = new System.Drawing.Size(154, 22); this.ZXSpectrumDisksSubMenu.Text = "Disks"; this.ZXSpectrumDisksSubMenu.DropDownOpened += new System.EventHandler(this.ZXSpectrumDisksSubMenu_DropDownOpened); // // zxt2ToolStripMenuItem // this.zxt2ToolStripMenuItem.Name = "zxt2ToolStripMenuItem"; - this.zxt2ToolStripMenuItem.Size = new System.Drawing.Size(94, 22); + this.zxt2ToolStripMenuItem.Size = new System.Drawing.Size(95, 22); this.zxt2ToolStripMenuItem.Text = "zxt2"; // // ZXSpectrumExportSnapshotMenuItemMenuItem // this.ZXSpectrumExportSnapshotMenuItemMenuItem.Name = "ZXSpectrumExportSnapshotMenuItemMenuItem"; - this.ZXSpectrumExportSnapshotMenuItemMenuItem.Size = new System.Drawing.Size(159, 22); + this.ZXSpectrumExportSnapshotMenuItemMenuItem.Size = new System.Drawing.Size(154, 22); this.ZXSpectrumExportSnapshotMenuItemMenuItem.Text = "Export Snapshot"; this.ZXSpectrumExportSnapshotMenuItemMenuItem.Click += new System.EventHandler(this.ZXSpectrumExportSnapshotMenuItemMenuItem_Click); // + // VectrexSubMenu + // + this.VectrexSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.VectrexsettingsToolStripMenuItem}); + this.VectrexSubMenu.Name = "VectrexSubMenu"; + this.VectrexSubMenu.Size = new System.Drawing.Size(56, 17); + this.VectrexSubMenu.Text = "&Vectrex"; + // + // VectrexsettingsToolStripMenuItem + // + this.VectrexsettingsToolStripMenuItem.Name = "VectrexsettingsToolStripMenuItem"; + this.VectrexsettingsToolStripMenuItem.Size = new System.Drawing.Size(125, 22); + this.VectrexsettingsToolStripMenuItem.Text = "Settings..."; + this.VectrexsettingsToolStripMenuItem.Click += new System.EventHandler(this.VectrexSettingsMenuItem_Click); + // + // O2HawkSubMenu + // + this.O2HawkSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.O2HawksettingsToolStripMenuItem}); + this.O2HawkSubMenu.Name = "O2HawkSubMenu"; + this.O2HawkSubMenu.Size = new System.Drawing.Size(59, 17); + this.O2HawkSubMenu.Text = "&O2Hawk"; + // + // O2HawksettingsToolStripMenuItem + // + this.O2HawksettingsToolStripMenuItem.Name = "O2HawksettingsToolStripMenuItem"; + this.O2HawksettingsToolStripMenuItem.Size = new System.Drawing.Size(125, 22); + this.O2HawksettingsToolStripMenuItem.Text = "Settings..."; + this.O2HawksettingsToolStripMenuItem.Click += new System.EventHandler(this.O2HawkSettingsMenuItem_Click); + // // HelpSubMenu // this.HelpSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -3569,39 +3510,35 @@ this.FeaturesMenuItem, this.AboutMenuItem}); this.HelpSubMenu.Name = "HelpSubMenu"; - this.HelpSubMenu.Size = new System.Drawing.Size(44, 19); + this.HelpSubMenu.Size = new System.Drawing.Size(40, 17); this.HelpSubMenu.Text = "&Help"; this.HelpSubMenu.DropDownOpened += new System.EventHandler(this.HelpSubMenu_DropDownOpened); // // OnlineHelpMenuItem // - this.OnlineHelpMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Help; this.OnlineHelpMenuItem.Name = "OnlineHelpMenuItem"; - this.OnlineHelpMenuItem.Size = new System.Drawing.Size(146, 22); + this.OnlineHelpMenuItem.Size = new System.Drawing.Size(180, 22); this.OnlineHelpMenuItem.Text = "&Online Help..."; this.OnlineHelpMenuItem.Click += new System.EventHandler(this.OnlineHelpMenuItem_Click); // // ForumsMenuItem // - this.ForumsMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.TAStudio; this.ForumsMenuItem.Name = "ForumsMenuItem"; - this.ForumsMenuItem.Size = new System.Drawing.Size(146, 22); + this.ForumsMenuItem.Size = new System.Drawing.Size(180, 22); this.ForumsMenuItem.Text = "Forums..."; this.ForumsMenuItem.Click += new System.EventHandler(this.ForumsMenuItem_Click); // // FeaturesMenuItem // - this.FeaturesMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.kitchensink; this.FeaturesMenuItem.Name = "FeaturesMenuItem"; - this.FeaturesMenuItem.Size = new System.Drawing.Size(146, 22); + this.FeaturesMenuItem.Size = new System.Drawing.Size(180, 22); this.FeaturesMenuItem.Text = "&Features"; this.FeaturesMenuItem.Click += new System.EventHandler(this.FeaturesMenuItem_Click); // // AboutMenuItem // - this.AboutMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.CorpHawkSmall; this.AboutMenuItem.Name = "AboutMenuItem"; - this.AboutMenuItem.Size = new System.Drawing.Size(146, 22); + this.AboutMenuItem.Size = new System.Drawing.Size(180, 22); this.AboutMenuItem.Text = "&About"; this.AboutMenuItem.Click += new System.EventHandler(this.AboutMenuItem_Click); // @@ -3614,34 +3551,34 @@ this.AmstradCPCPokeMemoryToolStripMenuItem, this.AmstradCPCMediaToolStripMenuItem}); this.amstradCPCToolStripMenuItem.Name = "amstradCPCToolStripMenuItem"; - this.amstradCPCToolStripMenuItem.Size = new System.Drawing.Size(90, 19); + this.amstradCPCToolStripMenuItem.Size = new System.Drawing.Size(82, 17); this.amstradCPCToolStripMenuItem.Text = "Amstrad CPC"; // // amstradCPCCoreEmulationSettingsToolStripMenuItem // this.amstradCPCCoreEmulationSettingsToolStripMenuItem.Name = "amstradCPCCoreEmulationSettingsToolStripMenuItem"; - this.amstradCPCCoreEmulationSettingsToolStripMenuItem.Size = new System.Drawing.Size(201, 22); + this.amstradCPCCoreEmulationSettingsToolStripMenuItem.Size = new System.Drawing.Size(188, 22); this.amstradCPCCoreEmulationSettingsToolStripMenuItem.Text = "Core Emulation Settings"; this.amstradCPCCoreEmulationSettingsToolStripMenuItem.Click += new System.EventHandler(this.amstradCPCCoreEmulationSettingsToolStripMenuItem_Click); // // AmstradCPCAudioSettingsToolStripMenuItem // this.AmstradCPCAudioSettingsToolStripMenuItem.Name = "AmstradCPCAudioSettingsToolStripMenuItem"; - this.AmstradCPCAudioSettingsToolStripMenuItem.Size = new System.Drawing.Size(201, 22); + this.AmstradCPCAudioSettingsToolStripMenuItem.Size = new System.Drawing.Size(188, 22); this.AmstradCPCAudioSettingsToolStripMenuItem.Text = "Audio Settings"; this.AmstradCPCAudioSettingsToolStripMenuItem.Click += new System.EventHandler(this.AmstradCPCAudioSettingsToolStripMenuItem_Click); // // AmstradCPCNonSyncSettingsToolStripMenuItem // this.AmstradCPCNonSyncSettingsToolStripMenuItem.Name = "AmstradCPCNonSyncSettingsToolStripMenuItem"; - this.AmstradCPCNonSyncSettingsToolStripMenuItem.Size = new System.Drawing.Size(201, 22); + this.AmstradCPCNonSyncSettingsToolStripMenuItem.Size = new System.Drawing.Size(188, 22); this.AmstradCPCNonSyncSettingsToolStripMenuItem.Text = "Non-Sync Settings"; this.AmstradCPCNonSyncSettingsToolStripMenuItem.Click += new System.EventHandler(this.AmstradCPCNonSyncSettingsToolStripMenuItem_Click); // // AmstradCPCPokeMemoryToolStripMenuItem // this.AmstradCPCPokeMemoryToolStripMenuItem.Name = "AmstradCPCPokeMemoryToolStripMenuItem"; - this.AmstradCPCPokeMemoryToolStripMenuItem.Size = new System.Drawing.Size(201, 22); + this.AmstradCPCPokeMemoryToolStripMenuItem.Size = new System.Drawing.Size(188, 22); this.AmstradCPCPokeMemoryToolStripMenuItem.Text = "POKE Memory"; this.AmstradCPCPokeMemoryToolStripMenuItem.Click += new System.EventHandler(this.AmstradCPCPokeMemoryToolStripMenuItem_Click); // @@ -3651,7 +3588,7 @@ this.AmstradCPCTapesSubMenu, this.AmstradCPCDisksSubMenu}); this.AmstradCPCMediaToolStripMenuItem.Name = "AmstradCPCMediaToolStripMenuItem"; - this.AmstradCPCMediaToolStripMenuItem.Size = new System.Drawing.Size(201, 22); + this.AmstradCPCMediaToolStripMenuItem.Size = new System.Drawing.Size(188, 22); this.AmstradCPCMediaToolStripMenuItem.Text = "Media"; this.AmstradCPCMediaToolStripMenuItem.DropDownOpened += new System.EventHandler(this.AmstradCPCMediaToolStripMenuItem_DropDownOpened); // @@ -3660,14 +3597,14 @@ this.AmstradCPCTapesSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.cpct1ToolStripMenuItem}); this.AmstradCPCTapesSubMenu.Name = "AmstradCPCTapesSubMenu"; - this.AmstradCPCTapesSubMenu.Size = new System.Drawing.Size(104, 22); + this.AmstradCPCTapesSubMenu.Size = new System.Drawing.Size(103, 22); this.AmstradCPCTapesSubMenu.Text = "Tapes"; this.AmstradCPCTapesSubMenu.DropDownOpened += new System.EventHandler(this.AmstradCPCTapesSubMenu_DropDownOpened); // // cpct1ToolStripMenuItem // this.cpct1ToolStripMenuItem.Name = "cpct1ToolStripMenuItem"; - this.cpct1ToolStripMenuItem.Size = new System.Drawing.Size(103, 22); + this.cpct1ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); this.cpct1ToolStripMenuItem.Text = "cpct1"; // // AmstradCPCDisksSubMenu @@ -3675,16 +3612,31 @@ this.AmstradCPCDisksSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.cpcd1ToolStripMenuItem}); this.AmstradCPCDisksSubMenu.Name = "AmstradCPCDisksSubMenu"; - this.AmstradCPCDisksSubMenu.Size = new System.Drawing.Size(104, 22); + this.AmstradCPCDisksSubMenu.Size = new System.Drawing.Size(103, 22); this.AmstradCPCDisksSubMenu.Text = "Disks"; this.AmstradCPCDisksSubMenu.DropDownOpened += new System.EventHandler(this.AmstradCPCDisksSubMenu_DropDownOpened); // // cpcd1ToolStripMenuItem // this.cpcd1ToolStripMenuItem.Name = "cpcd1ToolStripMenuItem"; - this.cpcd1ToolStripMenuItem.Size = new System.Drawing.Size(106, 22); + this.cpcd1ToolStripMenuItem.Size = new System.Drawing.Size(102, 22); this.cpcd1ToolStripMenuItem.Text = "cpcd1"; // + // arcadeToolStripMenuItem + // + this.arcadeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.settingsToolStripMenuItem2}); + this.arcadeToolStripMenuItem.Name = "arcadeToolStripMenuItem"; + this.arcadeToolStripMenuItem.Size = new System.Drawing.Size(53, 17); + this.arcadeToolStripMenuItem.Text = "Arcade"; + // + // settingsToolStripMenuItem2 + // + this.settingsToolStripMenuItem2.Name = "settingsToolStripMenuItem2"; + this.settingsToolStripMenuItem2.Size = new System.Drawing.Size(125, 22); + this.settingsToolStripMenuItem2.Text = "Settings..."; + this.settingsToolStripMenuItem2.Click += new System.EventHandler(this.ArcadeSettingsMenuItem_Click); + // // Atari7800HawkCoreMenuItem // this.Atari7800HawkCoreMenuItem.Name = "Atari7800HawkCoreMenuItem"; @@ -3730,11 +3682,10 @@ // DumpStatusButton // this.DumpStatusButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.DumpStatusButton.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Blank; this.DumpStatusButton.ImageTransparentColor = System.Drawing.Color.Magenta; this.DumpStatusButton.Name = "DumpStatusButton"; this.DumpStatusButton.ShowDropDownArrow = false; - this.DumpStatusButton.Size = new System.Drawing.Size(20, 20); + this.DumpStatusButton.Size = new System.Drawing.Size(4, 20); this.DumpStatusButton.Text = "No ROM loaded"; this.DumpStatusButton.Click += new System.EventHandler(this.DumpStatusButton_Click); // @@ -3746,22 +3697,20 @@ // PlayRecordStatusButton // this.PlayRecordStatusButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.PlayRecordStatusButton.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Blank; this.PlayRecordStatusButton.ImageTransparentColor = System.Drawing.Color.Magenta; this.PlayRecordStatusButton.Name = "PlayRecordStatusButton"; this.PlayRecordStatusButton.ShowDropDownArrow = false; - this.PlayRecordStatusButton.Size = new System.Drawing.Size(20, 20); + this.PlayRecordStatusButton.Size = new System.Drawing.Size(4, 20); this.PlayRecordStatusButton.Text = "No movie is active"; // // PauseStatusButton // this.PauseStatusButton.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; this.PauseStatusButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.PauseStatusButton.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Blank; this.PauseStatusButton.ImageTransparentColor = System.Drawing.Color.Magenta; this.PauseStatusButton.Name = "PauseStatusButton"; this.PauseStatusButton.ShowDropDownArrow = false; - this.PauseStatusButton.Size = new System.Drawing.Size(20, 20); + this.PauseStatusButton.Size = new System.Drawing.Size(4, 20); this.PauseStatusButton.Text = "toolStripDropDownButton1"; this.PauseStatusButton.ToolTipText = "Emulator is paused"; this.PauseStatusButton.Click += new System.EventHandler(this.PauseMenuItem_Click); @@ -3769,10 +3718,9 @@ // RebootStatusBarIcon // this.RebootStatusBarIcon.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.RebootStatusBarIcon.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.reboot; this.RebootStatusBarIcon.Name = "RebootStatusBarIcon"; this.RebootStatusBarIcon.RightToLeft = System.Windows.Forms.RightToLeft.No; - this.RebootStatusBarIcon.Size = new System.Drawing.Size(16, 17); + this.RebootStatusBarIcon.Size = new System.Drawing.Size(0, 17); this.RebootStatusBarIcon.Text = "Reboot"; this.RebootStatusBarIcon.ToolTipText = "A reboot of the core is needed for a setting change to take effect"; this.RebootStatusBarIcon.Click += new System.EventHandler(this.PowerMenuItem_Click); @@ -3780,23 +3728,21 @@ // AVIStatusLabel // this.AVIStatusLabel.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.AVIStatusLabel.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Blank; this.AVIStatusLabel.Name = "AVIStatusLabel"; - this.AVIStatusLabel.Size = new System.Drawing.Size(16, 17); + this.AVIStatusLabel.Size = new System.Drawing.Size(0, 17); this.AVIStatusLabel.Text = "AVI Capture"; // // LedLightStatusLabel // - this.LedLightStatusLabel.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.LightOff; this.LedLightStatusLabel.Name = "LedLightStatusLabel"; - this.LedLightStatusLabel.Size = new System.Drawing.Size(16, 17); + this.LedLightStatusLabel.Size = new System.Drawing.Size(0, 17); this.LedLightStatusLabel.ToolTipText = "Disk Drive LED Light"; // // SaveSlotsStatusLabel // this.SaveSlotsStatusLabel.BackColor = System.Drawing.SystemColors.Control; this.SaveSlotsStatusLabel.Name = "SaveSlotsStatusLabel"; - this.SaveSlotsStatusLabel.Size = new System.Drawing.Size(58, 17); + this.SaveSlotsStatusLabel.Size = new System.Drawing.Size(56, 17); this.SaveSlotsStatusLabel.Text = "Save slots"; // // Slot1StatusButton @@ -3888,27 +3834,24 @@ // KeyPriorityStatusLabel // this.KeyPriorityStatusLabel.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.KeyPriorityStatusLabel.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Both; this.KeyPriorityStatusLabel.Margin = new System.Windows.Forms.Padding(5, 3, 5, 0); this.KeyPriorityStatusLabel.Name = "KeyPriorityStatusLabel"; - this.KeyPriorityStatusLabel.Size = new System.Drawing.Size(16, 19); + this.KeyPriorityStatusLabel.Size = new System.Drawing.Size(0, 19); this.KeyPriorityStatusLabel.Text = "KeyPriority"; this.KeyPriorityStatusLabel.Click += new System.EventHandler(this.KeyPriorityStatusLabel_Click); // // CoreNameStatusBarButton // - this.CoreNameStatusBarButton.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.CorpHawkSmall; this.CoreNameStatusBarButton.Name = "CoreNameStatusBarButton"; - this.CoreNameStatusBarButton.Size = new System.Drawing.Size(71, 17); + this.CoreNameStatusBarButton.Size = new System.Drawing.Size(50, 17); this.CoreNameStatusBarButton.Text = "Neshawk"; // // ProfileFirstBootLabel // this.ProfileFirstBootLabel.AutoToolTip = true; this.ProfileFirstBootLabel.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.ProfileFirstBootLabel.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.user_blue_small; this.ProfileFirstBootLabel.Name = "ProfileFirstBootLabel"; - this.ProfileFirstBootLabel.Size = new System.Drawing.Size(16, 17); + this.ProfileFirstBootLabel.Size = new System.Drawing.Size(0, 17); this.ProfileFirstBootLabel.Text = "ProfileFirstBootLabel"; this.ProfileFirstBootLabel.ToolTipText = "Set up your profile before use"; this.ProfileFirstBootLabel.Visible = false; @@ -3917,9 +3860,8 @@ // LinkConnectStatusBarButton // this.LinkConnectStatusBarButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.LinkConnectStatusBarButton.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.connect_16x16; this.LinkConnectStatusBarButton.Name = "LinkConnectStatusBarButton"; - this.LinkConnectStatusBarButton.Size = new System.Drawing.Size(16, 17); + this.LinkConnectStatusBarButton.Size = new System.Drawing.Size(0, 17); this.LinkConnectStatusBarButton.Text = "Link connection is currently enabled"; this.LinkConnectStatusBarButton.ToolTipText = "Link connection is currently enabled"; this.LinkConnectStatusBarButton.Click += new System.EventHandler(this.LinkConnectStatusBarButton_Click); @@ -3929,7 +3871,7 @@ this.UpdateNotification.IsLink = true; this.UpdateNotification.LinkColor = System.Drawing.Color.Red; this.UpdateNotification.Name = "UpdateNotification"; - this.UpdateNotification.Size = new System.Drawing.Size(46, 17); + this.UpdateNotification.Size = new System.Drawing.Size(197, 17); this.UpdateNotification.Spring = true; this.UpdateNotification.Text = "New version available!"; this.UpdateNotification.TextAlign = System.Drawing.ContentAlignment.MiddleRight; @@ -3964,148 +3906,136 @@ this.ShowMenuContextMenuSeparator, this.ShowMenuContextMenuItem}); this.MainFormContextMenu.Name = "contextMenuStrip1"; - this.MainFormContextMenu.Size = new System.Drawing.Size(217, 490); + this.MainFormContextMenu.Size = new System.Drawing.Size(202, 490); this.MainFormContextMenu.Closing += new System.Windows.Forms.ToolStripDropDownClosingEventHandler(this.MainFormContextMenu_Closing); this.MainFormContextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.MainFormContextMenu_Opening); // // OpenRomContextMenuItem // - this.OpenRomContextMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.OpenFile; this.OpenRomContextMenuItem.Name = "OpenRomContextMenuItem"; - this.OpenRomContextMenuItem.Size = new System.Drawing.Size(216, 22); + this.OpenRomContextMenuItem.Size = new System.Drawing.Size(201, 22); this.OpenRomContextMenuItem.Text = "Open Rom"; this.OpenRomContextMenuItem.Click += new System.EventHandler(this.OpenRomMenuItem_Click); // // LoadLastRomContextMenuItem // - this.LoadLastRomContextMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Recent; this.LoadLastRomContextMenuItem.Name = "LoadLastRomContextMenuItem"; - this.LoadLastRomContextMenuItem.Size = new System.Drawing.Size(216, 22); + this.LoadLastRomContextMenuItem.Size = new System.Drawing.Size(201, 22); this.LoadLastRomContextMenuItem.Text = "Load Last ROM"; this.LoadLastRomContextMenuItem.Click += new System.EventHandler(this.LoadLastRomContextMenuItem_Click); // // StopAVContextMenuItem // - this.StopAVContextMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Stop; this.StopAVContextMenuItem.Name = "StopAVContextMenuItem"; - this.StopAVContextMenuItem.Size = new System.Drawing.Size(216, 22); + this.StopAVContextMenuItem.Size = new System.Drawing.Size(201, 22); this.StopAVContextMenuItem.Text = "Stop AVI/WAV"; this.StopAVContextMenuItem.Click += new System.EventHandler(this.StopAVMenuItem_Click); // // ContextSeparator_AfterROM // this.ContextSeparator_AfterROM.Name = "ContextSeparator_AfterROM"; - this.ContextSeparator_AfterROM.Size = new System.Drawing.Size(213, 6); + this.ContextSeparator_AfterROM.Size = new System.Drawing.Size(198, 6); // // RecordMovieContextMenuItem // - this.RecordMovieContextMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.RecordHS; this.RecordMovieContextMenuItem.Name = "RecordMovieContextMenuItem"; - this.RecordMovieContextMenuItem.Size = new System.Drawing.Size(216, 22); + this.RecordMovieContextMenuItem.Size = new System.Drawing.Size(201, 22); this.RecordMovieContextMenuItem.Text = "Record Movie"; this.RecordMovieContextMenuItem.Click += new System.EventHandler(this.RecordMovieMenuItem_Click); // // PlayMovieContextMenuItem // - this.PlayMovieContextMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Play; this.PlayMovieContextMenuItem.Name = "PlayMovieContextMenuItem"; - this.PlayMovieContextMenuItem.Size = new System.Drawing.Size(216, 22); + this.PlayMovieContextMenuItem.Size = new System.Drawing.Size(201, 22); this.PlayMovieContextMenuItem.Text = "Play Movie"; this.PlayMovieContextMenuItem.Click += new System.EventHandler(this.PlayMovieMenuItem_Click); // // RestartMovieContextMenuItem // - this.RestartMovieContextMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.restart; this.RestartMovieContextMenuItem.Name = "RestartMovieContextMenuItem"; - this.RestartMovieContextMenuItem.Size = new System.Drawing.Size(216, 22); + this.RestartMovieContextMenuItem.Size = new System.Drawing.Size(201, 22); this.RestartMovieContextMenuItem.Text = "Restart Movie"; this.RestartMovieContextMenuItem.Click += new System.EventHandler(this.PlayFromBeginningMenuItem_Click); // // StopMovieContextMenuItem // - this.StopMovieContextMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Stop; this.StopMovieContextMenuItem.Name = "StopMovieContextMenuItem"; - this.StopMovieContextMenuItem.Size = new System.Drawing.Size(216, 22); + this.StopMovieContextMenuItem.Size = new System.Drawing.Size(201, 22); this.StopMovieContextMenuItem.Text = "Stop Movie"; this.StopMovieContextMenuItem.Click += new System.EventHandler(this.StopMovieMenuItem_Click); // // LoadLastMovieContextMenuItem // - this.LoadLastMovieContextMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Recent; this.LoadLastMovieContextMenuItem.Name = "LoadLastMovieContextMenuItem"; - this.LoadLastMovieContextMenuItem.Size = new System.Drawing.Size(216, 22); + this.LoadLastMovieContextMenuItem.Size = new System.Drawing.Size(201, 22); this.LoadLastMovieContextMenuItem.Text = "Load Last Movie"; this.LoadLastMovieContextMenuItem.Click += new System.EventHandler(this.LoadLastMovieContextMenuItem_Click); // // BackupMovieContextMenuItem // this.BackupMovieContextMenuItem.Name = "BackupMovieContextMenuItem"; - this.BackupMovieContextMenuItem.Size = new System.Drawing.Size(216, 22); + this.BackupMovieContextMenuItem.Size = new System.Drawing.Size(201, 22); this.BackupMovieContextMenuItem.Text = "Backup Movie"; this.BackupMovieContextMenuItem.Click += new System.EventHandler(this.BackupMovieContextMenuItem_Click); // // StopNoSaveContextMenuItem // - this.StopNoSaveContextMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Stop; this.StopNoSaveContextMenuItem.Name = "StopNoSaveContextMenuItem"; - this.StopNoSaveContextMenuItem.Size = new System.Drawing.Size(216, 22); + this.StopNoSaveContextMenuItem.Size = new System.Drawing.Size(201, 22); this.StopNoSaveContextMenuItem.Text = "Stop Movie without Saving"; this.StopNoSaveContextMenuItem.Click += new System.EventHandler(this.StopMovieWithoutSavingMenuItem_Click); // // ViewSubtitlesContextMenuItem // this.ViewSubtitlesContextMenuItem.Name = "ViewSubtitlesContextMenuItem"; - this.ViewSubtitlesContextMenuItem.Size = new System.Drawing.Size(216, 22); + this.ViewSubtitlesContextMenuItem.Size = new System.Drawing.Size(201, 22); this.ViewSubtitlesContextMenuItem.Text = "View Subtitles"; this.ViewSubtitlesContextMenuItem.Click += new System.EventHandler(this.ViewSubtitlesContextMenuItem_Click); // // AddSubtitleContextMenuItem // this.AddSubtitleContextMenuItem.Name = "AddSubtitleContextMenuItem"; - this.AddSubtitleContextMenuItem.Size = new System.Drawing.Size(216, 22); + this.AddSubtitleContextMenuItem.Size = new System.Drawing.Size(201, 22); this.AddSubtitleContextMenuItem.Text = "Add Subtitle"; this.AddSubtitleContextMenuItem.Click += new System.EventHandler(this.AddSubtitleContextMenuItem_Click); // // ViewCommentsContextMenuItem // this.ViewCommentsContextMenuItem.Name = "ViewCommentsContextMenuItem"; - this.ViewCommentsContextMenuItem.Size = new System.Drawing.Size(216, 22); + this.ViewCommentsContextMenuItem.Size = new System.Drawing.Size(201, 22); this.ViewCommentsContextMenuItem.Text = "View Comments"; this.ViewCommentsContextMenuItem.Click += new System.EventHandler(this.ViewCommentsContextMenuItem_Click); // // SaveMovieContextMenuItem // - this.SaveMovieContextMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.SaveAs; this.SaveMovieContextMenuItem.Name = "SaveMovieContextMenuItem"; - this.SaveMovieContextMenuItem.Size = new System.Drawing.Size(216, 22); + this.SaveMovieContextMenuItem.Size = new System.Drawing.Size(201, 22); this.SaveMovieContextMenuItem.Text = "Save Movie"; this.SaveMovieContextMenuItem.Click += new System.EventHandler(this.SaveMovieMenuItem_Click); // // SaveMovieAsContextMenuItem // - this.SaveMovieAsContextMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.SaveAs; this.SaveMovieAsContextMenuItem.Name = "SaveMovieAsContextMenuItem"; - this.SaveMovieAsContextMenuItem.Size = new System.Drawing.Size(216, 22); + this.SaveMovieAsContextMenuItem.Size = new System.Drawing.Size(201, 22); this.SaveMovieAsContextMenuItem.Text = "Save Movie As..."; this.SaveMovieAsContextMenuItem.Click += new System.EventHandler(this.SaveMovieAsMenuItem_Click); // // ContextSeparator_AfterMovie // this.ContextSeparator_AfterMovie.Name = "ContextSeparator_AfterMovie"; - this.ContextSeparator_AfterMovie.Size = new System.Drawing.Size(213, 6); + this.ContextSeparator_AfterMovie.Size = new System.Drawing.Size(198, 6); // // UndoSavestateContextMenuItem // - this.UndoSavestateContextMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.undo; this.UndoSavestateContextMenuItem.Name = "UndoSavestateContextMenuItem"; - this.UndoSavestateContextMenuItem.Size = new System.Drawing.Size(216, 22); + this.UndoSavestateContextMenuItem.Size = new System.Drawing.Size(201, 22); this.UndoSavestateContextMenuItem.Text = "Undo Savestate"; this.UndoSavestateContextMenuItem.Click += new System.EventHandler(this.UndoSavestateContextMenuItem_Click); // // ContextSeparator_AfterUndo // this.ContextSeparator_AfterUndo.Name = "ContextSeparator_AfterUndo"; - this.ContextSeparator_AfterUndo.Size = new System.Drawing.Size(213, 6); + this.ContextSeparator_AfterUndo.Size = new System.Drawing.Size(198, 6); // // ConfigContextMenuItem // @@ -4127,99 +4057,90 @@ this.toolStripMenuItem66, this.toolStripMenuItem67}); this.ConfigContextMenuItem.Name = "ConfigContextMenuItem"; - this.ConfigContextMenuItem.Size = new System.Drawing.Size(216, 22); + this.ConfigContextMenuItem.Size = new System.Drawing.Size(201, 22); this.ConfigContextMenuItem.Text = "Config"; // // toolStripMenuItem6 // - this.toolStripMenuItem6.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController; this.toolStripMenuItem6.Name = "toolStripMenuItem6"; - this.toolStripMenuItem6.Size = new System.Drawing.Size(159, 22); + this.toolStripMenuItem6.Size = new System.Drawing.Size(157, 22); this.toolStripMenuItem6.Text = "&Controllers..."; this.toolStripMenuItem6.Click += new System.EventHandler(this.ControllersMenuItem_Click); // // toolStripMenuItem7 // - this.toolStripMenuItem7.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.HotKeys; this.toolStripMenuItem7.Name = "toolStripMenuItem7"; - this.toolStripMenuItem7.Size = new System.Drawing.Size(159, 22); + this.toolStripMenuItem7.Size = new System.Drawing.Size(157, 22); this.toolStripMenuItem7.Text = "&Hotkeys..."; this.toolStripMenuItem7.Click += new System.EventHandler(this.HotkeysMenuItem_Click); // // toolStripMenuItem8 // - this.toolStripMenuItem8.Image = ((System.Drawing.Image)(resources.GetObject("toolStripMenuItem8.Image"))); this.toolStripMenuItem8.Name = "toolStripMenuItem8"; - this.toolStripMenuItem8.Size = new System.Drawing.Size(159, 22); + this.toolStripMenuItem8.Size = new System.Drawing.Size(157, 22); this.toolStripMenuItem8.Text = "Display..."; this.toolStripMenuItem8.Click += new System.EventHandler(this.DisplayConfigMenuItem_Click); // // toolStripMenuItem9 // - this.toolStripMenuItem9.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.AudioHS; this.toolStripMenuItem9.Name = "toolStripMenuItem9"; - this.toolStripMenuItem9.Size = new System.Drawing.Size(159, 22); + this.toolStripMenuItem9.Size = new System.Drawing.Size(157, 22); this.toolStripMenuItem9.Text = "&Sound..."; this.toolStripMenuItem9.Click += new System.EventHandler(this.SoundMenuItem_Click); // // toolStripMenuItem10 // - this.toolStripMenuItem10.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.CopyFolderHS; this.toolStripMenuItem10.Name = "toolStripMenuItem10"; - this.toolStripMenuItem10.Size = new System.Drawing.Size(159, 22); + this.toolStripMenuItem10.Size = new System.Drawing.Size(157, 22); this.toolStripMenuItem10.Text = "Paths..."; this.toolStripMenuItem10.Click += new System.EventHandler(this.PathsMenuItem_Click); // // toolStripMenuItem11 // - this.toolStripMenuItem11.Image = ((System.Drawing.Image)(resources.GetObject("toolStripMenuItem11.Image"))); this.toolStripMenuItem11.Name = "toolStripMenuItem11"; - this.toolStripMenuItem11.Size = new System.Drawing.Size(159, 22); + this.toolStripMenuItem11.Size = new System.Drawing.Size(157, 22); this.toolStripMenuItem11.Text = "&Firmwares..."; this.toolStripMenuItem11.Click += new System.EventHandler(this.FirmwaresMenuItem_Click); // // toolStripMenuItem12 // - this.toolStripMenuItem12.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.MessageConfig; this.toolStripMenuItem12.Name = "toolStripMenuItem12"; - this.toolStripMenuItem12.Size = new System.Drawing.Size(159, 22); + this.toolStripMenuItem12.Size = new System.Drawing.Size(157, 22); this.toolStripMenuItem12.Text = "&Messages..."; this.toolStripMenuItem12.Click += new System.EventHandler(this.MessagesMenuItem_Click); // // toolStripMenuItem13 // - this.toolStripMenuItem13.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Lightning; this.toolStripMenuItem13.Name = "toolStripMenuItem13"; - this.toolStripMenuItem13.Size = new System.Drawing.Size(159, 22); + this.toolStripMenuItem13.Size = new System.Drawing.Size(157, 22); this.toolStripMenuItem13.Text = "&Autofire..."; this.toolStripMenuItem13.Click += new System.EventHandler(this.AutofireMenuItem_Click); // // toolStripMenuItem14 // - this.toolStripMenuItem14.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Previous; this.toolStripMenuItem14.Name = "toolStripMenuItem14"; - this.toolStripMenuItem14.Size = new System.Drawing.Size(159, 22); + this.toolStripMenuItem14.Size = new System.Drawing.Size(157, 22); this.toolStripMenuItem14.Text = "&Rewind..."; this.toolStripMenuItem14.Click += new System.EventHandler(this.RewindOptionsMenuItem_Click); // // toolStripMenuItem15 // this.toolStripMenuItem15.Name = "toolStripMenuItem15"; - this.toolStripMenuItem15.Size = new System.Drawing.Size(159, 22); + this.toolStripMenuItem15.Size = new System.Drawing.Size(157, 22); this.toolStripMenuItem15.Text = "File Extensions..."; this.toolStripMenuItem15.Click += new System.EventHandler(this.FileExtensionsMenuItem_Click); // // customizeToolStripMenuItem // this.customizeToolStripMenuItem.Name = "customizeToolStripMenuItem"; - this.customizeToolStripMenuItem.Size = new System.Drawing.Size(159, 22); + this.customizeToolStripMenuItem.Size = new System.Drawing.Size(157, 22); this.customizeToolStripMenuItem.Text = "Customize..."; this.customizeToolStripMenuItem.Click += new System.EventHandler(this.CustomizeMenuItem_Click); // // toolStripSeparator30 // this.toolStripSeparator30.Name = "toolStripSeparator30"; - this.toolStripSeparator30.Size = new System.Drawing.Size(156, 6); + this.toolStripSeparator30.Size = new System.Drawing.Size(154, 6); // // SavestateTypeContextSubMenu // @@ -4228,81 +4149,77 @@ this.SavestateBinaryContextMenuItem, this.SavestateTextContextMenuItem}); this.SavestateTypeContextSubMenu.Name = "SavestateTypeContextSubMenu"; - this.SavestateTypeContextSubMenu.Size = new System.Drawing.Size(159, 22); + this.SavestateTypeContextSubMenu.Size = new System.Drawing.Size(157, 22); this.SavestateTypeContextSubMenu.Text = "Savestate Type"; this.SavestateTypeContextSubMenu.DropDownOpened += new System.EventHandler(this.SavestateTypeContextSubMenu_DropDownOpened); // // SavestateTypeDefaultContextMenuItem // this.SavestateTypeDefaultContextMenuItem.Name = "SavestateTypeDefaultContextMenuItem"; - this.SavestateTypeDefaultContextMenuItem.Size = new System.Drawing.Size(112, 22); + this.SavestateTypeDefaultContextMenuItem.Size = new System.Drawing.Size(109, 22); this.SavestateTypeDefaultContextMenuItem.Text = "&Default"; // // SavestateBinaryContextMenuItem // this.SavestateBinaryContextMenuItem.Name = "SavestateBinaryContextMenuItem"; - this.SavestateBinaryContextMenuItem.Size = new System.Drawing.Size(112, 22); + this.SavestateBinaryContextMenuItem.Size = new System.Drawing.Size(109, 22); this.SavestateBinaryContextMenuItem.Text = "&Binary"; // // SavestateTextContextMenuItem // this.SavestateTextContextMenuItem.Name = "SavestateTextContextMenuItem"; - this.SavestateTextContextMenuItem.Size = new System.Drawing.Size(112, 22); + this.SavestateTextContextMenuItem.Size = new System.Drawing.Size(109, 22); this.SavestateTextContextMenuItem.Text = "&Text"; // // toolStripSeparator37 // this.toolStripSeparator37.Name = "toolStripSeparator37"; - this.toolStripSeparator37.Size = new System.Drawing.Size(156, 6); + this.toolStripSeparator37.Size = new System.Drawing.Size(154, 6); // // toolStripMenuItem66 // - this.toolStripMenuItem66.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Save; this.toolStripMenuItem66.Name = "toolStripMenuItem66"; - this.toolStripMenuItem66.Size = new System.Drawing.Size(159, 22); + this.toolStripMenuItem66.Size = new System.Drawing.Size(157, 22); this.toolStripMenuItem66.Text = "Save Config"; this.toolStripMenuItem66.Click += new System.EventHandler(this.SaveConfigMenuItem_Click); // // toolStripMenuItem67 // - this.toolStripMenuItem67.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.LoadConfig; this.toolStripMenuItem67.Name = "toolStripMenuItem67"; - this.toolStripMenuItem67.Size = new System.Drawing.Size(159, 22); + this.toolStripMenuItem67.Size = new System.Drawing.Size(157, 22); this.toolStripMenuItem67.Text = "Load Config"; this.toolStripMenuItem67.Click += new System.EventHandler(this.LoadConfigMenuItem_Click); // // ScreenshotContextMenuItem // - this.ScreenshotContextMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.camera; this.ScreenshotContextMenuItem.Name = "ScreenshotContextMenuItem"; - this.ScreenshotContextMenuItem.Size = new System.Drawing.Size(216, 22); + this.ScreenshotContextMenuItem.Size = new System.Drawing.Size(201, 22); this.ScreenshotContextMenuItem.Text = "Screenshot"; this.ScreenshotContextMenuItem.Click += new System.EventHandler(this.ScreenshotMenuItem_Click); // // CloseRomContextMenuItem // - this.CloseRomContextMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Close; this.CloseRomContextMenuItem.Name = "CloseRomContextMenuItem"; - this.CloseRomContextMenuItem.Size = new System.Drawing.Size(216, 22); + this.CloseRomContextMenuItem.Size = new System.Drawing.Size(201, 22); this.CloseRomContextMenuItem.Text = "Close ROM"; this.CloseRomContextMenuItem.Click += new System.EventHandler(this.CloseRomMenuItem_Click); // // ClearSRAMContextMenuItem // this.ClearSRAMContextMenuItem.Name = "ClearSRAMContextMenuItem"; - this.ClearSRAMContextMenuItem.Size = new System.Drawing.Size(216, 22); + this.ClearSRAMContextMenuItem.Size = new System.Drawing.Size(201, 22); this.ClearSRAMContextMenuItem.Text = "Close and Clear SRAM"; this.ClearSRAMContextMenuItem.Click += new System.EventHandler(this.ClearSramContextMenuItem_Click); // // ShowMenuContextMenuSeparator // this.ShowMenuContextMenuSeparator.Name = "ShowMenuContextMenuSeparator"; - this.ShowMenuContextMenuSeparator.Size = new System.Drawing.Size(213, 6); + this.ShowMenuContextMenuSeparator.Size = new System.Drawing.Size(198, 6); // // ShowMenuContextMenuItem // this.ShowMenuContextMenuItem.Name = "ShowMenuContextMenuItem"; - this.ShowMenuContextMenuItem.Size = new System.Drawing.Size(216, 22); + this.ShowMenuContextMenuItem.Size = new System.Drawing.Size(201, 22); this.ShowMenuContextMenuItem.Text = "Show Menu"; this.ShowMenuContextMenuItem.Click += new System.EventHandler(this.ShowMenuContextMenuItem_Click); // @@ -4809,5 +4726,7 @@ private System.Windows.Forms.ToolStripMenuItem AmstradCPCNonSyncSettingsToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem SubNesHawkMenuItem; private System.Windows.Forms.ToolStripSeparator toolStripSeparator38; + private System.Windows.Forms.ToolStripMenuItem arcadeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem2; } } diff --git a/BizHawk.Client.EmuHawk/MainForm.Events.cs b/BizHawk.Client.EmuHawk/MainForm.Events.cs index 0f587323d7..68cab77a84 100644 --- a/BizHawk.Client.EmuHawk/MainForm.Events.cs +++ b/BizHawk.Client.EmuHawk/MainForm.Events.cs @@ -23,6 +23,7 @@ using BizHawk.Client.EmuHawk.ToolExtensions; using BizHawk.Emulation.Cores.Computers.AppleII; using BizHawk.Client.ApiHawk; using BizHawk.Common; +using BizHawk.Emulation.Cores.Atari.A7800Hawk; using BizHawk.Emulation.Cores.Computers.Commodore64; using BizHawk.Emulation.Cores.Nintendo.Gameboy; using BizHawk.Emulation.Cores.Computers.SinclairSpectrum; @@ -306,7 +307,6 @@ namespace BizHawk.Client.EmuHawk private void OpenRomMenuItem_Click(object sender, EventArgs e) { - AdvancedLoader = AdvancedRomLoaderType.None; OpenRom(); } @@ -318,9 +318,7 @@ namespace BizHawk.Client.EmuHawk return; } - AdvancedLoader = oac.Result; - - if (AdvancedLoader == AdvancedRomLoaderType.LibretroLaunchNoGame) + if (oac.Result == AdvancedRomLoaderType.LibretroLaunchNoGame) { var argsNoGame = new LoadRomArgs { @@ -334,16 +332,16 @@ namespace BizHawk.Client.EmuHawk var filter = RomFilter; - if (AdvancedLoader == AdvancedRomLoaderType.LibretroLaunchGame) + if (oac.Result == AdvancedRomLoaderType.LibretroLaunchGame) { args.OpenAdvanced = new OpenAdvanced_Libretro(); filter = oac.SuggestedExtensionFilter; } - else if (AdvancedLoader == AdvancedRomLoaderType.ClassicLaunchGame) + else if (oac.Result == AdvancedRomLoaderType.ClassicLaunchGame) { args.OpenAdvanced = new OpenAdvanced_OpenRom(); } - else if (AdvancedLoader == AdvancedRomLoaderType.MAMELaunchGame) + else if (oac.Result == AdvancedRomLoaderType.MAMELaunchGame) { args.OpenAdvanced = new OpenAdvanced_MAME(); filter = "MAME Arcade ROMs (*.zip)|*.zip"; @@ -2041,14 +2039,20 @@ namespace BizHawk.Client.EmuHawk private void A7800ControllerSettingsToolStripMenuItem_Click(object sender, EventArgs e) { - using var form = new A7800ControllerSettings(); - form.ShowDialog(); + if (Emulator is A7800Hawk atari7800Hawk) + { + using var form = new A7800ControllerSettings(this, atari7800Hawk.GetSyncSettings().Clone()); + form.ShowDialog(); + } } private void A7800FilterSettingsToolStripMenuItem_Click(object sender, EventArgs e) { - using var form = new A7800FilterSettings(); - form.ShowDialog(); + if (Emulator is A7800Hawk atari7800Hawk) + { + using var form = new A7800FilterSettings(this, atari7800Hawk.GetSyncSettings().Clone()); + form.ShowDialog(); + } } #endregion @@ -2786,6 +2790,14 @@ namespace BizHawk.Client.EmuHawk #endregion + #region Arcade + private void ArcadeSettingsMenuItem_Click(object sender, EventArgs e) + { + GenericCoreConfig.DoDialog(this, "Arcade Settings"); + } + + #endregion + #region Help private void HelpSubMenu_DropDownOpened(object sender, EventArgs e) diff --git a/BizHawk.Client.EmuHawk/MainForm.Hotkey.cs b/BizHawk.Client.EmuHawk/MainForm.Hotkey.cs index 464ea13f66..fa39503f52 100644 --- a/BizHawk.Client.EmuHawk/MainForm.Hotkey.cs +++ b/BizHawk.Client.EmuHawk/MainForm.Hotkey.cs @@ -500,6 +500,61 @@ namespace BizHawk.Client.EmuHawk return false; } + break; + case "Undo": + if (GlobalWin.Tools.IsLoaded()) + { + GlobalWin.Tools.TAStudio.UndoExternal(); + } + else + { + return false; + } + + break; + case "Redo": + if (GlobalWin.Tools.IsLoaded()) + { + GlobalWin.Tools.TAStudio.RedoExternal(); + } + else + { + return false; + } + + break; + case "Select between Markers": + if (GlobalWin.Tools.IsLoaded()) + { + GlobalWin.Tools.TAStudio.SelectBetweenMarkersExternal(); + } + else + { + return false; + } + + break; + case "Select All": + if (GlobalWin.Tools.IsLoaded()) + { + GlobalWin.Tools.TAStudio.SelectAllExternal(); + } + else + { + return false; + } + + break; + case "Reselect Clip.": + if (GlobalWin.Tools.IsLoaded()) + { + GlobalWin.Tools.TAStudio.ReselectClipboardExternal(); + } + else + { + return false; + } + break; case "Clear Frames": if (GlobalWin.Tools.IsLoaded()) @@ -522,6 +577,16 @@ namespace BizHawk.Client.EmuHawk return false; } + break; + case "Insert # Frames": + if (GlobalWin.Tools.IsLoaded()) + { + GlobalWin.Tools.TAStudio.InsertNumFramesExternal(); + } + else + { + return false; + } break; case "Delete Frames": if (GlobalWin.Tools.IsLoaded()) diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index 9066688aac..a8a63e79e2 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -18,7 +18,6 @@ using BizHawk.Bizware.BizwareGL; using BizHawk.Emulation.Common; using BizHawk.Emulation.Common.IEmulatorExtensions; -using BizHawk.Emulation.Cores.Calculators; using BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES; using BizHawk.Emulation.Cores.Nintendo.GBA; using BizHawk.Emulation.Cores.Nintendo.NES; @@ -98,6 +97,110 @@ namespace BizHawk.Client.EmuHawk public MainForm(string[] args) { + void SetImages() + { + OpenRomMenuItem.Image = Properties.Resources.OpenFile; + RecentRomSubMenu.Image = Properties.Resources.Recent; + CloseRomMenuItem.Image = Properties.Resources.Close; + PreviousSlotMenuItem.Image = Properties.Resources.MoveLeft; + NextSlotMenuItem.Image = Properties.Resources.MoveRight; + ReadonlyMenuItem.Image = Properties.Resources.ReadOnly; + RecentMovieSubMenu.Image = Properties.Resources.Recent; + RecordMovieMenuItem.Image = Properties.Resources.RecordHS; + PlayMovieMenuItem.Image = Properties.Resources.Play; + StopMovieMenuItem.Image = Properties.Resources.Stop; + PlayFromBeginningMenuItem.Image = Properties.Resources.restart; + ImportMoviesMenuItem.Image = Properties.Resources.Import; + SaveMovieMenuItem.Image = Properties.Resources.SaveAs; + SaveMovieAsMenuItem.Image = Properties.Resources.SaveAs; + StopMovieWithoutSavingMenuItem.Image = Properties.Resources.Stop; + RecordAVMenuItem.Image = Properties.Resources.RecordHS; + ConfigAndRecordAVMenuItem.Image = Properties.Resources.AVI; + StopAVIMenuItem.Image = Properties.Resources.Stop; + ScreenshotMenuItem.Image = Properties.Resources.camera; + PauseMenuItem.Image = Properties.Resources.Pause; + RebootCoreMenuItem.Image = Properties.Resources.reboot; + SwitchToFullscreenMenuItem.Image = Properties.Resources.Fullscreen; + ControllersMenuItem.Image = Properties.Resources.GameController; + HotkeysMenuItem.Image = Properties.Resources.HotKeys; + DisplayConfigMenuItem.Image = Properties.Resources.tvIcon; + SoundMenuItem.Image = Properties.Resources.AudioHS; + PathsMenuItem.Image = Properties.Resources.CopyFolderHS; + FirmwaresMenuItem.Image = Properties.Resources.pcb; + MessagesMenuItem.Image = Properties.Resources.MessageConfig; + AutofireMenuItem.Image = Properties.Resources.Lightning; + RewindOptionsMenuItem.Image = Properties.Resources.Previous; + ProfilesMenuItem.Image = Properties.Resources.user_blue_small; + N64VideoPluginSettingsMenuItem.Image = Properties.Resources.monitor; + SaveConfigMenuItem.Image = Properties.Resources.Save; + LoadConfigMenuItem.Image = Properties.Resources.LoadConfig; + ToolBoxMenuItem.Image = Properties.Resources.ToolBox; + RamWatchMenuItem.Image = Properties.Resources.watch; + RamSearchMenuItem.Image = Properties.Resources.search; + LuaConsoleMenuItem.Image = Properties.Resources.Lua; + TAStudioMenuItem.Image = Properties.Resources.TAStudio; + HexEditorMenuItem.Image = Properties.Resources.poke; + TraceLoggerMenuItem.Image = Properties.Resources.pencil; + DebuggerMenuItem.Image = Properties.Resources.Bug; + CodeDataLoggerMenuItem.Image = Properties.Resources.cdlogger; + VirtualPadMenuItem.Image = Properties.Resources.GameController; + CheatsMenuItem.Image = Properties.Resources.Freeze; + gameSharkConverterToolStripMenuItem.Image = Properties.Resources.Shark; + MultiDiskBundlerFileMenuItem.Image = Properties.Resources.SaveConfig; + NesControllerSettingsMenuItem.Image = Properties.Resources.GameController; + NESGraphicSettingsMenuItem.Image = Properties.Resources.tvIcon; + NESSoundChannelsMenuItem.Image = Properties.Resources.AudioHS; + PceControllerSettingsMenuItem.Image = Properties.Resources.GameController; + PCEGraphicsSettingsMenuItem.Image = Properties.Resources.tvIcon; + KeypadMenuItem.Image = Properties.Resources.calculator; + PSXControllerSettingsMenuItem.Image = Properties.Resources.GameController; + SNESControllerConfigurationMenuItem.Image = Properties.Resources.GameController; + SnesGfxDebuggerMenuItem.Image = Properties.Resources.Bug; + ColecoControllerSettingsMenuItem.Image = Properties.Resources.GameController; + N64PluginSettingsMenuItem.Image = Properties.Resources.monitor; + N64ControllerSettingsMenuItem.Image = Properties.Resources.GameController; + IntVControllerSettingsMenuItem.Image = Properties.Resources.GameController; + OnlineHelpMenuItem.Image = Properties.Resources.Help; + ForumsMenuItem.Image = Properties.Resources.TAStudio; + FeaturesMenuItem.Image = Properties.Resources.kitchensink; + AboutMenuItem.Image = Properties.Resources.CorpHawkSmall; + DumpStatusButton.Image = Properties.Resources.Blank; + PlayRecordStatusButton.Image = Properties.Resources.Blank; + PauseStatusButton.Image = Properties.Resources.Blank; + RebootStatusBarIcon.Image = Properties.Resources.reboot; + AVIStatusLabel.Image = Properties.Resources.Blank; + LedLightStatusLabel.Image = Properties.Resources.LightOff; + KeyPriorityStatusLabel.Image = Properties.Resources.Both; + CoreNameStatusBarButton.Image = Properties.Resources.CorpHawkSmall; + ProfileFirstBootLabel.Image = Properties.Resources.user_blue_small; + LinkConnectStatusBarButton.Image = Properties.Resources.connect_16x16; + OpenRomContextMenuItem.Image = Properties.Resources.OpenFile; + LoadLastRomContextMenuItem.Image = Properties.Resources.Recent; + StopAVContextMenuItem.Image = Properties.Resources.Stop; + RecordMovieContextMenuItem.Image = Properties.Resources.RecordHS; + PlayMovieContextMenuItem.Image = Properties.Resources.Play; + RestartMovieContextMenuItem.Image = Properties.Resources.restart; + StopMovieContextMenuItem.Image = Properties.Resources.Stop; + LoadLastMovieContextMenuItem.Image = Properties.Resources.Recent; + StopNoSaveContextMenuItem.Image = Properties.Resources.Stop; + SaveMovieContextMenuItem.Image = Properties.Resources.SaveAs; + SaveMovieAsContextMenuItem.Image = Properties.Resources.SaveAs; + UndoSavestateContextMenuItem.Image = Properties.Resources.undo; + toolStripMenuItem6.Image = Properties.Resources.GameController; + toolStripMenuItem7.Image = Properties.Resources.HotKeys; + toolStripMenuItem8.Image = Properties.Resources.tvIcon; + toolStripMenuItem9.Image = Properties.Resources.AudioHS; + toolStripMenuItem10.Image = Properties.Resources.CopyFolderHS; + toolStripMenuItem11.Image = Properties.Resources.pcb; + toolStripMenuItem12.Image = Properties.Resources.MessageConfig; + toolStripMenuItem13.Image = Properties.Resources.Lightning; + toolStripMenuItem14.Image = Properties.Resources.Previous; + toolStripMenuItem66.Image = Properties.Resources.Save; + toolStripMenuItem67.Image = Properties.Resources.LoadConfig; + ScreenshotContextMenuItem.Image = Properties.Resources.camera; + CloseRomContextMenuItem.Image = Properties.Resources.Close; + } + GlobalWin.MainForm = this; Global.Rewinder = new Rewinder { @@ -118,6 +221,7 @@ namespace BizHawk.Client.EmuHawk Icon = Properties.Resources.logo; InitializeComponent(); + SetImages(); Global.Game = GameInfo.NullInstance; if (Global.Config.ShowLogWindow) { @@ -140,17 +244,15 @@ namespace BizHawk.Client.EmuHawk string xmlPath = Path.Combine(PathManager.GetExeDirectoryAbsolute(), "gamedb", "NesCarts.xml"); string x7zPath = Path.Combine(PathManager.GetExeDirectoryAbsolute(), "gamedb", "NesCarts.7z"); bool loadXml = File.Exists(xmlPath); - using (var nesCartFile = new HawkFile(loadXml ? xmlPath : x7zPath)) + using var nesCartFile = new HawkFile(loadXml ? xmlPath : x7zPath); + if (!loadXml) { - if (!loadXml) - { - nesCartFile.BindFirst(); - } - - return nesCartFile - .GetStream() - .ReadAllBytes(); + nesCartFile.BindFirst(); } + + return nesCartFile + .GetStream() + .ReadAllBytes(); }; try { @@ -236,7 +338,7 @@ namespace BizHawk.Client.EmuHawk var comm = CreateCoreComm(); CoreFileProvider.SyncCoreCommInputSignals(comm); - Emulator = new NullEmulator(comm, Global.Config.GetCoreSettings()); + Emulator = new NullEmulator(comm); Global.ActiveController = new Controller(NullController.Instance.Definition); Global.AutoFireController = _autofireNullControls; Global.AutofireStickyXORAdapter.SetOnOffPatternFromConfig(); @@ -308,7 +410,7 @@ namespace BizHawk.Client.EmuHawk } // If user picked a game, then do the commandline logic - if (!Global.Game.IsNullInstance) + if (!Global.Game.IsNullInstance()) { var movie = MovieService.Get(_argParser.cmdMovie); Global.MovieSession.ReadOnly = true; @@ -335,13 +437,13 @@ namespace BizHawk.Client.EmuHawk } else if (Global.Config.RecentMovies.AutoLoad && !Global.Config.RecentMovies.Empty) { - if (Global.Game.IsNullInstance) + if (Global.Game.IsNullInstance()) { OpenRom(); } // If user picked a game, then do the autoload logic - if (!Global.Game.IsNullInstance) + if (!Global.Game.IsNullInstance()) { if (File.Exists(Global.Config.RecentMovies.MostRecent)) { @@ -359,7 +461,7 @@ namespace BizHawk.Client.EmuHawk _needsFullscreenOnLoad = true; } - if (!Global.Game.IsNullInstance) + if (!Global.Game.IsNullInstance()) { if (_argParser.cmdLoadState != null) { @@ -596,8 +698,6 @@ namespace BizHawk.Client.EmuHawk // runloop won't exec lua public bool SuppressLua { get; set; } - public AdvancedRomLoaderType AdvancedLoader { get; set; } - public long MouseWheelTracker { get; private set; } private int? _pauseOnFrame; @@ -627,6 +727,11 @@ namespace BizHawk.Client.EmuHawk #region Public Methods + public void AddOnScreenMessage(string message) + { + GlobalWin.OSD.AddMessage(message); + } + public void ClearHolds() { Global.StickyXORAdapter.ClearStickies(); @@ -641,7 +746,7 @@ namespace BizHawk.Client.EmuHawk public void FlagNeedsReboot() { RebootStatusBarIcon.Visible = true; - GlobalWin.OSD.AddMessage("Core reboot needed for this setting"); + AddOnScreenMessage("Core reboot needed for this setting"); } /// @@ -1375,7 +1480,6 @@ namespace BizHawk.Client.EmuHawk private bool _wasPaused; private bool _didMenuPause; - private Cursor _blankCursor; private bool _cursorHidden; private bool _inFullscreen; private Point _windowedLocation; @@ -1684,7 +1788,7 @@ namespace BizHawk.Client.EmuHawk private void HandlePlatformMenus() { var system = ""; - if (!Global.Game.IsNullInstance) + if (!Global.Game.IsNullInstance()) { system = Emulator.SystemId; } @@ -1720,6 +1824,7 @@ namespace BizHawk.Client.EmuHawk amstradCPCToolStripMenuItem.Visible = false; VectrexSubMenu.Visible = false; O2HawkSubMenu.Visible = false; + arcadeToolStripMenuItem.Visible = false; switch (system) { @@ -1847,6 +1952,9 @@ namespace BizHawk.Client.EmuHawk case "GB4x": GB4xSubMenu.Visible = true; break; + case "MAME": + arcadeToolStripMenuItem.Visible = true; + break; } } @@ -1996,13 +2104,7 @@ namespace BizHawk.Client.EmuHawk { if (hide && !_cursorHidden) { - if (_blankCursor == null) - { - var ms = new MemoryStream(Properties.Resources.BlankCursor); - _blankCursor = new Cursor(ms); - } - - PresentationPanel.Control.Cursor = _blankCursor; + PresentationPanel.Control.Cursor = Properties.Resources.BlankCursor; _cursorHidden = true; } else if (!hide && _cursorHidden) @@ -2263,6 +2365,7 @@ namespace BizHawk.Client.EmuHawk } } + // TODO: Get/Put settings/sync settings methods could become a service we instantiate and use and pass to other forms /// /// send core sync settings to emu, setting reboot flag if needed /// @@ -2387,31 +2490,47 @@ namespace BizHawk.Client.EmuHawk } } - private void UpdateStatusSlots() + private Color SlotForeColor(int slot) + { + return _stateSlots.HasSlot(slot) + ? Global.Config.SaveSlot == slot + ? SystemColors.HighlightText + : SystemColors.WindowText + : SystemColors.GrayText; + } + + private Color SlotBackColor(int slot) + { + return Global.Config.SaveSlot == slot + ? SystemColors.Highlight + : SystemColors.Control; + } + + public void UpdateStatusSlots() { _stateSlots.Update(); - Slot0StatusButton.ForeColor = _stateSlots.HasSlot(0) ? Global.Config.SaveSlot == 0 ? SystemColors.HighlightText : SystemColors.WindowText : SystemColors.GrayText; - Slot1StatusButton.ForeColor = _stateSlots.HasSlot(1) ? Global.Config.SaveSlot == 1 ? SystemColors.HighlightText : SystemColors.WindowText : SystemColors.GrayText; - Slot2StatusButton.ForeColor = _stateSlots.HasSlot(2) ? Global.Config.SaveSlot == 2 ? SystemColors.HighlightText : SystemColors.WindowText : SystemColors.GrayText; - Slot3StatusButton.ForeColor = _stateSlots.HasSlot(3) ? Global.Config.SaveSlot == 3 ? SystemColors.HighlightText : SystemColors.WindowText : SystemColors.GrayText; - Slot4StatusButton.ForeColor = _stateSlots.HasSlot(4) ? Global.Config.SaveSlot == 4 ? SystemColors.HighlightText : SystemColors.WindowText : SystemColors.GrayText; - Slot5StatusButton.ForeColor = _stateSlots.HasSlot(5) ? Global.Config.SaveSlot == 5 ? SystemColors.HighlightText : SystemColors.WindowText : SystemColors.GrayText; - Slot6StatusButton.ForeColor = _stateSlots.HasSlot(6) ? Global.Config.SaveSlot == 6 ? SystemColors.HighlightText : SystemColors.WindowText : SystemColors.GrayText; - Slot7StatusButton.ForeColor = _stateSlots.HasSlot(7) ? Global.Config.SaveSlot == 7 ? SystemColors.HighlightText : SystemColors.WindowText : SystemColors.GrayText; - Slot8StatusButton.ForeColor = _stateSlots.HasSlot(8) ? Global.Config.SaveSlot == 8 ? SystemColors.HighlightText : SystemColors.WindowText : SystemColors.GrayText; - Slot9StatusButton.ForeColor = _stateSlots.HasSlot(9) ? Global.Config.SaveSlot == 9 ? SystemColors.HighlightText : SystemColors.WindowText : SystemColors.GrayText; + Slot0StatusButton.ForeColor = SlotForeColor(0); + Slot1StatusButton.ForeColor = SlotForeColor(1); + Slot2StatusButton.ForeColor = SlotForeColor(2); + Slot3StatusButton.ForeColor = SlotForeColor(3); + Slot4StatusButton.ForeColor = SlotForeColor(4); + Slot5StatusButton.ForeColor = SlotForeColor(5); + Slot6StatusButton.ForeColor = SlotForeColor(6); + Slot7StatusButton.ForeColor = SlotForeColor(7); + Slot8StatusButton.ForeColor = SlotForeColor(8); + Slot9StatusButton.ForeColor = SlotForeColor(9); - Slot0StatusButton.BackColor = Global.Config.SaveSlot == 0 ? SystemColors.Highlight : SystemColors.Control; - Slot1StatusButton.BackColor = Global.Config.SaveSlot == 1 ? SystemColors.Highlight : SystemColors.Control; - Slot2StatusButton.BackColor = Global.Config.SaveSlot == 2 ? SystemColors.Highlight : SystemColors.Control; - Slot3StatusButton.BackColor = Global.Config.SaveSlot == 3 ? SystemColors.Highlight : SystemColors.Control; - Slot4StatusButton.BackColor = Global.Config.SaveSlot == 4 ? SystemColors.Highlight : SystemColors.Control; - Slot5StatusButton.BackColor = Global.Config.SaveSlot == 5 ? SystemColors.Highlight : SystemColors.Control; - Slot6StatusButton.BackColor = Global.Config.SaveSlot == 6 ? SystemColors.Highlight : SystemColors.Control; - Slot7StatusButton.BackColor = Global.Config.SaveSlot == 7 ? SystemColors.Highlight : SystemColors.Control; - Slot8StatusButton.BackColor = Global.Config.SaveSlot == 8 ? SystemColors.Highlight : SystemColors.Control; - Slot9StatusButton.BackColor = Global.Config.SaveSlot == 9 ? SystemColors.Highlight : SystemColors.Control; + Slot0StatusButton.BackColor = SlotBackColor(0); + Slot1StatusButton.BackColor = SlotBackColor(1); + Slot2StatusButton.BackColor = SlotBackColor(2); + Slot3StatusButton.BackColor = SlotBackColor(3); + Slot4StatusButton.BackColor = SlotBackColor(4); + Slot5StatusButton.BackColor = SlotBackColor(5); + Slot6StatusButton.BackColor = SlotBackColor(6); + Slot7StatusButton.BackColor = SlotBackColor(7); + Slot8StatusButton.BackColor = SlotBackColor(8); + Slot9StatusButton.BackColor = SlotBackColor(9); SaveSlotsStatusLabel.Visible = Slot0StatusButton.Visible = @@ -2915,7 +3034,7 @@ namespace BizHawk.Client.EmuHawk } bool render = !InvisibleEmulation && (!_throttle.skipNextFrame || (_currAviWriter?.UsesVideo ?? false)); - bool new_frame = Emulator.FrameAdvance(Global.ControllerOutput, render, renderSound); + bool newFrame = Emulator.FrameAdvance(Global.ControllerOutput, render, renderSound); Global.MovieSession.HandleMovieAfterFrameLoop(); @@ -2954,12 +3073,12 @@ namespace BizHawk.Client.EmuHawk UpdateToolsAfter(SuppressLua); } - if (!PauseAvi && new_frame && !InvisibleEmulation) + if (!PauseAvi && newFrame && !InvisibleEmulation) { AvFrameAdvance(); } - if (new_frame) + if (newFrame) { _framesSinceLastFpsUpdate++; @@ -3530,7 +3649,7 @@ namespace BizHawk.Client.EmuHawk ChoosePlatform = ChoosePlatformForRom, Deterministic = deterministic, MessageCallback = GlobalWin.OSD.AddMessage, - AdvancedLoader = AdvancedLoader + OpenAdvanced = args.OpenAdvanced }; Global.FirmwareManager.RecentlyServed.Clear(); @@ -3548,6 +3667,7 @@ namespace BizHawk.Client.EmuHawk IOpenAdvanced ioa = args.OpenAdvanced; var oa_openrom = ioa as OpenAdvanced_OpenRom; + var oa_mame = ioa as OpenAdvanced_MAME; var oa_retro = ioa as OpenAdvanced_Libretro; var ioa_retro = ioa as IOpenAdvancedLibretro; @@ -3591,6 +3711,11 @@ namespace BizHawk.Client.EmuHawk oa_openrom.Path = loader.CanonicalFullPath; } + if (oa_mame != null) + { + oa_mame.Path = loader.CanonicalFullPath; + } + if (result) { string openAdvancedArgs = $"*{OpenAdvancedSerializer.Serialize(ioa)}"; @@ -3838,7 +3963,7 @@ namespace BizHawk.Client.EmuHawk Emulator.Dispose(); var coreComm = CreateCoreComm(); CoreFileProvider.SyncCoreCommInputSignals(coreComm); - Emulator = new NullEmulator(coreComm, Global.Config.GetCoreSettings()); + Emulator = new NullEmulator(coreComm); ClientApi.UpdateEmulatorAndVP(Emulator); Global.ActiveController = new Controller(NullController.Instance.Definition); Global.AutoFireController = _autofireNullControls; @@ -3858,7 +3983,7 @@ namespace BizHawk.Client.EmuHawk CloseGame(clearSram); var coreComm = CreateCoreComm(); CoreFileProvider.SyncCoreCommInputSignals(coreComm); - Emulator = new NullEmulator(coreComm, Global.Config.GetCoreSettings()); + Emulator = new NullEmulator(coreComm); Global.Game = GameInfo.NullInstance; GlobalWin.Tools.Restart(); @@ -4063,8 +4188,7 @@ namespace BizHawk.Client.EmuHawk return; } - bool handled; - ClientApi.OnBeforeQuickSave(this, quickSlotName, out handled); + ClientApi.OnBeforeQuickSave(this, quickSlotName, out var handled); if (handled) { return; @@ -4138,7 +4262,7 @@ namespace BizHawk.Client.EmuHawk var result = sfd.ShowHawkDialog(); if (result == DialogResult.OK) { - SaveState(sfd.FileName, sfd.FileName, false); + SaveState(sfd.FileName, sfd.FileName); } if (GlobalWin.Tools.IsLoaded()) @@ -4187,8 +4311,11 @@ namespace BizHawk.Client.EmuHawk { if (IsSavestateSlave) { - Master.SelectSlot(slot); - return; + var handled = Master.SelectSlot(slot); + if (handled) + { + return; + } } Global.Config.SaveSlot = slot; @@ -4203,8 +4330,11 @@ namespace BizHawk.Client.EmuHawk { if (IsSavestateSlave) { - Master.PreviousSlot(); - return; + var handled = Master.PreviousSlot(); + if (handled) + { + return; + } } if (Global.Config.SaveSlot == 0) @@ -4231,8 +4361,11 @@ namespace BizHawk.Client.EmuHawk { if (IsSavestateSlave) { - Master.NextSlot(); - return; + var handled = Master.NextSlot(); + if (handled) + { + return; + } } if (Global.Config.SaveSlot >= 9) diff --git a/BizHawk.Client.EmuHawk/MainForm.resx b/BizHawk.Client.EmuHawk/MainForm.resx index 35cf70e616..2b1c2d75f4 100644 --- a/BizHawk.Client.EmuHawk/MainForm.resx +++ b/BizHawk.Client.EmuHawk/MainForm.resx @@ -120,455 +120,12 @@ 17, 17 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 - JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAA64AAAOuAFqQfVbAAABpElE - QVQ4T52TQUsCURSF33+SDAUxRAyEwQiEksiFUJEMhGEDOcQgRi2UGJBgCkFIZDDbGEGWEsTMItBNrdu3 - ad3y1HmkVNosvHC4l3u+A2/ezIi/5fP58D1OlJf3qzRNmwCn7TzrZ8AzfGk3kM1mkcvlUCgUUCqVUKlU - UK1WwSDFmTt6ZMgyw6zIZDIYDAYziVmRTqfhui5WDhoI7VxAMa6xdvKIDWsgxZk7emTIRiIR2ZkVqVQK - vV4Pc1vn+OI9RYas4ziyMyuSySQ6nQ7mt2s4unuH6XxMFT0yZHkCdmZFIpFAs9lEUK1Drb9g82wIrfWK - 4s2bFGfu6JEh2+12ZWdWxONxWJYln3HddBDVWlNFjwxZnoCdWRGNRlEul7Gw20Tm9Amr5YepokeGbLvd - lp1ZEQ6HYRgGInl7fPP/iQzZkZgVwWAQ+XweS3s1LO5fyVe2fHiL5PG9FGfu6JEhOxKzwu/3Q1VV6LoO - 0zRh2zb6/f74Y+HMHT0yZEdiVhQNXQ6BQAChUEheUCwWkxekKIoUZ+7okSHLDLPyf3geuphFQgjxCdiQ - MGrYYwVfAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 - JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABBBAAAQQQG8+46XAAAAcElE - QVQ4T82Q4QoAIQiDffR7804DY+pOov5c8GltwyiRR8YVTLTFOsWK2iA0eAapQkPOznwRGnJ25rX87AmK - /3ruFCvhCR9oclI8PNggJHg7A46w4rf5zY6H8jlAxQQOKMPWBswSIpmloXkEFbeR8QKDpKJKL1M/dQAA - AABJRU5ErkJggg== - - - - - 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 - - 126, 17 233, 13 - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 - JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAA64AAAOuAFqQfVbAAABpElE - QVQ4T52TQUsCURSF33+SDAUxRAyEwQiEksiFUJEMhGEDOcQgRi2UGJBgCkFIZDDbGEGWEsTMItBNrdu3 - ad3y1HmkVNosvHC4l3u+A2/ezIi/5fP58D1OlJf3qzRNmwCn7TzrZ8AzfGk3kM1mkcvlUCgUUCqVUKlU - UK1WwSDFmTt6ZMgyw6zIZDIYDAYziVmRTqfhui5WDhoI7VxAMa6xdvKIDWsgxZk7emTIRiIR2ZkVqVQK - vV4Pc1vn+OI9RYas4ziyMyuSySQ6nQ7mt2s4unuH6XxMFT0yZHkCdmZFIpFAs9lEUK1Drb9g82wIrfWK - 4s2bFGfu6JEh2+12ZWdWxONxWJYln3HddBDVWlNFjwxZnoCdWRGNRlEul7Gw20Tm9Amr5YepokeGbLvd - lp1ZEQ6HYRgGInl7fPP/iQzZkZgVwWAQ+XweS3s1LO5fyVe2fHiL5PG9FGfu6JEhOxKzwu/3Q1VV6LoO - 0zRh2zb6/f74Y+HMHT0yZEdiVhQNXQ6BQAChUEheUCwWkxekKIoUZ+7okSHLDLPyf3geuphFQgjxCdiQ - MGrYYwVfAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 - JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABBBAAAQQQG8+46XAAAAcElE - QVQ4T82Q4QoAIQiDffR7804DY+pOov5c8GltwyiRR8YVTLTFOsWK2iA0eAapQkPOznwRGnJ25rX87AmK - /3ruFCvhCR9oclI8PNggJHg7A46w4rf5zY6H8jlAxQQOKMPWBswSIpmloXkEFbeR8QKDpKJKL1M/dQAA - AABJRU5ErkJggg== - - 399, 13 diff --git a/BizHawk.Client.EmuHawk/OpenAdvancedChooser.cs b/BizHawk.Client.EmuHawk/OpenAdvancedChooser.cs index 3ab5a03b47..e9b2e63a81 100644 --- a/BizHawk.Client.EmuHawk/OpenAdvancedChooser.cs +++ b/BizHawk.Client.EmuHawk/OpenAdvancedChooser.cs @@ -127,7 +127,7 @@ namespace BizHawk.Client.EmuHawk SuggestedExtensionFilter = filter; Result = AdvancedRomLoaderType.LibretroLaunchGame; - DialogResult = DialogResult.OK; + DialogResult = DialogResult.OK; Close(); } diff --git a/BizHawk.Client.EmuHawk/PresentationPanel.cs b/BizHawk.Client.EmuHawk/PresentationPanel.cs index b647f2ce01..ab04ffe991 100644 --- a/BizHawk.Client.EmuHawk/PresentationPanel.cs +++ b/BizHawk.Client.EmuHawk/PresentationPanel.cs @@ -1,17 +1,9 @@ -using System; -using System.Drawing; -using sd=System.Drawing; -using sysdrawingfont=System.Drawing.Font; -using sysdrawing2d=System.Drawing.Drawing2D; -using System.IO; -using System.Threading; +using System.Drawing; using System.Windows.Forms; using BizHawk.Client.Common; using BizHawk.Bizware.BizwareGL; -using OpenTK.Graphics.OpenGL; - namespace BizHawk.Client.EmuHawk { /// @@ -23,23 +15,25 @@ namespace BizHawk.Client.EmuHawk { GL = GlobalWin.GL; - GraphicsControl = new GraphicsControl(GL); - GraphicsControl.Dock = DockStyle.Fill; - GraphicsControl.BackColor = Color.Black; + GraphicsControl = new GraphicsControl(GL) + { + Dock = DockStyle.Fill, + BackColor = Color.Black + }; - //pass through these events to the form. we might need a more scalable solution for mousedown etc. for zapper and whatnot. - //http://stackoverflow.com/questions/547172/pass-through-mouse-events-to-parent-control (HTTRANSPARENT) - GraphicsControl.MouseDoubleClick += (o, e) => HandleFullscreenToggle(o, e); + // pass through these events to the form. we might need a more scalable solution for mousedown etc. for zapper and whatnot. + // http://stackoverflow.com/questions/547172/pass-through-mouse-events-to-parent-control (HTTRANSPARENT) + GraphicsControl.MouseDoubleClick += HandleFullscreenToggle; GraphicsControl.MouseClick += (o, e) => GlobalWin.MainForm.MainForm_MouseClick(o, e); GraphicsControl.MouseMove += (o, e) => GlobalWin.MainForm.MainForm_MouseMove(o, e); GraphicsControl.MouseWheel += (o, e) => GlobalWin.MainForm.MainForm_MouseWheel(o, e); } - bool IsDisposed = false; + private bool _isDisposed; public void Dispose() { - if (IsDisposed) return; - IsDisposed = true; + if (_isDisposed) return; + _isDisposed = true; GraphicsControl.Dispose(); } @@ -47,14 +41,14 @@ namespace BizHawk.Client.EmuHawk IGL GL; public GraphicsControl GraphicsControl; - public Control Control { get { return GraphicsControl; } } + public Control Control => GraphicsControl; public static implicit operator Control(PresentationPanel self) { return self.GraphicsControl; } private void HandleFullscreenToggle(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { - //allow suppression of the toggle.. but if shift is pressed, always do the toggle + // allow suppression of the toggle.. but if shift is pressed, always do the toggle bool allowSuppress = Control.ModifierKeys != Keys.Shift; if (Global.Config.DispChrome_AllowDoubleClickFullscreen || !allowSuppress) { @@ -65,11 +59,8 @@ namespace BizHawk.Client.EmuHawk public bool Resized { get; set; } - public Size NativeSize { get { return GraphicsControl.ClientSize; } } + public Size NativeSize => GraphicsControl.ClientSize; } - - public interface IBlitterFont { } - } diff --git a/BizHawk.Client.EmuHawk/Properties/Resources.Designer.cs b/BizHawk.Client.EmuHawk/Properties/Resources.Designer.cs deleted file mode 100644 index 0ca90c2902..0000000000 --- a/BizHawk.Client.EmuHawk/Properties/Resources.Designer.cs +++ /dev/null @@ -1,3492 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace BizHawk.Client.EmuHawk.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("BizHawk.Client.EmuHawk.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap A78Joystick { - get { - object obj = ResourceManager.GetObject("A78Joystick", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap add { - get { - object obj = ResourceManager.GetObject("add", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap AddEdit { - get { - object obj = ResourceManager.GetObject("AddEdit", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap addWatch { - get { - object obj = ResourceManager.GetObject("addWatch", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap alt_about_image { - get { - object obj = ResourceManager.GetObject("alt_about_image", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap AppleIIKeyboard { - get { - object obj = ResourceManager.GetObject("AppleIIKeyboard", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ArcadeController { - get { - object obj = ResourceManager.GetObject("ArcadeController", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap atari_controller { - get { - object obj = ResourceManager.GetObject("atari_controller", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap AudioHS { - get { - object obj = ResourceManager.GetObject("AudioHS", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap AutoSearch { - get { - object obj = ResourceManager.GetObject("AutoSearch", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap AVI { - get { - object obj = ResourceManager.GetObject("AVI", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Back { - get { - object obj = ResourceManager.GetObject("Back", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap BackMore { - get { - object obj = ResourceManager.GetObject("BackMore", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Blank { - get { - object obj = ResourceManager.GetObject("Blank", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] BlankCursor { - get { - object obj = ResourceManager.GetObject("BlankCursor", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap BlueDown { - get { - object obj = ResourceManager.GetObject("BlueDown", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap BlueUp { - get { - object obj = ResourceManager.GetObject("BlueUp", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Both { - get { - object obj = ResourceManager.GetObject("Both", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap bsnes { - get { - object obj = ResourceManager.GetObject("bsnes", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Bug { - get { - object obj = ResourceManager.GetObject("Bug", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap C64Joystick { - get { - object obj = ResourceManager.GetObject("C64Joystick", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap C64Keyboard { - get { - object obj = ResourceManager.GetObject("C64Keyboard", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap C64Symbol { - get { - object obj = ResourceManager.GetObject("C64Symbol", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap calculator { - get { - object obj = ResourceManager.GetObject("calculator", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap camera { - get { - object obj = ResourceManager.GetObject("camera", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap cdlogger { - get { - object obj = ResourceManager.GetObject("cdlogger", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap cheat { - get { - object obj = ResourceManager.GetObject("cheat", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). - /// - internal static System.Drawing.Icon Cheats { - get { - object obj = ResourceManager.GetObject("Cheats", resourceCulture); - return ((System.Drawing.Icon)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap checkbox { - get { - object obj = ResourceManager.GetObject("checkbox", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Circle { - get { - object obj = ResourceManager.GetObject("Circle", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Close { - get { - object obj = ResourceManager.GetObject("Close", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap colecovisioncontroller { - get { - object obj = ResourceManager.GetObject("colecovisioncontroller", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap connect_16x16 { - get { - object obj = ResourceManager.GetObject("connect_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap console16x16 { - get { - object obj = ResourceManager.GetObject("console16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap console32x32 { - get { - object obj = ResourceManager.GetObject("console32x32", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap CopyFolderHS { - get { - object obj = ResourceManager.GetObject("CopyFolderHS", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap corphawk { - get { - object obj = ResourceManager.GetObject("corphawk", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap CorpHawkSmall { - get { - object obj = ResourceManager.GetObject("CorpHawkSmall", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Cross { - get { - object obj = ResourceManager.GetObject("Cross", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap CutHS { - get { - object obj = ResourceManager.GetObject("CutHS", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Debugger { - get { - object obj = ResourceManager.GetObject("Debugger", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Delete { - get { - object obj = ResourceManager.GetObject("Delete", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap dual { - get { - object obj = ResourceManager.GetObject("dual", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Duplicate { - get { - object obj = ResourceManager.GetObject("Duplicate", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ENE { - get { - object obj = ResourceManager.GetObject("ENE", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Erase { - get { - object obj = ResourceManager.GetObject("Erase", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ESE { - get { - object obj = ResourceManager.GetObject("ESE", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ExclamationRed { - get { - object obj = ResourceManager.GetObject("ExclamationRed", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap FastForward { - get { - object obj = ResourceManager.GetObject("FastForward", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap FindHS { - get { - object obj = ResourceManager.GetObject("FindHS", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Forward { - get { - object obj = ResourceManager.GetObject("Forward", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ForwardMore { - get { - object obj = ResourceManager.GetObject("ForwardMore", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Freeze { - get { - object obj = ResourceManager.GetObject("Freeze", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Fullscreen { - get { - object obj = ResourceManager.GetObject("Fullscreen", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap gambatte { - get { - object obj = ResourceManager.GetObject("gambatte", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap GameController { - get { - object obj = ResourceManager.GetObject("GameController", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap GBA_Controller { - get { - object obj = ResourceManager.GetObject("GBA_Controller", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap gba_icon { - get { - object obj = ResourceManager.GetObject("gba_icon", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap GBController { - get { - object obj = ResourceManager.GetObject("GBController", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap GENController { - get { - object obj = ResourceManager.GetObject("GENController", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap GenesisControllerIcon { - get { - object obj = ResourceManager.GetObject("GenesisControllerIcon", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap genplus { - get { - object obj = ResourceManager.GetObject("genplus", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap GreenCheck { - get { - object obj = ResourceManager.GetObject("GreenCheck", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Hack { - get { - object obj = ResourceManager.GetObject("Hack", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Help { - get { - object obj = ResourceManager.GetObject("Help", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap HomeBrew { - get { - object obj = ResourceManager.GetObject("HomeBrew", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap HotKeys { - get { - object obj = ResourceManager.GetObject("HotKeys", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap icon_anchor { - get { - object obj = ResourceManager.GetObject("icon_anchor", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap icon_anchor_lag { - get { - object obj = ResourceManager.GetObject("icon_anchor_lag", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap icon_marker { - get { - object obj = ResourceManager.GetObject("icon_marker", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Import { - get { - object obj = ResourceManager.GetObject("Import", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap InsertSeparator { - get { - object obj = ResourceManager.GetObject("InsertSeparator", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap IntVController { - get { - object obj = ResourceManager.GetObject("IntVController", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap JumpTo { - get { - object obj = ResourceManager.GetObject("JumpTo", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap kitchensink { - get { - object obj = ResourceManager.GetObject("kitchensink", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Lightning { - get { - object obj = ResourceManager.GetObject("Lightning", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap LightOff { - get { - object obj = ResourceManager.GetObject("LightOff", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap LightOn { - get { - object obj = ResourceManager.GetObject("LightOn", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap LoadConfig { - get { - object obj = ResourceManager.GetObject("LoadConfig", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). - /// - internal static System.Drawing.Icon logo { - get { - object obj = ResourceManager.GetObject("logo", resourceCulture); - return ((System.Drawing.Icon)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Lua { - get { - object obj = ResourceManager.GetObject("Lua", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Lynx { - get { - object obj = ResourceManager.GetObject("Lynx", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap mame { - get { - object obj = ResourceManager.GetObject("mame", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap MessageConfig { - get { - object obj = ResourceManager.GetObject("MessageConfig", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap monitor { - get { - object obj = ResourceManager.GetObject("monitor", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap MoveBottom { - get { - object obj = ResourceManager.GetObject("MoveBottom", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap MoveDown { - get { - object obj = ResourceManager.GetObject("MoveDown", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap MoveLeft { - get { - object obj = ResourceManager.GetObject("MoveLeft", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap MoveRight { - get { - object obj = ResourceManager.GetObject("MoveRight", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap MoveTop { - get { - object obj = ResourceManager.GetObject("MoveTop", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap MoveUp { - get { - object obj = ResourceManager.GetObject("MoveUp", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap N64 { - get { - object obj = ResourceManager.GetObject("N64", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap NE { - get { - object obj = ResourceManager.GetObject("NE", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap NES_Controller { - get { - object obj = ResourceManager.GetObject("NES_Controller", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap NESControllerIcon { - get { - object obj = ResourceManager.GetObject("NESControllerIcon", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap NewFile { - get { - object obj = ResourceManager.GetObject("NewFile", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap NGPController { - get { - object obj = ResourceManager.GetObject("NGPController", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap NNE { - get { - object obj = ResourceManager.GetObject("NNE", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap NNW { - get { - object obj = ResourceManager.GetObject("NNW", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap noconnect_16x16 { - get { - object obj = ResourceManager.GetObject("noconnect_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.IO.UnmanagedMemoryStream similar to System.IO.MemoryStream. - /// - internal static System.IO.UnmanagedMemoryStream nothawk { - get { - return ResourceManager.GetStream("nothawk", resourceCulture); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap NW { - get { - object obj = ResourceManager.GetObject("NW", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap OpenFile { - get { - object obj = ResourceManager.GetObject("OpenFile", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Paste { - get { - object obj = ResourceManager.GetObject("Paste", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Pause { - get { - object obj = ResourceManager.GetObject("Pause", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap pcb { - get { - object obj = ResourceManager.GetObject("pcb", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap pcejin1 { - get { - object obj = ResourceManager.GetObject("pcejin1", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap PCEngineController { - get { - object obj = ResourceManager.GetObject("PCEngineController", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap pencil { - get { - object obj = ResourceManager.GetObject("pencil", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Play { - get { - object obj = ResourceManager.GetObject("Play", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap poke { - get { - object obj = ResourceManager.GetObject("poke", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ppsspp { - get { - object obj = ResourceManager.GetObject("ppsspp", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Previous { - get { - object obj = ResourceManager.GetObject("Previous", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap PrintPreviewHS { - get { - object obj = ResourceManager.GetObject("PrintPreviewHS", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap psx_dualshock { - get { - object obj = ResourceManager.GetObject("psx_dualshock", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap PSX_Original_Controller { - get { - object obj = ResourceManager.GetObject("PSX_Original_Controller", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap QuickNes { - get { - object obj = ResourceManager.GetObject("QuickNes", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ReadOnly { - get { - object obj = ResourceManager.GetObject("ReadOnly", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap reboot { - get { - object obj = ResourceManager.GetObject("reboot", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Recent { - get { - object obj = ResourceManager.GetObject("Recent", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap RecordHS { - get { - object obj = ResourceManager.GetObject("RecordHS", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap redo { - get { - object obj = ResourceManager.GetObject("redo", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Refresh { - get { - object obj = ResourceManager.GetObject("Refresh", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Refresh1 { - get { - object obj = ResourceManager.GetObject("Refresh1", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap restart { - get { - object obj = ResourceManager.GetObject("restart", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap RetroQuestion { - get { - object obj = ResourceManager.GetObject("RetroQuestion", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap SaturnController { - get { - object obj = ResourceManager.GetObject("SaturnController", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Save { - get { - object obj = ResourceManager.GetObject("Save", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap SaveAs { - get { - object obj = ResourceManager.GetObject("SaveAs", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap SaveConfig { - get { - object obj = ResourceManager.GetObject("SaveConfig", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Scan { - get { - object obj = ResourceManager.GetObject("Scan", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ScrollTo { - get { - object obj = ResourceManager.GetObject("ScrollTo", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap SE { - get { - object obj = ResourceManager.GetObject("SE", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap search { - get { - object obj = ResourceManager.GetObject("search", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Shark { - get { - object obj = ResourceManager.GetObject("Shark", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap sms_icon { - get { - object obj = ResourceManager.GetObject("sms_icon", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap SMSController { - get { - object obj = ResourceManager.GetObject("SMSController", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap SNES_Controller { - get { - object obj = ResourceManager.GetObject("SNES_Controller", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap snes9x { - get { - object obj = ResourceManager.GetObject("snes9x", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap SNESControllerIcon { - get { - object obj = ResourceManager.GetObject("SNESControllerIcon", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Square { - get { - object obj = ResourceManager.GetObject("Square", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap SSE { - get { - object obj = ResourceManager.GetObject("SSE", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap SSW { - get { - object obj = ResourceManager.GetObject("SSW", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Stop { - get { - object obj = ResourceManager.GetObject("Stop", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap StopButton { - get { - object obj = ResourceManager.GetObject("StopButton", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap SW { - get { - object obj = ResourceManager.GetObject("SW", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap TAStudio { - get { - object obj = ResourceManager.GetObject("TAStudio", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap textdoc { - get { - object obj = ResourceManager.GetObject("textdoc", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap thumbsdown { - get { - object obj = ResourceManager.GetObject("thumbsdown", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap TI83_Controller { - get { - object obj = ResourceManager.GetObject("TI83_Controller", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap TI83Calculator { - get { - object obj = ResourceManager.GetObject("TI83Calculator", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ToolBox { - get { - object obj = ResourceManager.GetObject("ToolBox", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Translation { - get { - object obj = ResourceManager.GetObject("Translation", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Triangle { - get { - object obj = ResourceManager.GetObject("Triangle", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap TruncateFromFile { - get { - object obj = ResourceManager.GetObject("TruncateFromFile", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap TruncateFromRW { - get { - object obj = ResourceManager.GetObject("TruncateFromRW", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_arrow_blue { - get { - object obj = ResourceManager.GetObject("ts_h_arrow_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_arrow_green { - get { - object obj = ResourceManager.GetObject("ts_h_arrow_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_arrow_green_blue { - get { - object obj = ResourceManager.GetObject("ts_h_arrow_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_00 { - get { - object obj = ResourceManager.GetObject("ts_h_piano_00", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_00_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_00_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_00_green { - get { - object obj = ResourceManager.GetObject("ts_h_piano_00_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_00_green_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_00_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_01 { - get { - object obj = ResourceManager.GetObject("ts_h_piano_01", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_01_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_01_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_01_green { - get { - object obj = ResourceManager.GetObject("ts_h_piano_01_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_01_green_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_01_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_02 { - get { - object obj = ResourceManager.GetObject("ts_h_piano_02", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_02_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_02_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_02_green { - get { - object obj = ResourceManager.GetObject("ts_h_piano_02_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_02_green_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_02_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_03 { - get { - object obj = ResourceManager.GetObject("ts_h_piano_03", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_03_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_03_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_03_green { - get { - object obj = ResourceManager.GetObject("ts_h_piano_03_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_03_green_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_03_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_04 { - get { - object obj = ResourceManager.GetObject("ts_h_piano_04", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_04_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_04_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_04_green { - get { - object obj = ResourceManager.GetObject("ts_h_piano_04_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_04_green_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_04_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_05 { - get { - object obj = ResourceManager.GetObject("ts_h_piano_05", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_05_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_05_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_05_green { - get { - object obj = ResourceManager.GetObject("ts_h_piano_05_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_05_green_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_05_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_06 { - get { - object obj = ResourceManager.GetObject("ts_h_piano_06", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_06_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_06_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_06_green { - get { - object obj = ResourceManager.GetObject("ts_h_piano_06_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_06_green_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_06_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_07 { - get { - object obj = ResourceManager.GetObject("ts_h_piano_07", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_07_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_07_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_07_green { - get { - object obj = ResourceManager.GetObject("ts_h_piano_07_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_07_green_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_07_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_08 { - get { - object obj = ResourceManager.GetObject("ts_h_piano_08", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_08_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_08_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_08_green { - get { - object obj = ResourceManager.GetObject("ts_h_piano_08_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_08_green_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_08_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_09 { - get { - object obj = ResourceManager.GetObject("ts_h_piano_09", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_09_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_09_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_09_green { - get { - object obj = ResourceManager.GetObject("ts_h_piano_09_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_09_green_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_09_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_10 { - get { - object obj = ResourceManager.GetObject("ts_h_piano_10", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_10_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_10_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_10_green { - get { - object obj = ResourceManager.GetObject("ts_h_piano_10_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_10_green_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_10_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_11 { - get { - object obj = ResourceManager.GetObject("ts_h_piano_11", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_11_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_11_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_11_green { - get { - object obj = ResourceManager.GetObject("ts_h_piano_11_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_11_green_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_11_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_12 { - get { - object obj = ResourceManager.GetObject("ts_h_piano_12", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_12_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_12_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_12_green { - get { - object obj = ResourceManager.GetObject("ts_h_piano_12_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_12_green_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_12_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_13 { - get { - object obj = ResourceManager.GetObject("ts_h_piano_13", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_13_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_13_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_13_green { - get { - object obj = ResourceManager.GetObject("ts_h_piano_13_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_13_green_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_13_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_14 { - get { - object obj = ResourceManager.GetObject("ts_h_piano_14", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_14_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_14_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_14_green { - get { - object obj = ResourceManager.GetObject("ts_h_piano_14_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_14_green_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_14_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_15 { - get { - object obj = ResourceManager.GetObject("ts_h_piano_15", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_15_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_15_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_15_green { - get { - object obj = ResourceManager.GetObject("ts_h_piano_15_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_15_green_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_15_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_16 { - get { - object obj = ResourceManager.GetObject("ts_h_piano_16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_16_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_16_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_16_green { - get { - object obj = ResourceManager.GetObject("ts_h_piano_16_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_16_green_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_16_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_17 { - get { - object obj = ResourceManager.GetObject("ts_h_piano_17", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_17_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_17_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_17_green { - get { - object obj = ResourceManager.GetObject("ts_h_piano_17_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_17_green_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_17_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_18 { - get { - object obj = ResourceManager.GetObject("ts_h_piano_18", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_18_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_18_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_18_green { - get { - object obj = ResourceManager.GetObject("ts_h_piano_18_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_18_green_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_18_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_19 { - get { - object obj = ResourceManager.GetObject("ts_h_piano_19", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_19_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_19_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_19_green { - get { - object obj = ResourceManager.GetObject("ts_h_piano_19_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_h_piano_19_green_blue { - get { - object obj = ResourceManager.GetObject("ts_h_piano_19_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_arrow_blue { - get { - object obj = ResourceManager.GetObject("ts_v_arrow_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_arrow_green { - get { - object obj = ResourceManager.GetObject("ts_v_arrow_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_arrow_green_blue { - get { - object obj = ResourceManager.GetObject("ts_v_arrow_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_00 { - get { - object obj = ResourceManager.GetObject("ts_v_piano_00", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_00_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_00_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_00_green { - get { - object obj = ResourceManager.GetObject("ts_v_piano_00_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_00_green_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_00_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_01 { - get { - object obj = ResourceManager.GetObject("ts_v_piano_01", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_01_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_01_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_01_green { - get { - object obj = ResourceManager.GetObject("ts_v_piano_01_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_01_green_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_01_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_02 { - get { - object obj = ResourceManager.GetObject("ts_v_piano_02", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_02_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_02_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_02_green { - get { - object obj = ResourceManager.GetObject("ts_v_piano_02_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_02_green_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_02_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_03 { - get { - object obj = ResourceManager.GetObject("ts_v_piano_03", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_03_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_03_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_03_green { - get { - object obj = ResourceManager.GetObject("ts_v_piano_03_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_03_green_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_03_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_04 { - get { - object obj = ResourceManager.GetObject("ts_v_piano_04", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_04_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_04_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_04_green { - get { - object obj = ResourceManager.GetObject("ts_v_piano_04_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_04_green_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_04_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_05 { - get { - object obj = ResourceManager.GetObject("ts_v_piano_05", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_05_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_05_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_05_green { - get { - object obj = ResourceManager.GetObject("ts_v_piano_05_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_05_green_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_05_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_06 { - get { - object obj = ResourceManager.GetObject("ts_v_piano_06", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_06_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_06_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_06_green { - get { - object obj = ResourceManager.GetObject("ts_v_piano_06_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_06_green_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_06_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_07 { - get { - object obj = ResourceManager.GetObject("ts_v_piano_07", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_07_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_07_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_07_green { - get { - object obj = ResourceManager.GetObject("ts_v_piano_07_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_07_green_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_07_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_08 { - get { - object obj = ResourceManager.GetObject("ts_v_piano_08", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_08_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_08_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_08_green { - get { - object obj = ResourceManager.GetObject("ts_v_piano_08_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_08_green_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_08_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_09 { - get { - object obj = ResourceManager.GetObject("ts_v_piano_09", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_09_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_09_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_09_green { - get { - object obj = ResourceManager.GetObject("ts_v_piano_09_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_09_green_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_09_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_10 { - get { - object obj = ResourceManager.GetObject("ts_v_piano_10", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_10_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_10_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_10_green { - get { - object obj = ResourceManager.GetObject("ts_v_piano_10_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_10_green_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_10_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_11 { - get { - object obj = ResourceManager.GetObject("ts_v_piano_11", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_11_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_11_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_11_green { - get { - object obj = ResourceManager.GetObject("ts_v_piano_11_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_11_green_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_11_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_12 { - get { - object obj = ResourceManager.GetObject("ts_v_piano_12", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_12_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_12_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_12_green { - get { - object obj = ResourceManager.GetObject("ts_v_piano_12_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_12_green_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_12_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_13 { - get { - object obj = ResourceManager.GetObject("ts_v_piano_13", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_13_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_13_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_13_green { - get { - object obj = ResourceManager.GetObject("ts_v_piano_13_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_13_green_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_13_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_14 { - get { - object obj = ResourceManager.GetObject("ts_v_piano_14", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_14_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_14_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_14_green { - get { - object obj = ResourceManager.GetObject("ts_v_piano_14_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_14_green_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_14_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_15 { - get { - object obj = ResourceManager.GetObject("ts_v_piano_15", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_15_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_15_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_15_green { - get { - object obj = ResourceManager.GetObject("ts_v_piano_15_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_15_green_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_15_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_16 { - get { - object obj = ResourceManager.GetObject("ts_v_piano_16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_16_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_16_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_16_green { - get { - object obj = ResourceManager.GetObject("ts_v_piano_16_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_16_green_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_16_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_17 { - get { - object obj = ResourceManager.GetObject("ts_v_piano_17", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_17_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_17_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_17_green { - get { - object obj = ResourceManager.GetObject("ts_v_piano_17_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_17_green_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_17_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_18 { - get { - object obj = ResourceManager.GetObject("ts_v_piano_18", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_18_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_18_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_18_green { - get { - object obj = ResourceManager.GetObject("ts_v_piano_18_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_18_green_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_18_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_19 { - get { - object obj = ResourceManager.GetObject("ts_v_piano_19", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_19_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_19_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_19_green { - get { - object obj = ResourceManager.GetObject("ts_v_piano_19_green", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ts_v_piano_19_green_blue { - get { - object obj = ResourceManager.GetObject("ts_v_piano_19_green_blue", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap TurboFastForward { - get { - object obj = ResourceManager.GetObject("TurboFastForward", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap tvIcon { - get { - object obj = ResourceManager.GetObject("tvIcon", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap undo { - get { - object obj = ResourceManager.GetObject("undo", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Unfreeze { - get { - object obj = ResourceManager.GetObject("Unfreeze", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). - /// - internal static System.Drawing.Icon user_blue { - get { - object obj = ResourceManager.GetObject("user_blue", resourceCulture); - return ((System.Drawing.Icon)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap user_blue_small { - get { - object obj = ResourceManager.GetObject("user_blue_small", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap VBoyController { - get { - object obj = ResourceManager.GetObject("VBoyController", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap WarningHS { - get { - object obj = ResourceManager.GetObject("WarningHS", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap watch { - get { - object obj = ResourceManager.GetObject("watch", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap whiteTriDown { - get { - object obj = ResourceManager.GetObject("whiteTriDown", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap whiteTriLeft { - get { - object obj = ResourceManager.GetObject("whiteTriLeft", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap whiteTriRight { - get { - object obj = ResourceManager.GetObject("whiteTriRight", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap whiteTriUp { - get { - object obj = ResourceManager.GetObject("whiteTriUp", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap WNW { - get { - object obj = ResourceManager.GetObject("WNW", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap WonderSwanColor { - get { - object obj = ResourceManager.GetObject("WonderSwanColor", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap WSW { - get { - object obj = ResourceManager.GetObject("WSW", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap YellowDown { - get { - object obj = ResourceManager.GetObject("YellowDown", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap YellowLeft { - get { - object obj = ResourceManager.GetObject("YellowLeft", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap YellowRight { - get { - object obj = ResourceManager.GetObject("YellowRight", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap YellowUp { - get { - object obj = ResourceManager.GetObject("YellowUp", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ZXSpectrumKeyboards { - get { - object obj = ResourceManager.GetObject("ZXSpectrumKeyboards", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} diff --git a/BizHawk.Client.EmuHawk/Properties/Resources.cs b/BizHawk.Client.EmuHawk/Properties/Resources.cs new file mode 100644 index 0000000000..6aab103970 --- /dev/null +++ b/BizHawk.Client.EmuHawk/Properties/Resources.cs @@ -0,0 +1,223 @@ +using System; +using System.Drawing; +using System.IO; +using System.Reflection; +using System.Windows.Forms; + +namespace BizHawk.Client.EmuHawk.Properties { + internal class Resources { + private static readonly Assembly Asm = Assembly.GetExecutingAssembly(); + + /// Dir separator is '.'. Path is relative to <NS>. + private static Bitmap ReadEmbeddedBitmapAt(string embedPath) => new Bitmap(Asm.GetManifestResourceStream($"BizHawk.Client.EmuHawk.{embedPath}")); + + /// Dir separator is '.'. Filename is relative to <NS>/images and omits .png extension. + /// For other file extensions or paths use . + private static Bitmap ReadEmbeddedBitmap(string filename) => ReadEmbeddedBitmapAt($"images.{filename}.png"); + + /// Dir separator is '.'. Filename is relative to <NS>/images and omits .ico extension. + private static Icon ReadEmbeddedIcon(string filename) => new Icon(Asm.GetManifestResourceStream($"BizHawk.Client.EmuHawk.images.{filename}.ico")); + + internal static readonly Lazy mom1 = new Lazy(() => ReadEmbeddedBitmap("AboutBox.mom1")); + internal static readonly Lazy mom2 = new Lazy(() => ReadEmbeddedBitmap("AboutBox.mom2")); + internal static readonly Lazy pictureBox1 = new Lazy(() => ReadEmbeddedBitmap("AboutBox.pictureBox1")); + internal static readonly Lazy pictureBox2 = new Lazy(() => ReadEmbeddedBitmap("AboutBox.pictureBox2")); + internal static readonly Lazy pictureBox3 = new Lazy(() => ReadEmbeddedBitmap("AboutBox.pictureBox3")); + internal static readonly Lazy pictureBox4 = new Lazy(() => ReadEmbeddedBitmap("AboutBox.pictureBox4")); + internal static readonly Bitmap add = ReadEmbeddedBitmap("add"); + internal static readonly Bitmap AddEdit = ReadEmbeddedBitmap("AddEdit"); + internal static readonly Bitmap addWatch = ReadEmbeddedBitmapAt("images.addWatch.ico"); + internal static readonly Bitmap alt_about_image = ReadEmbeddedBitmap("alt_about_image"); + internal static readonly Bitmap arrow_black_down = ReadEmbeddedBitmap("arrow_black_down"); + internal static readonly Lazy atari_controller = new Lazy(() => ReadEmbeddedBitmap("atari_controller")); + internal static readonly Bitmap AudioHS = ReadEmbeddedBitmap("AudioHS"); + internal static readonly Bitmap AutoSearch = ReadEmbeddedBitmap("AutoSearch"); + internal static readonly Bitmap AVI = ReadEmbeddedBitmap("AVI"); + internal static readonly Bitmap Back = ReadEmbeddedBitmap("Back"); + internal static readonly Bitmap BackMore = ReadEmbeddedBitmap("BackMore"); + internal static readonly Icon basicbot = ReadEmbeddedIcon("basicbot"); + internal static readonly Bitmap Blank = ReadEmbeddedBitmap("Blank"); + internal static readonly Cursor BlankCursor = new Cursor(Asm.GetManifestResourceStream("BizHawk.Client.EmuHawk.images.BlankCursor.cur")); + internal static readonly Bitmap BlueDown = ReadEmbeddedBitmap("BlueDown"); + internal static readonly Bitmap BlueUp = ReadEmbeddedBitmap("BlueUp"); + internal static readonly Bitmap Both = ReadEmbeddedBitmap("Both"); + internal static readonly Bitmap bsnes = ReadEmbeddedBitmap("bsnes"); + internal static readonly Icon Bug_MultiSize = ReadEmbeddedIcon("Bug"); + internal static readonly Bitmap Bug = ReadEmbeddedBitmap("Bug"); + internal static readonly Icon calculator_MultiSize = ReadEmbeddedIcon("calculator"); + internal static readonly Bitmap calculator = ReadEmbeddedBitmap("calculator"); + internal static readonly Bitmap camera = ReadEmbeddedBitmap("camera"); + internal static readonly Bitmap cdlogger = ReadEmbeddedBitmapAt("images.cdlogger.ico"); + internal static readonly Icon cdlogger_MultiSize = ReadEmbeddedIcon("cdlogger"); + internal static readonly Bitmap checkbox = ReadEmbeddedBitmap("checkbox"); + internal static readonly Bitmap Circle = ReadEmbeddedBitmap("Circle"); + internal static readonly Bitmap Close = ReadEmbeddedBitmap("Close"); + internal static readonly Bitmap connect_16x16 = ReadEmbeddedBitmap("connect_16x16"); + internal static readonly Bitmap console16x16 = ReadEmbeddedBitmap("console16x16"); + internal static readonly Bitmap console32x32 = ReadEmbeddedBitmap("console32x32"); + internal static readonly Lazy A78Joystick = new Lazy(() => ReadEmbeddedBitmap("ControllerImages.A78Joystick")); + internal static readonly Lazy AppleIIKeyboard = new Lazy(() => ReadEmbeddedBitmap("ControllerImages.AppleIIKeyboard")); + internal static readonly Lazy ArcadeController = new Lazy(() => ReadEmbeddedBitmapAt("images.ControllerImages.ArcadeController.jpg")); + internal static readonly Lazy C64Joystick = new Lazy(() => ReadEmbeddedBitmap("ControllerImages.C64Joystick")); + internal static readonly Lazy C64Keyboard = new Lazy(() => ReadEmbeddedBitmap("ControllerImages.C64Keyboard")); + internal static readonly Lazy colecovisioncontroller = new Lazy(() => ReadEmbeddedBitmap("ControllerImages.colecovisioncontroller")); + internal static readonly Lazy GBA_Controller = new Lazy(() => ReadEmbeddedBitmap("ControllerImages.GBA_Controller")); + internal static readonly Lazy GBController = new Lazy(() => ReadEmbeddedBitmap("ControllerImages.GBController")); + internal static readonly Lazy GENController = new Lazy(() => ReadEmbeddedBitmap("ControllerImages.GENController")); + internal static readonly Lazy IntVController = new Lazy(() => ReadEmbeddedBitmap("ControllerImages.IntVController")); + internal static readonly Lazy Lynx = new Lazy(() => ReadEmbeddedBitmap("ControllerImages.Lynx")); + internal static readonly Lazy N64 = new Lazy(() => ReadEmbeddedBitmap("ControllerImages.N64")); + internal static readonly Lazy NES_Controller = new Lazy(() => ReadEmbeddedBitmap("ControllerImages.NES_Controller")); + internal static readonly Lazy NGPController = new Lazy(() => ReadEmbeddedBitmap("ControllerImages.NGPController")); + internal static readonly Lazy PCEngineController = new Lazy(() => ReadEmbeddedBitmap("ControllerImages.PCEngineController")); + internal static readonly Lazy psx_dualshock = new Lazy(() => ReadEmbeddedBitmap("ControllerImages.psx_dualshock")); + internal static readonly Lazy PSX_Original_Controller = new Lazy(() => ReadEmbeddedBitmap("ControllerImages.PSX-Original-Controller")); + internal static readonly Lazy SaturnController = new Lazy(() => ReadEmbeddedBitmapAt("images.ControllerImages.SaturnController.jpg")); + internal static readonly Lazy SMSController = new Lazy(() => ReadEmbeddedBitmap("ControllerImages.SNES_Controller")); + internal static readonly Lazy SNES_Controller = new Lazy(() => ReadEmbeddedBitmap("ControllerImages.SNES_Controller")); + internal static readonly Lazy TI83_Controller = new Lazy(() => ReadEmbeddedBitmap("ControllerImages.TI83_Controller")); + internal static readonly Lazy VBoyController = new Lazy(() => ReadEmbeddedBitmap("ControllerImages.VBoyController")); + internal static readonly Lazy WonderSwanColor = new Lazy(() => ReadEmbeddedBitmap("ControllerImages.WonderSwanColor")); + internal static readonly Lazy ZXSpectrumKeyboards = new Lazy(() => ReadEmbeddedBitmap("ControllerImages.ZXSpectrumKeyboards")); + internal static readonly Bitmap CopyFolderHS = ReadEmbeddedBitmap("CopyFolderHS"); + internal static readonly Bitmap corphawk = ReadEmbeddedBitmapAt("images.corphawk.jpg"); + internal static readonly Bitmap CorpHawkSmall = ReadEmbeddedBitmap("CorpHawkSmall"); + internal static readonly Bitmap Cross = ReadEmbeddedBitmap("Cross"); + internal static readonly Bitmap CutHS = ReadEmbeddedBitmap("CutHS"); + internal static readonly Bitmap Debugger = ReadEmbeddedBitmap("Debugger"); + internal static readonly Bitmap Delete = ReadEmbeddedBitmap("Delete"); + internal static readonly Icon dual_MultiSize = ReadEmbeddedIcon("dual"); + internal static readonly Bitmap Duplicate = ReadEmbeddedBitmap("Duplicate"); + internal static readonly Bitmap ENE = ReadEmbeddedBitmap("ENE"); + internal static readonly Bitmap Erase = ReadEmbeddedBitmap("Erase"); + internal static readonly Bitmap ESE = ReadEmbeddedBitmap("ESE"); + internal static readonly Bitmap ExclamationRed = ReadEmbeddedBitmap("ExclamationRed"); + internal static readonly Bitmap FastForward = ReadEmbeddedBitmap("FastForward"); + internal static readonly Bitmap FindHS = ReadEmbeddedBitmap("FindHS"); + internal static readonly Bitmap Forward = ReadEmbeddedBitmap("Forward"); + internal static readonly Icon Freeze_MultiSize = ReadEmbeddedIcon("Freeze"); + internal static readonly Bitmap Freeze = ReadEmbeddedBitmap("Freeze"); + internal static readonly Bitmap Fullscreen = ReadEmbeddedBitmap("Fullscreen"); + internal static readonly Icon gambatte_MultiSize = ReadEmbeddedIcon("gambatte"); + internal static readonly Bitmap gambatte = ReadEmbeddedBitmap("gambatte"); + internal static readonly Icon GameController_MultiSize = ReadEmbeddedIcon("GameController"); + internal static readonly Bitmap GameController = ReadEmbeddedBitmap("GameController"); + internal static readonly Lazy gba_MultiSize = new Lazy(() => ReadEmbeddedIcon("Gameboy Advance (black) icon")); + internal static readonly Bitmap genplus = ReadEmbeddedBitmap("genplus"); + internal static readonly Bitmap GreenCheck = ReadEmbeddedBitmap("GreenCheck"); + internal static readonly Bitmap Hack = ReadEmbeddedBitmap("Hack"); + internal static readonly Bitmap Help = ReadEmbeddedBitmap("Help"); + internal static readonly Bitmap HomeBrew = ReadEmbeddedBitmap("HomeBrew"); + internal static readonly Icon HotKeys_MultiSize = ReadEmbeddedIcon("HotKeys"); + internal static readonly Bitmap HotKeys = ReadEmbeddedBitmap("HotKeys"); + internal static readonly Bitmap Import = ReadEmbeddedBitmap("Import"); + internal static readonly Bitmap InsertSeparator = ReadEmbeddedBitmap("InsertSeparator"); + internal static readonly Bitmap JumpTo = ReadEmbeddedBitmap("JumpTo"); + internal static readonly Bitmap kitchensink = ReadEmbeddedBitmap("kitchensink"); + internal static readonly Icon Lightning_MultiSize = ReadEmbeddedIcon("Lightning"); + internal static readonly Bitmap Lightning = ReadEmbeddedBitmap("Lightning"); + internal static readonly Bitmap LightOff = ReadEmbeddedBitmap("LightOff"); + internal static readonly Bitmap LightOn = ReadEmbeddedBitmap("LightOn"); + internal static readonly Bitmap LoadConfig = ReadEmbeddedBitmap("LoadConfig"); + internal static readonly Icon logo = ReadEmbeddedIcon("logo"); + internal static readonly Bitmap Lua = ReadEmbeddedBitmap("Lua"); + internal static readonly Bitmap luaPictureBox = ReadEmbeddedBitmap("luaPictureBox"); + internal static readonly Bitmap mame = ReadEmbeddedBitmap("mame"); + internal static readonly Bitmap MessageConfig = ReadEmbeddedBitmap("MessageConfig"); + internal static readonly Icon monitor_MultiSize = ReadEmbeddedIcon("monitor"); + internal static readonly Bitmap monitor = ReadEmbeddedBitmap("monitor"); + internal static readonly Bitmap MoveBottom = ReadEmbeddedBitmapAt("Resources.MoveBottom.png"); + internal static readonly Bitmap MoveDown = ReadEmbeddedBitmap("MoveDown"); + internal static readonly Bitmap MoveLeft = ReadEmbeddedBitmap("MoveLeft"); + internal static readonly Bitmap MoveRight = ReadEmbeddedBitmap("MoveRight"); + internal static readonly Bitmap MoveTop = ReadEmbeddedBitmapAt("Resources.MoveTop.png"); + internal static readonly Bitmap MoveUp = ReadEmbeddedBitmap("MoveUp"); + internal static readonly Icon MsgBox_MultiSize = ReadEmbeddedIcon("MsgBox"); + internal static readonly Bitmap NE = ReadEmbeddedBitmap("NE"); + internal static readonly Icon NESControllerIcon_MultiSize = ReadEmbeddedIcon("NESControllerIcon"); + internal static readonly Bitmap NewFile = ReadEmbeddedBitmap("NewFile"); + internal static readonly Bitmap NNE = ReadEmbeddedBitmap("NNE"); + internal static readonly Bitmap NNW = ReadEmbeddedBitmap("NNW"); + internal static readonly Bitmap noconnect_16x16 = ReadEmbeddedBitmap("noconnect_16x16"); + internal static readonly Stream nothawk = Asm.GetManifestResourceStream("BizHawk.Client.EmuHawk.Resources.nothawk.bin"); + internal static readonly Bitmap NW = ReadEmbeddedBitmap("NW"); + internal static readonly Bitmap OpenFile = ReadEmbeddedBitmap("OpenFile"); + internal static readonly Bitmap Paste = ReadEmbeddedBitmap("Paste"); + internal static readonly Bitmap Pause = ReadEmbeddedBitmap("Pause"); + internal static readonly Bitmap pcb = ReadEmbeddedBitmap("pcb"); + internal static readonly Icon pce_MultiSize = ReadEmbeddedIcon("pce"); + internal static readonly Icon pencil_MultiSize = ReadEmbeddedIcon("pencil"); + internal static readonly Bitmap pencil = ReadEmbeddedBitmap("pencil"); + internal static readonly Bitmap Play = ReadEmbeddedBitmap("Play"); + internal static readonly Bitmap placeholder_bitmap = ReadEmbeddedBitmap("placeholder_bitmap"); + internal static readonly Icon poke_MultiSize = ReadEmbeddedIcon("poke"); + internal static readonly Bitmap poke = ReadEmbeddedBitmap("poke"); + internal static readonly Bitmap ppsspp = ReadEmbeddedBitmap("ppsspp"); + internal static readonly Icon Previous_MultiSize = ReadEmbeddedIcon("Previous"); + internal static readonly Bitmap Previous = ReadEmbeddedBitmap("Previous"); + internal static readonly Icon QuickNes_MultiSize = ReadEmbeddedIcon("QuickNes"); + internal static readonly Bitmap QuickNes = ReadEmbeddedBitmap("QuickNes"); + internal static readonly Bitmap ReadOnly = ReadEmbeddedBitmap("ReadOnly"); + internal static readonly Bitmap reboot = ReadEmbeddedBitmap("reboot"); + internal static readonly Bitmap Recent = ReadEmbeddedBitmap("Recent"); + internal static readonly Bitmap RecordHS = ReadEmbeddedBitmap("RecordHS"); + internal static readonly Bitmap redo = ReadEmbeddedBitmap("redo"); + internal static readonly Bitmap Refresh = ReadEmbeddedBitmapAt("images.Refresh.bmp"); + internal static readonly Bitmap Refresh1 = ReadEmbeddedBitmap("Refresh"); + internal static readonly Bitmap restart = ReadEmbeddedBitmap("restart"); + internal static readonly Bitmap RetroQuestion = ReadEmbeddedBitmap("RetroQuestion"); + internal static readonly Bitmap Save = ReadEmbeddedBitmap("Save"); + internal static readonly Bitmap SaveAs = ReadEmbeddedBitmap("SaveAs"); + internal static readonly Bitmap SaveConfig = ReadEmbeddedBitmap("SaveConfig"); + internal static readonly Bitmap Scan = ReadEmbeddedBitmap("Scan"); + internal static readonly Bitmap ScrollTo = ReadEmbeddedBitmap("ScrollTo"); + internal static readonly Bitmap SE = ReadEmbeddedBitmap("SE"); + internal static readonly Icon search_MultiSize = ReadEmbeddedIcon("search"); + internal static readonly Bitmap search = ReadEmbeddedBitmap("search"); + internal static readonly Icon Shark_MultiSize = ReadEmbeddedIcon("Shark"); + internal static readonly Bitmap Shark = ReadEmbeddedBitmap("Shark"); + internal static readonly Icon sms_MultiSize = ReadEmbeddedIcon("sms-icon"); + internal static readonly Bitmap snes9x = ReadEmbeddedBitmap("snes9x"); + internal static readonly Bitmap Square = ReadEmbeddedBitmap("Square"); + internal static readonly Bitmap SSE = ReadEmbeddedBitmap("SSE"); + internal static readonly Bitmap SSW = ReadEmbeddedBitmap("SSW"); + internal static readonly Bitmap Stop = ReadEmbeddedBitmap("Stop"); + internal static readonly Bitmap StopButton = ReadEmbeddedBitmap("StopButton"); + internal static readonly Bitmap SW = ReadEmbeddedBitmap("SW"); + internal static readonly Icon TAStudio_MultiSize = ReadEmbeddedIcon("TAStudio"); + internal static readonly Bitmap TAStudio = ReadEmbeddedBitmap("TAStudio"); + internal static readonly Bitmap icon_anchor = ReadEmbeddedBitmap("tastudio.icon_anchor"); + internal static readonly Bitmap icon_anchor_lag = ReadEmbeddedBitmap("tastudio.icon_anchor_lag"); + internal static readonly Bitmap icon_marker = ReadEmbeddedBitmap("tastudio.icon_marker"); + internal static readonly Bitmap ts_h_arrow_blue = ReadEmbeddedBitmap("tastudio.ts_h_arrow_blue"); + internal static readonly Bitmap ts_h_arrow_green = ReadEmbeddedBitmap("tastudio.ts_h_arrow_green"); + internal static readonly Bitmap ts_h_arrow_green_blue = ReadEmbeddedBitmap("tastudio.ts_h_arrow_green_blue"); + internal static readonly Bitmap ts_v_arrow_blue = ReadEmbeddedBitmap("tastudio.ts_v_arrow_blue"); + internal static readonly Bitmap ts_v_arrow_green = ReadEmbeddedBitmap("tastudio.ts_v_arrow_green"); + internal static readonly Bitmap ts_v_arrow_green_blue = ReadEmbeddedBitmap("tastudio.ts_v_arrow_green_blue"); + internal static readonly Icon textdoc_MultiSize = ReadEmbeddedIcon("textdoc"); + internal static readonly Bitmap thumbsdown = ReadEmbeddedBitmap("thumbsdown"); + internal static readonly Icon ToolBox_MultiSize = ReadEmbeddedIcon("ToolBox"); + internal static readonly Bitmap ToolBox = ReadEmbeddedBitmap("ToolBox"); + internal static readonly Bitmap Translation = ReadEmbeddedBitmap("Translation"); + internal static readonly Bitmap Triangle = ReadEmbeddedBitmap("Triangle"); + internal static readonly Bitmap TruncateFromFile = ReadEmbeddedBitmap("TruncateFromFile"); + internal static readonly Bitmap tvIcon = ReadEmbeddedBitmap("tvIcon"); + internal static readonly Bitmap undo = ReadEmbeddedBitmap("undo"); + internal static readonly Bitmap Unfreeze = ReadEmbeddedBitmap("Unfreeze"); + internal static readonly Icon user_blue = ReadEmbeddedIcon("user_blue"); + internal static readonly Bitmap user_blue_small = ReadEmbeddedBitmap("user_blue_small"); + internal static readonly Icon watch_MultiSize = ReadEmbeddedIcon("watch"); + internal static readonly Bitmap watch = ReadEmbeddedBitmapAt("images.watch.ico"); + internal static readonly Bitmap whiteTriDown = ReadEmbeddedBitmap("whiteTriDown"); + internal static readonly Bitmap whiteTriLeft = ReadEmbeddedBitmap("whiteTriLeft"); + internal static readonly Bitmap whiteTriRight = ReadEmbeddedBitmap("whiteTriRight"); + internal static readonly Bitmap whiteTriUp = ReadEmbeddedBitmap("whiteTriUp"); + internal static readonly Bitmap WNW = ReadEmbeddedBitmap("WNW"); + internal static readonly Bitmap WSW = ReadEmbeddedBitmap("WSW"); + internal static readonly Bitmap YellowDown = ReadEmbeddedBitmap("YellowDown"); + internal static readonly Bitmap YellowLeft = ReadEmbeddedBitmap("YellowLeft"); + internal static readonly Bitmap YellowRight = ReadEmbeddedBitmap("YellowRight"); + internal static readonly Bitmap YellowUp = ReadEmbeddedBitmap("YellowUp"); + } +} diff --git a/BizHawk.Client.EmuHawk/Properties/Resources.resx b/BizHawk.Client.EmuHawk/Properties/Resources.resx index ac426a1592..29dcb1b3a3 100644 --- a/BizHawk.Client.EmuHawk/Properties/Resources.resx +++ b/BizHawk.Client.EmuHawk/Properties/Resources.resx @@ -117,1459 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\images\ControllerImages\GBController.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_03_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_13.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\AudioHS.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Scan.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Circle.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_02_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\A78Joystick.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\VBoyController.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\cdlogger.ico;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_00_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\dual.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Play.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\whiteTriRight.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Close.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\MoveDown.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ToolBox.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_14.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\SNES_Controller.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Import.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ExclamationRed.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_arrow_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_11_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\WonderSwanColor.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Delete.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\checkbox.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_09_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_03_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\calculator.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_16_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_13_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\MoveUp.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Paste.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_10_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_09_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\logo.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\MessageConfig.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_01_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Triangle.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\MoveLeft.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_03_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_11.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_17_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_01.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_arrow_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ForwardMore.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_15_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_07_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\camera.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_06_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\RecordHS.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_19_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_15_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\SNESControllerIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_18.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\kitchensink.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_02.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\IntVController.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_19.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_12_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\PSX-Original-Controller.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - - AAEAAAD/////AQAAAAAAAAAEAQAAABZTeXN0ZW0uSU8uTWVtb3J5U3RyZWFtCgAAAAdfYnVmZmVyB19v - cmlnaW4JX3Bvc2l0aW9uB19sZW5ndGgJX2NhcGFjaXR5C19leHBhbmRhYmxlCV93cml0YWJsZQpfZXhw - b3NhYmxlB19pc09wZW4dTWFyc2hhbEJ5UmVmT2JqZWN0K19faWRlbnRpdHkHAAAAAAAAAAACAggICAgB - AQEBCQIAAAAAAAAAeGIAAHhiAAB4YgAAAAEAAQoPAgAAAHhiAAACUklGRnBiAABXQVZFZm10IBAAAAAB - AAEAIlYAACJWAAABAAgAZGF0YYBhAAB/f39/gICAgH9/f39/gICAgH9/f4CAgIB/f39/gICAf39/gIB/ - f39/f39/f3+AgH9/f3+AgIB/f39/gICAf39/gICAgIB/f39/f3+AgICAf39/gICAgH9/f4CAgIB/f39/ - gICAgH9/gICAgH9/f3+AgIB/f39/f4CAgIB/f3+AgIB/f39/gICAf3+AgIB/f39/gICAf39/gICAf39/ - f4CAgH9/f3+AgH9/f4CAgH9/f3+AgIB/f3+AgICAf3+AgH9/f3+AgICAgICAgH9/f39/f3+AgICAf39/ - gICAgH9/f3+AgH9/f3+AgICAf3+AgICAf39/gICAgICAf39/gICAgH9/f4CAgH9/f4CAgH9/f3+AgIB/ - f3+AgICAf39/f39/f3+AgIB/gICAgH9/f4CAgH9/f4CAgIB/f3+AgIB/f3+AgIB/f3+AgICAf39/gICA - gH9/f3+AgIB/f39/f4CAgICAgICAgICAf39/f39/f3+AgICAf39/gICAgH9/f4CAgH9/f4CAgH9/f4CA - gICAf39/f3+AgIB/f3+AgICAf39/gICAf39/f4CAgH9/f4CAgH9/f4CAgIB/f3+AgICAf39/gICAgH9/ - f4CAgH9/f3+AgIB/f39/f4CAgH9/f3+AgIB/f3+AgICAf39/f4CAgICAgIB/f3+AgIB/f39/gIB/f3+A - gIB/f3+AgIB/f39/gICAf3+AgICAf39/f4CAf3+AgICAgICAgIB/f3+AgH9/f3+AgICAgH9/f39/gIB/ - f39/gICAgH9/gICAgH9/gICAf35+f39/f39/gIGBgYCBgYGBgIB/fXp4eH2Bg4OCg4WHh4R/e3p7fH19 - fXx+gYSEgoB/f4GBgYB/f3+Af39+fXx8fn+BgYGBgoODgoB+fX1+fn9/fn6AgYGBgH+AgIGAgICAgICA - gH99fX5/gICAf4CAgYKBgH9/f39/f35+f3+AgICAgICAgIGBgH9/f39+f3+Af39/gICAf4CAgICAgH9/ - f39/gICAgICAgH9/f39/f39/f3+AgH+AgYGAgIGCgH57eHp/g4KAfn+DhYaFgH18fn9/fXl4fYOFhIKB - gYKEhYWFgHNobHqDhIF+gYyVlYt/eHR1en58dnR6hIuKgnx9gIKEhIB+gYODg4F7dXV5fH+Afn+Fh4aF - gn9+gYF/gH16fH9+e3p4eYCFhoaGhIWIhYB9enZ3fH18fn5/goaFg4GAgIODgH9+fHt/fnx7fH1/goOE - hIOCgoJ/fXx6e31+f39/gYKBgoKAfoCAf4CBfn1/gH9/fn1+gIGBgYCBgoGAf399fH1/f4CBgYGCgoKC - g4F+fHp6e3x9f4CBgoODg4OEg4SGhn9vX2FyhZCTkIuIiYeDfnt4dXl8dnF1foiQjYWDh4yRiW5TVGmB - joyCg5Kgo5eBbWRlb3p9dXJ+kZmTh314eoCBgoaCeXR0dHmChYiLiYKBgoSJin5mVl93iYyDfIOYp6SR - emxpb3h7dGhpf5abkIJ8gYuOhnt0dHmAg31zbnF/jJGPiIOFiYiEeWddZneDiIWCiJSalYd3cG90e315 - dHiEjY2FfXp9goaEgH+Ag4aFgHl1dXl8fHp8gomMiYSBgYWGgn15eHyCgnZlYW6BjpCMjJKbnpN9a2Nj - aXB0c3aDk5yaj4WAgYJ+d3Z3eXx/e3V1eH2EiouMi4mHhH15d3h7fn54amBqfouPjo+YpaaWfWlfXmBl - cHqEkpmUioSDiIyHfHFucnh6eXl8hJCZm45pSFFxhIeDhJm1u6WDaF1bXWFrc3uOoJ6LenqNnZiDbWdv - eHhzcHWGnKGFXFNrh5GIfICasq2RcF1ZYGt0c253lKypkXl2hI+Kd2psdHh5fH2DlZ+LZlZnf4uJgHyN - pKmWe2heYWx4eXF1jKetm4J0dnx6bmVqe4mPjYN7gZCbl4ZwX1tqe3xzb3uTqqyZgnZ3fHx0aWVrfI6V - joF8go2QhHRudoGGgXdydoGMjYeCgoWIiYeAcFhSZn2HiIiNn66qlXtqY2JnbG9vdYebo5qLgH5+fnZv - c3x+fHl4fIeTlY2DgIWOjXRNOlB0jpaRkqO2uaN/YlJRXGxyb3WIm6GYh3+FjY+Gd21sbnR5eHZ+j6Gq - l2Q/UHaKiX9/l7W8o31gVVdfbnl2epKknoZydo6emIJrZnF4d3Z5gZOcfFFQbIeVkYiTr72rg19OS1Rk - cGttjK23pYZ3h52dhmVUXGlvdICRmYhnYniJjYqDiaKypodmVVNXYHN7dIGnvbCQcml4iYl4aWpzd3h7 - g5Gio3tQUnGKkIJzfqCypodqW1ljdYJ7dYeir6SGaWJrdXZ1fY2Rhn19f4iYoJJzU0pfeH94cHmavMKr - h2pkbHBsY1tlh6aploF4fYR+cnB7i5OKd21xgJSdlIFvX15udnBrdJCwv7KVeW5uaWBaXGd/nbCrk3xz - dHV2d3qAhoN5dX2JkZSPiIaDb04/UGqAlaSuvL+ri3BdTEVQZ3mCjpuemIyEhoyLgXZxdHNtbHWEmKme - aTxKdZGViH6Vv8unc1BFS15vb2h4nrSwlXVzkquhelRMXW55g5CYhmBXdIuOiYSNr8WxiGJOS1FWXWd0 - kLG+qol7jaOihl9HUGRxfIyTeFNeiKGhloyYuMCca0w+PkpZaXN7msLUwJJ1gZeTc0s4SGN5k6iVYlB1 - n6mYgoGgwrmGVkE+R1lrdnqJq8nKp3lqe4uDaVFQZHN+jZqioYNfYHR9gYOBkq2wmnpfU1FVaIGFhZ21 - sZd2YWJzhId9d3d1d4ORnqaTXzxPdImHeXeWws2re1hJT2N3eW1ylLO4nXJVYYKVkoJ0c3p+f4OLlZJy - UFRtgoyGfYytu6iEZVdWYHB6d3qPo6maeF1edY2Xj4F6eXp8fXyCk5+UcEhDX3Z+hI+jvsq3kGpQRkxa - anR5iqKpmYJ4gZGWi3xzcGtlZ3KEnKyZYUBXfpGUiIKdwL6ZbE1CSl9wdXmMoaeeiHqKpaiPaEtLX3F/ - kZ+KWkxylJaLhI+30rmCVUNCR05cboCctryrjHyOpqB9VUBMZHKAlpRlSnCfrKGPiKLFuoRRQT43PVd9 - m6y1tK6di4yWi2xJOkpsiJyWZjpWmsC7m3+TxMiUVjMvPVJia22Es9bXtId2iZqHWTExUXKImqaMW1uM - raSNfoy1wphdPTtIV2NweIGjydO4iWt5k45sQzJMcIOXr6d4WGyPmYl2d5e+u4ldT05RXGt3fYupw8Kg - cFtvh4dyXl1rdXuJmKSvnmhJWnB9hn55lLO1mnRbUlVqhIh7hJylmn5hW3KRopmBbWdsfpKdl3tSRWaI - joJ1fabPyZhlTEtZa3Nwbn+iuq6IYllykpyNenBzeXd0eYieqpdmQUlrg4V/haLEw6B4XlFSY3NzbHWP - o6GJc3qUpJ6Fa2Nrbmxyf5KjlGBCWXuOlZOYtMizhl5JQUZUZ3J9mLGxoYyAjKCdf15MUWFsdIKarZxs - V2uAiY+QlKy4nnRYSj8/V4SlppaMkJeZm5eJdmNUVmd5jJd1QEuIrqych4+70KptRjw5PE9tgYycr7q0 - oZaXlIFdOjlYdIiVfUxRi7W6poqLtsqkZzwvMD1ZeoyMlKi7vKyblZF9WTk1UXWJelFKea/IxaqSosCy - e0QnJDlUZ294lcHf0qWEhZKSeUwqMlRxh5mYd2GBqrGdh4Sfu6p1RDZAUWBnanaey9a+lXJ4l5p7UTdA - XnSDlaOTbmeInI9/f46tvqBrT05SVFxrd4KbusOwinB5kZFzVE1ecHV5h5uqnnRcaXuGj4yHlqWbg2lU - TlZnfIaGlK61n39rbHeBgnlvbGxwgpaio45kT2WAiIF1eZm4t5ZtU1Jebnx+eYSjtKWAXVVsjJeKeHF4 - hIeAfoeYn4pfQkxofoiJj6jDvpt0XFNWXWlydH2Top6MfH2Pm5N8aWlvcXF0fZKnm2c/T3iQlZGSp722 - kWZMQ0dZbniAlayqloR7hZqeh2ZWXWtwcXiIorGSWk1mfo6VjZGstZhwVktLVnKTno58e4iWmZSSjoV0 - Y19pd4SRg1ZHcJWakoiPtNC7hltKREFMZHqDjp2nqJ+VlpmQd1hKVmp4hI12UFyOq6aWipW1vJhlSEFG - VGVzfYKPo7OyoZWVkoFgQj9WcYeWhllUiLOwmIKGrMasckU6RVdiZmh3mru/rZKFk6adckY5SVxoc4eg - nn94j5mRioWInKSLaFVSVVtmdH+SrLmyl3Nsh5uRdFNKX3F1eoWZsKx+WF5zgIeEgpSrqZFzWUpPYXOA - ipyvr5h5aniLjX1pYWl1enl6hJmxsolSQ1x5hH54irDBrIJfUVNecoKDhpaloopuZHKFjId8dXZ3dHmE - jpejoXxKQGF7fnyAkbPErIVqXFlga3J0fJCkpI90anmMkINzcnt9d3Z6gYuZoZp/WEZYcHuBhZGrvLGU - dmFZXmhvcneDkpiPf3qGlpiLe3BtbXF1eYCNnKCFV0ZgfoqKiJKtvaqDZVdSVWFve4iWnp6RgH6NlY15 - ZFxod3l3eoOTpKyheEdBYXmBhYaSrbmlg2dYVmJ7j49+bWl2iZOaoJySgW5na25yfYqPgGFWbIGGiZCd - tL+qgmBTUVJZa3yHjpCPj46RnqWagmhaXGRnbHmOnY5uZnqKkZKMkKOplXVaTEtWa4GOkZOVlY+Hi5SU - inReW2VsdoeVkHVhb4aMh4SJnraykXBcUU1SYnJ/kaWroYx6gJOYhm9fYW5ycXWBkqaieVNadIaNi4iX - ra2TcVZJTmBzgIqcqKGOe296j5eJc2Jjcn59en6NoKWIXEladYeMjJSnsKKGaldQV2h4gIiapJuIeXeC - jYp8bWlvd3t+gIOLlp6djmtJSWN3gIWKlq23poVsY15eaHZ6fImWlo+EeXqEioeCfHNwc3l+gYaOlJOJ - cFZXaHR+ipSgra2cgmtdVVZidH2Fl6aklYV4dXt/enNycnJ3gYiOkZGNi4yMflo9RmaClZyYobGwmHtj - U1BccYCDg4qUm5WDeXyFi4Z3a2hrdoOKiYmNlZqSc0tBW3yNk5GSoq+jhGlcWF9xgoWDiY6Oi4WBhYiC - d25tc3yBhYaFh4uPkY98Vz9Sc4iUl5Ocr6+UdF1RWXaPj3tmZXmQlZCPk5WPgXFqbHB3f4GEjYxuUldu - gpWkqKuuooVpWU5IVXaQk4qFhYyVlpWTi31wZ2RmaG9+j5qdjm5daXuDiYyRoauZc1tdaG91e36AiZCO - hoGDjpaRgGtjbHh6eXyIlpFwWWR4hY+TlaKsoodrV01NXHaKj5KXl4+Hho2Sjn9tYmNmaXOBjZypnHRa - YnJ+hISIm6ykiW1bVlljdYaTn6GYh3RvgJCOgG9kZ3R9f4CGj5umoX9SQVZve4KJlai1rJBzYVpbZnV9 - gIiUmZOFenyFiIB2c3NxcnqCh4yQkI6MiYV0U0NWcYWUmJair6qUe2RUVGN0fHp7iZqgloR6foiKgHBo - aHF9hoiEhIqRlpOAXUZUdouOiIeWq66YeGJYWmh6gX5/jJyhlH1tbXmHiHxxbXB7iY+Lh4mKhX5+hohz - UUpkgZGUjo6eq6WOdGBYXWx8fnZ6jp+fjXh0gIuKfW5pbXeCiomDg4iNj46GcFBJY36KjY2SpbGmjHBe - WF1qeX57f4uXmo+DgYaIgXNrbnN2fIGCgYOIjI6Rk4hmS1NwhYuIiJapqZV8Z1tdb4eTiXdsdIePioeK - j46Edm9ucHV6foGIlpyJYExdeo+Yl5GYoJiAaFlTXXeTnZF/d4KOi4KChIR/dWxscXiCjZCOkZiPbEtM - Y3yQmJWYoJyLeXFtbHJ8gHlwb3uJi4mPlpWOgHJwc3N0eoKJjX5hV2l+i5OYnaepl3xoXFddaXZ+g4iQ - lZGJh4yRjoBvZmlucnd7g5Ghn4BcWGyAiomFjp+jlH5tYFthcICLkpOPioF4fIqQiHptanN8fn6ChoyU - mI1wUU5lfIiPkZajqp2DbFxVWmx+hYSLmJ+bjHt0eXx5dXNvbXSCjpKRj42HgHx+g3xfSFV2jZWTj5em - qZqBaVpVX3R/eXaClqSfinp8homAcmdjaXiGiYeGi5GUkY2GcVNKYHmCg4WPoq2kkHxuZWVteH14eIWT - lIl6dHyKkIyCd29scnyCg4OGiISBgYaMj4NjTVt1hImIhZOqsaCGbFpZZ3V5c3KDm6SYgXN4iZOMe25m - aHSAgoCBipOUjomJhW5RTGJ5hoyOlKKpoY97a19danl6c3aGlZiOgX+HkpKHeGpiZHB6fYCHkJSSioKA - houJgG1TSl96homKlKm5sZR2Y1xcZG91dnuFkZeRiIyVkoRzZmVqcXZ8gYaLkZWam4xmRktnfYeJh5Oq - saCGb2BbZnqEfXJzgZGVjYeKjIqAcmxvdHuAgHx8g46Wlo1yVFNvho+NhoufpZB0ZmVue4J/eHV9i5WR - gXh+iIuBcGlzgIaEgX+FkZmTc0pFZoaSk46RoaqZfGdgZW51eXh2f4+ZlYd/ho+NfWhhbHl9fn6BiJKa - nJBvT09rgoiEgYyjrJ6Fb2JgaHV+f36Fj5CJf36HkY5+bmhrdX6Bfn6EjpSVj4JrV1pufoWGh5CfpZmD - cGRiaHV/gH2DkpuUgnV0fYeJgnhybm91f4aJjJCQh3x2eX+Fh4FwXVttgIiHhY+ntquPcmBbX2Vqa218 - laimk4ODjZKHdWVfYmhvdn6Jl6Kil4d8en6Ae29dT1l0h4yMjpistqiKcGJeYGRoaWt5kKCil4eDjJaT - hHRnYGBjaG57jZ2jnpSNiYV/d3Bsa2lgW2h9jJWdoqiroo54Z1pWWmFpcHyPoKehl5CKhHpvam1vbm1v - dYGOmJuXkIiDfnhzb21xeH19dW52iJOVko+QlZOGdWdfXmRveH6FkZ6moZGBeHVybm1wdXp+goSFiI2O - ioR+e3p6eHh4eXt+gYSJj4x6ZWV3hoqIhYmVmpB9bmViaHWCh4eJjpKOg36EiYd+cmxtcHN5f4OHio2O - ioSDg4B7dnN1eoCAdGNkfJGYlo+OmJ+UfmldXGJud3p8hpWgn5KHhYmIfGpeX2hxeH2CipWdnJKGfnx7 - dnFub3FsaHKEkJSVlJifmol3a2RiZGtzeX+Ik5qXkIyMi4R3amZpbG90e4OKkJOSj4uIg312b2tudHqA - fXNxgZOZlo6IjJKMfGxiYmhxeX5/hJGhpJeGfHt9eW5mZ295gIKChYySk4+GfHl7e3h1cHB3gIeMjIFy - c4KLiYN+gIyTjH1xbW9zd3p7e4GQnJyPgHp6fHhua3N9goKBgYWMkY+If3l4d3Vxb3J7hYmIhoaKjYyH - gHt5eHFkY3GAiY2NkJiclId7cWtqbXFzdX2JlJaPh4OChIF5dXh4dXR0d3+HjZCQi4aAe3h1cXB1en6B - hIaIjI2Lh4J+fHx0Z2JsfYeKioyUmpeLfnVvbG1wcnJ2gZCXk4mEhYaEfHRzdnp9fHt6fIGHiomIh4eF - f3hycXN4fX+AgoWJioiGg4GBfnl1dXd8gH95d3+Jj4yGgoWJiIB2cG90eXt9fYCHkJKMhH9+f314c3N3 - fYGDg4KDhYeGgn18foCAfHd4fICCgoKDhYWDgH16en2Af319foCCgoGBgoSEg4B/fXl0dHl/goSGh4qL - h4N+eXZ2eHp8fX+Dh4iFgoCBgYB9ent9f4CAgH9/f4B/f3+BgoOEgn59f39+fHx8foCCg4KBgoOBf359 - fH5/f39/gIGCgH9+fn5/f4CAgICBgYGAgIB/fXx7ent9gYWHh4eHhoN/e3d2d3l7fH+EiIqJhoJ/fn19 - e3p6fH+AgH+AgYKCgoCAf4CAf359fX5/f39+f3+BgoODgoKCgH57e3t9fn+AgoOEhISDgX99fHt6eXt+ - gIKDg4OEhYOBf318fHx7e3t8foGDhIWFhYWFg4F+e3l4eHl6fH+ChYiIh4WDgX99enh5e31/f35/goSF - hIKBgH9+fXx8fH5/f39/gIKDgoGAf39/f39+fn5+gICAgIGBgYGAf4CAgICAf35/f4CAgICAgIB/f39/ - f4B/f35/gICBgYGBgIB/fn5+fn5+f4CAgIGCgoCAf35+fn5/f4CAgYGBgYGAgH99fHx9f4CBgoKCgoGA - gH99fHx8fX5/gYKDg4KBgIB/fn19fX1+f4CBgYGBgYCAf35+f4CAf3+Af39/fn1+f4CBg4SDgoF/fn18 - fH1+foCBgoKCgoKCgH9+fn5+fX1/gICAgIB/gIGBgYB/f4CAgH9+fn5/f3+Af4CAgYGAgICAgH9/f3+A - gIB/f35+fn5/gIGBgYKBgYB/fn5+fn59fX6AgYKCgoGBgYB/fn59fn+AgICAf39/gICBgYGBgH9+fn19 - fn+AgIGBgYGAgH9/f39/f3+AgICAgICAgIB/f39+f39/gIGBgYGAf35+fn5+f4CAgICBgYCAf39+f3+A - gICAgICAf39/gICAgH9/f4CAgIB/f39/gICAgIB/fn5/f39/gICAgICAgYGBgH9+fXx8fX5/gYKDg4KC - gYB/fn59fH1+fn+BgoKCgoKBf35+fX19fn5/gIGBgYGAgICAgIB/f39/f35+fn+AgYGCgYGBgYB/fXx8 - fX5/gICBgoKCgYGAf35+fX19fX6AgYGCgoKBgH9+fn5/f3+AgIB/f39/f4CBgYGAf39/f39/f4CAgIB/ - f39/f3+AgICBgYB/f4CAf39/f39/fn5/gIGBgoGBgH9/f35+fn5/gICAgIGBgICAf39/gICAgH9/f4CA - gIB/fn5/f4CAgYGAgICAgICAf39+fn5+f4CBgoGAf35+f3+AgYGBgH9/f39/f39/f39/gIGCgYGAgH9/ - f39/fn19fX6AgYKDgoKBgH9/fn5+fXx8fX+AgYKDg4KBgIB/f359fX19fn+AgoODgoF/f39+fn5+fn5+ - f4CBgYGBgIB/f3+AgIB/fn1+f4CBgYGBgYGBgIB/f359fHx9f4GDhISDgoB/fn18fHx8fX6AgoOEg4OB - f35+fn19fX1+fn+BgoODg4GAf35+fn5+fn9/f3+AgYGBgYCAf39/f39/fn5+fn9/gIGBgIB/gICBgYB/ - fn5+fn5/gICBgYCAgICAgICAf35+f39/f39/gICAgYGBgIB/fn5+fn+AgICAgICAgYGBgYB/fn1+f3+A - gICAgYGAgIB/f35+fn9/gIGBgIB/f3+AgICAf39/f39/f39/f4CAgICBgYCAf35+fn9/gICAgICAgH9/ - f39/f39/gICAgIB/f39/gICAgYCAf39/f39/f39/f3+AgICAgIB/f35/f39/gICBgYGAgH9/f39+fn9/ - gICBgYGBgYB/fn5+fn5/f4CBgYGBgH9+fn9/f39/f4CAgYGAgICAgH9/f35+f3+AgICBgYGAf39/gICA - f35+fn9/f39/gICAgYGBgYGBf359fX1+f3+AgICBgYGBgYCAf39+fn5/f39/fn+AgICBgYGBgH9/f39/ - f39/f39/gICBgYGAf35+f4CAgICAf39/f4B/f39/f3+AgIGBgYB/fn5/f39/f3+AgICAgIGAgIB/f39/ - gIB/f35+f3+AgICAgICAgICAgIB/fn19fn+AgYGCgYGBgH9/f35+fn5/f4CAgYGBgH9/f4CAf39/f3+A - f3+AgICAgICAgICAf39+fn5+f3+AgICAgICAgYCAf39+fn5/gICAgICAf39/f4CAgICAgIB/f39/f39/ - f3+AgICBgYCAgH9/f39/f39/f39/gICAgIB/f3+AgICAf39/f39/f4CAgICAgH9/f3+AgICAgICAf39/ - f39/gICAgIB/f39/f4CAgYCAf39/f4CAgICAgIB/f39/f3+AgICAgICAgH9/f35/f3+AgICAgICAgICA - f35+fn5/gICAgIGBgYGAf39/fn5+f3+AgIGBgICAgICAf39/f35+f3+AgICAgIB/f3+AgICAf39/gICA - gIB/f39+fn5/gICAgICAgYGBgH9/fn19fX5+f4CBgYGCgYGAgH9+fn5+fn+AgICAgIGBgYGAgH9+fn5/ - f4CAgICAgH9/gICAf39/f39/f4CAgICAgIB/f39/f35+f4CAgYGAgICAgH9/f39/f39/f4CAgYGBgICA - gIB/fn5+fn9/gICAgICAgICAgH9/f35+fn5/gIGBgYGAf39/f39/f4CAgICAgH9/f39/f3+AgICAgH9/ - gICAgICAgH9/f39/f39/f39/gICBgYCAgICAf39/f39/f3+AgICAgYGAgICAf39+fn5/f3+AgIGBgICA - gICAf39/f39/f3+AgIGBgIB/f39/f3+AgH9/gICAgIB/f39/f39/gICAgICAgICAgH9/f39/f3+AgICA - gICAgH9/gICAf39/gIB/f39/f39/gICAgIB/f39/f39/f39/f4CAgIGAgH9/f39/f39/gICAgICAgIB/ - f35+fn9/gICAgICAgIB/f39/f39/f3+AgICAf39/f3+AgICAgIB/f3+AgH9/f39/gICAgH9/f4CAgICB - gIB/fn5/f4B/f39/f4CAgICAf39/f39/gICAgIB/f39/gICAf39/gICBgYCAgH9/f39/f39/f4CAgICB - gYCAf39/f39/f39/f39/gIGBgYGAgICAf39/f35+fn5/gICBgYGBgYCAgH9/fn19fX5/gIGCgoKBgYGA - f35+fX19fn+AgYKCgYGAgICAf39+fn5+f3+AgYGBgICAgICAgH9/f39/f3+AgICAgICAgICAgH9/f39/ - gICAgIB/f39/f3+AgIB/f3+AgICAgIB/f39+fn9/f4CAgICAgYGAgH9/fn5/f39/f3+AgIGBgYCAgH9/ - fn5+f3+AgICAgICAgICAgH9/f39/f3+AgICAgICAgICAgH9/f39/f39/f39/gICAgICAf39/f39/f39/ - f4CAgIGBgIB/f35+fn9/gICAgICAgH9/f39/f39/f3+AgH9/gICAf39/f4CAgICAgH9/f39/f39/f4CA - gICAgIB/f39/f4CAgIB/f39/f39/f3+AgICAgIB/f39/f39/f4CAgICAgICAgH9/f39+fn9/gICAgICA - gICAgICAgH9+fn5/f39/f4CBgYGBgYCAf35+fn5/f39/f4CBgYGBgYCAf39+fn5+f39/gICBgYGBgIB/ - f35+f39/f3+AgICAgICAf39/f39/gICAgICAgH9/f4CAgH9/f4CAgIB/f39/gICAgIB/f39/f39/f4CA - gICAgICAf39/f39/f4CAgICAf39/f39/gICAgICAgICAgH9/f39/f39/f4CAgICAgICAgIB/fn5+f39/ - f3+AgIGBgYCAgH9/fn5+fn5/f4CAgIGBgYCAgH9/fn5+f39/gICAgICAgICAgICAgICAf39/f39/f3+A - gIGBgYCAf39/fn5+f3+AgICAgICAgH9/f39/f39/f4CAgICAf39/f4CAgICAgICAgH9/f39/gICAgIB/ - f39/gICAgH9/f39/f3+AgICAgICAgICAgIB/f39/f3+AgICAgICAgH9/fn5+fn9/gICAgICAgICAgH9/ - f35+f3+AgICAgICAf39/f39/f39/gICAgICAf39/f39/f4CAgICAgIB/f39/f3+AgICAgIB/f39/gICA - gICAgICAf39/f39/gICAgICAgH9/f39/f39/f39/gICAgICAgH9/f39/gICAf4CAgICAgICAgH9/f39/ - f3+AgICAgICAgIB/f39/fn9/f3+AgICBgYGAgIB/f39+fn5+f3+AgIGAgICAgIB/f39/f39/f3+AgICA - gICAgICAgICAgH9/fn5+fn+AgICBgYGAgIB/f39/f39/f39/f4CAgICAgICAgH9/f39/f39/f3+AgICA - gICAgH9/gICAgICAgIB/f39/f39/gICAgICAgICAf39/fn5+f39/gICAgYGAgH9/f35+f39/gICAgICA - gH9/f39/f39/gICAgICAgICAf39/f39/f39/f3+AgICAgICAgH9/f39/f39/f4CAgIGBgIB/f39/f39/ - f3+AgICAgIB/f39/f39/f4CAgH9/gICAgICAgICAgICAf39/f3+AgICAgICAgIB/f39/f39/f4CAgICA - gIB/f39/f4CAgIB/f39/f39/f3+AgICAgICAgICAf39/f39/f3+AgICAgICAgIB/f39/f39/f39/f39/ - gICAgICAgH9/f39/f39/f39/f3+AgICAgICAf39/f39/f39/f3+AgICAgICAgICAf4CAgH9/f3+AgIB/ - f39/f3+AgICAf4B/gIB/f39/f39/f3+AgICAgICAgICAgH9/f39/f3+AgICAgICAgH9/f39/f39/f4CA - gICAgICAgICAf39/f39/f39/f4CAgICAgICAf39/f39/f39/gICAgICAgIB/f39/f3+AgICAgICAf39/ - f39/f3+AgICAgICAgH9/f39/f39/gICAgICAgIB/f3+AgIB/f39/f39/f39/gICAgICAgIB/f39/f39/ - f3+AgICAgICAgIB/f39/f39/f39/gICAgICAgIB/f39/f39/f39/f3+AgICAgH9/f39/f39/f3+AgICA - gH9/f39/gICAgICAf39/gICAgH9/f39/f4CAgICAgICAf39/f39/f4CAgICAgIB/f3+AgICAgICAgICA - gH9/f39/f3+AgICAgICAgH9/f39/f3+AgICAf39/f4CAgICAf39/f39/gICAgH9/f3+AgICAgICAgICA - f39/f39/gIB/f39/gICAgICAgIB/f39/f39/f4CAgICAgICAgICAf39/f39/f3+AgICAgICAgIB/f39/ - f39/f39/gICAgICAgICAf39/f39/f39/gICAgICAgICAgICAf39/f39/f3+AgICAgICAgICAgICAf39/ - fn9/gICAgICAgICAf39/f39/f39/gICAgICAgICAgIB/f39/f39/f3+AgICAgICAgH9/f39/f39/f4CA - gICAgH+Af39/f39/gICAgICAgIB/f3+AgICAgIB/f39/f39/gICAgICAgICAf39/f39/f39/gICAgICA - gIB/f39/f39/f4CAgICAgICAf39/f39/gICAgICAgH9/f39/f39/f4CAgICAgH9/f39/f39/gICAgICA - gICAf39/f39/f4CAf39/gICAgICAgH9/f39/f39/f4CAgICAgICAf39/f39/f39/gICAgICAgICAgIB/ - f39/f39/f3+AgICAgICAgH9/f39/f39/f3+AgICAgICAgH9/f39/f39/f4CAgICAgICAf39/f39/f3+A - gIB/f39/f4CAgICAgIB/f39/f39/f4CAgICAgH9/f4CAgICAgH9/f39/f4CAgICAgICAgH9/f39/f39/ - gICAgICAf39/f39/f4CAgICAgICAgH9/f39/f3+AgICAgICAgIB/f39/f39/f3+AgICAgICAgH9/f39/ - gICAgICAgH9/f3+AgICAgICAgH9/f39/f39/gICAgICAgICAgH9/f39/f39/gICAgICAgICAgICAf39/ - f39/f39/gICAgICAgH9/f39/f39/f39/f39/f39/f4CAgICAgICAf39/f39/f3+AgICAgICAgIB/f39/ - f3+AgICAgH9/f39/f3+AgICAgICAgH9/f39/f39/f3+AgICAgICAf39/f39/f39/gICAgICAgH9/f39/ - f3+AgICAgICAgICAf39/gICAgICAf39/f39/f3+AgIB/f39/f39/f39/gICAgICAgH9/f39/f3+AgICA - gICAgIB/f39/f39/f4CAgICAgICAgH9/f39/f3+AgICAgICAgICAgIB/f39/f39/f39/gICAgICAgIB/ - f39/f39/f39/gICAgICAgH9/f39/f39/gICAf4B/f39/f4CAgICAgH9/f39/f39/f3+AgICAgICAf39/ - f39/f39/f3+AgICAgICAf3+AgICAf39/f39/f4CAgICAgICAgIB/f39/f39/f4CAgICAgICAgH9/f39/ - f39/f3+AgICAgICAgIB/f39/f39/f39/f39/f4CAgICAgICAgIB/f39/f39/f4CAgICAgICAf39/f39/ - f3+AgICAgICAgIB/f39/f4CAgICAgH9/f39/f4CAgICAgICAf39/f39/f3+AgICAgICAgH9/f39/f39/ - f4CAgICAgICAf39/f39/f39/gICAgICAgH9/f39/f39/gICAgICAgIB/f39/f39/f39/gICAgICAgH9/ - f39/f39/gICAgICAgIB/f39/f3+AgIB/f39/gICAgICAgICAgH9/f39/f39/gICAgICAgIB/f39/f39/ - f4CAgICAgIB/f39/f39/f39/f4CAgICAgICAgH9/f39/f3+AgICAgH9/f4CAgH9/f39/f4CAgICAf39/ - f4CAgICAgH9/f39/f39/f39/gICAgICAf39/f39/f4CAgH9/gICAgH9/f39/gICAgIB/f39/f39/gICA - f3+AgICAgICAf39/f39/f39/f4CAgICAgIB/f39/f39/f39/gICAgICAgIB/f3+AgH9/f39/f4CAgICA - gH9/f39/f4CAgIB/f4B/f39/f39/f4CAgICAgICAf39/f39/f3+AgICAgICAgIB/f39/f39/f4CAgICA - f4CAgIB/f39/f39/f4CAgICAgICAgICAf39/f39/f4CAgICAgICAgIB/f39/f39/f4CAgICAgICAgH9/ - f39/f39/f39/f4CAgICAgICAf39/f39/f39/gICAgICAf39/f39/f39/gICAgICAf39/f39/gICAgICA - gH9/gICAgIB/f39/gICAf39/gICAgICAgIB/f4CAgH9/f39/f4CAgICAgH9/f39/f39/f3+AgIB/f39/ - f3+AgICAgICAf39/f3+AgICAf4CAgICAgH9/f39/f39/f39/gICAgIB/f39/f4CAgICAgH9/f39/f4CA - gICAgICAgIB/f39/gICAgICAgICAgIB/f39/f4CAgICAgH9/f39/f39/f4CAgICAgIB/f39/f39/f3+A - f39/gICAgIB/f39/f4CAgICAgICAgH9/f39/f4CAgICAgH+AgICAgICAgIB/f39/f39/f39/gICAgICA - f39/f39/f3+AgICAgIB/f39/f39/f3+AgICAgICAgH9/f39/f39/f4CAgICAgICAgIB/f39/gICAgIB/ - f3+AgIB/f39/f39/f39/f4CAgIB/f39/f3+Af39/f3+AgICAgICAgICAgH9/f3+AgH+AgICAgH9/f39/ - gICAgICAgICAgH9/f39/f39/f39/f4CAgICAf39/f4B/f39/f39/f3+AgICAgICAgICAgH9/f39/f3+A - gICAgICAgICAgIB/f39/f39/f4CAgICAgIB/f39/f39/f4CAgH+AgICAgIB/f4CAf39/gH+Af39/f3+A - gICAf3+AgICAgH9/f39/f39/f39/gICAgICAgICAf39/f39/f39/f4CAgICAgIB/f39/f3+AgH9/f4CA - gIB/f39/gICAgICAf39/f39/f39/f4CAgICAf4CAgICAf4CAgH9/f39/f4CAgICAgICAgICAgH9/f39/ - f39/gICAgICAgH9/f39/f39/gIB/f3+AgICAf3+AgICAgICAgH9/f39/f4CAgICAgH9/f3+AgIB/f4CA - gICAgH9/f4B/f39/f39/f3+AgICAgICAgH9/f39/f39/gICAgICAgH9/f39/gIB/gICAgIB/f4CAgH9/ - f3+AgICAgH9/f39/f39/gH9/f3+AgICAgICAgICAf39/f39/gICAgIB/f39/f39/f39/gICAgICAgH9/ - f39/f4CAgICAgIB/f39/f39/gICAgICAgH9/f39/f39/f4CAgICAgICAgH9/f39/f4CAgICAgICAgIB/ - f39/gICAgICAgH9/f39/gICAgICAf39/f39/f39/f4B/f39/f39/f39/f39/f39/f4CAgH9/f39/f39/ - f39/gICAgICAgICAf39/f3+AgICAgICAgICAgICAgIB/f4CAgICAf39/f39/gICAgICAgICAgH+AgH9/ - f39/f4CAgICAgICAgICAf39/f39/f39/f4CAgICAgICAf39/f39/f39/f3+AgICAgICAgICAgIB/f39/ - f3+AgICAgICAgIB/f3+Af39/f39/f4CAf39/gICAgICAgH9/f39/f39/f3+AgICAgICAgH9/f3+AgH9/ - f39/f4CAgICAf3+AgICAgH9/f39/f39/f3+AgICAgIB/f39/f4CAgICAf39/gICAgIB/f39/f39/f39/ - f39/f4CAgICAf39/f39/f39/f4CAgICAgH9/gICAgIB/f3+AgICAf39/f4B/f3+AgICAgICAgIB/f39/ - f39/gICAgIB/f39/f39/f39/f4CAgICAgIB/f39/f39/f4CAgICAgH+AgICAgICAgH9/f39/gICAf3+A - gICAf39/f3+AgICAf39/f4CAgICAf39/f4CAf39/f4CAgICAf3+AgICAgICAgH9/gICAgICAgIB/f39/ - f4CAgH9/gICAgIB/f39/f4CAgIB/f4CAgICAgH9/gICAgIB/f39/f39/gICAgICAf39/f39/f39/gICA - gICAgH9/f39/f39/f3+AgICAgIB/f39/f3+AgH9/gICAgIB/f3+AgICAgH9/f39/f39/f39/gICAgICA - gH9/f39/f4CAgICAgICAgH9/f39/gICAf3+Af4CAgICAgIB/f4CAgICAgH9/f39/f39/f3+AgICAgIB/ - f39/f39/f39/f3+AgH+AgICAgICAf39/f39/gICAgICAgICAgICAf39/f4CAf39/f39/gICAgICAgH9/ - gIB/f39/f39/f39/gICAgICAgICAf39/f39/gICAgICAf39/gIB/f39/f3+AgICAgICAgH+Af39/f3+A - gICAgICAgIB/f39/f4CAf39/f4CAgH9/f39/f4CAgIB/f39/gICAgH9/f39/f4CAgICAgIB/f4CAgIB/ - f39/f4CAgICAgICAgICAgH9/f39/gICAf39/gICAgICAf39/f39/f39/f39/f4B/f39/f39/f3+AgICA - gH9/f4CAgICAgICAgICAgIB/f39/f4CAgICAf39/f3+Af39/f3+AgICAgH+Af4CAgH9/f39/f39/gICA - gICAf4CAgIB/f39/f4CAgH9/f4CAgICAgH9/f3+Af39/f39/gICAgICAgH+AgICAf4CAf4CAf39/f39/ - gICAgICAgIB/f39/f39/f39/gICAgH9/f4CAgICAf39/f39/gICAgICAgICAgH9/f39/f39/gICAgICA - f39/f39/f39/f4CAgICAgICAgICAgH9/f39/f3+AgICAgIB/f39/f4CAf39/f3+AgICAgH9/f4B/f3+A - gICAgICAgH9/f39/f3+AgH9/gICAgICAf39/f39/f3+AgICAgICAgICAf39/f4CAgH+AgICAf39/f3+A - gH9/f4CAgICAf4CAgH9/f39/gICAgICAgICAf39/f39/f39/f4CAgICAgICAgH9/f39/f4CAgICAgH9/ - f4CAgICAf39/gIB/f39/gICAgICAgICAgH9/f4CAf39/f3+AgICAgICAgIB/f39/f39/f3+AgICAgICA - gICAf39/gICAf39/f4CAgIB/gICAf39/f39/f39/gICAgICAgH+AgH9/f39/gICAgH9/f4CAgIB/f4CA - f39/f3+Af39/f4CAgICAgICAgIB/f3+AgICAf39/f39/gICAgICAf4B/f4B/f39/f4CAgH9/f3+AgIB/ - f39/f39/f4CAgIB/f3+AgICAf3+AgIB/f39/f39/f39/f4CAgICAgICAgH9/f39/gIB/f4CAgIB/f3+A - gICAf3+AgICAf39/f4CAgH9/f4CAf39/gICAgH9/f3+Af39/f3+AgICAf39/f4CAf39/f3+AgICAgICA - f39/f3+Af39/gICAgH9/f4B/f39/f3+AgIB/f3+AgICAgH9/gICAf39/f3+AgICAgICAgH9/f3+Af39/ - f39/gICAf39/gIB/f3+AgIB/f39/f4CAgH9/gICAgIB/f4CAgH9/f39/f39/f39/gICAgICAgICAgH9/ - f39/f39/f4CAgICAgICAgICAf39/f39/f3+AgICAgIB/gICAgH9/f39/f3+AgICAgICAgH9/f39/f39/ - gICAgH9/gICAgH9/f39/gH9/f39/f3+AgICAgICAf4CAf39/gH9/f4B/gICAgICAgICAgH9/f39/f39/ - gICAgIB/f39/gICAgH9/f39/f39/f3+AgICAgICAgIB/f39/f3+Af39/gICAf3+AgICAf39/gIB/f39/ - f4CAgICAgIB/f39/f39/gICAgICAgICAf39/f39/f39/f3+AgICAgICAf39/f3+Af3+AgICAgICAgIB/ - f39/f4CAgH9/f3+AgICAf39/f3+AgIB/f4B/f3+AgH9/gIB/gICAf39/gICAgH9/f4CAgH9/f3+AgIB/ - f39/gICAf4B/f3+AgICAgICAf3+AgICAf39/gICAgIB/gICAf39/f39/gICAgH+AgICAf39/f3+Af3+A - f39/gIB/gICAf3+Af39/f39/f4B/gICAgICAgH+AgH9/f39/gH9/gICAgICAgICAf39/f39/f3+AgICA - gICAgICAf39/f39/f39/gICAgICAgH+AgH9/f39/f4B/f4CAgIB/gICAgIB/f39/f3+AgH9/gICAgIB/ - f3+Af39/f3+AgICAf4CAgICAgH9/gICAf39/f4CAgH9/gIB/f39/f3+AgH9/f3+AgH9/f3+AgICAgICA - gICAf39/gICAf39/f4CAf39/gICAgIB/f3+Af39/f39/gICAgICAgIB/f39/f4CAf39/gICAgH+AgH+A - gH9/f39/gH9/gICAgICAf39/f39/f3+AgICAgICAgICAgH9/f4CAf39/f4CAgH9/f3+AgICAf3+AgIB/ - f39/gICAgH+AgICAf39/gIB/f39/f4CAgIB/f39/f3+Af4CAgH9/f3+AgIB/f4CAgICAgH9/gH9/f39/ - gICAf3+AgIB/f39/f4CAgIB/f4CAgICAgH+AgH9/f39/gICAf39/f4CAgH9/f4CAgH9/gIB/gIB/f4CA - gICAf39/gICAgH9/gIB/f4B/f39/f3+AgICAgH9/f4CAgIB/f39/gICAgH9/f39/f4CAgICAgH+AgH9/ - f39/f3+AgIB/f4CAf4CAgH9/f39/f3+AgH9/f4CAgICAgH+Af3+AgH9/f39/f4CAgH9/gH+AgICAf39/ - f39/gICAgICAgIB/f4CAf4CAf3+AgH+AgICAgICAf3+AgH9/f4CAgICAf39/gH+AgH9/f39/f3+AgICA - gIB/f4B/f4CAf39/f4CAgH9/f4CAgH+AgH9/f39/f4CAgICAgICAgICAf4CAf3+AgH+AgIB/gH9/gICA - gH9/f4CAf3+Af3+Af39/f4CAgH9/f39/gICAgH9/f4CAf3+AgH9/gICAgICAgICAf4CAgICAgH9/f4CA - f4CAgICAgH9/f39/f3+Af3+AgICAgIB/f4B/f39/f39/f3+AgICAgICAgIB/gICAf39/f4CAgIB/f39/ - f3+AgH9/gICAgICAf39/f39/f4CAgH+AgH9/gH9/f4B/gICAgICAgICAf4CAf3+Af39/gICAgIB/f39/ - f3+AgIB/gICAgICAgICAf39/f4CAf39/f39/gICAf3+AgICAgH9/f39/gICAgH9/gICAgH+AgIB/f39/ - f4CAgIB/f4CAgIB/f3+AgICAf39/gICAgH9/gICAf39/gICAgICAgICAgICAgH+AgH9/f39/f4CAgICA - gICAf4CAgH9/f35+f39/f4CAgYGBgYGAf39/gH99eXh6f4OEg4ODhYaFgn98enp7fH5+fX6AgoODgoB/ - f4CAgIB/f35/gIB+fXx9foCBgYCBgYKCgoF/fn1+f39/fn5/gIGBgYB/f4CAgYGAgH9/gIB/fn5+fn+A - gICAgIGBgYGAf35+f39/f39/f4CAgIB/f3+AgICAf3+Af39/f39/f39/gICAgICAgICAgH9/f4CAf39/ - f3+AgICBgYGBgH59fX19fn9/gICBgYGCgYGCg4ODgHZsbnmDiIqGhIWHhYOCgX59gIB9d3JzeX+Cg4OD - hIWGh4WDgH59f4KCeGdhbXyHi4iFi5SXkomAdW5udHh7eHV6hImKiYR/foCChIWEf3x+gYB8dXByeH6E - h4aEhYeIh4WBfXp7e3p5d3d6foGEhYWFhoaGhYJ+e3p8fHt7ent9gIKDg4KCg4SEg4F/fX19fHt7e3x+ - gIKCg4SEg4OCgH99fX19fX1+f39+fYCCg4KAf4CBgYGBgX99foCBgoJ/dmtrdoKJi4qMkZOOhXtybG11 - foKCfnp8gYOEhoeGhIKBf3x6eXx/gYOGhnxnW2Z6houMj5qkopSEdmhfX2ZvdXuCjpeYk4uDfX6AgYB6 - cGdpdIGKjYqIiIqMkI98XEpYcoOMioaPn6Wdj35rYGNvfIN+eHqAgoaJiYmJiYmHgnlxcHZ/hYeDd2Zg - cYSLh4KHmKajkYBzaGRpcHR1c3mJlJKKhIKFiomHhH51b3J5gYiGdmRic4eRj4SDkqCej39wZWRrc3V0 - cnqNmpmSjIaDgoB7d3JucHmCg3x2eIOQmJeOgnt6fntuYWBpeYuUk5COjY6Oh3hraG95gIKAf4GFiIqF - fHZ1e4SKh4B7enyChoR/f4KFiIZ5ZFpkdYOLjo+Wn6GXh3ZnX2Focnp9gY2XmJCEenh+g4SAd25sc3+K - jYmHiIyRkoRgQUdjfY+UkputsaORfmVSUmBwfH98gYmNjpCQkIyFgoJ7bmZncH2JkJSIaFRng4yKhIWa - sKyTfm1cV2BtdHR3hJackoWCi5eViHtyamZqcnuIlY5vVGB9jZGKhJWxt5+Cb11TWGFmaWx5lamklI6T - nJuMempfW2FvgYdyU1d+nqeilZOhq6CKclVCR1xveXl6i6SwqJaDeX2IjYZzXVRdc4ualnhcZIafopB3 - dI2gm4dwWlFfdoWIgHuGnKach3RoanWAhoJ6dXZ+ho2QkpCEbFtic3p6fYOQnqKYinxvaWtwdHd9h5KW - kIZ+d3FsbXmJkYyDfHyBiY6Oi4V+c2FQVmdyfIydsLu0nIV1Z11bXWFreIeUlouCho6RkIuEf3pxaWhw - fY2akW1OVXWMkouGl7O5o4ZsVUhQZXR3dHuSp6aYioWMkIh8cGZeYGx/k6CVb09Ye5KWjoaUsruif2VR - SFBfanB3hp2sp5aMkpyZh3FgVldjdImOa0NViau1qpeasLCVeV9AMkFZbXl7g524vrCdkpCMfWlYTUxc - d4h/Y1t2mK+0qaGnq5qBalA5N0VZbHyHmK+7uaydk4yAbV1TT1JjfY19XmGDorOxoZqlp5J6Z0w4PFFm - d4ONnbCzpZaPjo2GdGRbUU9jg5yegl5fhKKnmoWEmqeZgGdMPkxoeoOGiZaqrpyHfHt/gH52aFxdboad - pY5gTmyNmZmLf46lp5J2WkdHW3eOlIuLnKabhG5haYCTlYdwX2BxjKWtnXdORmiJinhse6XGv5p3YVVa - bXh0a2yBm6GRfXqIl5iPg3ZoY2t8j5iBUzxahZqgmZKftbacfF5FP1BmdHh3gJmsqZqRkpaQgW9fVFZk - epSadkhPgKSto5GYsLKXfWRFNT9VaXmFkaS1s6CSlJiOemZXTVJpg4ltSlR/pLq6qKWyrZB4YkEqMEdh - doKPqMHIuqOVkIVxXU9GSV96g21Za4+tv7qqqrChf2VUPzA2S2Bziqa+ycOwnZOJe2dTQ0JTbYWHa1Zt - mLXAuKinq5x8Y0suJz9ccIOSn7PCv6+dkIZ5aVhIQEdggqKqiWNnjKivoIiHmZ6PdlpAO0pedYiNkKS9 - vaaRhoF9c2JTTVFigJ2igVhdiKu1po+OnqCKcFY9NEZkfI6Yn623rJSAeXh7enRpWExYfKS5qHNKXYqi - oYx3fZinmX5gRkJYdIaOjo+ao56NgH18e3t3bWRjcISbqI9aRWaJmqKXi5SjoI53WUBBV3KIkYqKmqSd - k4+Mhn5zZl1aYnaSpJNgQ12KoqaclaKxqIxyVzswP1t2ipilsbKll5WXj3phUEpQZIKRf1lRd6C5vaic - qK2TdmVKKiI4W4Gfqauxtq+lpJqAYkg9Rlt2hnNLToCuxsewpLG4m3NUMRcePGOFmZ+sv8S7sKSPdWBR - S1BaWT80X5S0x87Hycu1imNCIxYkPFx/k52zzM7Cu6uJaFJHSlhgTjA4bJ+9y8jEyce0k2k7FgwjSGN2 - jKS/0tPGtZ+EaVRIR09TRDVOgae8xsbIy76deFk+LS47Slxtfpq6ztLMvqKCZ1RHP0JSZ3d0ZnGTsby0 - paezqottUzsxOUtdbX6TsczRv6aWinpoVklDSFx7jHtkcZSuu7Wkoqeae2VXQDI8VGp/j5qqvcO4ppaG - c2FTS0hPZICQgmtyj6i1sKCbn5d/aFVAOUdcbH6Pm6u8u6qZj4R5bVtMR1BjfZqmkWtlhKCpoY+MmJuK - cVpIQEthdYWQnK65rpSCg4mFdGBRTVZsiqapfk1UhaeqnIqSqquPc11DND5Xc4udqK2toI2JlZiHbFVK - TV11kp19TFGHscCyko6mqo1wWTokMFV7mqmlo6ionZeZj3pjTUdTaoWLaEJVjLTHwaehr6uLaE0vHSpS - e5afnqe2urGkloNvXlFKT2R6bU1TgKa9x7ituLeVa1M6IiM9Y4WXmaO4wbuzp49zX1BMU2BnWD9NgKm/ - x7yyvcWpe1UxFx89WHOKkp++0cWzqph8Y1BGS1lgTzpRhq3Ax8K8vbicd1c6Jio/Vmh5hpy7z829q5iE - cl9LPTtMaIKHcGN/qL69raOoq5dzUjwwMkJYcYeatMrLtZyPjYd4YUo8PFJ0kZZ4X3afucKwlZWgk3Zh - SjQySWZ7iZGet8W6opCGgn1sUkRETWKCpLOdcWKAnqCUg3+Uo5Z6YU1BSWF3hY6Yq7itkH2AjIl1YldT - V2Z7kKmuh1pki5iShnqHo6eNdmNMRFdwgYyPkaCrn4h8gISAeG1gWmFygpWoqodZV3aGiIeAiaiym39q - VUlTaXyGipGdoZN+e4uVi3ptY2FncHqJnqqVZk1heoaMiIynuquKbVZIS1dlfJSgoJmKfYKVopiDblxW - YnJ9jp6FVExzlJ6Yio+vwqmBY0c0PVhvg5OZm56ZkJKeoI93YVVTXGx/kJFxUmeQp6qbkJ2tpottUToz - QWOIm5uUlJ6hnJyeknthUFBaaHuMhGJVeJ6vsJ2Pn7KhfGRQOjZJZX6Ql5qlrqidnJyPdlpGR1tygHZa - U3egu8Ovm6Com3xiSzc0RV51hpKitLesoZ2Zj35jTEJGVm6HmIhmaJCts6qWj5ygiW5aRDdFX29+k6Gs - t7CYh4uSindeSkhTZXqTpZpyX3ydpJqGgJKimX5pVkVFW3iJioqdtbKXfXmHj4BqX1xeaHR9jJ+rpIRi - W2l6g4GAkqqslX1sW1BXaHuIkJeblIh+f4yRiHxvamxubnKBk5+fiWVXan2ChIOLoq+fhHFgU1dlcXyJ - lqKqoIp4cm9vdHx/fHJvdoGNkpWZnZd/W0hUZGd0h5WmtK+biXlnX2FnbniDjY6Hf32Bio6Jh4aAd3Jx - cXaCjJKWjGtRW3F9goSKoLKsloJxYVpeZ3J9hY2VkoeBg4uNhHt4d3R0dXZ6g42XoZx4S0JZbXyMlKC3 - vaiOe2NNR1Nqf4mMjIiCgo2eppuHd21paWloboGTmY1vV2B5ipOWm6qzpYdtWklAS2iIm56WjIWEi5uj - loFvY2FnaWlvg5qjlHFea32Fi46VpaybfWZZUlVic4SPkY6Lh4mUoaWXfmdbWmBqdoaRg2NhgpyhmIyS - paeRdlxFQVt4gIOHiJCdm42KlJiQf2pZVVxqeoiXm4Nla4aPioiKmKuqjG1dUU1ZbHuKlZialod+iZma - i3ZjXWBpdH6KkIFna4iVj4mGkqaokntpVElVZ3F8iZakqpyEe4eNhHlwa2dnbXR8h5ajo4xmU2N6hIKC - jqOrnId1ZFhZY297iZWaloyAfImVj35ya2docHh+hI6XnJ2MZU5ccXuCiZGepZ6NfWxbV19tfomOl6Kh - koN5c25rbnd7dHN7hY+ampCJiYqJe1k8Ql53i5ebqbi1o453X1FSXWt3fIGNlJWSi4eHh4eGf29laHB6 - goSDho+YlYBiV2V3hYyLjJedlId+cWBbZneGjIuNlZaPhXtycHZ+gHtvaXKDkZaSjIqIgoGJjHhROUxy - ipOSkqC0uKaMbVNKWWx1dXN6jJmYk4+OioeFfXFpanBydnyBhpCdo5NtT1Rqe4eLi5emppeFcVxRWm6D - kZKNiYR/gImRjoN1a2txeH2Ag4WIiouQl45oQkZlfpCZk5ioqpaDdF9QXXyPi3ttcIGNjZCWlYyDenFt - cHV5f4SGiIBqW2Z6jJmbmaKolHJhYGJqd39/fHp/ipCPjY+Pi4F1bG1xcnF3g5KdmXpXV3CCjZKPlqOf - hnBoZGZzf315fIKKjoiBh5KVjoJyZmVvd3uCiYuDcm15goaJi5CanpF7bGVgXWR2iZSVk46GgYKKj4h6 - bmhqcnZ1eomVmZmXhWdXYW95gIOMnaOYjIN2ZV9mcn6Jj4+Kgn19hoyHfnh3dnZ5fH2BiY2MjY+EaVJW - anuIkJKbpKOVhHVkWFppeICEipGTj4uKiod+dXFwbm1xeIOOko+LiIWHjo12UkVbeYmMiY+fqaSWhHBe - WWJ0gH97gY+VkIaBgYKDg352bWxxeYOJiYiJiYiLkIx2VkldeIaJhYmcrKqbh3JfWmVzenl3fo6Yk4Z+ - foOKjYl9bmVmb3uEiIqLjIuHhomKhXhfUF1zf4OGiZiqr6OSfGVbYGhqam14jJuclpGQjomFfnFjXWBo - c4CKkZmblI6NjYqEclNATWl+iImOoLO1ppJ6Z15ham9raHB+jJOUlJmbk4d9dGtkZWpxeH+Fi5CQjpKW - lo1yUUdZbnuFiZCir6iXhnNiXmh0e3t5eoCIjY2RlJGIfXRua2xvdHyChYiOk5aalXlVUWZ2fX58h5qi - mo+GeG1ygYeAc2hpeIGBhZGVj4iDfnl5e3t6eXZ0d4CJkZWLcF5sgoqHf3yJmZmJfHNscX+FgHl1eYOG - gX+GjIqEfnt7fn9+eXd4e4CHj49/aWJxgIiKiIqUmpKBdGxmZm9+iouHh4qIgn6EiYV7cG1xeHx+g4qM - iYeHh4iJgWxXWGx/ioqFjZ6lnIx8bWRmb3d5eX6GjIuJiIuMhn12c3NzdHd9g4aHiYuIgoOIin9pWFxw - f4SGiJOjqJuKfG5kY2txcnJ3hZKVkYyKjY+LgXlwaGVna3J8hI2Xm5eRjYiBenVxbmtjXWR2hpCZnqKm - opaFdWVbWmBmbnaAjZmbmJWSjoqGfnNqZGNla3R9hpCVlpORj4uCe3ZzcXFzc21mbH6MlJaVmJ6ckYR2 - Z15eY2pyeoCLmZ6ZkImEg4F9d3BrbnN3en6EiIyNiYSChISCf3p2d3l7f4OBdmpugIyNiYWLmJqPgnZr - ZmhscHN3f4+dnZSMhoF9eXR0dnZzcnZ8goiMjo2JhIOBe3V1d3h6fH1+goqQjn9wbnmDhoJ8fomPjIV9 - dnFzen5+fH6Fjo+Hf3x8fX6AgH98eHZ4fYCDhoqMh4B6eXl4eX2Af319f4GEh4eGhYN/dm1tdn2BhYeL - kZONhH53cnFzdnh6fYSMjYiEhIWFhIB7eHd1cnN5gYaJioqJhoKAfXp5eHd3eXp9gIWKjIqIhYJ/eXBr - bnh/hIeIio+QjIZ+d3NzdXh6fH6ChIWFh4eHhoSAfHh1dXd5foKEg4SEg4KBgH9+fn59fXx9foCEhoWD - gXt0dHyBgYGAhIuNiYN+e3l5eHd5fH6Bh4iFgoKCgoGAf39/fXl2eHyBg4SGhYSEgoB9ent9fX18e3t9 - gYOFhoeGhIJ/fHp6enl3d3qAhoiIhoiKiYV/enZ2eHh3eX6Bg4eKiYaDgoB+fHp5eXl7fX6BhIWEhYSD - gX9+fXp4eXx+fn6Ag4SFhYODg4KAfnx7e3t6d3h+hIaHhoaHiIWAfXp3dnh5ent+goeLiYWEg4B9enh5 - e35+fn5/gYKDg4SEhIKAfXp5eXp8fn+AgoSFhYSEg4F/f318eXl6fH1+f4CDhoeFhIOBf358e3p7e3x9 - fn+Bg4SDg4OEhYOAfXt6e3x8e32AgoODg4KCgoKCgH59fHx9fn18fYCCgoOCgoKDgn99fHt7fH1+gIGD - g4KBgICAgYB/f3+Af35+fX5/gIGCgoB9fn+BgoKBgIKDgX17ent9f4CAgYOEhIKBgH59fX18fH1+gIGC - goKCgoGAgICAf359fH19fX5/gIKDg4OCgoGBgX9+fXx7fH19fn+BgoOFhYSCgX99fHx8fH19f4CAgIGC - g4ODg4KAfn18fHt8fX+BgoKCgoKBgYB/f359fn59fX5/gIGBgYGBgYGAf39/f39/fn5+f3+AgICAgYGB - gYB/fn1+fn5+f4GBgoKBgH9/fn5/f3+AgICAgYGBgICAgH9/fnx9foCBgYGBgYGAf35+f39+fn9/fn6A - gYKDgoKBgH9/fX18fX1+f4CCg4SEg4KAf318enp8fX+BgoKCgoKBgH9+fX19fn5/gICAgICBgH9/gICA - gIB/fn9/f39/gIGBgICAf39/fn5/f3+AgIGBgICAgH9+fn5+f4CAgYGBgYGAf39/f39/f4CAgIB/f39/ - gICAf39/f39/f4CBgYGAgIB/fX1+f39/gIGBgYGBgYGAgIB/fX19fX5/gICBgoOCgYB/fn5/f359fX6A - gICAgYKDgoGAf35+fn5+fn1+f4CBgYKCg4KBgH99fHx8fX1+gIGDg4OCgoB/fn18fH1+f4CAgICBgYGB - gYCAgIGAf319fX19fn5/gIGDhISDgoF/fn18e3t8fX5/gYKDhISEg4GAf359e3t7fH1/gIKCgoODgoGA - f35+fn59fHx9fn+AgYODg4ODgYB+fXx7fH19fX+AgoODg4OCgYB/fn18fHx9fn+AgYKDgoKDg4KAfn18 - fHx8fX+AgYKCg4KCgYB/f39+fn5+fn9/gICAgYGBgICAgICAf39+fn5+fn5/gIGBgYKCgoF/fn19fX5+ - fn9/gIGBgoKCgYCAgH9+fX19fn5/f4CBgoKDgoKBgH9+fXx8fH1+gIGCg4OEg4KAfn19fX19fn9/gIGB - gYGBgYGBgIB/fn59fn1+fn+AgIGBgYGBgYB/fn5+fX1+fn+AgoKBgYCAf39+fn5/gICAgICAgYGAgH9/ - fn5+fn9/gICAgICAgICAgICAgH9/fn19fX5/gIGBgoKBgYGAgH9+fX19fn5/gIGBgYKCgYB/f39/f39+ - fn5/gICAgICAgICAgICAgICAgH9+fn5+f3+AgIGBgYCAgH9/fn5+f39/f39/gIGBgICAgICAgH9/fn5/ - f39/gIGBgYGAf39/f3+AgICAgH9/f35/f4CAgYGBgH9/fn9/f39/f4CAgIB/f4CAgH9/gICAgICAgH9+ - fn5+fn5/gYKCgoKCgYB/fn18fH19fn6AgoODgoKBgYB/fn59fn59fX5/f4GCgoKCgoGBgH9+fX19fn5+ - f3+AgYKBgYGAgH9/f39/f39/gH9/f39/f4CAgH+AgIB/f3+AgIB/f4CAf39/f39/f3+AgIGBgYGBgH5+ - fX1+fn5/gIGCgoGAgH9+fn5+fn9/gICAgICAgICAgH9/f39/f4CAgICAgICAf39/f3+AgICBgICAf35+ - fn9/f3+AgIGBgYGAgH9/f35+fn5+f3+AgYGBgoGBgH9/fn19fX1+f4CBgoKCgoGAf359fX1+fn9/gIGB - gYGBgYCAf35+fn5+fn9/gICAgYGBgYGAgIB/fn5+fn5/f4CAgYGBgYGAgH9+fn5+fn9/gICAgIGBgYCA - f39/f39/gICAgICAf39/f39/gICAgICAf39/f39/gICAgICAgH9/fn5+f4CAgIGBgYGAgH9+fn5+f3+A - gICAgICAgH9/f4CAf39/gICAf39/f4CAgICAgICAgICAgH9/fn5+fn5/f4CAgYGBgYGBgIB/f359fX1+ - fn+AgYKCgoKBgYB/fn5+fn5+f4CAgIGBgYGBgYB/f39+fn5+f39/f4CAgIGBgIB/f39/f39/f4CAgICA - gICAgH9/f39/f4CAgICAgICAf39/f39/f39/gICAgICAgH9/f35/f3+AgICAgICAgIB/f39+fn5+f3+A - gIGBgoKBgH9+fn19fX5+f4CBgoKCgoGAf35+fX5+fn+AgIGBgYGAgIB/f39/f35/f3+AgICAgICAgIB/ - f39+fn5/f3+AgICBgYCAgIB/f35+fn9/f4CAgICBgYGAgH9/f35+fn5/f4CAgYGBgYGAf39+fn5+f3+A - gICAgICAgH9/f39/f39/f3+AgICAgICAf39/f39/gICAgICAgICAgICAf39/f39/gICAgIB/f39/f39/ - gICAgICAgH9/f35+fn9/gICAgICAgYGBgIB/f39+fn5+f3+AgYGBgYGBgH9+fn5+fn9/f4CAgYGAgH9/ - f39/f3+AgICAgICAf39/f39/gICAgICAf39/f39/f4CAgICAgH9/f39/f39/gICAgICAgIB/f39/f39/ - f39/gICAgIB/f3+AgH9/f39/f3+AgICAgIB/f39/f39/f4CAgICAgICAgH9/f39/f39/gICAgIGAgIB/ - f4CAf39/f39/f3+AgICAgYGAgICAf39+fn5+fn9/gICBgYGBgIB/f39/f35+f39/gICAgICAgICAgH9/ - f39+fn5/gICAgICBgYCAf39+fn9/f4CAgIGAgICAf39/f39/f39/f39/f4CAgYGBgIB/f39+fn5+f4CA - gYGBgICAf39/f39/f3+AgICAgICAgICAgICAgIB/f35+fn9/gICAgYGBgYCAf35+fn5/f3+AgIGBgYCA - gH9/f39/f39/f39/f4CAgICBgYGAf39/fn5+f39/f4CAgICAgYCAgH9/f39/f39/f3+AgICAgYCAgICA - f39/fn5+f39/f4CAgYGBgYCAgH9/f39/f39/f4CAgIGBgYCAgH9/fn5+fn9/gICBgYGBgICAf35+fn5/ - f4CAgICBgYCAgH9/f39/f39/f39/f3+AgICAgICAgICAf39/f39/f39/gICAgYGBgICAgH9+fn5+f39/ - gICAgYGBgICAf39/fn5+f3+AgICAgICAgICAf39/f39/f39/f4CAgICAgICAf39/f39/f39/f4CAgYCA - gICAf39/f39/f3+AgICAgICAgICAgIB/f39/f39/f39/f4CAgICAgICAf39/f39/f3+AgICAgICAf39/ - f39/gICAgICAgH9/f39/f39/gICAgICAgIB/f39/f39/f4CAgICAgICAgH9/f39/f39/gICAgICAgICA - gH9/f39/f35/f4CAgIGBgYGAgH9/fn5+fn9/gICBgYGBgYCAf39+fn5+f3+AgICAgICAgIB/f39/f39/ - f4CAgIB/gICAgICAf4CAgH9/f3+AgH9/f39/f39/f4CAgICAgICAgIB/f35+f39/f3+AgYGBgICAgICA - f39/f39/fn9/gIGBgYGBgIB/f35+f39/gICAgICAgH9/f39/f3+AgICAgICAgH9/f39/f3+AgICAgICA - gH9/gIB/gICAf39/f39/f39/f3+AgICAgICAf39/f39/f3+AgICAgICAgICAgH9/f39/f39/gICAgICA - gH9/f39/f39/f4CAgICAgICAgICAf39/f39/f4CAgICAgICAgIB/f39/f39/f39/gIB/gICAgICAf3+A - gICAgIB/f39/f39/f4CAgICAgIB/f39/fn5+f3+AgICBgYCAgH9/f35+f39/f4CAgYGBgICAgH9/f39+ - f39/f4CAgIGBgICAgH9/f39+fn5/f3+AgIGBgYGAgH9/f35+fn9/f4CAgICAgICAgIB/f39/f39/f39/ - f4CAgICAgICAgIB/f39/f39/f39/f39/gICAgICAgH9/f39/f39/f4CAgICAgICAgH9/f39/gICAgICA - gIB/f39/f4CAgICAgIB/f39/f39/f39/gICAgICAgH9/f4CAgH9/f3+AgIB/f3+AgIGAf39/f39/f39/ - f4CAgICAf39/f39/f39/f4CAgICAgICAgH9/f39/f3+AgICAgICAgIB/gICAgH9/f39/f39/gICAgICA - gH9/f4CAgICAf39/f39/f3+AgICAgICAgIB/f39/f39/f39/f4CAgH9/gICAgICAf39/f39/f39/gICA - gICAgICAgH9/f39/f4CAgICAgIB/f39/f3+AgICAgICAf39/f39/f4CAf4CAgICAgICAf39/f39/f4CA - gICAgICAf39/f39/f39/f3+AgICAgICAgICAf39/f39/f39/f39/gICAgYGBgYCAf39+fn5+fn9/gIGB - gYGBgYCAgH9/fn5+fn5/f4CAgYGBgYGAgH9/f35+fn5/f3+AgIGBgYCAgH9/f39/f39/f39/f4CAgICA - gICAgIB/f39/f39/gICAgICAgICAf39/f39/f3+AgICAgICAgICAgH9/f39/f39/f39/gICAgICAgICA - f39/f39/f3+AgICAgICAgH9/f39/f3+AgICAf39/f4CAgICAgIB/f39/f39/f4CAgICAgICAgIB/f39/ - f39/gICAgICAgIB/f39/f39/gICAgICAgICAf39/f39/f39/f4CAgH9/gICAgH9/f4CAf39/f3+AgICA - gICAgIB/f39/f39/f4CAgICAgICAf39/f39/f3+AgICAgICAgICAgH9/f39/f39/f4CAgICAgICAgICA - f39/f39/f39/f4CAgICAgICAf39/f39/f39/gICAgICAgIB/f4CAgH9/f39/f39/gICAgICAgH9/f39/ - f39/f39/gICAgICAgICAf39/f3+AgICAgICAgICAgH9/f39/f39/f4CAgICAgICAf39/f39/f39/f4CA - gICAgICAgIB/f39/f39/f3+AgICBgYGBgIB/f35+fn5/f4CAgIGBgYGAgICAf39/fn5+f39/gICAgYGB - gICAf39/f39/f39/gICAgICAgICAgH9/f39/f39/f4CAgICAgICAgH9/f39/f39/f4CAgICAgICAf39/ - f39/f39/f4CAgICAgICAgH9/f39/f39/f3+AgICAgICAgH9/f39/f39/f39/gICAgICAgIB/f39/f3+A - gICAgICAgIB/f39/f39/gICAgICAgIB/f39/f39/gICAgICAgH9/f39/f39/f39/gICAgICAgIB/f39/ - f39/f4CAgICAgICAgH9/f4CAgICAgIB/f39/f4CAgICAgICAgICAf39/f39/f3+AgICAgICAgH9/f39/ - f39/gICAgICAgICAgICAf39/f39/f39/gICAgICAgICAgIB/f39/f39/f4CAgICAgICAf39/f39/f3+A - gIB/f4CAgH9/f39/f39/f39/gICAgICAf39/f39/f39/gICAgICAgH9/f39/f39/gICAgICAgH9/f39/ - f39/gICAgICAgICAf39/f39/f39/gICAgICAgICAgICAf39/f39/f39/gICAgICAgICAgIB/f39/f39/ - f3+AgICAgICAgH9/f39/f39/f3+AgH9/f4CAgICAgH9/f39/f39/gICAgICAgH9/f39/f4CAgICAgICA - f39/f39/f4CAgICAgICAf39/f39/f39/gICAgICAgICAgIB/f39/f39/gICAgICAgH9/f39/f3+AgIB/ - f39/f39/f3+AgICAgICAgH9/f39/f3+AgICAgICAgICAf39/f39/f39/gICAgICAgICAf39/f39/f39/ - f3+AgICAgICAgH9/f39/f39/f39/gICAgICAgICAf39/f39/f3+AgICAgICAgICAgH9/f39/f39/gICA - gICAgH9/f39/f39/gICAgICAgICAgIB/f39/f39/f4CAgICAgICAf39/f39/f39/f4CAgICAgICAgH9/ - f3+AgICAgH9/f39/f3+AgICAgICAgIB/f39/f3+AgICAgICAgIB/f39/gICAgH9/gIB/f39/gICAgICA - gICAgICAgIB/f39/f39/gICAgICAf39/f39/f4CAgH9/f39/f3+AgICAgICAgIB/f39/f39/gICAgICA - gICAf39/f39/f39/gICAgICAgICAgIB/f39/f39/f4CAgICAgICAf39/f39/f39/gICAgICAgICAf39/ - f39/f39/gICAgICAgICAf39/f39/f3+AgICAgICAgICAf39/f39/f39/f3+AgICAgICAgIB/f39/f39/ - gIB/f4CAgICAgICAgICAgH9/f39/gICAgH9/gICAgH+AgICAgICAf39/f39/f3+AgICAgICAf39/f39/ - f39/f4CAgICAgICAgH9/f39/f3+AgICAgIB/f39/f4CAgICAgH9/f4B/f39/f3+AgICAgICAf3+AgICA - gICAf39/f39/gICAgICAgIB/f39/f39/f4CAgICAgICAf39/f39/f4CAgICAgICAgH9/f39/f39/gICA - gICAgICAgICAgICAf39/f39/f4CAgICAgIB/f39/f39/f3+AgICAgICAgH9/f3+AgICAgICAgH9/f39/ - f39/f39/f3+AgICAgICAgICAf39/f39/f3+AgICAgICAgICAgIB/f39/f39/f4CAgICAgIB/f39/f39/ - f39/f4CAgICAgIB/f39/f4B/f39/f39/f39/f3+AgICAgICAgICAf39/f39/gICAgICAgICAgH9/f39/ - f39/f39/gICAgICAgIB/f39/f39/f3+AgICAgICAgH9/f39/f39/f4CAgICAgICAgIB/f39/f39/f39/ - gICAgICAgICAf39/f39/f39/gICAgICAgICAgICAf39/f39/f39/f4CAgICAgICAgH9/f39/f39/f3+A - gICAgICAgICAgIB/f39/f39/f3+AgIBMSVNUxAAAAElORk9JQ1JECwAAADE5OTQtMDItMDUAAElTQkpu - AAAAUEFSVElBTDpiaXJkLCBjcm93LCBjb21tb24gY3JvdywgY2FsbHM7IFRoZSBIb2xseXdvb2QgU291 - bmQgTGlicmFyeSwgQzE5OTQsIE5ldyBFZGVuIE11bHRpbWVkaWEsIDE4MDA3MzUtRURFTgBJU0ZULgAA - AFNvdW5kIEZvcmdlIDIuMDtTb25pYyBGb3VuZHJ5IFNvdW5kIEZvcmdlIDUuMAAL - - - - ..\images\tastudio\ts_h_piano_02_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_arrow_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_10_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Refresh.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_04_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_18_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Lightning.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\monitor.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_08_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\restart.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_15_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_11_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\BlueDown.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Previous.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_00_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_17_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\icon_marker.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\reboot.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_09_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_arrow_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_17_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\GenesisControllerIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\icon_anchor_lag.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\GameController.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_10.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\watch.ico;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\PCEngineController.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_11.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ppsspp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_08_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_19_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_00.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_08_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_14_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Debugger.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\noconnect_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_13_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\gambatte.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_10_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_08_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_12.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_12_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\BlueUp.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_16_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_11_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_07.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_18_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\FindHS.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\whiteTriLeft.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_16_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_01_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_11_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_12_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\PrintPreviewHS.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\undo.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_07_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_08_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\whiteTriDown.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\atari_controller.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_13_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Pause.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\psx_dualshock.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_05.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_04.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_08_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_17_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\console32x32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\redo.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_05.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_14_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_00_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\YellowDown.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\sms-icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_12.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\user_blue.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_06.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_16_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\CopyFolderHS.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_09.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_13.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ReadOnly.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_07.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\NES_Controller.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_01_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_14_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\N64.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\TruncateFromFile.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_02_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\HomeBrew.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_13_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_15_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_09_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\genplus.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\RetroQuestion.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\Lynx.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\BlankCursor.cur;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\images\tastudio\ts_v_piano_01_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_07_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_05_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\YellowUp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Translation.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\search.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_04_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\HotKeys.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_10.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Lua.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_12_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\OpenFile.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_19_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_03_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_09_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_08.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Cross.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_13_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_15_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\GreenCheck.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Cheats.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Save.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_10_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_06_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Stop.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Erase.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_06_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_07_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_00.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\LightOff.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_16_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_05_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_16_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Fullscreen.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_03_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\AutoSearch.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\snes9x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Unfreeze.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Recent.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\gba-icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\YellowLeft.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\YellowRight.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_11_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_14_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\TAStudio.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\C64Keyboard.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_04_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\C64Joystick.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\MoveRight.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_17.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_15.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ScrollTo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_06.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\GENController.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\console16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_01_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_00_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\QuickNes.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\AppleIIKeyboard.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_14.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_19_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_04.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_06_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_12_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_09.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Bug.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\pencil.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\FastForward.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Hack.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_02_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_14_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\bsnes.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_19_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Both.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\LightOn.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Duplicate.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\JumpTo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_06_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\LoadConfig.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\poke.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_12_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_07_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_05_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_18_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\TI83Calculator.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\thumbsdown.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_10_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\WarningHS.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_15.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_11_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_17_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\colecovisioncontroller.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\alt_about_image.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\SaturnController.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_02_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\InsertSeparator.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_04_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\SaveAs.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Back.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\SMSController.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tvIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_19_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\TI83_Controller.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_01_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_17.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\SaveConfig.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Shark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_03_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\BackMore.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\pcb.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_18_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_04_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_13_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_18_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\AVI.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\corphawk.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\user_blue_small.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_02.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\pcejin1.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_03.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\NESControllerIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_00_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\connect_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\addWatch.ico;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_05_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\AddEdit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_04_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_18.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Square.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\textdoc.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_19.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_03.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Forward.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Blank.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_10_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\cheat.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_15_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\CorpHawkSmall.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_14_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_arrow_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_18_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_06_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\icon_anchor.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_00_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_arrow_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_07_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_01.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\TurboFastForward.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Freeze.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\NewFile.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_09_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\C64Symbol.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_05_green_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Refresh.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_08.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_05_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_v_piano_17_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\tastudio\ts_h_piano_02_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\CutHS.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\TruncateFromRW.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\GBA_Controller.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\Help.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\whiteTriUp.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ENE.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ESE.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\NE.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\NNE.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\NNW.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\NW.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\SE.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\SSE.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\SSW.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\SW.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\WNW.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\WSW.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\NGPController.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\config\ControllerImages\ZXSpectrumKeyboards.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\MoveBottom.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\MoveTop.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\StopButton.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\ControllerImages\ArcadeController.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\images\mame.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/Resources/nothawk.bin b/BizHawk.Client.EmuHawk/Resources/nothawk.bin new file mode 100644 index 0000000000..c51916fadc Binary files /dev/null and b/BizHawk.Client.EmuHawk/Resources/nothawk.bin differ diff --git a/BizHawk.Client.EmuHawk/config/A7800/A7800ControllerSettings.Designer.cs b/BizHawk.Client.EmuHawk/config/A7800/A7800ControllerSettings.Designer.cs index 882cbaea8c..4087816bed 100644 --- a/BizHawk.Client.EmuHawk/config/A7800/A7800ControllerSettings.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/A7800/A7800ControllerSettings.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(A7800ControllerSettings)); this.OkBtn = new System.Windows.Forms.Button(); this.CancelBtn = new System.Windows.Forms.Button(); this.label5 = new System.Windows.Forms.Label(); @@ -124,7 +123,7 @@ this.Controls.Add(this.Port1ComboBox); this.Controls.Add(this.CancelBtn); this.Controls.Add(this.OkBtn); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController_MultiSize; this.Name = "A7800ControllerSettings"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Controller Settings"; diff --git a/BizHawk.Client.EmuHawk/config/A7800/A7800ControllerSettings.cs b/BizHawk.Client.EmuHawk/config/A7800/A7800ControllerSettings.cs index d087d2558c..73b468c710 100644 --- a/BizHawk.Client.EmuHawk/config/A7800/A7800ControllerSettings.cs +++ b/BizHawk.Client.EmuHawk/config/A7800/A7800ControllerSettings.cs @@ -1,25 +1,26 @@ using System; using System.Linq; using System.Windows.Forms; - -using BizHawk.Client.Common; using BizHawk.Emulation.Cores.Atari.A7800Hawk; namespace BizHawk.Client.EmuHawk { public partial class A7800ControllerSettings : Form { - private A7800Hawk.A7800SyncSettings _syncSettings; + private readonly MainForm _mainForm; + private readonly A7800Hawk.A7800SyncSettings _syncSettings; - public A7800ControllerSettings() + public A7800ControllerSettings( + MainForm mainForm, + A7800Hawk.A7800SyncSettings syncSettings) { + _mainForm = mainForm; + _syncSettings = syncSettings; InitializeComponent(); } private void IntvControllerSettings_Load(object sender, EventArgs e) { - _syncSettings = ((A7800Hawk)Global.Emulator).GetSyncSettings().Clone(); - var possibleControllers = A7800HawkControllerDeck.ValidControllerTypes.Select(t => t.Key); foreach (var val in possibleControllers) @@ -43,7 +44,7 @@ namespace BizHawk.Client.EmuHawk _syncSettings.Port1 = Port1ComboBox.SelectedItem.ToString(); _syncSettings.Port2 = Port2ComboBox.SelectedItem.ToString(); - GlobalWin.MainForm.PutCoreSyncSettings(_syncSettings); + _mainForm.PutCoreSyncSettings(_syncSettings); } DialogResult = DialogResult.OK; @@ -52,7 +53,7 @@ namespace BizHawk.Client.EmuHawk private void CancelBtn_Click(object sender, EventArgs e) { - GlobalWin.OSD.AddMessage("Controller settings aborted"); + _mainForm.AddOnScreenMessage("Controller settings aborted"); DialogResult = DialogResult.Cancel; Close(); } diff --git a/BizHawk.Client.EmuHawk/config/A7800/A7800ControllerSettings.resx b/BizHawk.Client.EmuHawk/config/A7800/A7800ControllerSettings.resx index ca821b54f8..1af7de150c 100644 --- a/BizHawk.Client.EmuHawk/config/A7800/A7800ControllerSettings.resx +++ b/BizHawk.Client.EmuHawk/config/A7800/A7800ControllerSettings.resx @@ -117,508 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAwAMDAQAAAABABoBgAAxgAAACAgEAAAAAQA6AIAAC4HAAAYGBAAAAAEAOgBAAAWCgAAEBAQAAAA - BAAoAQAA/gsAADAwAAAAAAgAqA4AACYNAAAgIAAAAAAIAKgIAADOGwAAGBgAAAAACADIBgAAdiQAABAQ - AAAAAAgAaAUAAD4rAAAwMAAAAAAgAKglAACmMAAAICAAAAAAIACoEAAATlYAABgYAAAAACAAiAkAAPZm - AAAQEAAAAAAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAQAAAAEAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAHR3AAAAAAAAAAAAAAAAAAAAAAAAAAAAdHdEcAAAAAAAAAAAAAAAAA - AAAAAAAAAHd0d3QAAAAAAAAAAAAAAAAAAAAAAAAAAEd8d3UAAAAAAAAAAAAAAAAAAAAAAAAAB3yHfHZw - AAAAAAAAAAAAAAAAAAAAAAAAd3fIyHVwAAAAAAAAAAAAAAAAAAAAAAAAfHh3jIxwAAAAAAAAAAAAAAAA - AAAAAAAHd8jIyHdgAAAAAAAAAAAAAAAAAAAAAAAHd4yHfIdAAAAAAAAAAAAAAAAAAAAAAAAHyMjIyMhQ - AAAAAAAAAAAAAAAAAAAAAAB3d3eMh4dgAAAAAAAAAAAAAAAAAAAAAAB8jIyIfIdQAAAAAAAAAAAAAAAA - AAAAAAB3h4jIiMh3AAAAAAAAAAAAAAAAAAAAAAB8jIeHeIjHAAAAAAAAAAAAAAAAAAAAAAeIiHh4eMiE - AAAAAAAAAAAAB0dHcAAAAAd8h4eIiIiHcAAAAAAAAAB0d3d3RwAAAAeIeIiIiIh3RwAAAAAAAHR3d8h3 - dAAAAAfIh4iIiHiIx0cAAAAAdHh3eIeHhwAAAAeHiIiIiIiId3R3dHR0eHd4h4eHhAAAAAd4eIiIiIiH - x3d2d3eId4iIiIiIhwAAAAd4eIiI+IiIh3d3eHh3iIiIiIeHwAAAAAfIjHeIiIiIyIeHh4iIiIiIiIiI - cAAAAAeIQ0R3h3iIiMiIiIiIiIiIiIiEAAAAAAfIR3d3d0iIiIh4iIeIiIiIiHhAAAAAAAB4d3d3SHiI - h4fTiIi3iIiIeIwAAAAAAAB3h4d3eIeIiHiJiIuIiIh4jHAAAAAAAAAHyId3h3h4iIh4iIiIiIiHeAAA - AAAAAAAAB8iMiMjIiIiIh4h3aMjHAAAAAAAAAAAAAAdYyIeIiIiMjId6d4eAAAAAAAAAAAAAAAAHdsjH - eIeH6MiId3AAAAAAAAAAAAAAAIiIh4V8jIh4eIfHcAAAAAAAAAAAAACIiIh3AAAHd3h3fHcAAAAAAAAA - AAAAAAiIjHgAAAAAAHx8eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAA - AAd0dAAAAAAAAAAAAAAAAAB3x3cAAAAAAAAAAAAAAAAAd3fHcAAAAAAAAAAAAAAAB3yMh3AAAAAAAAAA - AAAAAAfIeMdwAAAAAAAAAAAAAAAHjIyHQAAAAAAAAAAAAAAAfId4yHAAAAAAAAAAAAAAAHjIyIdQAAAA - AAAAAAAAAAB3iId4YAAAAAAAAAdwAAAAjIiIiIUAAAAAAHd3dAAAB4iIiHh8cAAAAHd3x4dwAAd4iIiI - h3Z3d3R3yIh4cAAHh4iIiIfHd3d4iIiIh3AAB3jHiIiIiHeHiIiIiIwAAAh3dXh4iMiIiIiIiIhwAAAA - yGd0d4iIeIi4iIiMAAAAAIeHd4iIh32IiIiIcAAAAAAAd4jIyIiIiHeHyAAAAAAAAAB3h4iIh8h3dwAA - AAAAAAAIh8fIh4eIaAAAAAAAAACIiHAAB8jIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////////////////////n////g////wP///8B///+Af///gH///4B///8Af///AH///wB//n8AP/A+AB - /AHgAAAB4AAAAeAAAAPgAAAH8AAAD/AAAB/8AAA//wAA//4AA//weA////////////////////////// - //8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRwAAAAAAAAAAAAB3dAAAAAAAAAAAAA - d8dwAAAAAAAAAAAAfId3AAAAAAAAAAAHeMjHAAAAAAAAAAAHyHh3AAAAAAAAAAAHh3eEAAAAAAAAAAAI - yIiHAAAAAHd2cAAIiIiIQAAAd3d4UACHiIiId3d3eHiIcACHh4iIyHeHiIiIcAAIR3d4iIiIiIiMAAAH - d3eIh3iIiIhwAAAAeMh4iIiHiMAAAAAAAHfIiMh4aAAAAAAAiIgHyIfIAAAAAAAIgAAAAIAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD8f/8A+H//APB/ - /wDwP/8A4D//AOA//wDgP/8A4D/BAOAfAQDAAAEAwAABAOAAAwDgAAcA8AAfAPwAPwDwgP8A5/f/AP// - /wD///8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAd1AAAAAAAAB8cAAAAAAAB4eAAAAAAAAHyMgAAAAAAAiIhwAAAHcACI - iHcAd3hwAIz4jIeIiIAAd3eIiIiIAACHeIiIiHAAAACMeMh4AAAAiAAIgAAAAAAAAAAAAAAAAAAAAAAA - AAD//wAA//8AAP//AADj/wAA4/8AAMP/AADB/wAAwfkAAMDBAADAAQAAwAMAAMAHAADwDwAAzn8AAP// - AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAA9OzsAZD8/AGg8 - PABtPj4AQkNDAEZIRwBWQkIAV0REAF5AQABbRkYAVklJAFxPTwBTU1MAXFJSAF5ZWQBkQEAAYUREAGZF - RQBqQkEAYEtLAGNPTwBwQUEAfUZGAHJKSgB2SUkAfU9PAGBRUQBgVFQAZlZWAGZYWABqWVkAclZWAHpU - VAB9W1oAbmJiAGtoaABtaWkAcWdnAHdnZwB8Y2MAe2pqAHJxcQB+dHQAd3l5AHl6egCGT08AiU9PAIFP - UACGU1MAjVFRAIlWVgCMV1cAg1xbAIxaWQCQUlIAlVJSAJFXVgCXVVUAmVVVAJZaWQCSXV0AlV9eAJpZ - WgCeW1sAml5eAKBZWgCgXFwAql9fAIRmZQCIZWQAhWtrAI5ragCTYmEAnGBhAJ9kYwCaZmYAk25uAJ1s - awCFdHQAiXd3AIt+fgCWd3cAmHR0AJV5eQCbfHwAo2JhAKZhYQChZWUApGVkAKplZACsZGQAqmhnAKZr - agCnbGsAqmloAKlubQCsbW0AtGZnALhsbACxb3AAv29wAKVxcACrc3IAr35+ALN0cwC5c3MAvXBxALR4 - dgC1fHsAunt6AMNtbgDGb3AAw3FyAMZwcQDGdXUAyHR1AMp3eADBeXkAxnt7AMB/fgDLensANLBSAEWf - TgBBtFwAPMdnADHkdgDciiIAvoF/AISrdwDln0sA35lhAN2XfADgmmEA8LdlAO61cAArWPIALWT+AEh5 - +gDOf4AAfoCAAHiA1ABZv9wAZrnUAGK+2ABxnv4Ad6P/ADPX/QBw0OcAW+D7AIKEgwCPgoIAjI2NAJuC - ggCUiIgAmYqKAJGSkgCjhIQAqoKCAKKLiwC+hIMAsoqKALaSgQCum5sAsZubALqqlQCdgr4Ar6ytALGh - oAC6pKQAwoSDAMyBggDGiIYAyYiHAMWMigDMjIoA0ISFANKHiADUjIwA2Y6NAMCUjQDIk44A0JCPANaP - kADHlZQAzpSSAMScmwDUkpIA2ZSVANWYlgDampcA2ZeYANWcnADam5sA4p2cAMChjwDeoJ4A5aCFAOaj - jQDlpJoA2p6hAMOkowDOoaEAy62tANegoADdoqEA2aGpANGsrwDdq6kAwbG4ANGysQDdtLQA2ri3AOGk - owDjqKYA66ylAOGnqADjq6oA6a2rAOOwrwDssK4A5K+wAOaztADttLIA57i2AO24tgDmurgA6rq6APC1 - swDyuLYA9Ly5APi+uwD1wL0A+cC9AKKMwACkk8QAqprMALSayACptsEAlaDkAOy/wACRxtQAgOv9AJnr - 9wDEwsoA5sbGAOzCwgDuyMcA7MzMAPPEwgDxy8oA9dPTAPja2gAAAAAAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAADLytDi9tOemQAAAAAAUy9EecLEsa1uPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj11Mme - VakAAAAAAAAAAAAATS84M0akAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE - AAAAAAAAAAAAAAABAAAAAQAAAAAAAFFNTQBRUlIAU1RUAGJHRwBiT08Aa0lIAGJTUwBrVlYAYllZAGZc - XABpWloAb1xbAHNTUwB7V1YAc1hXAHFbWwBkZWUAaWFhAG5kZABpamkAcGFhAHlubgB2cHAAf3V1AH55 - eQB8fX0AgUpKAI1PTwCLWFcAhlhYAI9ZWQCKXFsAm1ZWAJJZWQCWWVgAmlpbAJtcWwCiXFwAl2BfAIBg - YACAZ2YAgG9vAI9oaACWZWQAmGBhAJ5kZACcaWoAmm9vAIV0dACNcHAAiXZ2AIB8fACac3IAm3V0AJ51 - dQCZfHwAnHx8AKNmZgCnZmYAqmJiAK5jYwCvb24AtWVmALBtbgC5bW0AvmxtAKx+fQCxcnIAtHBwALZz - dACydXQAtnd2ALlwcAC5dnYAt3p5ALh5eAC8fHsAun18ALx+fQDGb3AAxnBxAMdzdADAd3YAyHJzAMlz - dADJdXYAynd4AMd/fwDMe3wAzXx9AHunbwBhvHIAYsN4ANuLOwC2hn4A4Zt5APC3ZABte9sAX47+AHWM - 5QAl0foAY+P8AIeDgwCFhoYAioSEAJOIiACWi4sAmpKRAKGCgQCmhYUAqYGBAKuDhACniooApYyMAKiO - jQCyhYMAvoWEALeNjQCrj5AAr5eXALSVlAC9lJMAmbCEAK6RugDBgYAAwoSCAMWDhADChoQAxYeFAM6A - gQDFiIYAxoqIAMqIiQDMi4oAy4yKAMiPjQDPj44A0ISFANKJigDUi4wA04+NANWNjgDKkY8A0JCOANud - iQDWj5AAzJSTAM2XlgDGm5oA1pGSANOUkgDVl5EA1pOUANiVlgDYmJUA2ZeYANKenADbmpsA3pmYANuc - mgDbn5wA1aacAN6gngDqqZoA3Z+gAMyjowDCra0AxqysAMqpqQDboaAA3qKiAN6logDbp6UA3aWkANer - qgDWsbMA0rW0ANe0tADfs7IA4aSiAOGlpQDkp6UA46imAOWopgDsraIA6qimAOGoqADhrqwA6a2rAOqv - rADpsK4A7LGuAOGzswDlsbEA7bKxAO+1sgDotrYA5rm3AO+4twDot7sA6bq5AOu9uwDrv70A8bazAPG2 - tADxuLUA9Lm2APC9uwD2vboA9L+9APi+uwD4v7wA8sC+APXAvgD5wL0AkILJAKqXzACsu8cAqr/LALLV - 3QDawMIA48XFAOvDwQDswMAA7cTDAO/ExQDgxsgA8cbEAPTGxADwyskA9MvJAPLNzQD21dYA+NjZAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAMEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHCEcBQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAayU9PSYbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQlBSQiJpAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAM0pSUlJQPRcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnUlJSUlJGFQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAFJSUlJSUkoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzUlJSWVJZfxAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5XWYqKioqGDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoqMkpqa - mqAsAAAAAAAAAAAAAAAAAABoNAAAAAAAAACMjJyuvLy2toYHAAAAAAAAAAAAABcOIDouBgAAAAAAc4yc - tsHKysPAriIKAAAAAAAAABYgRk1LTX+DEAAAAABukqXB4ejo4dHPQCIEChcXEwggTXV/k66unKMpAAAA - AG6Srsro6ero0dN/Rk1NRk2Dg4STrsbh4cHAt2sAAAAAbpKuOXPe6ajW15KGg4OGk528yuHo5eHPz882 - AAAAAAB4jCkDAxSoMabXt5yjt8ro3ePo5dbT09HTdAAAAAAAAABGcBFoGgFwdtfDwHxi2dpmZcrX09HP - z0MAAAAAAAAAAHh/qWwaOa6cz9PNZGPYsdzbzc3DwLk2AAAAAAAAAAAAAAAvhpKakoyg19HNyKS5wHtb - orZ/cwAAAAAAAAAAAAAAAAAANkaKWVm5zb1gYV6cXVxfNgAAAAAAAAAAAAAAAAAAALGvlTIuP1K5tqCR - l4xfLwAAAAAAAAAAAAAAAAAAsbPBenkAAAAAcCVYjE0scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////+f///+D////A////wH - ///4B///+Af///gH///wB///8Af///AH/+fwA/8D4AH8AeAAAAHgAAAB4AAAA+AAAAfwAAAP8AAAH/wA - AD//AAD//gAD//B4D////////////////////////////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAAWlJSAHBJSQB1SEgAe1dXAHdYWAB5WlkAel1dAGBiYgB1bGwAfWtrAHh2 - dgB9fn4Ag01NAIRXVwCIV1cAhV9eAItbWgCgX14ApV1dAJhgXwCNYGAAnWtqAJhtbQCCdnYAh3x8AI15 - eACeensAqGBgAKhoZwCga2oArGpqALNqagCzb28AtG1tALltbQCxb3AApnVzAKlzcwCqdHMApnp6AKd+ - fgCpensAq3x7ALZ3dgC8dHQAvH59AMZvcADGcHEAxXN0AMhycwDJdncAynh5AMx5egDNfn8Ajo1wAOek - VgDGgH8A4p53AEZ2+gB8u4AAd8PaAIuEhACOh4cAjo6OAJ+DggCejo4Ao4SEAKSIiACsi4sAqo2MAK6P - jgC+gYAAvoaGAL+KiACskJAAtJeXALWenQC5np4At6iOAKmyjgC9nroAwYSDAMaGhADOhoYAxomHAMiK - iQDJjYwA0oeIANOOjwDUjY0A2ZiPANaPkADGkZEAx5eXAMySkADGnZwA1ZOSANeTlADWl5YA2JSVANGZ - mADan50A3J6dAOCcmwDVoJ8A7K2fAMOtrQDXo6IA3aCgAN+kpADVq6oA3ay3AMu0tADPtrYA3L+/AOCi - oQDhpqUA5KelAOinpgDlq6gA46usAOOvrQDqrqwA7LGuAOayswDjtrQA5re1AOqysQDts7EA57y6AO+8 - ugDrvL0A8LOwAPC1sgDwtrQA87q3APS6twD2vboA8b69APi/vAD2wb4A+cC9AJmTzwDHqMMAu8PMAIHf - 8QDByNAA7cLCAO3FwwDvxsQA5cjIAOzOzgDwxcQA9cbEAPPP0AD10tIAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - BQMJAAAAAAAAAAAAAAAAAAAAAAAAAAAPHBMNAAAAAAAAAAAAAAAAAAAAAAAAABojLy8TAAAAAAAAAAAA - AAAAAAAAAAAAAB0wMDAiPgAAAAAAAAAAAAAAAAAAAAAAQjAwMDAtGAAAAAAAAAAAAAAAAAAAAAAAFzIy - NTU5CgAAAAAAAAAAAAAAAAAAAAAAIjZYWFxcBwAAAAAAAAAAAAAAAAAAAAAANlxtdW11JQAAAAAAAAAA - PgcRDgkAAAAAXG1/lISAZgMAAAAAABkVLC5SVhcAAABNY3WWnJuLfB8UBAcQHkhWaX91dSsAAABNY2BM - mJeCiVJSVl9laX+WloSJgEIAAAAAXAEIC0tGjnR0dJaRk5qNjIyJQwAAAAAAJkNADBtdjIaPO1GSPYuJ - hnVEAAAAAAAAAClISWRcd4xwkGp8UE90VwAAAAAAAAAAAAAAKSQ1NYZ7OjhbPDdGAAAAAAAAAAAAAHNv - YGsAKyJoXFYmRwAAAAAAAAAAAAAAcnIAAAAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// - /wD///8A////APx//wD4f/8A8H//APA//wDgP/8A4D//AOA//wDgP8EA4B8BAMAAAQDAAAEA4AADAOAA - BwDwAB8A/AA/APCA/wDn9/8A////AP///wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAABjZGQAdmRjAHtpaQB/eHgAgU9PAKBaWgCFbm0AlWtqAKptbgCwZ2cAsGhoAKxw - cACteHkAvnJyAMZvcADGcHEAy3l5AMx9fgCFmXQAwIB/ANeUfQDhoX8AlIqJAJWMjACYiIgAoIaGAK2K - igCxh4cAvoGAALKKigC4iYgAuJWVAL2cnACss50AuqKhAL+mpgDLgoIAxImHAMeNjADLkI8AxpWTANCS - kQDYlZUA1J6dANqZmgDdnp4A1J+oAMaiogDOr68AzLKyANi5uADhpaIA4qypAOWtqADrrqsA4bKwAOay - sgDtuLYA57++AOy4uADxtLIA8be0APa9ugDswL4A9sG+ALCcxwC5ncIA06zBALnH0QC2ytQA7sPDAPLS - 0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAZBgUAAAAAAAAAAAAAAAAACw8KAAAAAAAAAAAAAAAAGhAQDgAAAAAAAAAAAAAAAAkRESUYAAAA - AAAAAAAAAAAlKy4uBwAAAAAAAAcDAAAAKzlHPCYCAAAYCB0oKgAAAC0wSDs0FB0nLDlAOiwAAAANAQQb - Pi9DRkVBPzUAAAAAJB4cKz5EQjMiNSkAAAAAAAAAHwwRNxYVEyQAAAAAAAAxMgAAACEgAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA4/8AAOP/AADD/wAAwf8AAMH5 - AADAwQAAwAEAAMADAADABwAA8A8AAM5/AAD//wAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAkAAAAJAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAUAAAAOAEBAVUAAABUAAAANQAAABAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkFBSUvGRl5TCkpwlYuLtxDJCTQFw0NmQAA - AEkAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAwMKE8rK6V6RET2klJR/5ZS - U/+OT0//ZDc38B0QEJoAAAAyAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDAwYVzAwoopP - T/ygXVz/oFtb/55ZWf+bWFf/k1NT/1UvL9wGAwNcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AARNKipxhk5O+adkY/+uZWX/tWdo/7VmZ/+qYWH/nltb/3hERPcfERGCAAAAFgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADEZGS1zQ0LXqGdm/7ptbf/Fb3D/x3Bx/8hwcf/BbW7/q2Vl/4hPT/82HR2gAAAAIAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAB1gxMYyYXl3/vXFx/8Zwcf/HcHH/x3Bx/8dwcf/HcHH/uG1t/5NY - V/9EJia2AAAAKQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPB8fNH1MS+K4cnH/x3Fy/8dwcf/HcHH/x3Bx/8dw - cf/HcHH/wHBx/51gX/9PLCzGAAAAMwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAMAAAAAAAAAAAAAAAAAAAAALhAQFIZXVs/RjIz/1Y2O/9qYmP/eoaL/46qr/+aysv/ot7f/6rm5/+m4 - uf/otbX/5q+v/+uvrf/jqab/wYeF/28/P/QhEhKvAAAAXwAAACgAAAANAAAABQAAAAMAAAACAAAAAwAA - AAUAAAAKAAAAFQAAADAdDg9oSSkptHZHRu2dYmL+t3Z1/758e/+6enn/tnh3/7d5eP+8fn3/w4SD/7Z6 - ef9eODfbBgICTgAAAAgAAAAAAAAAAAAAAAAAAAAAPhwcJJVjYuPXkZH/2JOU/92fn//iqqr/57O0/+u8 - vP/uwsL/78XG/+/Exf/twMD/67i4/+60sv/wtrP/zZKQ/5taWv9xQED2MRsaxAgEBIcAAABaAAAAQQAA - ADcAAAA2AAAAOwAAAEUEAgJZHA4OfUcnJ7l5SkntqGxr/8CAfv/DgoH/vH59/7p+ff/DiIb/zZGP/9GT - kf/UlJP/1peV/9eZl/+GVlbuGQsLVwAAAAcAAAAAAAAAAAAAAAAAAAAARiIiLZ9rauvZk5P/2peY/+Ck - pP/lsLD/6ru7/+/Fxf/yzMz/9NDQ//PPz//xycr/7sDA//K5tv/1u7j/36Kg/6dmZf+mZWX/j1ZW/WM6 - OutDJSXQNBwcvDAaGrQ0HBy1PiIivUwsLMtkPDzfh1VU9a1xcP/EhIP/xIWE/7+Cgf/Ch4b/zZST/9mk - ov/grq3/4a6t/96lo//eoJ7/36Kg/+Cjof+IWVjnGwwMQwAAAAIAAAAAAAAAAAAAAAAAAAAARyQkL6Br - auzZk5P/25qb/+GnqP/ntLT/7cDA//LLy//209T/+NjY//fX1//00ND/8cbG//W9u//4vrz/46ak/7d0 - c/+vb27/s3Jy/7d2df+ucXD/pWpp/6Npaf+nbWz/sHVz/7p9fP/EhYT/yImI/8WIhv/DiIb/ypGP/9eg - n//hr63/57q5/+rCwP/rwsD/6bq4/+evrf/nq6n/6q6r/9qgnv9wRkbDBwAAHgAAAAAAAAAAAAAAAAAA - AAAAAAAASCQkLZ1nZuvYkpP/25uc/+Opqv/qtrf/7cHB//TOzv/52Nj/+tzc//na2v/xz9D/8MfH//fA - vv/6wb7/6a6r/8OBgP/DgoD/vX58/7h7ev+8fn3/woOC/8aHhv/HiYj/xoqJ/8aLif/Ijoz/zZST/9eg - nv/hrav/6Lm3/+zCwf/uyMf/78nH/+/Dwf/uvLr/7ba0/+60sf/vtLL/8ri1/7J+fflMKSltAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAQyEhI5JcXOPWj5D/3Juc/8qVlf+BZmb/bl5e/4l4eP/AqKj/8tPT//LO - zv+5p6b/w6qq//fBv//7wr//8LWy/86Ojf/Ojoz/0ZGP/9GSkP/OkY//zpOR/9GamP/VoJ//2qel/+Gv - rf/nt7X/6727/+3Dwf/wycf/8czL//LLyf/yxsT/8cC+//G7uf/yubf/87m3//S7uP/4vrv/1J6c/3JH - RrAdCgsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANRcXEYJNTcvPiIn/15aW/2VNTf85Ojr/Q0VF/0JF - RP9dXFz/n5GR/+S/v/+bh4f/hXp6/+25uP/7wr//9bu4/9qcmv/Zmpj/252b/96gnf/ipKH/5q+s/+u+ - vP/vycf/8srI/+3Hxv/wysj/9c7M//TNy//0ysj/9MbE//TBv//1vrz/9r26//e9u//4vrv/+L+8//vB - vv/hqqf/g1ZVzDwcHC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW4+Ppq/env/05OT/2ZX - V/9rbm7/fX9//3l6ev99f3//cHJy/5F9ff+ff3//XFhY/9eop//8wr//+L+8/+Wppv/ipaP/5qil/96i - pP/Kmaz/1qi1//LGxP/tyMf/qb3J/23E3P9kw9//vMTN//jDwP/3wb//+MC9//i/vf/5v73/+b+8//i/ - vP/3vrv/+L68/92mo/+IWlnRRSMjOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcv - L0mbX1/y15GS/6GAgP9XV1b/iYuL/4CBgf98fX3/cnR0/1dPT/++j4//km9w/9Sfnv/6wL3/+cC9/+6z - sP/ssK3/0Z+u/4OH1P9YffD/QGPs/7KYyv/Ct7z/Ytrz/3Ts//8s2f//cbvU//m+u//4v7z/+L67//e9 - uv/1vLn/9Lq3//O5tv/zuLX/0puZ/4RVVctGIyM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADIXFwdrPDySq2ts/diZmf/ApKT/sKur/4CBgP95enr/iYiI/49zdP/do6P/36Ch/96e - nv/zuLX/+sK///W7uP/1ubT/qZC//2qY+/9tnf//MGT6/56FxP/esK//nMbS/57n8/9+z+T/ybG3//a6 - t//zubb/8re0//C1s//utLH/7rKw/+qvrP++iIb9dklJtkMgISoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHIyMSazw8kZ5hYvXNjI3/2aSk/7OMjP+bd3f/sIKC/9KV - lv/cnJz/2peY/9aRkf/koqL/+sG+//nAvf/5v7z/4amw/6qZx/+aouP/qpvP/+mxtv/2urj/6rGv/+S6 - u//ptrX/466n/+Ovqf/ssK7/6q6s/+isqv/oq6n/2J2b/6JubfFoPT2NOxoaFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBoaCFowMFd7SEjAomZm9sWC - gv/XkZL/25SV/9iSk//Wj5D/1IyN/9KHiP/UiIj/8bOx//rCv//3vbv/9ru4//O3s//xuLX/7q6e/+ej - hf/npIn/7bCp/+Otp/+KsX3/ULdm/1WjWv+7oYz/5KWk/9uenP+4gH79glJRzVYuLlQgCAkGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAA8HBwQVy4uS3FBQaCPV1fjsG5v/cmAgf/ShYb/0YKD/85+f//LeXr/2I2M//e8uf/1vLn/7rOx/+2y - sP/lpJX/5qFY/+6xXP/djS3/35h9/86gl/9SwW7/Nd90/0WxXP+vlH//wYSE/49cW+VlOTmBQR4eHAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGk7OhqIWFd8oG5u8J5qav+eX2D/tmts/8Z0df/KdHX/yXJz/92T - k//3vLn/7LGu/+Snpf/dm5L/4Z1q/+61dP/fmmX/15WM/9eYlv/Bm43/r6uR/6uNgP+WYWDtbkBAnUwn - JzQVAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiFJSBnhC - QgpqNDQJWSUlB08dHQdfKisKfENDFJJWViinbGtRvYOCjtOcm8/pt7X157y6/7eOjfhxRUW7aTk5m4RK - StehWlr6uGdo/8Zwcf/dkpH/8bSx/+OnpP/YmZj/1ZWT/9ealP/Vl5X/0JCP/8eIhv+zdnb/lFtc6nA/ - QKRSKio/JQwNBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADTn6AB2qioDMuUlCHBhYU8voCAWcCBgXTEhoaLzZGQqdeensngrKvn47Sz/NOop/+yiIfyi2Bgs2k+ - PlZXKysPAAAAAUYlJRxcMTFYcj4+pYpMTeWmXF3+xnl5/9+Zl//dnJr/z46M/8KCgf+vc3L/ll9e831L - S8hlOTl/TigoMy0REQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABzQUIDnmprDriGhifHlpZMzp6eeNCgoZ7On5+2yJqaybuPj9WnfHzVj2RkunVJ - SYNbLy8/PRQUCgAAAAAAAAAAAAAAAAAAAAAAAAAAKRUVBU0pKSphNDRtd0BAsotNTd2ZW1vrkVlY4HtJ - Sb5lOTmCUysrQTsbGxEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCwsA2Y4OA5xQkImdkhIRHhKSll0R0dibUBAWWI2 - NkNUKCgoOhISDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhkZB0km - Jh5LJiYsRSEhITATFAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD/+H////8AAP/gH////wAA/8Af//// - AAD/gA////8AAP+AD////wAA/wAP////AAD/AA////8AAP4AB////wAA/gAH////AAD8AAf///8AAPwA - B////wAA/AAH////AAD8AAf///8AAPgAB////wAA+AAH//4HAAD4AAP/8AEAAPgAAf/AAQAA8AAA/wAA - AADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAEAAPAAAAAAAQAA8AAAAAADAADwAAAAAAcAAPAA - AAAADwAA+AAAAAAfAAD4AAAAAD8AAPwAAAAAfwAA/gAAAAD/AAD/gAAAA/8AAP/gAAAH/wAAgAAAAB// - AAAAAAAAf/8AAAAD4AP//wAAgB/8H///AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAYAAAAZAAAAGQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAARCQkYOh8fb0ooKK80HByiCQUFTAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAIhERFmA2Np2ITUz3lVNT/4dLS/5IKCi9AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAANjODiBllhY+61kZP+vY2P/pV5e/3xHRvEhEhJfAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAASSgoN41VVeS6bW3/xW9w/8dwcf+9bG3/klZW/jogIIEAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1RkWcs2xs/8dxcv/HcHH/x3Bx/8Zwcf+iYWH/SSkpmAAA - AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUC0tMZtgX+fGcnP/x3Bx/8dwcf/HcHH/x3Fy/61q - av9UMTGqAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxRER1tm9v/8hxcv/HcHH/x3Bx/8dw - cf/HcnP/tnRz/185OboAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAACIxXV7TEdHT/yHJz/8l1 - dv/Kd3j/ynd4/8p4eP/Bf37/bURDywAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNKysjo2Zm4Mt4 - ef/NfH3/z4GC/9GFhf/RhYb/0YWF/82Mi/9+UVHeCAICOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAACwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGc+ - Pkm1c3P30IGC/9OJiv/XkZL/2ZaW/9mWl//YlJX/2JmY/5hnZfMeEBBrAAAABwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA0FAgItHhAQWzAbG4IqFxeHDQcHWwAAABkAAAAAAAAAAAAA - AAAAAAAAek1MdMN/f//VjI3/2piZ/9+io//hqKn/4qmp/+Clpf/jpqT/wImH/04xMLwAAAA6AAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABEbDg5GRygokW5CQs+MVlbxnGJh/JdfXvxnPz7hHA8PbgAA - AAwAAAAAAAAAAAAAAACMW1qbz4qK/9qXl//gpqb/5rKz/+q6u//rvLz/6La2/+qxr//epKL/j1lZ+DUc - HLACAQFPAAAAHQAAAA8AAAAPAAAAEwAAACIbDg5MVDExnYZUU+SpbWz+uXl4/7x+fP/AgoD/xoeF/72A - f/9fOzu1AAAAHAAAAAAAAAAAAAAABJhkZK/VkZH/3Z+g/+axsf/twMD/8svL//LNzf/vxcX/8Lq4/+6z - sf+1dHP/j1VU+144N9g7IiKqMhwclDcfH5RGKSmiYTw7v4tZWOiydXT+woOC/8aKiP/Ol5X/2aWj/9ui - of/cnpz/2pyb/35TUrgAAAAVAAAAAAAAAAAAAAAFmmVkstaTk//hpaX/7Lm6//TLy//419f/+NnZ//TP - z//1wb//9Lq3/8aGhP+1dHP/s3Rz/6xwb/+pb27+rnNy/7Z7ev/BhIL/yY2L/8+WlP/apqT/5be2/+vB - v//rvrz/6bKw/+uvrf/Um5n/bUVEgAAAAAMAAAAAAAAAAAAAAAOTXV2q1ZGR/9CYmP+dfX7/o4yM/9e8 - vP/z0tL/zLOz/+u8u//5v7z/1peV/8uLif/Ki4r/yoyL/86Ukv/TnJv/2qSi/+Gtq//nuLb/7cPB//DJ - x//xxsT/8b+9//G6t//zubf/77az/6d1dM89Hx8lAAAAAAAAAAAAAAAAAAAAAIJOTojNiIn/jGlp/01O - Tv9UVlb/dnNz/7uhof+Pfn7/xJ+e//zCv//lqKb/3J2b/+Chnv/hpaT/7Ly5/+vHxv/MxMn/0MjN//LK - yf/1x8X/9sLA//a/vP/3vrv/+L+8//S7uP+5hoXhYTo5RwAAAAAAAAAAAAAAAAAAAAAAAAAAaTs7RrVz - dPKmfn7/cXJx/4SGhv97fX3/b2Zm/516ev+7kJD/+sG+//C2s//lqqr/rpbA/3aB2/+ql83/tMHK/2jc - 9P9OzOz/2r3B//q/vP/3vrv/9ry6//a8uf/ss7D/tYGA32c+Pk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAvEhIHg01Njbp9fvrCn5//nI+P/4R7ev+fgID/2Jyd/9ybnP/ytrT/+b+8/+ewtf+Mld3/ZI36/5eI - zv/Ttrn/sNLc/6/Czv/stLT/8re0/++0sf/tsq//2qCe/6Rxb8phODg+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABCIB8MeUZGbqRpata8gYH8x4mJ/9eTk//YkpP/04qL/+Cbmv/5wL3/9726/+Sw - t//Zrrn/56qY/+2smf/lr6n/nLWJ/4Gtdf/Pppn/3qGf/7yEg/KJWViYTyoqIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQh0dGXJAQGOXXl7NtnR1/8V7fP/MfH3/znt8/+il - o//0urj/7LCu/+Whg//rq13/35VX/9Kek/9yvXz/ZbNv/6iCdfqYY2O/aj4+TCUJCgcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACcamsBjFRVB4FERAh9PT0JjU1ND6VnZx+/hINF0JqZiNOjoty0iIf2hFBQw5lX - V8+wY2P4xXR0/+aioP/oq6j/2pqT/92fif/Vlor/yYqJ/7N8efiVZmPGdERFYkEfHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALiFhgXFkJEdx5CQSMqSknbNlZWbz5uaws2cnOXBlJPnqH18r4dc - XFFULy8OSCUlFm07O0+FSUmeoV1d3sF9fPrGhoX/snZ295xkZNiFUlKbbD4+T0UdHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc0JDA5FgYRKdbm46onR0Zp9ycnuWampzhFlZVmY6 - OikvDAwHAAAAAAAAAAAAAAAAAAAAAB0ODgRULCwhbjo7UXhERGVrPDxHTCYmGxAAAQMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//////////////////////D////gf///wH///4A///+AP///AD///wA///8AP//+AD - ///gA//D4AH+AeAA+ADgAAAAwAAAAMAAAADAAAAB4AAAA+AAAAfgAAAP8AAAH/wAAD8AAAD/AAAD/wB4 - D//H////////////////////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABMAAAAtAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgIO1cwMM1qOjrsHhAQmwAA - ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAATCgogfUhI6ahgYP6lXV3+f0hI9wIBAT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGBgFPLy6kuW1t/sZv - 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 - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/A7800/A7800FilterSettings.Designer.cs b/BizHawk.Client.EmuHawk/config/A7800/A7800FilterSettings.Designer.cs index 45fafbbdc4..40f385bf29 100644 --- a/BizHawk.Client.EmuHawk/config/A7800/A7800FilterSettings.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/A7800/A7800FilterSettings.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(A7800FilterSettings)); this.OkBtn = new System.Windows.Forms.Button(); this.CancelBtn = new System.Windows.Forms.Button(); this.label4 = new System.Windows.Forms.Label(); @@ -100,7 +99,7 @@ this.Controls.Add(this.Port1ComboBox); this.Controls.Add(this.CancelBtn); this.Controls.Add(this.OkBtn); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController_MultiSize; this.Name = "A7800FilterSettings"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Filter Settings"; diff --git a/BizHawk.Client.EmuHawk/config/A7800/A7800FilterSettings.cs b/BizHawk.Client.EmuHawk/config/A7800/A7800FilterSettings.cs index d833f96787..c0732ca002 100644 --- a/BizHawk.Client.EmuHawk/config/A7800/A7800FilterSettings.cs +++ b/BizHawk.Client.EmuHawk/config/A7800/A7800FilterSettings.cs @@ -1,25 +1,26 @@ using System; using System.Linq; using System.Windows.Forms; - -using BizHawk.Client.Common; using BizHawk.Emulation.Cores.Atari.A7800Hawk; namespace BizHawk.Client.EmuHawk { public partial class A7800FilterSettings : Form { - private A7800Hawk.A7800SyncSettings _syncSettings; + private readonly MainForm _mainForm; + private readonly A7800Hawk.A7800SyncSettings _syncSettings; - public A7800FilterSettings() + public A7800FilterSettings( + MainForm mainForm, + A7800Hawk.A7800SyncSettings syncSettings) { + _mainForm = mainForm; + _syncSettings = syncSettings; InitializeComponent(); } private void A7800FilterSettings_Load(object sender, EventArgs e) { - _syncSettings = ((A7800Hawk)Global.Emulator).GetSyncSettings().Clone(); - var possibleFilters = A7800Hawk.ValidFilterTypes.Select(t => t.Key); foreach (var val in possibleFilters) @@ -37,8 +38,7 @@ namespace BizHawk.Client.EmuHawk if (changed) { _syncSettings.Filter = Port1ComboBox.SelectedItem.ToString(); - - GlobalWin.MainForm.PutCoreSyncSettings(_syncSettings); + _mainForm.PutCoreSyncSettings(_syncSettings); } DialogResult = DialogResult.OK; @@ -47,7 +47,7 @@ namespace BizHawk.Client.EmuHawk private void CancelBtn_Click(object sender, EventArgs e) { - GlobalWin.OSD.AddMessage("Filter settings aborted"); + _mainForm.AddOnScreenMessage("Filter settings aborted"); DialogResult = DialogResult.Cancel; Close(); } diff --git a/BizHawk.Client.EmuHawk/config/A7800/A7800FilterSettings.resx b/BizHawk.Client.EmuHawk/config/A7800/A7800FilterSettings.resx index 91f294b89b..29dcb1b3a3 100644 --- a/BizHawk.Client.EmuHawk/config/A7800/A7800FilterSettings.resx +++ b/BizHawk.Client.EmuHawk/config/A7800/A7800FilterSettings.resx @@ -117,508 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAwAMDAQAAAABABoBgAAxgAAACAgEAAAAAQA6AIAAC4HAAAYGBAAAAAEAOgBAAAWCgAAEBAQAAAA - BAAoAQAA/gsAADAwAAAAAAgAqA4AACYNAAAgIAAAAAAIAKgIAADOGwAAGBgAAAAACADIBgAAdiQAABAQ - AAAAAAgAaAUAAD4rAAAwMAAAAAAgAKglAACmMAAAICAAAAAAIACoEAAATlYAABgYAAAAACAAiAkAAPZm - AAAQEAAAAAAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAQAAAAEAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAHR3AAAAAAAAAAAAAAAAAAAAAAAAAAAAdHdEcAAAAAAAAAAAAAAAAA - AAAAAAAAAHd0d3QAAAAAAAAAAAAAAAAAAAAAAAAAAEd8d3UAAAAAAAAAAAAAAAAAAAAAAAAAB3yHfHZw - AAAAAAAAAAAAAAAAAAAAAAAAd3fIyHVwAAAAAAAAAAAAAAAAAAAAAAAAfHh3jIxwAAAAAAAAAAAAAAAA - AAAAAAAHd8jIyHdgAAAAAAAAAAAAAAAAAAAAAAAHd4yHfIdAAAAAAAAAAAAAAAAAAAAAAAAHyMjIyMhQ - AAAAAAAAAAAAAAAAAAAAAAB3d3eMh4dgAAAAAAAAAAAAAAAAAAAAAAB8jIyIfIdQAAAAAAAAAAAAAAAA - AAAAAAB3h4jIiMh3AAAAAAAAAAAAAAAAAAAAAAB8jIeHeIjHAAAAAAAAAAAAAAAAAAAAAAeIiHh4eMiE - AAAAAAAAAAAAB0dHcAAAAAd8h4eIiIiHcAAAAAAAAAB0d3d3RwAAAAeIeIiIiIh3RwAAAAAAAHR3d8h3 - dAAAAAfIh4iIiHiIx0cAAAAAdHh3eIeHhwAAAAeHiIiIiIiId3R3dHR0eHd4h4eHhAAAAAd4eIiIiIiH - x3d2d3eId4iIiIiIhwAAAAd4eIiI+IiIh3d3eHh3iIiIiIeHwAAAAAfIjHeIiIiIyIeHh4iIiIiIiIiI - cAAAAAeIQ0R3h3iIiMiIiIiIiIiIiIiEAAAAAAfIR3d3d0iIiIh4iIeIiIiIiHhAAAAAAAB4d3d3SHiI - h4fTiIi3iIiIeIwAAAAAAAB3h4d3eIeIiHiJiIuIiIh4jHAAAAAAAAAHyId3h3h4iIh4iIiIiIiHeAAA - AAAAAAAAB8iMiMjIiIiIh4h3aMjHAAAAAAAAAAAAAAdYyIeIiIiMjId6d4eAAAAAAAAAAAAAAAAHdsjH - eIeH6MiId3AAAAAAAAAAAAAAAIiIh4V8jIh4eIfHcAAAAAAAAAAAAACIiIh3AAAHd3h3fHcAAAAAAAAA - AAAAAAiIjHgAAAAAAHx8eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAA - AAd0dAAAAAAAAAAAAAAAAAB3x3cAAAAAAAAAAAAAAAAAd3fHcAAAAAAAAAAAAAAAB3yMh3AAAAAAAAAA - AAAAAAfIeMdwAAAAAAAAAAAAAAAHjIyHQAAAAAAAAAAAAAAAfId4yHAAAAAAAAAAAAAAAHjIyIdQAAAA - AAAAAAAAAAB3iId4YAAAAAAAAAdwAAAAjIiIiIUAAAAAAHd3dAAAB4iIiHh8cAAAAHd3x4dwAAd4iIiI - h3Z3d3R3yIh4cAAHh4iIiIfHd3d4iIiIh3AAB3jHiIiIiHeHiIiIiIwAAAh3dXh4iMiIiIiIiIhwAAAA - yGd0d4iIeIi4iIiMAAAAAIeHd4iIh32IiIiIcAAAAAAAd4jIyIiIiHeHyAAAAAAAAAB3h4iIh8h3dwAA - AAAAAAAIh8fIh4eIaAAAAAAAAACIiHAAB8jIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////////////////////n////g////wP///8B///+Af///gH///4B///8Af///AH///wB//n8AP/A+AB - /AHgAAAB4AAAAeAAAAPgAAAH8AAAD/AAAB/8AAA//wAA//4AA//weA////////////////////////// - //8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRwAAAAAAAAAAAAB3dAAAAAAAAAAAAA - d8dwAAAAAAAAAAAAfId3AAAAAAAAAAAHeMjHAAAAAAAAAAAHyHh3AAAAAAAAAAAHh3eEAAAAAAAAAAAI - yIiHAAAAAHd2cAAIiIiIQAAAd3d4UACHiIiId3d3eHiIcACHh4iIyHeHiIiIcAAIR3d4iIiIiIiMAAAH - d3eIh3iIiIhwAAAAeMh4iIiHiMAAAAAAAHfIiMh4aAAAAAAAiIgHyIfIAAAAAAAIgAAAAIAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD8f/8A+H//APB/ - /wDwP/8A4D//AOA//wDgP/8A4D/BAOAfAQDAAAEAwAABAOAAAwDgAAcA8AAfAPwAPwDwgP8A5/f/AP// - /wD///8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAd1AAAAAAAAB8cAAAAAAAB4eAAAAAAAAHyMgAAAAAAAiIhwAAAHcACI - iHcAd3hwAIz4jIeIiIAAd3eIiIiIAACHeIiIiHAAAACMeMh4AAAAiAAIgAAAAAAAAAAAAAAAAAAAAAAA - AAD//wAA//8AAP//AADj/wAA4/8AAMP/AADB/wAAwfkAAMDBAADAAQAAwAMAAMAHAADwDwAAzn8AAP// - AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAA9OzsAZD8/AGg8 - PABtPj4AQkNDAEZIRwBWQkIAV0REAF5AQABbRkYAVklJAFxPTwBTU1MAXFJSAF5ZWQBkQEAAYUREAGZF - RQBqQkEAYEtLAGNPTwBwQUEAfUZGAHJKSgB2SUkAfU9PAGBRUQBgVFQAZlZWAGZYWABqWVkAclZWAHpU - VAB9W1oAbmJiAGtoaABtaWkAcWdnAHdnZwB8Y2MAe2pqAHJxcQB+dHQAd3l5AHl6egCGT08AiU9PAIFP - UACGU1MAjVFRAIlWVgCMV1cAg1xbAIxaWQCQUlIAlVJSAJFXVgCXVVUAmVVVAJZaWQCSXV0AlV9eAJpZ - WgCeW1sAml5eAKBZWgCgXFwAql9fAIRmZQCIZWQAhWtrAI5ragCTYmEAnGBhAJ9kYwCaZmYAk25uAJ1s - awCFdHQAiXd3AIt+fgCWd3cAmHR0AJV5eQCbfHwAo2JhAKZhYQChZWUApGVkAKplZACsZGQAqmhnAKZr - agCnbGsAqmloAKlubQCsbW0AtGZnALhsbACxb3AAv29wAKVxcACrc3IAr35+ALN0cwC5c3MAvXBxALR4 - dgC1fHsAunt6AMNtbgDGb3AAw3FyAMZwcQDGdXUAyHR1AMp3eADBeXkAxnt7AMB/fgDLensANLBSAEWf - TgBBtFwAPMdnADHkdgDciiIAvoF/AISrdwDln0sA35lhAN2XfADgmmEA8LdlAO61cAArWPIALWT+AEh5 - +gDOf4AAfoCAAHiA1ABZv9wAZrnUAGK+2ABxnv4Ad6P/ADPX/QBw0OcAW+D7AIKEgwCPgoIAjI2NAJuC - ggCUiIgAmYqKAJGSkgCjhIQAqoKCAKKLiwC+hIMAsoqKALaSgQCum5sAsZubALqqlQCdgr4Ar6ytALGh - oAC6pKQAwoSDAMyBggDGiIYAyYiHAMWMigDMjIoA0ISFANKHiADUjIwA2Y6NAMCUjQDIk44A0JCPANaP - kADHlZQAzpSSAMScmwDUkpIA2ZSVANWYlgDampcA2ZeYANWcnADam5sA4p2cAMChjwDeoJ4A5aCFAOaj - jQDlpJoA2p6hAMOkowDOoaEAy62tANegoADdoqEA2aGpANGsrwDdq6kAwbG4ANGysQDdtLQA2ri3AOGk - owDjqKYA66ylAOGnqADjq6oA6a2rAOOwrwDssK4A5K+wAOaztADttLIA57i2AO24tgDmurgA6rq6APC1 - swDyuLYA9Ly5APi+uwD1wL0A+cC9AKKMwACkk8QAqprMALSayACptsEAlaDkAOy/wACRxtQAgOv9AJnr - 9wDEwsoA5sbGAOzCwgDuyMcA7MzMAPPEwgDxy8oA9dPTAPja2gAAAAAAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAADLytDi9tOemQAAAAAAUy9EecLEsa1uPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj11Mme - VakAAAAAAAAAAAAATS84M0akAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE - AAAAAAAAAAAAAAABAAAAAQAAAAAAAFFNTQBRUlIAU1RUAGJHRwBiT08Aa0lIAGJTUwBrVlYAYllZAGZc - XABpWloAb1xbAHNTUwB7V1YAc1hXAHFbWwBkZWUAaWFhAG5kZABpamkAcGFhAHlubgB2cHAAf3V1AH55 - eQB8fX0AgUpKAI1PTwCLWFcAhlhYAI9ZWQCKXFsAm1ZWAJJZWQCWWVgAmlpbAJtcWwCiXFwAl2BfAIBg - YACAZ2YAgG9vAI9oaACWZWQAmGBhAJ5kZACcaWoAmm9vAIV0dACNcHAAiXZ2AIB8fACac3IAm3V0AJ51 - dQCZfHwAnHx8AKNmZgCnZmYAqmJiAK5jYwCvb24AtWVmALBtbgC5bW0AvmxtAKx+fQCxcnIAtHBwALZz - dACydXQAtnd2ALlwcAC5dnYAt3p5ALh5eAC8fHsAun18ALx+fQDGb3AAxnBxAMdzdADAd3YAyHJzAMlz - dADJdXYAynd4AMd/fwDMe3wAzXx9AHunbwBhvHIAYsN4ANuLOwC2hn4A4Zt5APC3ZABte9sAX47+AHWM - 5QAl0foAY+P8AIeDgwCFhoYAioSEAJOIiACWi4sAmpKRAKGCgQCmhYUAqYGBAKuDhACniooApYyMAKiO - jQCyhYMAvoWEALeNjQCrj5AAr5eXALSVlAC9lJMAmbCEAK6RugDBgYAAwoSCAMWDhADChoQAxYeFAM6A - gQDFiIYAxoqIAMqIiQDMi4oAy4yKAMiPjQDPj44A0ISFANKJigDUi4wA04+NANWNjgDKkY8A0JCOANud - iQDWj5AAzJSTAM2XlgDGm5oA1pGSANOUkgDVl5EA1pOUANiVlgDYmJUA2ZeYANKenADbmpsA3pmYANuc - mgDbn5wA1aacAN6gngDqqZoA3Z+gAMyjowDCra0AxqysAMqpqQDboaAA3qKiAN6logDbp6UA3aWkANer - qgDWsbMA0rW0ANe0tADfs7IA4aSiAOGlpQDkp6UA46imAOWopgDsraIA6qimAOGoqADhrqwA6a2rAOqv - rADpsK4A7LGuAOGzswDlsbEA7bKxAO+1sgDotrYA5rm3AO+4twDot7sA6bq5AOu9uwDrv70A8bazAPG2 - tADxuLUA9Lm2APC9uwD2vboA9L+9APi+uwD4v7wA8sC+APXAvgD5wL0AkILJAKqXzACsu8cAqr/LALLV - 3QDawMIA48XFAOvDwQDswMAA7cTDAO/ExQDgxsgA8cbEAPTGxADwyskA9MvJAPLNzQD21dYA+NjZAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAMEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHCEcBQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAayU9PSYbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQlBSQiJpAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAM0pSUlJQPRcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnUlJSUlJGFQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAFJSUlJSUkoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzUlJSWVJZfxAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5XWYqKioqGDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoqMkpqa - mqAsAAAAAAAAAAAAAAAAAABoNAAAAAAAAACMjJyuvLy2toYHAAAAAAAAAAAAABcOIDouBgAAAAAAc4yc - tsHKysPAriIKAAAAAAAAABYgRk1LTX+DEAAAAABukqXB4ejo4dHPQCIEChcXEwggTXV/k66unKMpAAAA - AG6Srsro6ero0dN/Rk1NRk2Dg4STrsbh4cHAt2sAAAAAbpKuOXPe6ajW15KGg4OGk528yuHo5eHPz882 - AAAAAAB4jCkDAxSoMabXt5yjt8ro3ePo5dbT09HTdAAAAAAAAABGcBFoGgFwdtfDwHxi2dpmZcrX09HP - z0MAAAAAAAAAAHh/qWwaOa6cz9PNZGPYsdzbzc3DwLk2AAAAAAAAAAAAAAAvhpKakoyg19HNyKS5wHtb - orZ/cwAAAAAAAAAAAAAAAAAANkaKWVm5zb1gYV6cXVxfNgAAAAAAAAAAAAAAAAAAALGvlTIuP1K5tqCR - l4xfLwAAAAAAAAAAAAAAAAAAsbPBenkAAAAAcCVYjE0scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////+f///+D////A////wH - ///4B///+Af///gH///wB///8Af///AH/+fwA/8D4AH8AeAAAAHgAAAB4AAAA+AAAAfwAAAP8AAAH/wA - AD//AAD//gAD//B4D////////////////////////////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAAWlJSAHBJSQB1SEgAe1dXAHdYWAB5WlkAel1dAGBiYgB1bGwAfWtrAHh2 - dgB9fn4Ag01NAIRXVwCIV1cAhV9eAItbWgCgX14ApV1dAJhgXwCNYGAAnWtqAJhtbQCCdnYAh3x8AI15 - eACeensAqGBgAKhoZwCga2oArGpqALNqagCzb28AtG1tALltbQCxb3AApnVzAKlzcwCqdHMApnp6AKd+ - fgCpensAq3x7ALZ3dgC8dHQAvH59AMZvcADGcHEAxXN0AMhycwDJdncAynh5AMx5egDNfn8Ajo1wAOek - VgDGgH8A4p53AEZ2+gB8u4AAd8PaAIuEhACOh4cAjo6OAJ+DggCejo4Ao4SEAKSIiACsi4sAqo2MAK6P - jgC+gYAAvoaGAL+KiACskJAAtJeXALWenQC5np4At6iOAKmyjgC9nroAwYSDAMaGhADOhoYAxomHAMiK - iQDJjYwA0oeIANOOjwDUjY0A2ZiPANaPkADGkZEAx5eXAMySkADGnZwA1ZOSANeTlADWl5YA2JSVANGZ - mADan50A3J6dAOCcmwDVoJ8A7K2fAMOtrQDXo6IA3aCgAN+kpADVq6oA3ay3AMu0tADPtrYA3L+/AOCi - oQDhpqUA5KelAOinpgDlq6gA46usAOOvrQDqrqwA7LGuAOayswDjtrQA5re1AOqysQDts7EA57y6AO+8 - ugDrvL0A8LOwAPC1sgDwtrQA87q3APS6twD2vboA8b69APi/vAD2wb4A+cC9AJmTzwDHqMMAu8PMAIHf - 8QDByNAA7cLCAO3FwwDvxsQA5cjIAOzOzgDwxcQA9cbEAPPP0AD10tIAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - BQMJAAAAAAAAAAAAAAAAAAAAAAAAAAAPHBMNAAAAAAAAAAAAAAAAAAAAAAAAABojLy8TAAAAAAAAAAAA - AAAAAAAAAAAAAB0wMDAiPgAAAAAAAAAAAAAAAAAAAAAAQjAwMDAtGAAAAAAAAAAAAAAAAAAAAAAAFzIy - NTU5CgAAAAAAAAAAAAAAAAAAAAAAIjZYWFxcBwAAAAAAAAAAAAAAAAAAAAAANlxtdW11JQAAAAAAAAAA - PgcRDgkAAAAAXG1/lISAZgMAAAAAABkVLC5SVhcAAABNY3WWnJuLfB8UBAcQHkhWaX91dSsAAABNY2BM - mJeCiVJSVl9laX+WloSJgEIAAAAAXAEIC0tGjnR0dJaRk5qNjIyJQwAAAAAAJkNADBtdjIaPO1GSPYuJ - hnVEAAAAAAAAAClISWRcd4xwkGp8UE90VwAAAAAAAAAAAAAAKSQ1NYZ7OjhbPDdGAAAAAAAAAAAAAHNv - YGsAKyJoXFYmRwAAAAAAAAAAAAAAcnIAAAAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// - /wD///8A////APx//wD4f/8A8H//APA//wDgP/8A4D//AOA//wDgP8EA4B8BAMAAAQDAAAEA4AADAOAA - BwDwAB8A/AA/APCA/wDn9/8A////AP///wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAABjZGQAdmRjAHtpaQB/eHgAgU9PAKBaWgCFbm0AlWtqAKptbgCwZ2cAsGhoAKxw - cACteHkAvnJyAMZvcADGcHEAy3l5AMx9fgCFmXQAwIB/ANeUfQDhoX8AlIqJAJWMjACYiIgAoIaGAK2K - igCxh4cAvoGAALKKigC4iYgAuJWVAL2cnACss50AuqKhAL+mpgDLgoIAxImHAMeNjADLkI8AxpWTANCS - kQDYlZUA1J6dANqZmgDdnp4A1J+oAMaiogDOr68AzLKyANi5uADhpaIA4qypAOWtqADrrqsA4bKwAOay - sgDtuLYA57++AOy4uADxtLIA8be0APa9ugDswL4A9sG+ALCcxwC5ncIA06zBALnH0QC2ytQA7sPDAPLS - 0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAZBgUAAAAAAAAAAAAAAAAACw8KAAAAAAAAAAAAAAAAGhAQDgAAAAAAAAAAAAAAAAkRESUYAAAA - AAAAAAAAAAAlKy4uBwAAAAAAAAcDAAAAKzlHPCYCAAAYCB0oKgAAAC0wSDs0FB0nLDlAOiwAAAANAQQb - Pi9DRkVBPzUAAAAAJB4cKz5EQjMiNSkAAAAAAAAAHwwRNxYVEyQAAAAAAAAxMgAAACEgAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA4/8AAOP/AADD/wAAwf8AAMH5 - AADAwQAAwAEAAMADAADABwAA8A8AAM5/AAD//wAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAkAAAAJAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAUAAAAOAEBAVUAAABUAAAANQAAABAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkFBSUvGRl5TCkpwlYuLtxDJCTQFw0NmQAA - AEkAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAwMKE8rK6V6RET2klJR/5ZS - U/+OT0//ZDc38B0QEJoAAAAyAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDAwYVzAwoopP - T/ygXVz/oFtb/55ZWf+bWFf/k1NT/1UvL9wGAwNcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AARNKipxhk5O+adkY/+uZWX/tWdo/7VmZ/+qYWH/nltb/3hERPcfERGCAAAAFgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADEZGS1zQ0LXqGdm/7ptbf/Fb3D/x3Bx/8hwcf/BbW7/q2Vl/4hPT/82HR2gAAAAIAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAB1gxMYyYXl3/vXFx/8Zwcf/HcHH/x3Bx/8dwcf/HcHH/uG1t/5NY - V/9EJia2AAAAKQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPB8fNH1MS+K4cnH/x3Fy/8dwcf/HcHH/x3Bx/8dw - cf/HcHH/wHBx/51gX/9PLCzGAAAAMwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAMAAAAAAAAAAAAAAAAAAAAALhAQFIZXVs/RjIz/1Y2O/9qYmP/eoaL/46qr/+aysv/ot7f/6rm5/+m4 - uf/otbX/5q+v/+uvrf/jqab/wYeF/28/P/QhEhKvAAAAXwAAACgAAAANAAAABQAAAAMAAAACAAAAAwAA - AAUAAAAKAAAAFQAAADAdDg9oSSkptHZHRu2dYmL+t3Z1/758e/+6enn/tnh3/7d5eP+8fn3/w4SD/7Z6 - ef9eODfbBgICTgAAAAgAAAAAAAAAAAAAAAAAAAAAPhwcJJVjYuPXkZH/2JOU/92fn//iqqr/57O0/+u8 - vP/uwsL/78XG/+/Exf/twMD/67i4/+60sv/wtrP/zZKQ/5taWv9xQED2MRsaxAgEBIcAAABaAAAAQQAA - ADcAAAA2AAAAOwAAAEUEAgJZHA4OfUcnJ7l5SkntqGxr/8CAfv/DgoH/vH59/7p+ff/DiIb/zZGP/9GT - kf/UlJP/1peV/9eZl/+GVlbuGQsLVwAAAAcAAAAAAAAAAAAAAAAAAAAARiIiLZ9rauvZk5P/2peY/+Ck - pP/lsLD/6ru7/+/Fxf/yzMz/9NDQ//PPz//xycr/7sDA//K5tv/1u7j/36Kg/6dmZf+mZWX/j1ZW/WM6 - OutDJSXQNBwcvDAaGrQ0HBy1PiIivUwsLMtkPDzfh1VU9a1xcP/EhIP/xIWE/7+Cgf/Ch4b/zZST/9mk - ov/grq3/4a6t/96lo//eoJ7/36Kg/+Cjof+IWVjnGwwMQwAAAAIAAAAAAAAAAAAAAAAAAAAARyQkL6Br - auzZk5P/25qb/+GnqP/ntLT/7cDA//LLy//209T/+NjY//fX1//00ND/8cbG//W9u//4vrz/46ak/7d0 - c/+vb27/s3Jy/7d2df+ucXD/pWpp/6Npaf+nbWz/sHVz/7p9fP/EhYT/yImI/8WIhv/DiIb/ypGP/9eg - n//hr63/57q5/+rCwP/rwsD/6bq4/+evrf/nq6n/6q6r/9qgnv9wRkbDBwAAHgAAAAAAAAAAAAAAAAAA - AAAAAAAASCQkLZ1nZuvYkpP/25uc/+Opqv/qtrf/7cHB//TOzv/52Nj/+tzc//na2v/xz9D/8MfH//fA - vv/6wb7/6a6r/8OBgP/DgoD/vX58/7h7ev+8fn3/woOC/8aHhv/HiYj/xoqJ/8aLif/Ijoz/zZST/9eg - nv/hrav/6Lm3/+zCwf/uyMf/78nH/+/Dwf/uvLr/7ba0/+60sf/vtLL/8ri1/7J+fflMKSltAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAQyEhI5JcXOPWj5D/3Juc/8qVlf+BZmb/bl5e/4l4eP/AqKj/8tPT//LO - zv+5p6b/w6qq//fBv//7wr//8LWy/86Ojf/Ojoz/0ZGP/9GSkP/OkY//zpOR/9GamP/VoJ//2qel/+Gv - rf/nt7X/6727/+3Dwf/wycf/8czL//LLyf/yxsT/8cC+//G7uf/yubf/87m3//S7uP/4vrv/1J6c/3JH - RrAdCgsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANRcXEYJNTcvPiIn/15aW/2VNTf85Ojr/Q0VF/0JF - RP9dXFz/n5GR/+S/v/+bh4f/hXp6/+25uP/7wr//9bu4/9qcmv/Zmpj/252b/96gnf/ipKH/5q+s/+u+ - vP/vycf/8srI/+3Hxv/wysj/9c7M//TNy//0ysj/9MbE//TBv//1vrz/9r26//e9u//4vrv/+L+8//vB - vv/hqqf/g1ZVzDwcHC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW4+Ppq/env/05OT/2ZX - V/9rbm7/fX9//3l6ev99f3//cHJy/5F9ff+ff3//XFhY/9eop//8wr//+L+8/+Wppv/ipaP/5qil/96i - pP/Kmaz/1qi1//LGxP/tyMf/qb3J/23E3P9kw9//vMTN//jDwP/3wb//+MC9//i/vf/5v73/+b+8//i/ - vP/3vrv/+L68/92mo/+IWlnRRSMjOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcv - L0mbX1/y15GS/6GAgP9XV1b/iYuL/4CBgf98fX3/cnR0/1dPT/++j4//km9w/9Sfnv/6wL3/+cC9/+6z - sP/ssK3/0Z+u/4OH1P9YffD/QGPs/7KYyv/Ct7z/Ytrz/3Ts//8s2f//cbvU//m+u//4v7z/+L67//e9 - uv/1vLn/9Lq3//O5tv/zuLX/0puZ/4RVVctGIyM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADIXFwdrPDySq2ts/diZmf/ApKT/sKur/4CBgP95enr/iYiI/49zdP/do6P/36Ch/96e - nv/zuLX/+sK///W7uP/1ubT/qZC//2qY+/9tnf//MGT6/56FxP/esK//nMbS/57n8/9+z+T/ybG3//a6 - t//zubb/8re0//C1s//utLH/7rKw/+qvrP++iIb9dklJtkMgISoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHIyMSazw8kZ5hYvXNjI3/2aSk/7OMjP+bd3f/sIKC/9KV - lv/cnJz/2peY/9aRkf/koqL/+sG+//nAvf/5v7z/4amw/6qZx/+aouP/qpvP/+mxtv/2urj/6rGv/+S6 - u//ptrX/466n/+Ovqf/ssK7/6q6s/+isqv/oq6n/2J2b/6JubfFoPT2NOxoaFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBoaCFowMFd7SEjAomZm9sWC - gv/XkZL/25SV/9iSk//Wj5D/1IyN/9KHiP/UiIj/8bOx//rCv//3vbv/9ru4//O3s//xuLX/7q6e/+ej - hf/npIn/7bCp/+Otp/+KsX3/ULdm/1WjWv+7oYz/5KWk/9uenP+4gH79glJRzVYuLlQgCAkGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAA8HBwQVy4uS3FBQaCPV1fjsG5v/cmAgf/ShYb/0YKD/85+f//LeXr/2I2M//e8uf/1vLn/7rOx/+2y - sP/lpJX/5qFY/+6xXP/djS3/35h9/86gl/9SwW7/Nd90/0WxXP+vlH//wYSE/49cW+VlOTmBQR4eHAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGk7OhqIWFd8oG5u8J5qav+eX2D/tmts/8Z0df/KdHX/yXJz/92T - k//3vLn/7LGu/+Snpf/dm5L/4Z1q/+61dP/fmmX/15WM/9eYlv/Bm43/r6uR/6uNgP+WYWDtbkBAnUwn - JzQVAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiFJSBnhC - QgpqNDQJWSUlB08dHQdfKisKfENDFJJWViinbGtRvYOCjtOcm8/pt7X157y6/7eOjfhxRUW7aTk5m4RK - StehWlr6uGdo/8Zwcf/dkpH/8bSx/+OnpP/YmZj/1ZWT/9ealP/Vl5X/0JCP/8eIhv+zdnb/lFtc6nA/ - QKRSKio/JQwNBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADTn6AB2qioDMuUlCHBhYU8voCAWcCBgXTEhoaLzZGQqdeensngrKvn47Sz/NOop/+yiIfyi2Bgs2k+ - PlZXKysPAAAAAUYlJRxcMTFYcj4+pYpMTeWmXF3+xnl5/9+Zl//dnJr/z46M/8KCgf+vc3L/ll9e831L - S8hlOTl/TigoMy0REQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABzQUIDnmprDriGhifHlpZMzp6eeNCgoZ7On5+2yJqaybuPj9WnfHzVj2RkunVJ - SYNbLy8/PRQUCgAAAAAAAAAAAAAAAAAAAAAAAAAAKRUVBU0pKSphNDRtd0BAsotNTd2ZW1vrkVlY4HtJ - Sb5lOTmCUysrQTsbGxEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCwsA2Y4OA5xQkImdkhIRHhKSll0R0dibUBAWWI2 - NkNUKCgoOhISDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhkZB0km - Jh5LJiYsRSEhITATFAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD/+H////8AAP/gH////wAA/8Af//// - AAD/gA////8AAP+AD////wAA/wAP////AAD/AA////8AAP4AB////wAA/gAH////AAD8AAf///8AAPwA - B////wAA/AAH////AAD8AAf///8AAPgAB////wAA+AAH//4HAAD4AAP/8AEAAPgAAf/AAQAA8AAA/wAA - AADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAEAAPAAAAAAAQAA8AAAAAADAADwAAAAAAcAAPAA - AAAADwAA+AAAAAAfAAD4AAAAAD8AAPwAAAAAfwAA/gAAAAD/AAD/gAAAA/8AAP/gAAAH/wAAgAAAAB// - AAAAAAAAf/8AAAAD4AP//wAAgB/8H///AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAYAAAAZAAAAGQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAARCQkYOh8fb0ooKK80HByiCQUFTAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAIhERFmA2Np2ITUz3lVNT/4dLS/5IKCi9AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAANjODiBllhY+61kZP+vY2P/pV5e/3xHRvEhEhJfAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAASSgoN41VVeS6bW3/xW9w/8dwcf+9bG3/klZW/jogIIEAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1RkWcs2xs/8dxcv/HcHH/x3Bx/8Zwcf+iYWH/SSkpmAAA - AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUC0tMZtgX+fGcnP/x3Bx/8dwcf/HcHH/x3Fy/61q - av9UMTGqAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxRER1tm9v/8hxcv/HcHH/x3Bx/8dw - cf/HcnP/tnRz/185OboAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAACIxXV7TEdHT/yHJz/8l1 - dv/Kd3j/ynd4/8p4eP/Bf37/bURDywAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNKysjo2Zm4Mt4 - ef/NfH3/z4GC/9GFhf/RhYb/0YWF/82Mi/9+UVHeCAICOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAACwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGc+ - Pkm1c3P30IGC/9OJiv/XkZL/2ZaW/9mWl//YlJX/2JmY/5hnZfMeEBBrAAAABwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA0FAgItHhAQWzAbG4IqFxeHDQcHWwAAABkAAAAAAAAAAAAA - AAAAAAAAek1MdMN/f//VjI3/2piZ/9+io//hqKn/4qmp/+Clpf/jpqT/wImH/04xMLwAAAA6AAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABEbDg5GRygokW5CQs+MVlbxnGJh/JdfXvxnPz7hHA8PbgAA - AAwAAAAAAAAAAAAAAACMW1qbz4qK/9qXl//gpqb/5rKz/+q6u//rvLz/6La2/+qxr//epKL/j1lZ+DUc - HLACAQFPAAAAHQAAAA8AAAAPAAAAEwAAACIbDg5MVDExnYZUU+SpbWz+uXl4/7x+fP/AgoD/xoeF/72A - f/9fOzu1AAAAHAAAAAAAAAAAAAAABJhkZK/VkZH/3Z+g/+axsf/twMD/8svL//LNzf/vxcX/8Lq4/+6z - sf+1dHP/j1VU+144N9g7IiKqMhwclDcfH5RGKSmiYTw7v4tZWOiydXT+woOC/8aKiP/Ol5X/2aWj/9ui - of/cnpz/2pyb/35TUrgAAAAVAAAAAAAAAAAAAAAFmmVkstaTk//hpaX/7Lm6//TLy//419f/+NnZ//TP - z//1wb//9Lq3/8aGhP+1dHP/s3Rz/6xwb/+pb27+rnNy/7Z7ev/BhIL/yY2L/8+WlP/apqT/5be2/+vB - v//rvrz/6bKw/+uvrf/Um5n/bUVEgAAAAAMAAAAAAAAAAAAAAAOTXV2q1ZGR/9CYmP+dfX7/o4yM/9e8 - vP/z0tL/zLOz/+u8u//5v7z/1peV/8uLif/Ki4r/yoyL/86Ukv/TnJv/2qSi/+Gtq//nuLb/7cPB//DJ - x//xxsT/8b+9//G6t//zubf/77az/6d1dM89Hx8lAAAAAAAAAAAAAAAAAAAAAIJOTojNiIn/jGlp/01O - Tv9UVlb/dnNz/7uhof+Pfn7/xJ+e//zCv//lqKb/3J2b/+Chnv/hpaT/7Ly5/+vHxv/MxMn/0MjN//LK - yf/1x8X/9sLA//a/vP/3vrv/+L+8//S7uP+5hoXhYTo5RwAAAAAAAAAAAAAAAAAAAAAAAAAAaTs7RrVz - dPKmfn7/cXJx/4SGhv97fX3/b2Zm/516ev+7kJD/+sG+//C2s//lqqr/rpbA/3aB2/+ql83/tMHK/2jc - 9P9OzOz/2r3B//q/vP/3vrv/9ry6//a8uf/ss7D/tYGA32c+Pk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAvEhIHg01Njbp9fvrCn5//nI+P/4R7ev+fgID/2Jyd/9ybnP/ytrT/+b+8/+ewtf+Mld3/ZI36/5eI - zv/Ttrn/sNLc/6/Czv/stLT/8re0/++0sf/tsq//2qCe/6Rxb8phODg+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABCIB8MeUZGbqRpata8gYH8x4mJ/9eTk//YkpP/04qL/+Cbmv/5wL3/9726/+Sw - t//Zrrn/56qY/+2smf/lr6n/nLWJ/4Gtdf/Pppn/3qGf/7yEg/KJWViYTyoqIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQh0dGXJAQGOXXl7NtnR1/8V7fP/MfH3/znt8/+il - o//0urj/7LCu/+Whg//rq13/35VX/9Kek/9yvXz/ZbNv/6iCdfqYY2O/aj4+TCUJCgcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACcamsBjFRVB4FERAh9PT0JjU1ND6VnZx+/hINF0JqZiNOjoty0iIf2hFBQw5lX - V8+wY2P4xXR0/+aioP/oq6j/2pqT/92fif/Vlor/yYqJ/7N8efiVZmPGdERFYkEfHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALiFhgXFkJEdx5CQSMqSknbNlZWbz5uaws2cnOXBlJPnqH18r4dc - XFFULy8OSCUlFm07O0+FSUmeoV1d3sF9fPrGhoX/snZ295xkZNiFUlKbbD4+T0UdHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc0JDA5FgYRKdbm46onR0Zp9ycnuWampzhFlZVmY6 - OikvDAwHAAAAAAAAAAAAAAAAAAAAAB0ODgRULCwhbjo7UXhERGVrPDxHTCYmGxAAAQMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//////////////////////D////gf///wH///4A///+AP///AD///wA///8AP//+AD - ///gA//D4AH+AeAA+ADgAAAAwAAAAMAAAADAAAAB4AAAA+AAAAfgAAAP8AAAH/wAAD8AAAD/AAAD/wB4 - D//H////////////////////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABMAAAAtAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgIO1cwMM1qOjrsHhAQmwAA - ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAATCgogfUhI6ahgYP6lXV3+f0hI9wIBAT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGBgFPLy6kuW1t/sZv - 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 - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCAudioSettings.Designer.cs b/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCAudioSettings.Designer.cs index 74633c7797..0bb32869c4 100644 --- a/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCAudioSettings.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCAudioSettings.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AmstradCPCAudioSettings)); this.OkBtn = new System.Windows.Forms.Button(); this.CancelBtn = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); @@ -158,7 +157,7 @@ this.Controls.Add(this.CancelBtn); this.Controls.Add(this.OkBtn); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController_MultiSize; this.Name = "AmstradCPCAudioSettings"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Audio Settings"; diff --git a/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCAudioSettings.resx b/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCAudioSettings.resx index ca821b54f8..1af7de150c 100644 --- a/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCAudioSettings.resx +++ b/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCAudioSettings.resx @@ -117,508 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAwAMDAQAAAABABoBgAAxgAAACAgEAAAAAQA6AIAAC4HAAAYGBAAAAAEAOgBAAAWCgAAEBAQAAAA - BAAoAQAA/gsAADAwAAAAAAgAqA4AACYNAAAgIAAAAAAIAKgIAADOGwAAGBgAAAAACADIBgAAdiQAABAQ - AAAAAAgAaAUAAD4rAAAwMAAAAAAgAKglAACmMAAAICAAAAAAIACoEAAATlYAABgYAAAAACAAiAkAAPZm - AAAQEAAAAAAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAQAAAAEAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAHR3AAAAAAAAAAAAAAAAAAAAAAAAAAAAdHdEcAAAAAAAAAAAAAAAAA - AAAAAAAAAHd0d3QAAAAAAAAAAAAAAAAAAAAAAAAAAEd8d3UAAAAAAAAAAAAAAAAAAAAAAAAAB3yHfHZw - AAAAAAAAAAAAAAAAAAAAAAAAd3fIyHVwAAAAAAAAAAAAAAAAAAAAAAAAfHh3jIxwAAAAAAAAAAAAAAAA - AAAAAAAHd8jIyHdgAAAAAAAAAAAAAAAAAAAAAAAHd4yHfIdAAAAAAAAAAAAAAAAAAAAAAAAHyMjIyMhQ - AAAAAAAAAAAAAAAAAAAAAAB3d3eMh4dgAAAAAAAAAAAAAAAAAAAAAAB8jIyIfIdQAAAAAAAAAAAAAAAA - AAAAAAB3h4jIiMh3AAAAAAAAAAAAAAAAAAAAAAB8jIeHeIjHAAAAAAAAAAAAAAAAAAAAAAeIiHh4eMiE - AAAAAAAAAAAAB0dHcAAAAAd8h4eIiIiHcAAAAAAAAAB0d3d3RwAAAAeIeIiIiIh3RwAAAAAAAHR3d8h3 - dAAAAAfIh4iIiHiIx0cAAAAAdHh3eIeHhwAAAAeHiIiIiIiId3R3dHR0eHd4h4eHhAAAAAd4eIiIiIiH - x3d2d3eId4iIiIiIhwAAAAd4eIiI+IiIh3d3eHh3iIiIiIeHwAAAAAfIjHeIiIiIyIeHh4iIiIiIiIiI - cAAAAAeIQ0R3h3iIiMiIiIiIiIiIiIiEAAAAAAfIR3d3d0iIiIh4iIeIiIiIiHhAAAAAAAB4d3d3SHiI - h4fTiIi3iIiIeIwAAAAAAAB3h4d3eIeIiHiJiIuIiIh4jHAAAAAAAAAHyId3h3h4iIh4iIiIiIiHeAAA - AAAAAAAAB8iMiMjIiIiIh4h3aMjHAAAAAAAAAAAAAAdYyIeIiIiMjId6d4eAAAAAAAAAAAAAAAAHdsjH - eIeH6MiId3AAAAAAAAAAAAAAAIiIh4V8jIh4eIfHcAAAAAAAAAAAAACIiIh3AAAHd3h3fHcAAAAAAAAA - AAAAAAiIjHgAAAAAAHx8eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAA - AAd0dAAAAAAAAAAAAAAAAAB3x3cAAAAAAAAAAAAAAAAAd3fHcAAAAAAAAAAAAAAAB3yMh3AAAAAAAAAA - AAAAAAfIeMdwAAAAAAAAAAAAAAAHjIyHQAAAAAAAAAAAAAAAfId4yHAAAAAAAAAAAAAAAHjIyIdQAAAA - AAAAAAAAAAB3iId4YAAAAAAAAAdwAAAAjIiIiIUAAAAAAHd3dAAAB4iIiHh8cAAAAHd3x4dwAAd4iIiI - h3Z3d3R3yIh4cAAHh4iIiIfHd3d4iIiIh3AAB3jHiIiIiHeHiIiIiIwAAAh3dXh4iMiIiIiIiIhwAAAA - yGd0d4iIeIi4iIiMAAAAAIeHd4iIh32IiIiIcAAAAAAAd4jIyIiIiHeHyAAAAAAAAAB3h4iIh8h3dwAA - AAAAAAAIh8fIh4eIaAAAAAAAAACIiHAAB8jIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////////////////////n////g////wP///8B///+Af///gH///4B///8Af///AH///wB//n8AP/A+AB - /AHgAAAB4AAAAeAAAAPgAAAH8AAAD/AAAB/8AAA//wAA//4AA//weA////////////////////////// - //8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRwAAAAAAAAAAAAB3dAAAAAAAAAAAAA - d8dwAAAAAAAAAAAAfId3AAAAAAAAAAAHeMjHAAAAAAAAAAAHyHh3AAAAAAAAAAAHh3eEAAAAAAAAAAAI - yIiHAAAAAHd2cAAIiIiIQAAAd3d4UACHiIiId3d3eHiIcACHh4iIyHeHiIiIcAAIR3d4iIiIiIiMAAAH - d3eIh3iIiIhwAAAAeMh4iIiHiMAAAAAAAHfIiMh4aAAAAAAAiIgHyIfIAAAAAAAIgAAAAIAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD8f/8A+H//APB/ - /wDwP/8A4D//AOA//wDgP/8A4D/BAOAfAQDAAAEAwAABAOAAAwDgAAcA8AAfAPwAPwDwgP8A5/f/AP// - /wD///8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAd1AAAAAAAAB8cAAAAAAAB4eAAAAAAAAHyMgAAAAAAAiIhwAAAHcACI - iHcAd3hwAIz4jIeIiIAAd3eIiIiIAACHeIiIiHAAAACMeMh4AAAAiAAIgAAAAAAAAAAAAAAAAAAAAAAA - AAD//wAA//8AAP//AADj/wAA4/8AAMP/AADB/wAAwfkAAMDBAADAAQAAwAMAAMAHAADwDwAAzn8AAP// - AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAA9OzsAZD8/AGg8 - PABtPj4AQkNDAEZIRwBWQkIAV0REAF5AQABbRkYAVklJAFxPTwBTU1MAXFJSAF5ZWQBkQEAAYUREAGZF - RQBqQkEAYEtLAGNPTwBwQUEAfUZGAHJKSgB2SUkAfU9PAGBRUQBgVFQAZlZWAGZYWABqWVkAclZWAHpU - VAB9W1oAbmJiAGtoaABtaWkAcWdnAHdnZwB8Y2MAe2pqAHJxcQB+dHQAd3l5AHl6egCGT08AiU9PAIFP - UACGU1MAjVFRAIlWVgCMV1cAg1xbAIxaWQCQUlIAlVJSAJFXVgCXVVUAmVVVAJZaWQCSXV0AlV9eAJpZ - WgCeW1sAml5eAKBZWgCgXFwAql9fAIRmZQCIZWQAhWtrAI5ragCTYmEAnGBhAJ9kYwCaZmYAk25uAJ1s - awCFdHQAiXd3AIt+fgCWd3cAmHR0AJV5eQCbfHwAo2JhAKZhYQChZWUApGVkAKplZACsZGQAqmhnAKZr - agCnbGsAqmloAKlubQCsbW0AtGZnALhsbACxb3AAv29wAKVxcACrc3IAr35+ALN0cwC5c3MAvXBxALR4 - dgC1fHsAunt6AMNtbgDGb3AAw3FyAMZwcQDGdXUAyHR1AMp3eADBeXkAxnt7AMB/fgDLensANLBSAEWf - TgBBtFwAPMdnADHkdgDciiIAvoF/AISrdwDln0sA35lhAN2XfADgmmEA8LdlAO61cAArWPIALWT+AEh5 - +gDOf4AAfoCAAHiA1ABZv9wAZrnUAGK+2ABxnv4Ad6P/ADPX/QBw0OcAW+D7AIKEgwCPgoIAjI2NAJuC - ggCUiIgAmYqKAJGSkgCjhIQAqoKCAKKLiwC+hIMAsoqKALaSgQCum5sAsZubALqqlQCdgr4Ar6ytALGh - oAC6pKQAwoSDAMyBggDGiIYAyYiHAMWMigDMjIoA0ISFANKHiADUjIwA2Y6NAMCUjQDIk44A0JCPANaP - kADHlZQAzpSSAMScmwDUkpIA2ZSVANWYlgDampcA2ZeYANWcnADam5sA4p2cAMChjwDeoJ4A5aCFAOaj - jQDlpJoA2p6hAMOkowDOoaEAy62tANegoADdoqEA2aGpANGsrwDdq6kAwbG4ANGysQDdtLQA2ri3AOGk - owDjqKYA66ylAOGnqADjq6oA6a2rAOOwrwDssK4A5K+wAOaztADttLIA57i2AO24tgDmurgA6rq6APC1 - swDyuLYA9Ly5APi+uwD1wL0A+cC9AKKMwACkk8QAqprMALSayACptsEAlaDkAOy/wACRxtQAgOv9AJnr - 9wDEwsoA5sbGAOzCwgDuyMcA7MzMAPPEwgDxy8oA9dPTAPja2gAAAAAAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAADLytDi9tOemQAAAAAAUy9EecLEsa1uPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj11Mme - VakAAAAAAAAAAAAATS84M0akAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE - AAAAAAAAAAAAAAABAAAAAQAAAAAAAFFNTQBRUlIAU1RUAGJHRwBiT08Aa0lIAGJTUwBrVlYAYllZAGZc - XABpWloAb1xbAHNTUwB7V1YAc1hXAHFbWwBkZWUAaWFhAG5kZABpamkAcGFhAHlubgB2cHAAf3V1AH55 - eQB8fX0AgUpKAI1PTwCLWFcAhlhYAI9ZWQCKXFsAm1ZWAJJZWQCWWVgAmlpbAJtcWwCiXFwAl2BfAIBg - YACAZ2YAgG9vAI9oaACWZWQAmGBhAJ5kZACcaWoAmm9vAIV0dACNcHAAiXZ2AIB8fACac3IAm3V0AJ51 - dQCZfHwAnHx8AKNmZgCnZmYAqmJiAK5jYwCvb24AtWVmALBtbgC5bW0AvmxtAKx+fQCxcnIAtHBwALZz - dACydXQAtnd2ALlwcAC5dnYAt3p5ALh5eAC8fHsAun18ALx+fQDGb3AAxnBxAMdzdADAd3YAyHJzAMlz - dADJdXYAynd4AMd/fwDMe3wAzXx9AHunbwBhvHIAYsN4ANuLOwC2hn4A4Zt5APC3ZABte9sAX47+AHWM - 5QAl0foAY+P8AIeDgwCFhoYAioSEAJOIiACWi4sAmpKRAKGCgQCmhYUAqYGBAKuDhACniooApYyMAKiO - jQCyhYMAvoWEALeNjQCrj5AAr5eXALSVlAC9lJMAmbCEAK6RugDBgYAAwoSCAMWDhADChoQAxYeFAM6A - gQDFiIYAxoqIAMqIiQDMi4oAy4yKAMiPjQDPj44A0ISFANKJigDUi4wA04+NANWNjgDKkY8A0JCOANud - iQDWj5AAzJSTAM2XlgDGm5oA1pGSANOUkgDVl5EA1pOUANiVlgDYmJUA2ZeYANKenADbmpsA3pmYANuc - mgDbn5wA1aacAN6gngDqqZoA3Z+gAMyjowDCra0AxqysAMqpqQDboaAA3qKiAN6logDbp6UA3aWkANer - qgDWsbMA0rW0ANe0tADfs7IA4aSiAOGlpQDkp6UA46imAOWopgDsraIA6qimAOGoqADhrqwA6a2rAOqv - rADpsK4A7LGuAOGzswDlsbEA7bKxAO+1sgDotrYA5rm3AO+4twDot7sA6bq5AOu9uwDrv70A8bazAPG2 - tADxuLUA9Lm2APC9uwD2vboA9L+9APi+uwD4v7wA8sC+APXAvgD5wL0AkILJAKqXzACsu8cAqr/LALLV - 3QDawMIA48XFAOvDwQDswMAA7cTDAO/ExQDgxsgA8cbEAPTGxADwyskA9MvJAPLNzQD21dYA+NjZAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAMEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHCEcBQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAayU9PSYbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQlBSQiJpAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAM0pSUlJQPRcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnUlJSUlJGFQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAFJSUlJSUkoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzUlJSWVJZfxAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5XWYqKioqGDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoqMkpqa - mqAsAAAAAAAAAAAAAAAAAABoNAAAAAAAAACMjJyuvLy2toYHAAAAAAAAAAAAABcOIDouBgAAAAAAc4yc - tsHKysPAriIKAAAAAAAAABYgRk1LTX+DEAAAAABukqXB4ejo4dHPQCIEChcXEwggTXV/k66unKMpAAAA - AG6Srsro6ero0dN/Rk1NRk2Dg4STrsbh4cHAt2sAAAAAbpKuOXPe6ajW15KGg4OGk528yuHo5eHPz882 - AAAAAAB4jCkDAxSoMabXt5yjt8ro3ePo5dbT09HTdAAAAAAAAABGcBFoGgFwdtfDwHxi2dpmZcrX09HP - z0MAAAAAAAAAAHh/qWwaOa6cz9PNZGPYsdzbzc3DwLk2AAAAAAAAAAAAAAAvhpKakoyg19HNyKS5wHtb - orZ/cwAAAAAAAAAAAAAAAAAANkaKWVm5zb1gYV6cXVxfNgAAAAAAAAAAAAAAAAAAALGvlTIuP1K5tqCR - l4xfLwAAAAAAAAAAAAAAAAAAsbPBenkAAAAAcCVYjE0scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////+f///+D////A////wH - ///4B///+Af///gH///wB///8Af///AH/+fwA/8D4AH8AeAAAAHgAAAB4AAAA+AAAAfwAAAP8AAAH/wA - AD//AAD//gAD//B4D////////////////////////////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAAWlJSAHBJSQB1SEgAe1dXAHdYWAB5WlkAel1dAGBiYgB1bGwAfWtrAHh2 - dgB9fn4Ag01NAIRXVwCIV1cAhV9eAItbWgCgX14ApV1dAJhgXwCNYGAAnWtqAJhtbQCCdnYAh3x8AI15 - eACeensAqGBgAKhoZwCga2oArGpqALNqagCzb28AtG1tALltbQCxb3AApnVzAKlzcwCqdHMApnp6AKd+ - fgCpensAq3x7ALZ3dgC8dHQAvH59AMZvcADGcHEAxXN0AMhycwDJdncAynh5AMx5egDNfn8Ajo1wAOek - VgDGgH8A4p53AEZ2+gB8u4AAd8PaAIuEhACOh4cAjo6OAJ+DggCejo4Ao4SEAKSIiACsi4sAqo2MAK6P - jgC+gYAAvoaGAL+KiACskJAAtJeXALWenQC5np4At6iOAKmyjgC9nroAwYSDAMaGhADOhoYAxomHAMiK - iQDJjYwA0oeIANOOjwDUjY0A2ZiPANaPkADGkZEAx5eXAMySkADGnZwA1ZOSANeTlADWl5YA2JSVANGZ - mADan50A3J6dAOCcmwDVoJ8A7K2fAMOtrQDXo6IA3aCgAN+kpADVq6oA3ay3AMu0tADPtrYA3L+/AOCi - oQDhpqUA5KelAOinpgDlq6gA46usAOOvrQDqrqwA7LGuAOayswDjtrQA5re1AOqysQDts7EA57y6AO+8 - ugDrvL0A8LOwAPC1sgDwtrQA87q3APS6twD2vboA8b69APi/vAD2wb4A+cC9AJmTzwDHqMMAu8PMAIHf - 8QDByNAA7cLCAO3FwwDvxsQA5cjIAOzOzgDwxcQA9cbEAPPP0AD10tIAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - BQMJAAAAAAAAAAAAAAAAAAAAAAAAAAAPHBMNAAAAAAAAAAAAAAAAAAAAAAAAABojLy8TAAAAAAAAAAAA - AAAAAAAAAAAAAB0wMDAiPgAAAAAAAAAAAAAAAAAAAAAAQjAwMDAtGAAAAAAAAAAAAAAAAAAAAAAAFzIy - NTU5CgAAAAAAAAAAAAAAAAAAAAAAIjZYWFxcBwAAAAAAAAAAAAAAAAAAAAAANlxtdW11JQAAAAAAAAAA - PgcRDgkAAAAAXG1/lISAZgMAAAAAABkVLC5SVhcAAABNY3WWnJuLfB8UBAcQHkhWaX91dSsAAABNY2BM - mJeCiVJSVl9laX+WloSJgEIAAAAAXAEIC0tGjnR0dJaRk5qNjIyJQwAAAAAAJkNADBtdjIaPO1GSPYuJ - hnVEAAAAAAAAAClISWRcd4xwkGp8UE90VwAAAAAAAAAAAAAAKSQ1NYZ7OjhbPDdGAAAAAAAAAAAAAHNv - YGsAKyJoXFYmRwAAAAAAAAAAAAAAcnIAAAAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// - /wD///8A////APx//wD4f/8A8H//APA//wDgP/8A4D//AOA//wDgP8EA4B8BAMAAAQDAAAEA4AADAOAA - BwDwAB8A/AA/APCA/wDn9/8A////AP///wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAABjZGQAdmRjAHtpaQB/eHgAgU9PAKBaWgCFbm0AlWtqAKptbgCwZ2cAsGhoAKxw - cACteHkAvnJyAMZvcADGcHEAy3l5AMx9fgCFmXQAwIB/ANeUfQDhoX8AlIqJAJWMjACYiIgAoIaGAK2K - igCxh4cAvoGAALKKigC4iYgAuJWVAL2cnACss50AuqKhAL+mpgDLgoIAxImHAMeNjADLkI8AxpWTANCS - kQDYlZUA1J6dANqZmgDdnp4A1J+oAMaiogDOr68AzLKyANi5uADhpaIA4qypAOWtqADrrqsA4bKwAOay - sgDtuLYA57++AOy4uADxtLIA8be0APa9ugDswL4A9sG+ALCcxwC5ncIA06zBALnH0QC2ytQA7sPDAPLS - 0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAZBgUAAAAAAAAAAAAAAAAACw8KAAAAAAAAAAAAAAAAGhAQDgAAAAAAAAAAAAAAAAkRESUYAAAA - AAAAAAAAAAAlKy4uBwAAAAAAAAcDAAAAKzlHPCYCAAAYCB0oKgAAAC0wSDs0FB0nLDlAOiwAAAANAQQb - Pi9DRkVBPzUAAAAAJB4cKz5EQjMiNSkAAAAAAAAAHwwRNxYVEyQAAAAAAAAxMgAAACEgAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA4/8AAOP/AADD/wAAwf8AAMH5 - AADAwQAAwAEAAMADAADABwAA8A8AAM5/AAD//wAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAkAAAAJAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAUAAAAOAEBAVUAAABUAAAANQAAABAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkFBSUvGRl5TCkpwlYuLtxDJCTQFw0NmQAA - AEkAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAwMKE8rK6V6RET2klJR/5ZS - U/+OT0//ZDc38B0QEJoAAAAyAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDAwYVzAwoopP - T/ygXVz/oFtb/55ZWf+bWFf/k1NT/1UvL9wGAwNcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AARNKipxhk5O+adkY/+uZWX/tWdo/7VmZ/+qYWH/nltb/3hERPcfERGCAAAAFgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADEZGS1zQ0LXqGdm/7ptbf/Fb3D/x3Bx/8hwcf/BbW7/q2Vl/4hPT/82HR2gAAAAIAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAB1gxMYyYXl3/vXFx/8Zwcf/HcHH/x3Bx/8dwcf/HcHH/uG1t/5NY - V/9EJia2AAAAKQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPB8fNH1MS+K4cnH/x3Fy/8dwcf/HcHH/x3Bx/8dw - cf/HcHH/wHBx/51gX/9PLCzGAAAAMwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXjU1h6NnZv/Fc3T/x3Bx/8dw - cf/HcHH/x3Bx/8dwcf/HcHH/w3Jz/6ZoZ/9ZMzPTAQAAPQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyFxccektK0b12 - dv/HcHH/x3Bx/8dwcf/HcHH/x3Bx/8dwcf/HcHH/xXR0/69wb/9jOjneBwMDSQAAAAUAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABNKSlNlmBf9sh3d//HcHH/x3Bx/8dwcf/HcHH/x3Bx/8dwcf/HcHH/xnd3/7Z4d/9sQUDnDgcHVQAA - AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABkOjqKsXFw/8lyc//HcXL/yHJz/8l0df/JdXb/yXV2/8l1dv/JdHX/ynt7/7+B - f/94SknvFgsLZQAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAACILCxB7TUzDwXd3/8lyc//KdXb/y3h5/8x7fP/NfX7/zX5+/819 - fv/NfH3/zoOC/8iJiP+GVVX3Hg8QegAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEMiIi+SXl3oynp7/8t4ef/NfX7/z4GC/9GE - hf/Sh4j/04iJ/9KIiP/Rhof/04uK/8+RkP+XY2L9KxcXlwAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABwAA - AA0AAAAPAAAACwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFUvL1enbW37zn5+/85/ - gP/Rhob/1IuM/9aPkP/XkpP/2JOU/9iTlP/XkZH/15OT/9eZl/+rdHP/QSUlvAAAADwAAAAFAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACQAA - ABgAAAAvAgEBSwcDA2EFAgJoAAAAWAAAADYAAAARAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGU8 - O4W5eXn/0IKD/9KIif/Wj5D/2ZWW/9ubm//dnp//3qCg/92foP/cnZ3/3Jyc/9+in//CiYf/Zj8/4wYC - AnAAAAAbAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA - AA4AAAAnCQQEUCISEoQ+IiKzVzEx1mU6OuZiOTnmRigo0hgNDZsAAABMAAAAEAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAABnVJSK/HhIP/04eI/9aQkf/amJn/3qCh/+Gmp//jq6v/5Kyt/+OsrP/iqan/4aal/+ap - p//Umpj/nmxr/C8ZGboAAABXAAAAGAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAIAAAAOAQAALRkNDWY+IiKpZDo63YZRUfigZGP/sHBv/7V0c/+xcnH/oWZm/2k+PvEfEBCcAAAAMQAA - AAMAAAAAAAAAAAAAAAAAAAAALhAQFIZXVs/RjIz/1Y2O/9qYmP/eoaL/46qr/+aysv/ot7f/6rm5/+m4 - uf/otbX/5q+v/+uvrf/jqab/wYeF/28/P/QhEhKvAAAAXwAAACgAAAANAAAABQAAAAMAAAACAAAAAwAA - AAUAAAAKAAAAFQAAADAdDg9oSSkptHZHRu2dYmL+t3Z1/758e/+6enn/tnh3/7d5eP+8fn3/w4SD/7Z6 - ef9eODfbBgICTgAAAAgAAAAAAAAAAAAAAAAAAAAAPhwcJJVjYuPXkZH/2JOU/92fn//iqqr/57O0/+u8 - vP/uwsL/78XG/+/Exf/twMD/67i4/+60sv/wtrP/zZKQ/5taWv9xQED2MRsaxAgEBIcAAABaAAAAQQAA - ADcAAAA2AAAAOwAAAEUEAgJZHA4OfUcnJ7l5SkntqGxr/8CAfv/DgoH/vH59/7p+ff/DiIb/zZGP/9GT - kf/UlJP/1peV/9eZl/+GVlbuGQsLVwAAAAcAAAAAAAAAAAAAAAAAAAAARiIiLZ9rauvZk5P/2peY/+Ck - pP/lsLD/6ru7/+/Fxf/yzMz/9NDQ//PPz//xycr/7sDA//K5tv/1u7j/36Kg/6dmZf+mZWX/j1ZW/WM6 - OutDJSXQNBwcvDAaGrQ0HBy1PiIivUwsLMtkPDzfh1VU9a1xcP/EhIP/xIWE/7+Cgf/Ch4b/zZST/9mk - ov/grq3/4a6t/96lo//eoJ7/36Kg/+Cjof+IWVjnGwwMQwAAAAIAAAAAAAAAAAAAAAAAAAAARyQkL6Br - auzZk5P/25qb/+GnqP/ntLT/7cDA//LLy//209T/+NjY//fX1//00ND/8cbG//W9u//4vrz/46ak/7d0 - c/+vb27/s3Jy/7d2df+ucXD/pWpp/6Npaf+nbWz/sHVz/7p9fP/EhYT/yImI/8WIhv/DiIb/ypGP/9eg - n//hr63/57q5/+rCwP/rwsD/6bq4/+evrf/nq6n/6q6r/9qgnv9wRkbDBwAAHgAAAAAAAAAAAAAAAAAA - AAAAAAAASCQkLZ1nZuvYkpP/25uc/+Opqv/qtrf/7cHB//TOzv/52Nj/+tzc//na2v/xz9D/8MfH//fA - vv/6wb7/6a6r/8OBgP/DgoD/vX58/7h7ev+8fn3/woOC/8aHhv/HiYj/xoqJ/8aLif/Ijoz/zZST/9eg - nv/hrav/6Lm3/+zCwf/uyMf/78nH/+/Dwf/uvLr/7ba0/+60sf/vtLL/8ri1/7J+fflMKSltAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAQyEhI5JcXOPWj5D/3Juc/8qVlf+BZmb/bl5e/4l4eP/AqKj/8tPT//LO - zv+5p6b/w6qq//fBv//7wr//8LWy/86Ojf/Ojoz/0ZGP/9GSkP/OkY//zpOR/9GamP/VoJ//2qel/+Gv - rf/nt7X/6727/+3Dwf/wycf/8czL//LLyf/yxsT/8cC+//G7uf/yubf/87m3//S7uP/4vrv/1J6c/3JH - RrAdCgsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANRcXEYJNTcvPiIn/15aW/2VNTf85Ojr/Q0VF/0JF - RP9dXFz/n5GR/+S/v/+bh4f/hXp6/+25uP/7wr//9bu4/9qcmv/Zmpj/252b/96gnf/ipKH/5q+s/+u+ - vP/vycf/8srI/+3Hxv/wysj/9c7M//TNy//0ysj/9MbE//TBv//1vrz/9r26//e9u//4vrv/+L+8//vB - vv/hqqf/g1ZVzDwcHC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW4+Ppq/env/05OT/2ZX - V/9rbm7/fX9//3l6ev99f3//cHJy/5F9ff+ff3//XFhY/9eop//8wr//+L+8/+Wppv/ipaP/5qil/96i - pP/Kmaz/1qi1//LGxP/tyMf/qb3J/23E3P9kw9//vMTN//jDwP/3wb//+MC9//i/vf/5v73/+b+8//i/ - vP/3vrv/+L68/92mo/+IWlnRRSMjOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcv - L0mbX1/y15GS/6GAgP9XV1b/iYuL/4CBgf98fX3/cnR0/1dPT/++j4//km9w/9Sfnv/6wL3/+cC9/+6z - sP/ssK3/0Z+u/4OH1P9YffD/QGPs/7KYyv/Ct7z/Ytrz/3Ts//8s2f//cbvU//m+u//4v7z/+L67//e9 - uv/1vLn/9Lq3//O5tv/zuLX/0puZ/4RVVctGIyM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADIXFwdrPDySq2ts/diZmf/ApKT/sKur/4CBgP95enr/iYiI/49zdP/do6P/36Ch/96e - nv/zuLX/+sK///W7uP/1ubT/qZC//2qY+/9tnf//MGT6/56FxP/esK//nMbS/57n8/9+z+T/ybG3//a6 - t//zubb/8re0//C1s//utLH/7rKw/+qvrP++iIb9dklJtkMgISoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHIyMSazw8kZ5hYvXNjI3/2aSk/7OMjP+bd3f/sIKC/9KV - lv/cnJz/2peY/9aRkf/koqL/+sG+//nAvf/5v7z/4amw/6qZx/+aouP/qpvP/+mxtv/2urj/6rGv/+S6 - u//ptrX/466n/+Ovqf/ssK7/6q6s/+isqv/oq6n/2J2b/6JubfFoPT2NOxoaFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBoaCFowMFd7SEjAomZm9sWC - gv/XkZL/25SV/9iSk//Wj5D/1IyN/9KHiP/UiIj/8bOx//rCv//3vbv/9ru4//O3s//xuLX/7q6e/+ej - hf/npIn/7bCp/+Otp/+KsX3/ULdm/1WjWv+7oYz/5KWk/9uenP+4gH79glJRzVYuLlQgCAkGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAA8HBwQVy4uS3FBQaCPV1fjsG5v/cmAgf/ShYb/0YKD/85+f//LeXr/2I2M//e8uf/1vLn/7rOx/+2y - sP/lpJX/5qFY/+6xXP/djS3/35h9/86gl/9SwW7/Nd90/0WxXP+vlH//wYSE/49cW+VlOTmBQR4eHAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGk7OhqIWFd8oG5u8J5qav+eX2D/tmts/8Z0df/KdHX/yXJz/92T - k//3vLn/7LGu/+Snpf/dm5L/4Z1q/+61dP/fmmX/15WM/9eYlv/Bm43/r6uR/6uNgP+WYWDtbkBAnUwn - JzQVAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiFJSBnhC - QgpqNDQJWSUlB08dHQdfKisKfENDFJJWViinbGtRvYOCjtOcm8/pt7X157y6/7eOjfhxRUW7aTk5m4RK - StehWlr6uGdo/8Zwcf/dkpH/8bSx/+OnpP/YmZj/1ZWT/9ealP/Vl5X/0JCP/8eIhv+zdnb/lFtc6nA/ - QKRSKio/JQwNBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADTn6AB2qioDMuUlCHBhYU8voCAWcCBgXTEhoaLzZGQqdeensngrKvn47Sz/NOop/+yiIfyi2Bgs2k+ - PlZXKysPAAAAAUYlJRxcMTFYcj4+pYpMTeWmXF3+xnl5/9+Zl//dnJr/z46M/8KCgf+vc3L/ll9e831L - S8hlOTl/TigoMy0REQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABzQUIDnmprDriGhifHlpZMzp6eeNCgoZ7On5+2yJqaybuPj9WnfHzVj2RkunVJ - SYNbLy8/PRQUCgAAAAAAAAAAAAAAAAAAAAAAAAAAKRUVBU0pKSphNDRtd0BAsotNTd2ZW1vrkVlY4HtJ - Sb5lOTmCUysrQTsbGxEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCwsA2Y4OA5xQkImdkhIRHhKSll0R0dibUBAWWI2 - NkNUKCgoOhISDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhkZB0km - Jh5LJiYsRSEhITATFAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD/+H////8AAP/gH////wAA/8Af//// - AAD/gA////8AAP+AD////wAA/wAP////AAD/AA////8AAP4AB////wAA/gAH////AAD8AAf///8AAPwA - B////wAA/AAH////AAD8AAf///8AAPgAB////wAA+AAH//4HAAD4AAP/8AEAAPgAAf/AAQAA8AAA/wAA - AADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAEAAPAAAAAAAQAA8AAAAAADAADwAAAAAAcAAPAA - AAAADwAA+AAAAAAfAAD4AAAAAD8AAPwAAAAAfwAA/gAAAAD/AAD/gAAAA/8AAP/gAAAH/wAAgAAAAB// - AAAAAAAAf/8AAAAD4AP//wAAgB/8H///AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAYAAAAZAAAAGQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAARCQkYOh8fb0ooKK80HByiCQUFTAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAIhERFmA2Np2ITUz3lVNT/4dLS/5IKCi9AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAANjODiBllhY+61kZP+vY2P/pV5e/3xHRvEhEhJfAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAASSgoN41VVeS6bW3/xW9w/8dwcf+9bG3/klZW/jogIIEAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1RkWcs2xs/8dxcv/HcHH/x3Bx/8Zwcf+iYWH/SSkpmAAA - AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUC0tMZtgX+fGcnP/x3Bx/8dwcf/HcHH/x3Fy/61q - av9UMTGqAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxRER1tm9v/8hxcv/HcHH/x3Bx/8dw - cf/HcnP/tnRz/185OboAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAACIxXV7TEdHT/yHJz/8l1 - dv/Kd3j/ynd4/8p4eP/Bf37/bURDywAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNKysjo2Zm4Mt4 - ef/NfH3/z4GC/9GFhf/RhYb/0YWF/82Mi/9+UVHeCAICOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAACwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGc+ - Pkm1c3P30IGC/9OJiv/XkZL/2ZaW/9mWl//YlJX/2JmY/5hnZfMeEBBrAAAABwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA0FAgItHhAQWzAbG4IqFxeHDQcHWwAAABkAAAAAAAAAAAAA - AAAAAAAAek1MdMN/f//VjI3/2piZ/9+io//hqKn/4qmp/+Clpf/jpqT/wImH/04xMLwAAAA6AAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABEbDg5GRygokW5CQs+MVlbxnGJh/JdfXvxnPz7hHA8PbgAA - AAwAAAAAAAAAAAAAAACMW1qbz4qK/9qXl//gpqb/5rKz/+q6u//rvLz/6La2/+qxr//epKL/j1lZ+DUc - HLACAQFPAAAAHQAAAA8AAAAPAAAAEwAAACIbDg5MVDExnYZUU+SpbWz+uXl4/7x+fP/AgoD/xoeF/72A - f/9fOzu1AAAAHAAAAAAAAAAAAAAABJhkZK/VkZH/3Z+g/+axsf/twMD/8svL//LNzf/vxcX/8Lq4/+6z - sf+1dHP/j1VU+144N9g7IiKqMhwclDcfH5RGKSmiYTw7v4tZWOiydXT+woOC/8aKiP/Ol5X/2aWj/9ui - of/cnpz/2pyb/35TUrgAAAAVAAAAAAAAAAAAAAAFmmVkstaTk//hpaX/7Lm6//TLy//419f/+NnZ//TP - z//1wb//9Lq3/8aGhP+1dHP/s3Rz/6xwb/+pb27+rnNy/7Z7ev/BhIL/yY2L/8+WlP/apqT/5be2/+vB - v//rvrz/6bKw/+uvrf/Um5n/bUVEgAAAAAMAAAAAAAAAAAAAAAOTXV2q1ZGR/9CYmP+dfX7/o4yM/9e8 - vP/z0tL/zLOz/+u8u//5v7z/1peV/8uLif/Ki4r/yoyL/86Ukv/TnJv/2qSi/+Gtq//nuLb/7cPB//DJ - x//xxsT/8b+9//G6t//zubf/77az/6d1dM89Hx8lAAAAAAAAAAAAAAAAAAAAAIJOTojNiIn/jGlp/01O - Tv9UVlb/dnNz/7uhof+Pfn7/xJ+e//zCv//lqKb/3J2b/+Chnv/hpaT/7Ly5/+vHxv/MxMn/0MjN//LK - yf/1x8X/9sLA//a/vP/3vrv/+L+8//S7uP+5hoXhYTo5RwAAAAAAAAAAAAAAAAAAAAAAAAAAaTs7RrVz - dPKmfn7/cXJx/4SGhv97fX3/b2Zm/516ev+7kJD/+sG+//C2s//lqqr/rpbA/3aB2/+ql83/tMHK/2jc - 9P9OzOz/2r3B//q/vP/3vrv/9ry6//a8uf/ss7D/tYGA32c+Pk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAvEhIHg01Njbp9fvrCn5//nI+P/4R7ev+fgID/2Jyd/9ybnP/ytrT/+b+8/+ewtf+Mld3/ZI36/5eI - zv/Ttrn/sNLc/6/Czv/stLT/8re0/++0sf/tsq//2qCe/6Rxb8phODg+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABCIB8MeUZGbqRpata8gYH8x4mJ/9eTk//YkpP/04qL/+Cbmv/5wL3/9726/+Sw - t//Zrrn/56qY/+2smf/lr6n/nLWJ/4Gtdf/Pppn/3qGf/7yEg/KJWViYTyoqIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQh0dGXJAQGOXXl7NtnR1/8V7fP/MfH3/znt8/+il - o//0urj/7LCu/+Whg//rq13/35VX/9Kek/9yvXz/ZbNv/6iCdfqYY2O/aj4+TCUJCgcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACcamsBjFRVB4FERAh9PT0JjU1ND6VnZx+/hINF0JqZiNOjoty0iIf2hFBQw5lX - V8+wY2P4xXR0/+aioP/oq6j/2pqT/92fif/Vlor/yYqJ/7N8efiVZmPGdERFYkEfHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALiFhgXFkJEdx5CQSMqSknbNlZWbz5uaws2cnOXBlJPnqH18r4dc - XFFULy8OSCUlFm07O0+FSUmeoV1d3sF9fPrGhoX/snZ295xkZNiFUlKbbD4+T0UdHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc0JDA5FgYRKdbm46onR0Zp9ycnuWampzhFlZVmY6 - OikvDAwHAAAAAAAAAAAAAAAAAAAAAB0ODgRULCwhbjo7UXhERGVrPDxHTCYmGxAAAQMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//////////////////////D////gf///wH///4A///+AP///AD///wA///8AP//+AD - ///gA//D4AH+AeAA+ADgAAAAwAAAAMAAAADAAAAB4AAAA+AAAAfgAAAP8AAAH/wAAD8AAAD/AAAD/wB4 - D//H////////////////////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABMAAAAtAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgIO1cwMM1qOjrsHhAQmwAA - ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAATCgogfUhI6ahgYP6lXV3+f0hI9wIBAT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGBgFPLy6kuW1t/sZv - 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 - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCCoreEmulationSettings.Designer.cs b/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCCoreEmulationSettings.Designer.cs index 74dbb56012..df2152d250 100644 --- a/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCCoreEmulationSettings.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCCoreEmulationSettings.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AmstradCPCCoreEmulationSettings)); this.OkBtn = new System.Windows.Forms.Button(); this.CancelBtn = new System.Windows.Forms.Button(); this.label4 = new System.Windows.Forms.Label(); @@ -190,7 +189,7 @@ this.Controls.Add(this.CancelBtn); this.Controls.Add(this.OkBtn); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController_MultiSize; this.Name = "AmstradCPCCoreEmulationSettings"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Core Emulation Settings"; diff --git a/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCCoreEmulationSettings.resx b/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCCoreEmulationSettings.resx index ca821b54f8..1af7de150c 100644 --- a/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCCoreEmulationSettings.resx +++ b/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCCoreEmulationSettings.resx @@ -117,508 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAwAMDAQAAAABABoBgAAxgAAACAgEAAAAAQA6AIAAC4HAAAYGBAAAAAEAOgBAAAWCgAAEBAQAAAA - BAAoAQAA/gsAADAwAAAAAAgAqA4AACYNAAAgIAAAAAAIAKgIAADOGwAAGBgAAAAACADIBgAAdiQAABAQ - AAAAAAgAaAUAAD4rAAAwMAAAAAAgAKglAACmMAAAICAAAAAAIACoEAAATlYAABgYAAAAACAAiAkAAPZm - AAAQEAAAAAAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAQAAAAEAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAHR3AAAAAAAAAAAAAAAAAAAAAAAAAAAAdHdEcAAAAAAAAAAAAAAAAA - AAAAAAAAAHd0d3QAAAAAAAAAAAAAAAAAAAAAAAAAAEd8d3UAAAAAAAAAAAAAAAAAAAAAAAAAB3yHfHZw - AAAAAAAAAAAAAAAAAAAAAAAAd3fIyHVwAAAAAAAAAAAAAAAAAAAAAAAAfHh3jIxwAAAAAAAAAAAAAAAA - AAAAAAAHd8jIyHdgAAAAAAAAAAAAAAAAAAAAAAAHd4yHfIdAAAAAAAAAAAAAAAAAAAAAAAAHyMjIyMhQ - AAAAAAAAAAAAAAAAAAAAAAB3d3eMh4dgAAAAAAAAAAAAAAAAAAAAAAB8jIyIfIdQAAAAAAAAAAAAAAAA - AAAAAAB3h4jIiMh3AAAAAAAAAAAAAAAAAAAAAAB8jIeHeIjHAAAAAAAAAAAAAAAAAAAAAAeIiHh4eMiE - AAAAAAAAAAAAB0dHcAAAAAd8h4eIiIiHcAAAAAAAAAB0d3d3RwAAAAeIeIiIiIh3RwAAAAAAAHR3d8h3 - dAAAAAfIh4iIiHiIx0cAAAAAdHh3eIeHhwAAAAeHiIiIiIiId3R3dHR0eHd4h4eHhAAAAAd4eIiIiIiH - x3d2d3eId4iIiIiIhwAAAAd4eIiI+IiIh3d3eHh3iIiIiIeHwAAAAAfIjHeIiIiIyIeHh4iIiIiIiIiI - cAAAAAeIQ0R3h3iIiMiIiIiIiIiIiIiEAAAAAAfIR3d3d0iIiIh4iIeIiIiIiHhAAAAAAAB4d3d3SHiI - h4fTiIi3iIiIeIwAAAAAAAB3h4d3eIeIiHiJiIuIiIh4jHAAAAAAAAAHyId3h3h4iIh4iIiIiIiHeAAA - AAAAAAAAB8iMiMjIiIiIh4h3aMjHAAAAAAAAAAAAAAdYyIeIiIiMjId6d4eAAAAAAAAAAAAAAAAHdsjH - eIeH6MiId3AAAAAAAAAAAAAAAIiIh4V8jIh4eIfHcAAAAAAAAAAAAACIiIh3AAAHd3h3fHcAAAAAAAAA - AAAAAAiIjHgAAAAAAHx8eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAA - AAd0dAAAAAAAAAAAAAAAAAB3x3cAAAAAAAAAAAAAAAAAd3fHcAAAAAAAAAAAAAAAB3yMh3AAAAAAAAAA - AAAAAAfIeMdwAAAAAAAAAAAAAAAHjIyHQAAAAAAAAAAAAAAAfId4yHAAAAAAAAAAAAAAAHjIyIdQAAAA - AAAAAAAAAAB3iId4YAAAAAAAAAdwAAAAjIiIiIUAAAAAAHd3dAAAB4iIiHh8cAAAAHd3x4dwAAd4iIiI - h3Z3d3R3yIh4cAAHh4iIiIfHd3d4iIiIh3AAB3jHiIiIiHeHiIiIiIwAAAh3dXh4iMiIiIiIiIhwAAAA - yGd0d4iIeIi4iIiMAAAAAIeHd4iIh32IiIiIcAAAAAAAd4jIyIiIiHeHyAAAAAAAAAB3h4iIh8h3dwAA - AAAAAAAIh8fIh4eIaAAAAAAAAACIiHAAB8jIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////////////////////n////g////wP///8B///+Af///gH///4B///8Af///AH///wB//n8AP/A+AB - /AHgAAAB4AAAAeAAAAPgAAAH8AAAD/AAAB/8AAA//wAA//4AA//weA////////////////////////// - //8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRwAAAAAAAAAAAAB3dAAAAAAAAAAAAA - d8dwAAAAAAAAAAAAfId3AAAAAAAAAAAHeMjHAAAAAAAAAAAHyHh3AAAAAAAAAAAHh3eEAAAAAAAAAAAI - yIiHAAAAAHd2cAAIiIiIQAAAd3d4UACHiIiId3d3eHiIcACHh4iIyHeHiIiIcAAIR3d4iIiIiIiMAAAH - d3eIh3iIiIhwAAAAeMh4iIiHiMAAAAAAAHfIiMh4aAAAAAAAiIgHyIfIAAAAAAAIgAAAAIAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD8f/8A+H//APB/ - /wDwP/8A4D//AOA//wDgP/8A4D/BAOAfAQDAAAEAwAABAOAAAwDgAAcA8AAfAPwAPwDwgP8A5/f/AP// - /wD///8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAd1AAAAAAAAB8cAAAAAAAB4eAAAAAAAAHyMgAAAAAAAiIhwAAAHcACI - iHcAd3hwAIz4jIeIiIAAd3eIiIiIAACHeIiIiHAAAACMeMh4AAAAiAAIgAAAAAAAAAAAAAAAAAAAAAAA - AAD//wAA//8AAP//AADj/wAA4/8AAMP/AADB/wAAwfkAAMDBAADAAQAAwAMAAMAHAADwDwAAzn8AAP// - AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAA9OzsAZD8/AGg8 - PABtPj4AQkNDAEZIRwBWQkIAV0REAF5AQABbRkYAVklJAFxPTwBTU1MAXFJSAF5ZWQBkQEAAYUREAGZF - RQBqQkEAYEtLAGNPTwBwQUEAfUZGAHJKSgB2SUkAfU9PAGBRUQBgVFQAZlZWAGZYWABqWVkAclZWAHpU - VAB9W1oAbmJiAGtoaABtaWkAcWdnAHdnZwB8Y2MAe2pqAHJxcQB+dHQAd3l5AHl6egCGT08AiU9PAIFP - UACGU1MAjVFRAIlWVgCMV1cAg1xbAIxaWQCQUlIAlVJSAJFXVgCXVVUAmVVVAJZaWQCSXV0AlV9eAJpZ - WgCeW1sAml5eAKBZWgCgXFwAql9fAIRmZQCIZWQAhWtrAI5ragCTYmEAnGBhAJ9kYwCaZmYAk25uAJ1s - awCFdHQAiXd3AIt+fgCWd3cAmHR0AJV5eQCbfHwAo2JhAKZhYQChZWUApGVkAKplZACsZGQAqmhnAKZr - agCnbGsAqmloAKlubQCsbW0AtGZnALhsbACxb3AAv29wAKVxcACrc3IAr35+ALN0cwC5c3MAvXBxALR4 - dgC1fHsAunt6AMNtbgDGb3AAw3FyAMZwcQDGdXUAyHR1AMp3eADBeXkAxnt7AMB/fgDLensANLBSAEWf - TgBBtFwAPMdnADHkdgDciiIAvoF/AISrdwDln0sA35lhAN2XfADgmmEA8LdlAO61cAArWPIALWT+AEh5 - +gDOf4AAfoCAAHiA1ABZv9wAZrnUAGK+2ABxnv4Ad6P/ADPX/QBw0OcAW+D7AIKEgwCPgoIAjI2NAJuC - ggCUiIgAmYqKAJGSkgCjhIQAqoKCAKKLiwC+hIMAsoqKALaSgQCum5sAsZubALqqlQCdgr4Ar6ytALGh - oAC6pKQAwoSDAMyBggDGiIYAyYiHAMWMigDMjIoA0ISFANKHiADUjIwA2Y6NAMCUjQDIk44A0JCPANaP - kADHlZQAzpSSAMScmwDUkpIA2ZSVANWYlgDampcA2ZeYANWcnADam5sA4p2cAMChjwDeoJ4A5aCFAOaj - jQDlpJoA2p6hAMOkowDOoaEAy62tANegoADdoqEA2aGpANGsrwDdq6kAwbG4ANGysQDdtLQA2ri3AOGk - owDjqKYA66ylAOGnqADjq6oA6a2rAOOwrwDssK4A5K+wAOaztADttLIA57i2AO24tgDmurgA6rq6APC1 - swDyuLYA9Ly5APi+uwD1wL0A+cC9AKKMwACkk8QAqprMALSayACptsEAlaDkAOy/wACRxtQAgOv9AJnr - 9wDEwsoA5sbGAOzCwgDuyMcA7MzMAPPEwgDxy8oA9dPTAPja2gAAAAAAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAADLytDi9tOemQAAAAAAUy9EecLEsa1uPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj11Mme - VakAAAAAAAAAAAAATS84M0akAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE - AAAAAAAAAAAAAAABAAAAAQAAAAAAAFFNTQBRUlIAU1RUAGJHRwBiT08Aa0lIAGJTUwBrVlYAYllZAGZc - XABpWloAb1xbAHNTUwB7V1YAc1hXAHFbWwBkZWUAaWFhAG5kZABpamkAcGFhAHlubgB2cHAAf3V1AH55 - eQB8fX0AgUpKAI1PTwCLWFcAhlhYAI9ZWQCKXFsAm1ZWAJJZWQCWWVgAmlpbAJtcWwCiXFwAl2BfAIBg - YACAZ2YAgG9vAI9oaACWZWQAmGBhAJ5kZACcaWoAmm9vAIV0dACNcHAAiXZ2AIB8fACac3IAm3V0AJ51 - dQCZfHwAnHx8AKNmZgCnZmYAqmJiAK5jYwCvb24AtWVmALBtbgC5bW0AvmxtAKx+fQCxcnIAtHBwALZz - dACydXQAtnd2ALlwcAC5dnYAt3p5ALh5eAC8fHsAun18ALx+fQDGb3AAxnBxAMdzdADAd3YAyHJzAMlz - dADJdXYAynd4AMd/fwDMe3wAzXx9AHunbwBhvHIAYsN4ANuLOwC2hn4A4Zt5APC3ZABte9sAX47+AHWM - 5QAl0foAY+P8AIeDgwCFhoYAioSEAJOIiACWi4sAmpKRAKGCgQCmhYUAqYGBAKuDhACniooApYyMAKiO - jQCyhYMAvoWEALeNjQCrj5AAr5eXALSVlAC9lJMAmbCEAK6RugDBgYAAwoSCAMWDhADChoQAxYeFAM6A - gQDFiIYAxoqIAMqIiQDMi4oAy4yKAMiPjQDPj44A0ISFANKJigDUi4wA04+NANWNjgDKkY8A0JCOANud - iQDWj5AAzJSTAM2XlgDGm5oA1pGSANOUkgDVl5EA1pOUANiVlgDYmJUA2ZeYANKenADbmpsA3pmYANuc - mgDbn5wA1aacAN6gngDqqZoA3Z+gAMyjowDCra0AxqysAMqpqQDboaAA3qKiAN6logDbp6UA3aWkANer - qgDWsbMA0rW0ANe0tADfs7IA4aSiAOGlpQDkp6UA46imAOWopgDsraIA6qimAOGoqADhrqwA6a2rAOqv - rADpsK4A7LGuAOGzswDlsbEA7bKxAO+1sgDotrYA5rm3AO+4twDot7sA6bq5AOu9uwDrv70A8bazAPG2 - tADxuLUA9Lm2APC9uwD2vboA9L+9APi+uwD4v7wA8sC+APXAvgD5wL0AkILJAKqXzACsu8cAqr/LALLV - 3QDawMIA48XFAOvDwQDswMAA7cTDAO/ExQDgxsgA8cbEAPTGxADwyskA9MvJAPLNzQD21dYA+NjZAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAMEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHCEcBQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAayU9PSYbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQlBSQiJpAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAM0pSUlJQPRcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnUlJSUlJGFQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAFJSUlJSUkoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzUlJSWVJZfxAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5XWYqKioqGDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoqMkpqa - mqAsAAAAAAAAAAAAAAAAAABoNAAAAAAAAACMjJyuvLy2toYHAAAAAAAAAAAAABcOIDouBgAAAAAAc4yc - tsHKysPAriIKAAAAAAAAABYgRk1LTX+DEAAAAABukqXB4ejo4dHPQCIEChcXEwggTXV/k66unKMpAAAA - AG6Srsro6ero0dN/Rk1NRk2Dg4STrsbh4cHAt2sAAAAAbpKuOXPe6ajW15KGg4OGk528yuHo5eHPz882 - AAAAAAB4jCkDAxSoMabXt5yjt8ro3ePo5dbT09HTdAAAAAAAAABGcBFoGgFwdtfDwHxi2dpmZcrX09HP - z0MAAAAAAAAAAHh/qWwaOa6cz9PNZGPYsdzbzc3DwLk2AAAAAAAAAAAAAAAvhpKakoyg19HNyKS5wHtb - orZ/cwAAAAAAAAAAAAAAAAAANkaKWVm5zb1gYV6cXVxfNgAAAAAAAAAAAAAAAAAAALGvlTIuP1K5tqCR - l4xfLwAAAAAAAAAAAAAAAAAAsbPBenkAAAAAcCVYjE0scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////+f///+D////A////wH - ///4B///+Af///gH///wB///8Af///AH/+fwA/8D4AH8AeAAAAHgAAAB4AAAA+AAAAfwAAAP8AAAH/wA - AD//AAD//gAD//B4D////////////////////////////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAAWlJSAHBJSQB1SEgAe1dXAHdYWAB5WlkAel1dAGBiYgB1bGwAfWtrAHh2 - dgB9fn4Ag01NAIRXVwCIV1cAhV9eAItbWgCgX14ApV1dAJhgXwCNYGAAnWtqAJhtbQCCdnYAh3x8AI15 - eACeensAqGBgAKhoZwCga2oArGpqALNqagCzb28AtG1tALltbQCxb3AApnVzAKlzcwCqdHMApnp6AKd+ - fgCpensAq3x7ALZ3dgC8dHQAvH59AMZvcADGcHEAxXN0AMhycwDJdncAynh5AMx5egDNfn8Ajo1wAOek - VgDGgH8A4p53AEZ2+gB8u4AAd8PaAIuEhACOh4cAjo6OAJ+DggCejo4Ao4SEAKSIiACsi4sAqo2MAK6P - jgC+gYAAvoaGAL+KiACskJAAtJeXALWenQC5np4At6iOAKmyjgC9nroAwYSDAMaGhADOhoYAxomHAMiK - iQDJjYwA0oeIANOOjwDUjY0A2ZiPANaPkADGkZEAx5eXAMySkADGnZwA1ZOSANeTlADWl5YA2JSVANGZ - mADan50A3J6dAOCcmwDVoJ8A7K2fAMOtrQDXo6IA3aCgAN+kpADVq6oA3ay3AMu0tADPtrYA3L+/AOCi - oQDhpqUA5KelAOinpgDlq6gA46usAOOvrQDqrqwA7LGuAOayswDjtrQA5re1AOqysQDts7EA57y6AO+8 - ugDrvL0A8LOwAPC1sgDwtrQA87q3APS6twD2vboA8b69APi/vAD2wb4A+cC9AJmTzwDHqMMAu8PMAIHf - 8QDByNAA7cLCAO3FwwDvxsQA5cjIAOzOzgDwxcQA9cbEAPPP0AD10tIAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - BQMJAAAAAAAAAAAAAAAAAAAAAAAAAAAPHBMNAAAAAAAAAAAAAAAAAAAAAAAAABojLy8TAAAAAAAAAAAA - AAAAAAAAAAAAAB0wMDAiPgAAAAAAAAAAAAAAAAAAAAAAQjAwMDAtGAAAAAAAAAAAAAAAAAAAAAAAFzIy - NTU5CgAAAAAAAAAAAAAAAAAAAAAAIjZYWFxcBwAAAAAAAAAAAAAAAAAAAAAANlxtdW11JQAAAAAAAAAA - PgcRDgkAAAAAXG1/lISAZgMAAAAAABkVLC5SVhcAAABNY3WWnJuLfB8UBAcQHkhWaX91dSsAAABNY2BM - mJeCiVJSVl9laX+WloSJgEIAAAAAXAEIC0tGjnR0dJaRk5qNjIyJQwAAAAAAJkNADBtdjIaPO1GSPYuJ - hnVEAAAAAAAAAClISWRcd4xwkGp8UE90VwAAAAAAAAAAAAAAKSQ1NYZ7OjhbPDdGAAAAAAAAAAAAAHNv - YGsAKyJoXFYmRwAAAAAAAAAAAAAAcnIAAAAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// - /wD///8A////APx//wD4f/8A8H//APA//wDgP/8A4D//AOA//wDgP8EA4B8BAMAAAQDAAAEA4AADAOAA - BwDwAB8A/AA/APCA/wDn9/8A////AP///wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAABjZGQAdmRjAHtpaQB/eHgAgU9PAKBaWgCFbm0AlWtqAKptbgCwZ2cAsGhoAKxw - cACteHkAvnJyAMZvcADGcHEAy3l5AMx9fgCFmXQAwIB/ANeUfQDhoX8AlIqJAJWMjACYiIgAoIaGAK2K - igCxh4cAvoGAALKKigC4iYgAuJWVAL2cnACss50AuqKhAL+mpgDLgoIAxImHAMeNjADLkI8AxpWTANCS - kQDYlZUA1J6dANqZmgDdnp4A1J+oAMaiogDOr68AzLKyANi5uADhpaIA4qypAOWtqADrrqsA4bKwAOay - sgDtuLYA57++AOy4uADxtLIA8be0APa9ugDswL4A9sG+ALCcxwC5ncIA06zBALnH0QC2ytQA7sPDAPLS - 0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAZBgUAAAAAAAAAAAAAAAAACw8KAAAAAAAAAAAAAAAAGhAQDgAAAAAAAAAAAAAAAAkRESUYAAAA - AAAAAAAAAAAlKy4uBwAAAAAAAAcDAAAAKzlHPCYCAAAYCB0oKgAAAC0wSDs0FB0nLDlAOiwAAAANAQQb - Pi9DRkVBPzUAAAAAJB4cKz5EQjMiNSkAAAAAAAAAHwwRNxYVEyQAAAAAAAAxMgAAACEgAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA4/8AAOP/AADD/wAAwf8AAMH5 - AADAwQAAwAEAAMADAADABwAA8A8AAM5/AAD//wAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAkAAAAJAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAUAAAAOAEBAVUAAABUAAAANQAAABAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkFBSUvGRl5TCkpwlYuLtxDJCTQFw0NmQAA - AEkAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAwMKE8rK6V6RET2klJR/5ZS - U/+OT0//ZDc38B0QEJoAAAAyAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDAwYVzAwoopP - T/ygXVz/oFtb/55ZWf+bWFf/k1NT/1UvL9wGAwNcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AARNKipxhk5O+adkY/+uZWX/tWdo/7VmZ/+qYWH/nltb/3hERPcfERGCAAAAFgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADEZGS1zQ0LXqGdm/7ptbf/Fb3D/x3Bx/8hwcf/BbW7/q2Vl/4hPT/82HR2gAAAAIAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAB1gxMYyYXl3/vXFx/8Zwcf/HcHH/x3Bx/8dwcf/HcHH/uG1t/5NY - V/9EJia2AAAAKQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPB8fNH1MS+K4cnH/x3Fy/8dwcf/HcHH/x3Bx/8dw - cf/HcHH/wHBx/51gX/9PLCzGAAAAMwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAMAAAAAAAAAAAAAAAAAAAAALhAQFIZXVs/RjIz/1Y2O/9qYmP/eoaL/46qr/+aysv/ot7f/6rm5/+m4 - uf/otbX/5q+v/+uvrf/jqab/wYeF/28/P/QhEhKvAAAAXwAAACgAAAANAAAABQAAAAMAAAACAAAAAwAA - AAUAAAAKAAAAFQAAADAdDg9oSSkptHZHRu2dYmL+t3Z1/758e/+6enn/tnh3/7d5eP+8fn3/w4SD/7Z6 - ef9eODfbBgICTgAAAAgAAAAAAAAAAAAAAAAAAAAAPhwcJJVjYuPXkZH/2JOU/92fn//iqqr/57O0/+u8 - vP/uwsL/78XG/+/Exf/twMD/67i4/+60sv/wtrP/zZKQ/5taWv9xQED2MRsaxAgEBIcAAABaAAAAQQAA - ADcAAAA2AAAAOwAAAEUEAgJZHA4OfUcnJ7l5SkntqGxr/8CAfv/DgoH/vH59/7p+ff/DiIb/zZGP/9GT - kf/UlJP/1peV/9eZl/+GVlbuGQsLVwAAAAcAAAAAAAAAAAAAAAAAAAAARiIiLZ9rauvZk5P/2peY/+Ck - pP/lsLD/6ru7/+/Fxf/yzMz/9NDQ//PPz//xycr/7sDA//K5tv/1u7j/36Kg/6dmZf+mZWX/j1ZW/WM6 - OutDJSXQNBwcvDAaGrQ0HBy1PiIivUwsLMtkPDzfh1VU9a1xcP/EhIP/xIWE/7+Cgf/Ch4b/zZST/9mk - ov/grq3/4a6t/96lo//eoJ7/36Kg/+Cjof+IWVjnGwwMQwAAAAIAAAAAAAAAAAAAAAAAAAAARyQkL6Br - auzZk5P/25qb/+GnqP/ntLT/7cDA//LLy//209T/+NjY//fX1//00ND/8cbG//W9u//4vrz/46ak/7d0 - c/+vb27/s3Jy/7d2df+ucXD/pWpp/6Npaf+nbWz/sHVz/7p9fP/EhYT/yImI/8WIhv/DiIb/ypGP/9eg - n//hr63/57q5/+rCwP/rwsD/6bq4/+evrf/nq6n/6q6r/9qgnv9wRkbDBwAAHgAAAAAAAAAAAAAAAAAA - AAAAAAAASCQkLZ1nZuvYkpP/25uc/+Opqv/qtrf/7cHB//TOzv/52Nj/+tzc//na2v/xz9D/8MfH//fA - vv/6wb7/6a6r/8OBgP/DgoD/vX58/7h7ev+8fn3/woOC/8aHhv/HiYj/xoqJ/8aLif/Ijoz/zZST/9eg - nv/hrav/6Lm3/+zCwf/uyMf/78nH/+/Dwf/uvLr/7ba0/+60sf/vtLL/8ri1/7J+fflMKSltAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAQyEhI5JcXOPWj5D/3Juc/8qVlf+BZmb/bl5e/4l4eP/AqKj/8tPT//LO - zv+5p6b/w6qq//fBv//7wr//8LWy/86Ojf/Ojoz/0ZGP/9GSkP/OkY//zpOR/9GamP/VoJ//2qel/+Gv - rf/nt7X/6727/+3Dwf/wycf/8czL//LLyf/yxsT/8cC+//G7uf/yubf/87m3//S7uP/4vrv/1J6c/3JH - RrAdCgsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANRcXEYJNTcvPiIn/15aW/2VNTf85Ojr/Q0VF/0JF - RP9dXFz/n5GR/+S/v/+bh4f/hXp6/+25uP/7wr//9bu4/9qcmv/Zmpj/252b/96gnf/ipKH/5q+s/+u+ - vP/vycf/8srI/+3Hxv/wysj/9c7M//TNy//0ysj/9MbE//TBv//1vrz/9r26//e9u//4vrv/+L+8//vB - vv/hqqf/g1ZVzDwcHC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW4+Ppq/env/05OT/2ZX - V/9rbm7/fX9//3l6ev99f3//cHJy/5F9ff+ff3//XFhY/9eop//8wr//+L+8/+Wppv/ipaP/5qil/96i - pP/Kmaz/1qi1//LGxP/tyMf/qb3J/23E3P9kw9//vMTN//jDwP/3wb//+MC9//i/vf/5v73/+b+8//i/ - vP/3vrv/+L68/92mo/+IWlnRRSMjOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcv - L0mbX1/y15GS/6GAgP9XV1b/iYuL/4CBgf98fX3/cnR0/1dPT/++j4//km9w/9Sfnv/6wL3/+cC9/+6z - sP/ssK3/0Z+u/4OH1P9YffD/QGPs/7KYyv/Ct7z/Ytrz/3Ts//8s2f//cbvU//m+u//4v7z/+L67//e9 - uv/1vLn/9Lq3//O5tv/zuLX/0puZ/4RVVctGIyM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADIXFwdrPDySq2ts/diZmf/ApKT/sKur/4CBgP95enr/iYiI/49zdP/do6P/36Ch/96e - nv/zuLX/+sK///W7uP/1ubT/qZC//2qY+/9tnf//MGT6/56FxP/esK//nMbS/57n8/9+z+T/ybG3//a6 - t//zubb/8re0//C1s//utLH/7rKw/+qvrP++iIb9dklJtkMgISoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHIyMSazw8kZ5hYvXNjI3/2aSk/7OMjP+bd3f/sIKC/9KV - lv/cnJz/2peY/9aRkf/koqL/+sG+//nAvf/5v7z/4amw/6qZx/+aouP/qpvP/+mxtv/2urj/6rGv/+S6 - u//ptrX/466n/+Ovqf/ssK7/6q6s/+isqv/oq6n/2J2b/6JubfFoPT2NOxoaFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBoaCFowMFd7SEjAomZm9sWC - gv/XkZL/25SV/9iSk//Wj5D/1IyN/9KHiP/UiIj/8bOx//rCv//3vbv/9ru4//O3s//xuLX/7q6e/+ej - hf/npIn/7bCp/+Otp/+KsX3/ULdm/1WjWv+7oYz/5KWk/9uenP+4gH79glJRzVYuLlQgCAkGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAA8HBwQVy4uS3FBQaCPV1fjsG5v/cmAgf/ShYb/0YKD/85+f//LeXr/2I2M//e8uf/1vLn/7rOx/+2y - sP/lpJX/5qFY/+6xXP/djS3/35h9/86gl/9SwW7/Nd90/0WxXP+vlH//wYSE/49cW+VlOTmBQR4eHAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGk7OhqIWFd8oG5u8J5qav+eX2D/tmts/8Z0df/KdHX/yXJz/92T - k//3vLn/7LGu/+Snpf/dm5L/4Z1q/+61dP/fmmX/15WM/9eYlv/Bm43/r6uR/6uNgP+WYWDtbkBAnUwn - JzQVAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiFJSBnhC - QgpqNDQJWSUlB08dHQdfKisKfENDFJJWViinbGtRvYOCjtOcm8/pt7X157y6/7eOjfhxRUW7aTk5m4RK - StehWlr6uGdo/8Zwcf/dkpH/8bSx/+OnpP/YmZj/1ZWT/9ealP/Vl5X/0JCP/8eIhv+zdnb/lFtc6nA/ - QKRSKio/JQwNBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADTn6AB2qioDMuUlCHBhYU8voCAWcCBgXTEhoaLzZGQqdeensngrKvn47Sz/NOop/+yiIfyi2Bgs2k+ - PlZXKysPAAAAAUYlJRxcMTFYcj4+pYpMTeWmXF3+xnl5/9+Zl//dnJr/z46M/8KCgf+vc3L/ll9e831L - S8hlOTl/TigoMy0REQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABzQUIDnmprDriGhifHlpZMzp6eeNCgoZ7On5+2yJqaybuPj9WnfHzVj2RkunVJ - SYNbLy8/PRQUCgAAAAAAAAAAAAAAAAAAAAAAAAAAKRUVBU0pKSphNDRtd0BAsotNTd2ZW1vrkVlY4HtJ - Sb5lOTmCUysrQTsbGxEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCwsA2Y4OA5xQkImdkhIRHhKSll0R0dibUBAWWI2 - NkNUKCgoOhISDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhkZB0km - Jh5LJiYsRSEhITATFAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD/+H////8AAP/gH////wAA/8Af//// - AAD/gA////8AAP+AD////wAA/wAP////AAD/AA////8AAP4AB////wAA/gAH////AAD8AAf///8AAPwA - B////wAA/AAH////AAD8AAf///8AAPgAB////wAA+AAH//4HAAD4AAP/8AEAAPgAAf/AAQAA8AAA/wAA - AADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAEAAPAAAAAAAQAA8AAAAAADAADwAAAAAAcAAPAA - AAAADwAA+AAAAAAfAAD4AAAAAD8AAPwAAAAAfwAA/gAAAAD/AAD/gAAAA/8AAP/gAAAH/wAAgAAAAB// - AAAAAAAAf/8AAAAD4AP//wAAgB/8H///AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAYAAAAZAAAAGQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAARCQkYOh8fb0ooKK80HByiCQUFTAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAIhERFmA2Np2ITUz3lVNT/4dLS/5IKCi9AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAANjODiBllhY+61kZP+vY2P/pV5e/3xHRvEhEhJfAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAASSgoN41VVeS6bW3/xW9w/8dwcf+9bG3/klZW/jogIIEAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1RkWcs2xs/8dxcv/HcHH/x3Bx/8Zwcf+iYWH/SSkpmAAA - AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUC0tMZtgX+fGcnP/x3Bx/8dwcf/HcHH/x3Fy/61q - av9UMTGqAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxRER1tm9v/8hxcv/HcHH/x3Bx/8dw - cf/HcnP/tnRz/185OboAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAACIxXV7TEdHT/yHJz/8l1 - dv/Kd3j/ynd4/8p4eP/Bf37/bURDywAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNKysjo2Zm4Mt4 - ef/NfH3/z4GC/9GFhf/RhYb/0YWF/82Mi/9+UVHeCAICOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAACwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGc+ - Pkm1c3P30IGC/9OJiv/XkZL/2ZaW/9mWl//YlJX/2JmY/5hnZfMeEBBrAAAABwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA0FAgItHhAQWzAbG4IqFxeHDQcHWwAAABkAAAAAAAAAAAAA - AAAAAAAAek1MdMN/f//VjI3/2piZ/9+io//hqKn/4qmp/+Clpf/jpqT/wImH/04xMLwAAAA6AAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABEbDg5GRygokW5CQs+MVlbxnGJh/JdfXvxnPz7hHA8PbgAA - AAwAAAAAAAAAAAAAAACMW1qbz4qK/9qXl//gpqb/5rKz/+q6u//rvLz/6La2/+qxr//epKL/j1lZ+DUc - HLACAQFPAAAAHQAAAA8AAAAPAAAAEwAAACIbDg5MVDExnYZUU+SpbWz+uXl4/7x+fP/AgoD/xoeF/72A - f/9fOzu1AAAAHAAAAAAAAAAAAAAABJhkZK/VkZH/3Z+g/+axsf/twMD/8svL//LNzf/vxcX/8Lq4/+6z - sf+1dHP/j1VU+144N9g7IiKqMhwclDcfH5RGKSmiYTw7v4tZWOiydXT+woOC/8aKiP/Ol5X/2aWj/9ui - of/cnpz/2pyb/35TUrgAAAAVAAAAAAAAAAAAAAAFmmVkstaTk//hpaX/7Lm6//TLy//419f/+NnZ//TP - z//1wb//9Lq3/8aGhP+1dHP/s3Rz/6xwb/+pb27+rnNy/7Z7ev/BhIL/yY2L/8+WlP/apqT/5be2/+vB - v//rvrz/6bKw/+uvrf/Um5n/bUVEgAAAAAMAAAAAAAAAAAAAAAOTXV2q1ZGR/9CYmP+dfX7/o4yM/9e8 - vP/z0tL/zLOz/+u8u//5v7z/1peV/8uLif/Ki4r/yoyL/86Ukv/TnJv/2qSi/+Gtq//nuLb/7cPB//DJ - x//xxsT/8b+9//G6t//zubf/77az/6d1dM89Hx8lAAAAAAAAAAAAAAAAAAAAAIJOTojNiIn/jGlp/01O - Tv9UVlb/dnNz/7uhof+Pfn7/xJ+e//zCv//lqKb/3J2b/+Chnv/hpaT/7Ly5/+vHxv/MxMn/0MjN//LK - yf/1x8X/9sLA//a/vP/3vrv/+L+8//S7uP+5hoXhYTo5RwAAAAAAAAAAAAAAAAAAAAAAAAAAaTs7RrVz - dPKmfn7/cXJx/4SGhv97fX3/b2Zm/516ev+7kJD/+sG+//C2s//lqqr/rpbA/3aB2/+ql83/tMHK/2jc - 9P9OzOz/2r3B//q/vP/3vrv/9ry6//a8uf/ss7D/tYGA32c+Pk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAvEhIHg01Njbp9fvrCn5//nI+P/4R7ev+fgID/2Jyd/9ybnP/ytrT/+b+8/+ewtf+Mld3/ZI36/5eI - zv/Ttrn/sNLc/6/Czv/stLT/8re0/++0sf/tsq//2qCe/6Rxb8phODg+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABCIB8MeUZGbqRpata8gYH8x4mJ/9eTk//YkpP/04qL/+Cbmv/5wL3/9726/+Sw - t//Zrrn/56qY/+2smf/lr6n/nLWJ/4Gtdf/Pppn/3qGf/7yEg/KJWViYTyoqIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQh0dGXJAQGOXXl7NtnR1/8V7fP/MfH3/znt8/+il - o//0urj/7LCu/+Whg//rq13/35VX/9Kek/9yvXz/ZbNv/6iCdfqYY2O/aj4+TCUJCgcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACcamsBjFRVB4FERAh9PT0JjU1ND6VnZx+/hINF0JqZiNOjoty0iIf2hFBQw5lX - V8+wY2P4xXR0/+aioP/oq6j/2pqT/92fif/Vlor/yYqJ/7N8efiVZmPGdERFYkEfHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALiFhgXFkJEdx5CQSMqSknbNlZWbz5uaws2cnOXBlJPnqH18r4dc - XFFULy8OSCUlFm07O0+FSUmeoV1d3sF9fPrGhoX/snZ295xkZNiFUlKbbD4+T0UdHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc0JDA5FgYRKdbm46onR0Zp9ycnuWampzhFlZVmY6 - OikvDAwHAAAAAAAAAAAAAAAAAAAAAB0ODgRULCwhbjo7UXhERGVrPDxHTCYmGxAAAQMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//////////////////////D////gf///wH///4A///+AP///AD///wA///8AP//+AD - ///gA//D4AH+AeAA+ADgAAAAwAAAAMAAAADAAAAB4AAAA+AAAAfgAAAP8AAAH/wAAD8AAAD/AAAD/wB4 - D//H////////////////////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABMAAAAtAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgIO1cwMM1qOjrsHhAQmwAA - ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAATCgogfUhI6ahgYP6lXV3+f0hI9wIBAT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGBgFPLy6kuW1t/sZv - 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 - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCNonSyncSettings.Designer.cs b/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCNonSyncSettings.Designer.cs index 7b5ed8726a..15b97ab270 100644 --- a/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCNonSyncSettings.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCNonSyncSettings.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AmstradCPCNonSyncSettings)); this.OkBtn = new System.Windows.Forms.Button(); this.CancelBtn = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); @@ -114,7 +113,7 @@ this.Controls.Add(this.CancelBtn); this.Controls.Add(this.OkBtn); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController_MultiSize; this.Name = "AmstradCPCNonSyncSettings"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Other Non-Sync Settings"; diff --git a/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCNonSyncSettings.resx b/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCNonSyncSettings.resx index ca821b54f8..1af7de150c 100644 --- a/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCNonSyncSettings.resx +++ b/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCNonSyncSettings.resx @@ -117,508 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAwAMDAQAAAABABoBgAAxgAAACAgEAAAAAQA6AIAAC4HAAAYGBAAAAAEAOgBAAAWCgAAEBAQAAAA - BAAoAQAA/gsAADAwAAAAAAgAqA4AACYNAAAgIAAAAAAIAKgIAADOGwAAGBgAAAAACADIBgAAdiQAABAQ - AAAAAAgAaAUAAD4rAAAwMAAAAAAgAKglAACmMAAAICAAAAAAIACoEAAATlYAABgYAAAAACAAiAkAAPZm - AAAQEAAAAAAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAQAAAAEAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAHR3AAAAAAAAAAAAAAAAAAAAAAAAAAAAdHdEcAAAAAAAAAAAAAAAAA - AAAAAAAAAHd0d3QAAAAAAAAAAAAAAAAAAAAAAAAAAEd8d3UAAAAAAAAAAAAAAAAAAAAAAAAAB3yHfHZw - AAAAAAAAAAAAAAAAAAAAAAAAd3fIyHVwAAAAAAAAAAAAAAAAAAAAAAAAfHh3jIxwAAAAAAAAAAAAAAAA - AAAAAAAHd8jIyHdgAAAAAAAAAAAAAAAAAAAAAAAHd4yHfIdAAAAAAAAAAAAAAAAAAAAAAAAHyMjIyMhQ - AAAAAAAAAAAAAAAAAAAAAAB3d3eMh4dgAAAAAAAAAAAAAAAAAAAAAAB8jIyIfIdQAAAAAAAAAAAAAAAA - AAAAAAB3h4jIiMh3AAAAAAAAAAAAAAAAAAAAAAB8jIeHeIjHAAAAAAAAAAAAAAAAAAAAAAeIiHh4eMiE - AAAAAAAAAAAAB0dHcAAAAAd8h4eIiIiHcAAAAAAAAAB0d3d3RwAAAAeIeIiIiIh3RwAAAAAAAHR3d8h3 - dAAAAAfIh4iIiHiIx0cAAAAAdHh3eIeHhwAAAAeHiIiIiIiId3R3dHR0eHd4h4eHhAAAAAd4eIiIiIiH - x3d2d3eId4iIiIiIhwAAAAd4eIiI+IiIh3d3eHh3iIiIiIeHwAAAAAfIjHeIiIiIyIeHh4iIiIiIiIiI - cAAAAAeIQ0R3h3iIiMiIiIiIiIiIiIiEAAAAAAfIR3d3d0iIiIh4iIeIiIiIiHhAAAAAAAB4d3d3SHiI - h4fTiIi3iIiIeIwAAAAAAAB3h4d3eIeIiHiJiIuIiIh4jHAAAAAAAAAHyId3h3h4iIh4iIiIiIiHeAAA - AAAAAAAAB8iMiMjIiIiIh4h3aMjHAAAAAAAAAAAAAAdYyIeIiIiMjId6d4eAAAAAAAAAAAAAAAAHdsjH - eIeH6MiId3AAAAAAAAAAAAAAAIiIh4V8jIh4eIfHcAAAAAAAAAAAAACIiIh3AAAHd3h3fHcAAAAAAAAA - AAAAAAiIjHgAAAAAAHx8eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAA - AAd0dAAAAAAAAAAAAAAAAAB3x3cAAAAAAAAAAAAAAAAAd3fHcAAAAAAAAAAAAAAAB3yMh3AAAAAAAAAA - AAAAAAfIeMdwAAAAAAAAAAAAAAAHjIyHQAAAAAAAAAAAAAAAfId4yHAAAAAAAAAAAAAAAHjIyIdQAAAA - AAAAAAAAAAB3iId4YAAAAAAAAAdwAAAAjIiIiIUAAAAAAHd3dAAAB4iIiHh8cAAAAHd3x4dwAAd4iIiI - h3Z3d3R3yIh4cAAHh4iIiIfHd3d4iIiIh3AAB3jHiIiIiHeHiIiIiIwAAAh3dXh4iMiIiIiIiIhwAAAA - yGd0d4iIeIi4iIiMAAAAAIeHd4iIh32IiIiIcAAAAAAAd4jIyIiIiHeHyAAAAAAAAAB3h4iIh8h3dwAA - AAAAAAAIh8fIh4eIaAAAAAAAAACIiHAAB8jIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////////////////////n////g////wP///8B///+Af///gH///4B///8Af///AH///wB//n8AP/A+AB - /AHgAAAB4AAAAeAAAAPgAAAH8AAAD/AAAB/8AAA//wAA//4AA//weA////////////////////////// - //8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRwAAAAAAAAAAAAB3dAAAAAAAAAAAAA - d8dwAAAAAAAAAAAAfId3AAAAAAAAAAAHeMjHAAAAAAAAAAAHyHh3AAAAAAAAAAAHh3eEAAAAAAAAAAAI - yIiHAAAAAHd2cAAIiIiIQAAAd3d4UACHiIiId3d3eHiIcACHh4iIyHeHiIiIcAAIR3d4iIiIiIiMAAAH - d3eIh3iIiIhwAAAAeMh4iIiHiMAAAAAAAHfIiMh4aAAAAAAAiIgHyIfIAAAAAAAIgAAAAIAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD8f/8A+H//APB/ - /wDwP/8A4D//AOA//wDgP/8A4D/BAOAfAQDAAAEAwAABAOAAAwDgAAcA8AAfAPwAPwDwgP8A5/f/AP// - /wD///8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAd1AAAAAAAAB8cAAAAAAAB4eAAAAAAAAHyMgAAAAAAAiIhwAAAHcACI - iHcAd3hwAIz4jIeIiIAAd3eIiIiIAACHeIiIiHAAAACMeMh4AAAAiAAIgAAAAAAAAAAAAAAAAAAAAAAA - AAD//wAA//8AAP//AADj/wAA4/8AAMP/AADB/wAAwfkAAMDBAADAAQAAwAMAAMAHAADwDwAAzn8AAP// - AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAA9OzsAZD8/AGg8 - PABtPj4AQkNDAEZIRwBWQkIAV0REAF5AQABbRkYAVklJAFxPTwBTU1MAXFJSAF5ZWQBkQEAAYUREAGZF - RQBqQkEAYEtLAGNPTwBwQUEAfUZGAHJKSgB2SUkAfU9PAGBRUQBgVFQAZlZWAGZYWABqWVkAclZWAHpU - VAB9W1oAbmJiAGtoaABtaWkAcWdnAHdnZwB8Y2MAe2pqAHJxcQB+dHQAd3l5AHl6egCGT08AiU9PAIFP - UACGU1MAjVFRAIlWVgCMV1cAg1xbAIxaWQCQUlIAlVJSAJFXVgCXVVUAmVVVAJZaWQCSXV0AlV9eAJpZ - WgCeW1sAml5eAKBZWgCgXFwAql9fAIRmZQCIZWQAhWtrAI5ragCTYmEAnGBhAJ9kYwCaZmYAk25uAJ1s - awCFdHQAiXd3AIt+fgCWd3cAmHR0AJV5eQCbfHwAo2JhAKZhYQChZWUApGVkAKplZACsZGQAqmhnAKZr - agCnbGsAqmloAKlubQCsbW0AtGZnALhsbACxb3AAv29wAKVxcACrc3IAr35+ALN0cwC5c3MAvXBxALR4 - dgC1fHsAunt6AMNtbgDGb3AAw3FyAMZwcQDGdXUAyHR1AMp3eADBeXkAxnt7AMB/fgDLensANLBSAEWf - TgBBtFwAPMdnADHkdgDciiIAvoF/AISrdwDln0sA35lhAN2XfADgmmEA8LdlAO61cAArWPIALWT+AEh5 - +gDOf4AAfoCAAHiA1ABZv9wAZrnUAGK+2ABxnv4Ad6P/ADPX/QBw0OcAW+D7AIKEgwCPgoIAjI2NAJuC - ggCUiIgAmYqKAJGSkgCjhIQAqoKCAKKLiwC+hIMAsoqKALaSgQCum5sAsZubALqqlQCdgr4Ar6ytALGh - oAC6pKQAwoSDAMyBggDGiIYAyYiHAMWMigDMjIoA0ISFANKHiADUjIwA2Y6NAMCUjQDIk44A0JCPANaP - kADHlZQAzpSSAMScmwDUkpIA2ZSVANWYlgDampcA2ZeYANWcnADam5sA4p2cAMChjwDeoJ4A5aCFAOaj - jQDlpJoA2p6hAMOkowDOoaEAy62tANegoADdoqEA2aGpANGsrwDdq6kAwbG4ANGysQDdtLQA2ri3AOGk - owDjqKYA66ylAOGnqADjq6oA6a2rAOOwrwDssK4A5K+wAOaztADttLIA57i2AO24tgDmurgA6rq6APC1 - swDyuLYA9Ly5APi+uwD1wL0A+cC9AKKMwACkk8QAqprMALSayACptsEAlaDkAOy/wACRxtQAgOv9AJnr - 9wDEwsoA5sbGAOzCwgDuyMcA7MzMAPPEwgDxy8oA9dPTAPja2gAAAAAAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAoIJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAACYXODs4BCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - KTNDQ0M7OAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALllbYmJZQBcAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYYWNwcHBwWy8mAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFLanBwcHBwYz0eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAABpqcHBwcHBwZVkUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl11w - cHBwcHBwcGcSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIXdwcHBwcHBwcGkSAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPXBwcHBwcHBwd2wYAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAACXbnBwdXB5dXl0eW4hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAid3R5eXl5eXl5q6wzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9eXV5 - i7CxsbGxsblLKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABndYuwsbm8uby5vMFnHgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJt3q7G3vMHB1cLBwdWuEgAAAAAAAAAAAAAAAAAA - AAAAAAAeEhMSCiUAAAAAAAAAAEexsbm/1dXZ2dnZ1da5ZgwAAAAAAAAAAAAAAAAAAAAjEjNZaW5qXRMl - AAAAAAAAADW5s7/V2N7i4uLi3dzZrQQPAAAAAAAAAAAAAAAAHxhZbm5uaWltd6ASAAAAAAAAAEmzvMLZ - 3uP29/fw4uTkuUAWCy0AAAAAAAAAAB4YYXd3gG13vbm5vb8zAAAAAAAAAE6xwdXd4/b6+/r38OTl1Vlc - OAMIFAweFBQSM2mtrYB3vdXT0NXExNU1AAAAAAAAAE65wtXe8Pr7/Pz79+fn1WphZ25pXV1mbHetrXd3 - tdXT4vXw49nZ3NYgAAAAAAAAAEu3wdje9vv7/Pz79+fn34B3d2xtoHeud66uudXT4vD39/Dj49zk5G0A - AAAAAAAAAD2xwcwoH0/L/Pukyenp5K27u7m5uczM0Nve4vb3+vr56OPl5eXl1igAAAAAAAAAADWxwQgB - BQYNmveZK/Dp6cG/wcTV2eP3+vr6+/r6+ejm5ufn5+nkIgAAAAAAAAAAAJmruR4sjC2WLFCdDd3p6dXW - 1tXI3vn67pCO9Ojp6efo5+fm59wiAAAAAAAAAAAAAABLsZ0FmC0qKgHMRcjp6dzc1Y2KiO3RlfKTj+np - 5ubm5eXk1SIAAAAAAAAAAAAAAACdab/Lp5aWnEfV1cHm6ebk6pGSiabZ8fOU0uXl5eTk3NyuRQAAAAAA - AAAAAAAAAAAAn0ux0KFTaMHBv7nC6efp3Ovv7OTm3OPl3Nzc3NfW1U6fAAAAAAAAAAAAAAAAAAAAAABF - Wa25t7yxs7Gw5+fn5Obk18XG3NyBfHvD1cSgNQAAAAAAAAAAAAAAAAAAAAAAAAAAAFUzarGwsHl5sefn - 39zEgoZ/hL19fnqirj2jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATj09ZXV0cLzn3NXChYeDub+1pbQ9 - VQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0rXj+rpInTBDcHCz5NW/ucG5u7GAM1QAAAAAAAAAAAAAAAAA - AAAAAAAAAADLytDi9tOemQAAAAAAUy9EecLEsa1uPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj11Mme - VakAAAAAAAAAAAAATS84M0akAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE - AAAAAAAAAAAAAAABAAAAAQAAAAAAAFFNTQBRUlIAU1RUAGJHRwBiT08Aa0lIAGJTUwBrVlYAYllZAGZc - XABpWloAb1xbAHNTUwB7V1YAc1hXAHFbWwBkZWUAaWFhAG5kZABpamkAcGFhAHlubgB2cHAAf3V1AH55 - eQB8fX0AgUpKAI1PTwCLWFcAhlhYAI9ZWQCKXFsAm1ZWAJJZWQCWWVgAmlpbAJtcWwCiXFwAl2BfAIBg - YACAZ2YAgG9vAI9oaACWZWQAmGBhAJ5kZACcaWoAmm9vAIV0dACNcHAAiXZ2AIB8fACac3IAm3V0AJ51 - dQCZfHwAnHx8AKNmZgCnZmYAqmJiAK5jYwCvb24AtWVmALBtbgC5bW0AvmxtAKx+fQCxcnIAtHBwALZz - dACydXQAtnd2ALlwcAC5dnYAt3p5ALh5eAC8fHsAun18ALx+fQDGb3AAxnBxAMdzdADAd3YAyHJzAMlz - dADJdXYAynd4AMd/fwDMe3wAzXx9AHunbwBhvHIAYsN4ANuLOwC2hn4A4Zt5APC3ZABte9sAX47+AHWM - 5QAl0foAY+P8AIeDgwCFhoYAioSEAJOIiACWi4sAmpKRAKGCgQCmhYUAqYGBAKuDhACniooApYyMAKiO - jQCyhYMAvoWEALeNjQCrj5AAr5eXALSVlAC9lJMAmbCEAK6RugDBgYAAwoSCAMWDhADChoQAxYeFAM6A - gQDFiIYAxoqIAMqIiQDMi4oAy4yKAMiPjQDPj44A0ISFANKJigDUi4wA04+NANWNjgDKkY8A0JCOANud - iQDWj5AAzJSTAM2XlgDGm5oA1pGSANOUkgDVl5EA1pOUANiVlgDYmJUA2ZeYANKenADbmpsA3pmYANuc - mgDbn5wA1aacAN6gngDqqZoA3Z+gAMyjowDCra0AxqysAMqpqQDboaAA3qKiAN6logDbp6UA3aWkANer - qgDWsbMA0rW0ANe0tADfs7IA4aSiAOGlpQDkp6UA46imAOWopgDsraIA6qimAOGoqADhrqwA6a2rAOqv - rADpsK4A7LGuAOGzswDlsbEA7bKxAO+1sgDotrYA5rm3AO+4twDot7sA6bq5AOu9uwDrv70A8bazAPG2 - tADxuLUA9Lm2APC9uwD2vboA9L+9APi+uwD4v7wA8sC+APXAvgD5wL0AkILJAKqXzACsu8cAqr/LALLV - 3QDawMIA48XFAOvDwQDswMAA7cTDAO/ExQDgxsgA8cbEAPTGxADwyskA9MvJAPLNzQD21dYA+NjZAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAMEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHCEcBQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAayU9PSYbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQlBSQiJpAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAM0pSUlJQPRcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnUlJSUlJGFQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAFJSUlJSUkoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzUlJSWVJZfxAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5XWYqKioqGDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoqMkpqa - mqAsAAAAAAAAAAAAAAAAAABoNAAAAAAAAACMjJyuvLy2toYHAAAAAAAAAAAAABcOIDouBgAAAAAAc4yc - tsHKysPAriIKAAAAAAAAABYgRk1LTX+DEAAAAABukqXB4ejo4dHPQCIEChcXEwggTXV/k66unKMpAAAA - AG6Srsro6ero0dN/Rk1NRk2Dg4STrsbh4cHAt2sAAAAAbpKuOXPe6ajW15KGg4OGk528yuHo5eHPz882 - AAAAAAB4jCkDAxSoMabXt5yjt8ro3ePo5dbT09HTdAAAAAAAAABGcBFoGgFwdtfDwHxi2dpmZcrX09HP - z0MAAAAAAAAAAHh/qWwaOa6cz9PNZGPYsdzbzc3DwLk2AAAAAAAAAAAAAAAvhpKakoyg19HNyKS5wHtb - orZ/cwAAAAAAAAAAAAAAAAAANkaKWVm5zb1gYV6cXVxfNgAAAAAAAAAAAAAAAAAAALGvlTIuP1K5tqCR - l4xfLwAAAAAAAAAAAAAAAAAAsbPBenkAAAAAcCVYjE0scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////+f///+D////A////wH - ///4B///+Af///gH///wB///8Af///AH/+fwA/8D4AH8AeAAAAHgAAAB4AAAA+AAAAfwAAAP8AAAH/wA - AD//AAD//gAD//B4D////////////////////////////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAAWlJSAHBJSQB1SEgAe1dXAHdYWAB5WlkAel1dAGBiYgB1bGwAfWtrAHh2 - dgB9fn4Ag01NAIRXVwCIV1cAhV9eAItbWgCgX14ApV1dAJhgXwCNYGAAnWtqAJhtbQCCdnYAh3x8AI15 - eACeensAqGBgAKhoZwCga2oArGpqALNqagCzb28AtG1tALltbQCxb3AApnVzAKlzcwCqdHMApnp6AKd+ - fgCpensAq3x7ALZ3dgC8dHQAvH59AMZvcADGcHEAxXN0AMhycwDJdncAynh5AMx5egDNfn8Ajo1wAOek - VgDGgH8A4p53AEZ2+gB8u4AAd8PaAIuEhACOh4cAjo6OAJ+DggCejo4Ao4SEAKSIiACsi4sAqo2MAK6P - jgC+gYAAvoaGAL+KiACskJAAtJeXALWenQC5np4At6iOAKmyjgC9nroAwYSDAMaGhADOhoYAxomHAMiK - iQDJjYwA0oeIANOOjwDUjY0A2ZiPANaPkADGkZEAx5eXAMySkADGnZwA1ZOSANeTlADWl5YA2JSVANGZ - mADan50A3J6dAOCcmwDVoJ8A7K2fAMOtrQDXo6IA3aCgAN+kpADVq6oA3ay3AMu0tADPtrYA3L+/AOCi - oQDhpqUA5KelAOinpgDlq6gA46usAOOvrQDqrqwA7LGuAOayswDjtrQA5re1AOqysQDts7EA57y6AO+8 - ugDrvL0A8LOwAPC1sgDwtrQA87q3APS6twD2vboA8b69APi/vAD2wb4A+cC9AJmTzwDHqMMAu8PMAIHf - 8QDByNAA7cLCAO3FwwDvxsQA5cjIAOzOzgDwxcQA9cbEAPPP0AD10tIAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - BQMJAAAAAAAAAAAAAAAAAAAAAAAAAAAPHBMNAAAAAAAAAAAAAAAAAAAAAAAAABojLy8TAAAAAAAAAAAA - AAAAAAAAAAAAAB0wMDAiPgAAAAAAAAAAAAAAAAAAAAAAQjAwMDAtGAAAAAAAAAAAAAAAAAAAAAAAFzIy - NTU5CgAAAAAAAAAAAAAAAAAAAAAAIjZYWFxcBwAAAAAAAAAAAAAAAAAAAAAANlxtdW11JQAAAAAAAAAA - PgcRDgkAAAAAXG1/lISAZgMAAAAAABkVLC5SVhcAAABNY3WWnJuLfB8UBAcQHkhWaX91dSsAAABNY2BM - mJeCiVJSVl9laX+WloSJgEIAAAAAXAEIC0tGjnR0dJaRk5qNjIyJQwAAAAAAJkNADBtdjIaPO1GSPYuJ - hnVEAAAAAAAAAClISWRcd4xwkGp8UE90VwAAAAAAAAAAAAAAKSQ1NYZ7OjhbPDdGAAAAAAAAAAAAAHNv - YGsAKyJoXFYmRwAAAAAAAAAAAAAAcnIAAAAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// - /wD///8A////APx//wD4f/8A8H//APA//wDgP/8A4D//AOA//wDgP8EA4B8BAMAAAQDAAAEA4AADAOAA - BwDwAB8A/AA/APCA/wDn9/8A////AP///wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAABjZGQAdmRjAHtpaQB/eHgAgU9PAKBaWgCFbm0AlWtqAKptbgCwZ2cAsGhoAKxw - cACteHkAvnJyAMZvcADGcHEAy3l5AMx9fgCFmXQAwIB/ANeUfQDhoX8AlIqJAJWMjACYiIgAoIaGAK2K - igCxh4cAvoGAALKKigC4iYgAuJWVAL2cnACss50AuqKhAL+mpgDLgoIAxImHAMeNjADLkI8AxpWTANCS - kQDYlZUA1J6dANqZmgDdnp4A1J+oAMaiogDOr68AzLKyANi5uADhpaIA4qypAOWtqADrrqsA4bKwAOay - sgDtuLYA57++AOy4uADxtLIA8be0APa9ugDswL4A9sG+ALCcxwC5ncIA06zBALnH0QC2ytQA7sPDAPLS - 0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAZBgUAAAAAAAAAAAAAAAAACw8KAAAAAAAAAAAAAAAAGhAQDgAAAAAAAAAAAAAAAAkRESUYAAAA - AAAAAAAAAAAlKy4uBwAAAAAAAAcDAAAAKzlHPCYCAAAYCB0oKgAAAC0wSDs0FB0nLDlAOiwAAAANAQQb - Pi9DRkVBPzUAAAAAJB4cKz5EQjMiNSkAAAAAAAAAHwwRNxYVEyQAAAAAAAAxMgAAACEgAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA4/8AAOP/AADD/wAAwf8AAMH5 - AADAwQAAwAEAAMADAADABwAA8A8AAM5/AAD//wAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAkAAAAJAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAUAAAAOAEBAVUAAABUAAAANQAAABAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkFBSUvGRl5TCkpwlYuLtxDJCTQFw0NmQAA - AEkAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAwMKE8rK6V6RET2klJR/5ZS - U/+OT0//ZDc38B0QEJoAAAAyAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDAwYVzAwoopP - T/ygXVz/oFtb/55ZWf+bWFf/k1NT/1UvL9wGAwNcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AARNKipxhk5O+adkY/+uZWX/tWdo/7VmZ/+qYWH/nltb/3hERPcfERGCAAAAFgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADEZGS1zQ0LXqGdm/7ptbf/Fb3D/x3Bx/8hwcf/BbW7/q2Vl/4hPT/82HR2gAAAAIAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAB1gxMYyYXl3/vXFx/8Zwcf/HcHH/x3Bx/8dwcf/HcHH/uG1t/5NY - V/9EJia2AAAAKQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPB8fNH1MS+K4cnH/x3Fy/8dwcf/HcHH/x3Bx/8dw - cf/HcHH/wHBx/51gX/9PLCzGAAAAMwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAMAAAAAAAAAAAAAAAAAAAAALhAQFIZXVs/RjIz/1Y2O/9qYmP/eoaL/46qr/+aysv/ot7f/6rm5/+m4 - uf/otbX/5q+v/+uvrf/jqab/wYeF/28/P/QhEhKvAAAAXwAAACgAAAANAAAABQAAAAMAAAACAAAAAwAA - AAUAAAAKAAAAFQAAADAdDg9oSSkptHZHRu2dYmL+t3Z1/758e/+6enn/tnh3/7d5eP+8fn3/w4SD/7Z6 - ef9eODfbBgICTgAAAAgAAAAAAAAAAAAAAAAAAAAAPhwcJJVjYuPXkZH/2JOU/92fn//iqqr/57O0/+u8 - vP/uwsL/78XG/+/Exf/twMD/67i4/+60sv/wtrP/zZKQ/5taWv9xQED2MRsaxAgEBIcAAABaAAAAQQAA - ADcAAAA2AAAAOwAAAEUEAgJZHA4OfUcnJ7l5SkntqGxr/8CAfv/DgoH/vH59/7p+ff/DiIb/zZGP/9GT - kf/UlJP/1peV/9eZl/+GVlbuGQsLVwAAAAcAAAAAAAAAAAAAAAAAAAAARiIiLZ9rauvZk5P/2peY/+Ck - pP/lsLD/6ru7/+/Fxf/yzMz/9NDQ//PPz//xycr/7sDA//K5tv/1u7j/36Kg/6dmZf+mZWX/j1ZW/WM6 - OutDJSXQNBwcvDAaGrQ0HBy1PiIivUwsLMtkPDzfh1VU9a1xcP/EhIP/xIWE/7+Cgf/Ch4b/zZST/9mk - ov/grq3/4a6t/96lo//eoJ7/36Kg/+Cjof+IWVjnGwwMQwAAAAIAAAAAAAAAAAAAAAAAAAAARyQkL6Br - auzZk5P/25qb/+GnqP/ntLT/7cDA//LLy//209T/+NjY//fX1//00ND/8cbG//W9u//4vrz/46ak/7d0 - c/+vb27/s3Jy/7d2df+ucXD/pWpp/6Npaf+nbWz/sHVz/7p9fP/EhYT/yImI/8WIhv/DiIb/ypGP/9eg - n//hr63/57q5/+rCwP/rwsD/6bq4/+evrf/nq6n/6q6r/9qgnv9wRkbDBwAAHgAAAAAAAAAAAAAAAAAA - AAAAAAAASCQkLZ1nZuvYkpP/25uc/+Opqv/qtrf/7cHB//TOzv/52Nj/+tzc//na2v/xz9D/8MfH//fA - vv/6wb7/6a6r/8OBgP/DgoD/vX58/7h7ev+8fn3/woOC/8aHhv/HiYj/xoqJ/8aLif/Ijoz/zZST/9eg - nv/hrav/6Lm3/+zCwf/uyMf/78nH/+/Dwf/uvLr/7ba0/+60sf/vtLL/8ri1/7J+fflMKSltAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAQyEhI5JcXOPWj5D/3Juc/8qVlf+BZmb/bl5e/4l4eP/AqKj/8tPT//LO - zv+5p6b/w6qq//fBv//7wr//8LWy/86Ojf/Ojoz/0ZGP/9GSkP/OkY//zpOR/9GamP/VoJ//2qel/+Gv - rf/nt7X/6727/+3Dwf/wycf/8czL//LLyf/yxsT/8cC+//G7uf/yubf/87m3//S7uP/4vrv/1J6c/3JH - RrAdCgsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANRcXEYJNTcvPiIn/15aW/2VNTf85Ojr/Q0VF/0JF - RP9dXFz/n5GR/+S/v/+bh4f/hXp6/+25uP/7wr//9bu4/9qcmv/Zmpj/252b/96gnf/ipKH/5q+s/+u+ - vP/vycf/8srI/+3Hxv/wysj/9c7M//TNy//0ysj/9MbE//TBv//1vrz/9r26//e9u//4vrv/+L+8//vB - vv/hqqf/g1ZVzDwcHC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW4+Ppq/env/05OT/2ZX - V/9rbm7/fX9//3l6ev99f3//cHJy/5F9ff+ff3//XFhY/9eop//8wr//+L+8/+Wppv/ipaP/5qil/96i - pP/Kmaz/1qi1//LGxP/tyMf/qb3J/23E3P9kw9//vMTN//jDwP/3wb//+MC9//i/vf/5v73/+b+8//i/ - vP/3vrv/+L68/92mo/+IWlnRRSMjOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcv - L0mbX1/y15GS/6GAgP9XV1b/iYuL/4CBgf98fX3/cnR0/1dPT/++j4//km9w/9Sfnv/6wL3/+cC9/+6z - sP/ssK3/0Z+u/4OH1P9YffD/QGPs/7KYyv/Ct7z/Ytrz/3Ts//8s2f//cbvU//m+u//4v7z/+L67//e9 - uv/1vLn/9Lq3//O5tv/zuLX/0puZ/4RVVctGIyM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADIXFwdrPDySq2ts/diZmf/ApKT/sKur/4CBgP95enr/iYiI/49zdP/do6P/36Ch/96e - nv/zuLX/+sK///W7uP/1ubT/qZC//2qY+/9tnf//MGT6/56FxP/esK//nMbS/57n8/9+z+T/ybG3//a6 - t//zubb/8re0//C1s//utLH/7rKw/+qvrP++iIb9dklJtkMgISoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHIyMSazw8kZ5hYvXNjI3/2aSk/7OMjP+bd3f/sIKC/9KV - lv/cnJz/2peY/9aRkf/koqL/+sG+//nAvf/5v7z/4amw/6qZx/+aouP/qpvP/+mxtv/2urj/6rGv/+S6 - u//ptrX/466n/+Ovqf/ssK7/6q6s/+isqv/oq6n/2J2b/6JubfFoPT2NOxoaFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBoaCFowMFd7SEjAomZm9sWC - gv/XkZL/25SV/9iSk//Wj5D/1IyN/9KHiP/UiIj/8bOx//rCv//3vbv/9ru4//O3s//xuLX/7q6e/+ej - hf/npIn/7bCp/+Otp/+KsX3/ULdm/1WjWv+7oYz/5KWk/9uenP+4gH79glJRzVYuLlQgCAkGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAA8HBwQVy4uS3FBQaCPV1fjsG5v/cmAgf/ShYb/0YKD/85+f//LeXr/2I2M//e8uf/1vLn/7rOx/+2y - sP/lpJX/5qFY/+6xXP/djS3/35h9/86gl/9SwW7/Nd90/0WxXP+vlH//wYSE/49cW+VlOTmBQR4eHAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGk7OhqIWFd8oG5u8J5qav+eX2D/tmts/8Z0df/KdHX/yXJz/92T - k//3vLn/7LGu/+Snpf/dm5L/4Z1q/+61dP/fmmX/15WM/9eYlv/Bm43/r6uR/6uNgP+WYWDtbkBAnUwn - JzQVAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiFJSBnhC - QgpqNDQJWSUlB08dHQdfKisKfENDFJJWViinbGtRvYOCjtOcm8/pt7X157y6/7eOjfhxRUW7aTk5m4RK - StehWlr6uGdo/8Zwcf/dkpH/8bSx/+OnpP/YmZj/1ZWT/9ealP/Vl5X/0JCP/8eIhv+zdnb/lFtc6nA/ - QKRSKio/JQwNBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADTn6AB2qioDMuUlCHBhYU8voCAWcCBgXTEhoaLzZGQqdeensngrKvn47Sz/NOop/+yiIfyi2Bgs2k+ - PlZXKysPAAAAAUYlJRxcMTFYcj4+pYpMTeWmXF3+xnl5/9+Zl//dnJr/z46M/8KCgf+vc3L/ll9e831L - S8hlOTl/TigoMy0REQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABzQUIDnmprDriGhifHlpZMzp6eeNCgoZ7On5+2yJqaybuPj9WnfHzVj2RkunVJ - SYNbLy8/PRQUCgAAAAAAAAAAAAAAAAAAAAAAAAAAKRUVBU0pKSphNDRtd0BAsotNTd2ZW1vrkVlY4HtJ - Sb5lOTmCUysrQTsbGxEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCwsA2Y4OA5xQkImdkhIRHhKSll0R0dibUBAWWI2 - NkNUKCgoOhISDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhkZB0km - Jh5LJiYsRSEhITATFAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD/+H////8AAP/gH////wAA/8Af//// - AAD/gA////8AAP+AD////wAA/wAP////AAD/AA////8AAP4AB////wAA/gAH////AAD8AAf///8AAPwA - B////wAA/AAH////AAD8AAf///8AAPgAB////wAA+AAH//4HAAD4AAP/8AEAAPgAAf/AAQAA8AAA/wAA - AADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAEAAPAAAAAAAQAA8AAAAAADAADwAAAAAAcAAPAA - AAAADwAA+AAAAAAfAAD4AAAAAD8AAPwAAAAAfwAA/gAAAAD/AAD/gAAAA/8AAP/gAAAH/wAAgAAAAB// - AAAAAAAAf/8AAAAD4AP//wAAgB/8H///AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAYAAAAZAAAAGQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAARCQkYOh8fb0ooKK80HByiCQUFTAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAIhERFmA2Np2ITUz3lVNT/4dLS/5IKCi9AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAANjODiBllhY+61kZP+vY2P/pV5e/3xHRvEhEhJfAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAASSgoN41VVeS6bW3/xW9w/8dwcf+9bG3/klZW/jogIIEAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1RkWcs2xs/8dxcv/HcHH/x3Bx/8Zwcf+iYWH/SSkpmAAA - AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUC0tMZtgX+fGcnP/x3Bx/8dwcf/HcHH/x3Fy/61q - av9UMTGqAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxRER1tm9v/8hxcv/HcHH/x3Bx/8dw - cf/HcnP/tnRz/185OboAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAACIxXV7TEdHT/yHJz/8l1 - dv/Kd3j/ynd4/8p4eP/Bf37/bURDywAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNKysjo2Zm4Mt4 - ef/NfH3/z4GC/9GFhf/RhYb/0YWF/82Mi/9+UVHeCAICOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAACwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGc+ - Pkm1c3P30IGC/9OJiv/XkZL/2ZaW/9mWl//YlJX/2JmY/5hnZfMeEBBrAAAABwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA0FAgItHhAQWzAbG4IqFxeHDQcHWwAAABkAAAAAAAAAAAAA - AAAAAAAAek1MdMN/f//VjI3/2piZ/9+io//hqKn/4qmp/+Clpf/jpqT/wImH/04xMLwAAAA6AAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABEbDg5GRygokW5CQs+MVlbxnGJh/JdfXvxnPz7hHA8PbgAA - AAwAAAAAAAAAAAAAAACMW1qbz4qK/9qXl//gpqb/5rKz/+q6u//rvLz/6La2/+qxr//epKL/j1lZ+DUc - HLACAQFPAAAAHQAAAA8AAAAPAAAAEwAAACIbDg5MVDExnYZUU+SpbWz+uXl4/7x+fP/AgoD/xoeF/72A - f/9fOzu1AAAAHAAAAAAAAAAAAAAABJhkZK/VkZH/3Z+g/+axsf/twMD/8svL//LNzf/vxcX/8Lq4/+6z - sf+1dHP/j1VU+144N9g7IiKqMhwclDcfH5RGKSmiYTw7v4tZWOiydXT+woOC/8aKiP/Ol5X/2aWj/9ui - of/cnpz/2pyb/35TUrgAAAAVAAAAAAAAAAAAAAAFmmVkstaTk//hpaX/7Lm6//TLy//419f/+NnZ//TP - z//1wb//9Lq3/8aGhP+1dHP/s3Rz/6xwb/+pb27+rnNy/7Z7ev/BhIL/yY2L/8+WlP/apqT/5be2/+vB - v//rvrz/6bKw/+uvrf/Um5n/bUVEgAAAAAMAAAAAAAAAAAAAAAOTXV2q1ZGR/9CYmP+dfX7/o4yM/9e8 - vP/z0tL/zLOz/+u8u//5v7z/1peV/8uLif/Ki4r/yoyL/86Ukv/TnJv/2qSi/+Gtq//nuLb/7cPB//DJ - x//xxsT/8b+9//G6t//zubf/77az/6d1dM89Hx8lAAAAAAAAAAAAAAAAAAAAAIJOTojNiIn/jGlp/01O - Tv9UVlb/dnNz/7uhof+Pfn7/xJ+e//zCv//lqKb/3J2b/+Chnv/hpaT/7Ly5/+vHxv/MxMn/0MjN//LK - yf/1x8X/9sLA//a/vP/3vrv/+L+8//S7uP+5hoXhYTo5RwAAAAAAAAAAAAAAAAAAAAAAAAAAaTs7RrVz - dPKmfn7/cXJx/4SGhv97fX3/b2Zm/516ev+7kJD/+sG+//C2s//lqqr/rpbA/3aB2/+ql83/tMHK/2jc - 9P9OzOz/2r3B//q/vP/3vrv/9ry6//a8uf/ss7D/tYGA32c+Pk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAvEhIHg01Njbp9fvrCn5//nI+P/4R7ev+fgID/2Jyd/9ybnP/ytrT/+b+8/+ewtf+Mld3/ZI36/5eI - zv/Ttrn/sNLc/6/Czv/stLT/8re0/++0sf/tsq//2qCe/6Rxb8phODg+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABCIB8MeUZGbqRpata8gYH8x4mJ/9eTk//YkpP/04qL/+Cbmv/5wL3/9726/+Sw - t//Zrrn/56qY/+2smf/lr6n/nLWJ/4Gtdf/Pppn/3qGf/7yEg/KJWViYTyoqIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQh0dGXJAQGOXXl7NtnR1/8V7fP/MfH3/znt8/+il - o//0urj/7LCu/+Whg//rq13/35VX/9Kek/9yvXz/ZbNv/6iCdfqYY2O/aj4+TCUJCgcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACcamsBjFRVB4FERAh9PT0JjU1ND6VnZx+/hINF0JqZiNOjoty0iIf2hFBQw5lX - V8+wY2P4xXR0/+aioP/oq6j/2pqT/92fif/Vlor/yYqJ/7N8efiVZmPGdERFYkEfHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALiFhgXFkJEdx5CQSMqSknbNlZWbz5uaws2cnOXBlJPnqH18r4dc - XFFULy8OSCUlFm07O0+FSUmeoV1d3sF9fPrGhoX/snZ295xkZNiFUlKbbD4+T0UdHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc0JDA5FgYRKdbm46onR0Zp9ycnuWampzhFlZVmY6 - OikvDAwHAAAAAAAAAAAAAAAAAAAAAB0ODgRULCwhbjo7UXhERGVrPDxHTCYmGxAAAQMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//////////////////////D////gf///wH///4A///+AP///AD///wA///8AP//+AD - ///gA//D4AH+AeAA+ADgAAAAwAAAAMAAAADAAAAB4AAAA+AAAAfgAAAP8AAAH/wAAD8AAAD/AAAD/wB4 - D//H////////////////////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABMAAAAtAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgIO1cwMM1qOjrsHhAQmwAA - ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAATCgogfUhI6ahgYP6lXV3+f0hI9wIBAT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGBgFPLy6kuW1t/sZv - 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 - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCPokeMemory.Designer.cs b/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCPokeMemory.Designer.cs index 1a121b221d..c926064d90 100644 --- a/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCPokeMemory.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCPokeMemory.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AmstradCPCPokeMemory)); this.OkBtn = new System.Windows.Forms.Button(); this.CancelBtn = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); @@ -140,7 +139,7 @@ this.Controls.Add(this.CancelBtn); this.Controls.Add(this.OkBtn); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController_MultiSize; this.Name = "AmstradCPCPokeMemory"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Poke Memory"; diff --git a/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCPokeMemory.resx b/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCPokeMemory.resx index ca821b54f8..1af7de150c 100644 --- a/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCPokeMemory.resx +++ b/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCPokeMemory.resx @@ -117,508 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAwAMDAQAAAABABoBgAAxgAAACAgEAAAAAQA6AIAAC4HAAAYGBAAAAAEAOgBAAAWCgAAEBAQAAAA - BAAoAQAA/gsAADAwAAAAAAgAqA4AACYNAAAgIAAAAAAIAKgIAADOGwAAGBgAAAAACADIBgAAdiQAABAQ - AAAAAAgAaAUAAD4rAAAwMAAAAAAgAKglAACmMAAAICAAAAAAIACoEAAATlYAABgYAAAAACAAiAkAAPZm - AAAQEAAAAAAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAQAAAAEAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAHR3AAAAAAAAAAAAAAAAAAAAAAAAAAAAdHdEcAAAAAAAAAAAAAAAAA - AAAAAAAAAHd0d3QAAAAAAAAAAAAAAAAAAAAAAAAAAEd8d3UAAAAAAAAAAAAAAAAAAAAAAAAAB3yHfHZw - AAAAAAAAAAAAAAAAAAAAAAAAd3fIyHVwAAAAAAAAAAAAAAAAAAAAAAAAfHh3jIxwAAAAAAAAAAAAAAAA - AAAAAAAHd8jIyHdgAAAAAAAAAAAAAAAAAAAAAAAHd4yHfIdAAAAAAAAAAAAAAAAAAAAAAAAHyMjIyMhQ - AAAAAAAAAAAAAAAAAAAAAAB3d3eMh4dgAAAAAAAAAAAAAAAAAAAAAAB8jIyIfIdQAAAAAAAAAAAAAAAA - AAAAAAB3h4jIiMh3AAAAAAAAAAAAAAAAAAAAAAB8jIeHeIjHAAAAAAAAAAAAAAAAAAAAAAeIiHh4eMiE - AAAAAAAAAAAAB0dHcAAAAAd8h4eIiIiHcAAAAAAAAAB0d3d3RwAAAAeIeIiIiIh3RwAAAAAAAHR3d8h3 - dAAAAAfIh4iIiHiIx0cAAAAAdHh3eIeHhwAAAAeHiIiIiIiId3R3dHR0eHd4h4eHhAAAAAd4eIiIiIiH - x3d2d3eId4iIiIiIhwAAAAd4eIiI+IiIh3d3eHh3iIiIiIeHwAAAAAfIjHeIiIiIyIeHh4iIiIiIiIiI - cAAAAAeIQ0R3h3iIiMiIiIiIiIiIiIiEAAAAAAfIR3d3d0iIiIh4iIeIiIiIiHhAAAAAAAB4d3d3SHiI - h4fTiIi3iIiIeIwAAAAAAAB3h4d3eIeIiHiJiIuIiIh4jHAAAAAAAAAHyId3h3h4iIh4iIiIiIiHeAAA - AAAAAAAAB8iMiMjIiIiIh4h3aMjHAAAAAAAAAAAAAAdYyIeIiIiMjId6d4eAAAAAAAAAAAAAAAAHdsjH - eIeH6MiId3AAAAAAAAAAAAAAAIiIh4V8jIh4eIfHcAAAAAAAAAAAAACIiIh3AAAHd3h3fHcAAAAAAAAA - AAAAAAiIjHgAAAAAAHx8eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAA - AAd0dAAAAAAAAAAAAAAAAAB3x3cAAAAAAAAAAAAAAAAAd3fHcAAAAAAAAAAAAAAAB3yMh3AAAAAAAAAA - AAAAAAfIeMdwAAAAAAAAAAAAAAAHjIyHQAAAAAAAAAAAAAAAfId4yHAAAAAAAAAAAAAAAHjIyIdQAAAA - AAAAAAAAAAB3iId4YAAAAAAAAAdwAAAAjIiIiIUAAAAAAHd3dAAAB4iIiHh8cAAAAHd3x4dwAAd4iIiI - h3Z3d3R3yIh4cAAHh4iIiIfHd3d4iIiIh3AAB3jHiIiIiHeHiIiIiIwAAAh3dXh4iMiIiIiIiIhwAAAA - yGd0d4iIeIi4iIiMAAAAAIeHd4iIh32IiIiIcAAAAAAAd4jIyIiIiHeHyAAAAAAAAAB3h4iIh8h3dwAA - AAAAAAAIh8fIh4eIaAAAAAAAAACIiHAAB8jIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////////////////////n////g////wP///8B///+Af///gH///4B///8Af///AH///wB//n8AP/A+AB - /AHgAAAB4AAAAeAAAAPgAAAH8AAAD/AAAB/8AAA//wAA//4AA//weA////////////////////////// - //8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRwAAAAAAAAAAAAB3dAAAAAAAAAAAAA - d8dwAAAAAAAAAAAAfId3AAAAAAAAAAAHeMjHAAAAAAAAAAAHyHh3AAAAAAAAAAAHh3eEAAAAAAAAAAAI - yIiHAAAAAHd2cAAIiIiIQAAAd3d4UACHiIiId3d3eHiIcACHh4iIyHeHiIiIcAAIR3d4iIiIiIiMAAAH - d3eIh3iIiIhwAAAAeMh4iIiHiMAAAAAAAHfIiMh4aAAAAAAAiIgHyIfIAAAAAAAIgAAAAIAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD8f/8A+H//APB/ - /wDwP/8A4D//AOA//wDgP/8A4D/BAOAfAQDAAAEAwAABAOAAAwDgAAcA8AAfAPwAPwDwgP8A5/f/AP// - /wD///8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAd1AAAAAAAAB8cAAAAAAAB4eAAAAAAAAHyMgAAAAAAAiIhwAAAHcACI - iHcAd3hwAIz4jIeIiIAAd3eIiIiIAACHeIiIiHAAAACMeMh4AAAAiAAIgAAAAAAAAAAAAAAAAAAAAAAA - AAD//wAA//8AAP//AADj/wAA4/8AAMP/AADB/wAAwfkAAMDBAADAAQAAwAMAAMAHAADwDwAAzn8AAP// - AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAA9OzsAZD8/AGg8 - PABtPj4AQkNDAEZIRwBWQkIAV0REAF5AQABbRkYAVklJAFxPTwBTU1MAXFJSAF5ZWQBkQEAAYUREAGZF - RQBqQkEAYEtLAGNPTwBwQUEAfUZGAHJKSgB2SUkAfU9PAGBRUQBgVFQAZlZWAGZYWABqWVkAclZWAHpU - VAB9W1oAbmJiAGtoaABtaWkAcWdnAHdnZwB8Y2MAe2pqAHJxcQB+dHQAd3l5AHl6egCGT08AiU9PAIFP - UACGU1MAjVFRAIlWVgCMV1cAg1xbAIxaWQCQUlIAlVJSAJFXVgCXVVUAmVVVAJZaWQCSXV0AlV9eAJpZ - WgCeW1sAml5eAKBZWgCgXFwAql9fAIRmZQCIZWQAhWtrAI5ragCTYmEAnGBhAJ9kYwCaZmYAk25uAJ1s - awCFdHQAiXd3AIt+fgCWd3cAmHR0AJV5eQCbfHwAo2JhAKZhYQChZWUApGVkAKplZACsZGQAqmhnAKZr - agCnbGsAqmloAKlubQCsbW0AtGZnALhsbACxb3AAv29wAKVxcACrc3IAr35+ALN0cwC5c3MAvXBxALR4 - dgC1fHsAunt6AMNtbgDGb3AAw3FyAMZwcQDGdXUAyHR1AMp3eADBeXkAxnt7AMB/fgDLensANLBSAEWf - TgBBtFwAPMdnADHkdgDciiIAvoF/AISrdwDln0sA35lhAN2XfADgmmEA8LdlAO61cAArWPIALWT+AEh5 - +gDOf4AAfoCAAHiA1ABZv9wAZrnUAGK+2ABxnv4Ad6P/ADPX/QBw0OcAW+D7AIKEgwCPgoIAjI2NAJuC - ggCUiIgAmYqKAJGSkgCjhIQAqoKCAKKLiwC+hIMAsoqKALaSgQCum5sAsZubALqqlQCdgr4Ar6ytALGh - oAC6pKQAwoSDAMyBggDGiIYAyYiHAMWMigDMjIoA0ISFANKHiADUjIwA2Y6NAMCUjQDIk44A0JCPANaP - kADHlZQAzpSSAMScmwDUkpIA2ZSVANWYlgDampcA2ZeYANWcnADam5sA4p2cAMChjwDeoJ4A5aCFAOaj - jQDlpJoA2p6hAMOkowDOoaEAy62tANegoADdoqEA2aGpANGsrwDdq6kAwbG4ANGysQDdtLQA2ri3AOGk - owDjqKYA66ylAOGnqADjq6oA6a2rAOOwrwDssK4A5K+wAOaztADttLIA57i2AO24tgDmurgA6rq6APC1 - swDyuLYA9Ly5APi+uwD1wL0A+cC9AKKMwACkk8QAqprMALSayACptsEAlaDkAOy/wACRxtQAgOv9AJnr - 9wDEwsoA5sbGAOzCwgDuyMcA7MzMAPPEwgDxy8oA9dPTAPja2gAAAAAAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAADLytDi9tOemQAAAAAAUy9EecLEsa1uPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj11Mme - VakAAAAAAAAAAAAATS84M0akAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE - AAAAAAAAAAAAAAABAAAAAQAAAAAAAFFNTQBRUlIAU1RUAGJHRwBiT08Aa0lIAGJTUwBrVlYAYllZAGZc - XABpWloAb1xbAHNTUwB7V1YAc1hXAHFbWwBkZWUAaWFhAG5kZABpamkAcGFhAHlubgB2cHAAf3V1AH55 - eQB8fX0AgUpKAI1PTwCLWFcAhlhYAI9ZWQCKXFsAm1ZWAJJZWQCWWVgAmlpbAJtcWwCiXFwAl2BfAIBg - YACAZ2YAgG9vAI9oaACWZWQAmGBhAJ5kZACcaWoAmm9vAIV0dACNcHAAiXZ2AIB8fACac3IAm3V0AJ51 - dQCZfHwAnHx8AKNmZgCnZmYAqmJiAK5jYwCvb24AtWVmALBtbgC5bW0AvmxtAKx+fQCxcnIAtHBwALZz - dACydXQAtnd2ALlwcAC5dnYAt3p5ALh5eAC8fHsAun18ALx+fQDGb3AAxnBxAMdzdADAd3YAyHJzAMlz - dADJdXYAynd4AMd/fwDMe3wAzXx9AHunbwBhvHIAYsN4ANuLOwC2hn4A4Zt5APC3ZABte9sAX47+AHWM - 5QAl0foAY+P8AIeDgwCFhoYAioSEAJOIiACWi4sAmpKRAKGCgQCmhYUAqYGBAKuDhACniooApYyMAKiO - jQCyhYMAvoWEALeNjQCrj5AAr5eXALSVlAC9lJMAmbCEAK6RugDBgYAAwoSCAMWDhADChoQAxYeFAM6A - gQDFiIYAxoqIAMqIiQDMi4oAy4yKAMiPjQDPj44A0ISFANKJigDUi4wA04+NANWNjgDKkY8A0JCOANud - iQDWj5AAzJSTAM2XlgDGm5oA1pGSANOUkgDVl5EA1pOUANiVlgDYmJUA2ZeYANKenADbmpsA3pmYANuc - mgDbn5wA1aacAN6gngDqqZoA3Z+gAMyjowDCra0AxqysAMqpqQDboaAA3qKiAN6logDbp6UA3aWkANer - qgDWsbMA0rW0ANe0tADfs7IA4aSiAOGlpQDkp6UA46imAOWopgDsraIA6qimAOGoqADhrqwA6a2rAOqv - rADpsK4A7LGuAOGzswDlsbEA7bKxAO+1sgDotrYA5rm3AO+4twDot7sA6bq5AOu9uwDrv70A8bazAPG2 - tADxuLUA9Lm2APC9uwD2vboA9L+9APi+uwD4v7wA8sC+APXAvgD5wL0AkILJAKqXzACsu8cAqr/LALLV - 3QDawMIA48XFAOvDwQDswMAA7cTDAO/ExQDgxsgA8cbEAPTGxADwyskA9MvJAPLNzQD21dYA+NjZAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAMEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHCEcBQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAayU9PSYbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQlBSQiJpAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAM0pSUlJQPRcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnUlJSUlJGFQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAFJSUlJSUkoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzUlJSWVJZfxAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5XWYqKioqGDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoqMkpqa - mqAsAAAAAAAAAAAAAAAAAABoNAAAAAAAAACMjJyuvLy2toYHAAAAAAAAAAAAABcOIDouBgAAAAAAc4yc - tsHKysPAriIKAAAAAAAAABYgRk1LTX+DEAAAAABukqXB4ejo4dHPQCIEChcXEwggTXV/k66unKMpAAAA - AG6Srsro6ero0dN/Rk1NRk2Dg4STrsbh4cHAt2sAAAAAbpKuOXPe6ajW15KGg4OGk528yuHo5eHPz882 - AAAAAAB4jCkDAxSoMabXt5yjt8ro3ePo5dbT09HTdAAAAAAAAABGcBFoGgFwdtfDwHxi2dpmZcrX09HP - z0MAAAAAAAAAAHh/qWwaOa6cz9PNZGPYsdzbzc3DwLk2AAAAAAAAAAAAAAAvhpKakoyg19HNyKS5wHtb - orZ/cwAAAAAAAAAAAAAAAAAANkaKWVm5zb1gYV6cXVxfNgAAAAAAAAAAAAAAAAAAALGvlTIuP1K5tqCR - l4xfLwAAAAAAAAAAAAAAAAAAsbPBenkAAAAAcCVYjE0scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////+f///+D////A////wH - ///4B///+Af///gH///wB///8Af///AH/+fwA/8D4AH8AeAAAAHgAAAB4AAAA+AAAAfwAAAP8AAAH/wA - AD//AAD//gAD//B4D////////////////////////////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAAWlJSAHBJSQB1SEgAe1dXAHdYWAB5WlkAel1dAGBiYgB1bGwAfWtrAHh2 - dgB9fn4Ag01NAIRXVwCIV1cAhV9eAItbWgCgX14ApV1dAJhgXwCNYGAAnWtqAJhtbQCCdnYAh3x8AI15 - eACeensAqGBgAKhoZwCga2oArGpqALNqagCzb28AtG1tALltbQCxb3AApnVzAKlzcwCqdHMApnp6AKd+ - fgCpensAq3x7ALZ3dgC8dHQAvH59AMZvcADGcHEAxXN0AMhycwDJdncAynh5AMx5egDNfn8Ajo1wAOek - VgDGgH8A4p53AEZ2+gB8u4AAd8PaAIuEhACOh4cAjo6OAJ+DggCejo4Ao4SEAKSIiACsi4sAqo2MAK6P - jgC+gYAAvoaGAL+KiACskJAAtJeXALWenQC5np4At6iOAKmyjgC9nroAwYSDAMaGhADOhoYAxomHAMiK - iQDJjYwA0oeIANOOjwDUjY0A2ZiPANaPkADGkZEAx5eXAMySkADGnZwA1ZOSANeTlADWl5YA2JSVANGZ - mADan50A3J6dAOCcmwDVoJ8A7K2fAMOtrQDXo6IA3aCgAN+kpADVq6oA3ay3AMu0tADPtrYA3L+/AOCi - oQDhpqUA5KelAOinpgDlq6gA46usAOOvrQDqrqwA7LGuAOayswDjtrQA5re1AOqysQDts7EA57y6AO+8 - ugDrvL0A8LOwAPC1sgDwtrQA87q3APS6twD2vboA8b69APi/vAD2wb4A+cC9AJmTzwDHqMMAu8PMAIHf - 8QDByNAA7cLCAO3FwwDvxsQA5cjIAOzOzgDwxcQA9cbEAPPP0AD10tIAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - BQMJAAAAAAAAAAAAAAAAAAAAAAAAAAAPHBMNAAAAAAAAAAAAAAAAAAAAAAAAABojLy8TAAAAAAAAAAAA - AAAAAAAAAAAAAB0wMDAiPgAAAAAAAAAAAAAAAAAAAAAAQjAwMDAtGAAAAAAAAAAAAAAAAAAAAAAAFzIy - NTU5CgAAAAAAAAAAAAAAAAAAAAAAIjZYWFxcBwAAAAAAAAAAAAAAAAAAAAAANlxtdW11JQAAAAAAAAAA - PgcRDgkAAAAAXG1/lISAZgMAAAAAABkVLC5SVhcAAABNY3WWnJuLfB8UBAcQHkhWaX91dSsAAABNY2BM - mJeCiVJSVl9laX+WloSJgEIAAAAAXAEIC0tGjnR0dJaRk5qNjIyJQwAAAAAAJkNADBtdjIaPO1GSPYuJ - hnVEAAAAAAAAAClISWRcd4xwkGp8UE90VwAAAAAAAAAAAAAAKSQ1NYZ7OjhbPDdGAAAAAAAAAAAAAHNv - YGsAKyJoXFYmRwAAAAAAAAAAAAAAcnIAAAAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// - /wD///8A////APx//wD4f/8A8H//APA//wDgP/8A4D//AOA//wDgP8EA4B8BAMAAAQDAAAEA4AADAOAA - BwDwAB8A/AA/APCA/wDn9/8A////AP///wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAABjZGQAdmRjAHtpaQB/eHgAgU9PAKBaWgCFbm0AlWtqAKptbgCwZ2cAsGhoAKxw - cACteHkAvnJyAMZvcADGcHEAy3l5AMx9fgCFmXQAwIB/ANeUfQDhoX8AlIqJAJWMjACYiIgAoIaGAK2K - igCxh4cAvoGAALKKigC4iYgAuJWVAL2cnACss50AuqKhAL+mpgDLgoIAxImHAMeNjADLkI8AxpWTANCS - kQDYlZUA1J6dANqZmgDdnp4A1J+oAMaiogDOr68AzLKyANi5uADhpaIA4qypAOWtqADrrqsA4bKwAOay - sgDtuLYA57++AOy4uADxtLIA8be0APa9ugDswL4A9sG+ALCcxwC5ncIA06zBALnH0QC2ytQA7sPDAPLS - 0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAZBgUAAAAAAAAAAAAAAAAACw8KAAAAAAAAAAAAAAAAGhAQDgAAAAAAAAAAAAAAAAkRESUYAAAA - AAAAAAAAAAAlKy4uBwAAAAAAAAcDAAAAKzlHPCYCAAAYCB0oKgAAAC0wSDs0FB0nLDlAOiwAAAANAQQb - Pi9DRkVBPzUAAAAAJB4cKz5EQjMiNSkAAAAAAAAAHwwRNxYVEyQAAAAAAAAxMgAAACEgAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA4/8AAOP/AADD/wAAwf8AAMH5 - AADAwQAAwAEAAMADAADABwAA8A8AAM5/AAD//wAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAkAAAAJAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAUAAAAOAEBAVUAAABUAAAANQAAABAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkFBSUvGRl5TCkpwlYuLtxDJCTQFw0NmQAA - AEkAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAwMKE8rK6V6RET2klJR/5ZS - U/+OT0//ZDc38B0QEJoAAAAyAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDAwYVzAwoopP - T/ygXVz/oFtb/55ZWf+bWFf/k1NT/1UvL9wGAwNcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AARNKipxhk5O+adkY/+uZWX/tWdo/7VmZ/+qYWH/nltb/3hERPcfERGCAAAAFgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADEZGS1zQ0LXqGdm/7ptbf/Fb3D/x3Bx/8hwcf/BbW7/q2Vl/4hPT/82HR2gAAAAIAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAB1gxMYyYXl3/vXFx/8Zwcf/HcHH/x3Bx/8dwcf/HcHH/uG1t/5NY - V/9EJia2AAAAKQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPB8fNH1MS+K4cnH/x3Fy/8dwcf/HcHH/x3Bx/8dw - cf/HcHH/wHBx/51gX/9PLCzGAAAAMwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAMAAAAAAAAAAAAAAAAAAAAALhAQFIZXVs/RjIz/1Y2O/9qYmP/eoaL/46qr/+aysv/ot7f/6rm5/+m4 - uf/otbX/5q+v/+uvrf/jqab/wYeF/28/P/QhEhKvAAAAXwAAACgAAAANAAAABQAAAAMAAAACAAAAAwAA - AAUAAAAKAAAAFQAAADAdDg9oSSkptHZHRu2dYmL+t3Z1/758e/+6enn/tnh3/7d5eP+8fn3/w4SD/7Z6 - ef9eODfbBgICTgAAAAgAAAAAAAAAAAAAAAAAAAAAPhwcJJVjYuPXkZH/2JOU/92fn//iqqr/57O0/+u8 - vP/uwsL/78XG/+/Exf/twMD/67i4/+60sv/wtrP/zZKQ/5taWv9xQED2MRsaxAgEBIcAAABaAAAAQQAA - ADcAAAA2AAAAOwAAAEUEAgJZHA4OfUcnJ7l5SkntqGxr/8CAfv/DgoH/vH59/7p+ff/DiIb/zZGP/9GT - kf/UlJP/1peV/9eZl/+GVlbuGQsLVwAAAAcAAAAAAAAAAAAAAAAAAAAARiIiLZ9rauvZk5P/2peY/+Ck - pP/lsLD/6ru7/+/Fxf/yzMz/9NDQ//PPz//xycr/7sDA//K5tv/1u7j/36Kg/6dmZf+mZWX/j1ZW/WM6 - OutDJSXQNBwcvDAaGrQ0HBy1PiIivUwsLMtkPDzfh1VU9a1xcP/EhIP/xIWE/7+Cgf/Ch4b/zZST/9mk - ov/grq3/4a6t/96lo//eoJ7/36Kg/+Cjof+IWVjnGwwMQwAAAAIAAAAAAAAAAAAAAAAAAAAARyQkL6Br - auzZk5P/25qb/+GnqP/ntLT/7cDA//LLy//209T/+NjY//fX1//00ND/8cbG//W9u//4vrz/46ak/7d0 - c/+vb27/s3Jy/7d2df+ucXD/pWpp/6Npaf+nbWz/sHVz/7p9fP/EhYT/yImI/8WIhv/DiIb/ypGP/9eg - n//hr63/57q5/+rCwP/rwsD/6bq4/+evrf/nq6n/6q6r/9qgnv9wRkbDBwAAHgAAAAAAAAAAAAAAAAAA - AAAAAAAASCQkLZ1nZuvYkpP/25uc/+Opqv/qtrf/7cHB//TOzv/52Nj/+tzc//na2v/xz9D/8MfH//fA - vv/6wb7/6a6r/8OBgP/DgoD/vX58/7h7ev+8fn3/woOC/8aHhv/HiYj/xoqJ/8aLif/Ijoz/zZST/9eg - nv/hrav/6Lm3/+zCwf/uyMf/78nH/+/Dwf/uvLr/7ba0/+60sf/vtLL/8ri1/7J+fflMKSltAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAQyEhI5JcXOPWj5D/3Juc/8qVlf+BZmb/bl5e/4l4eP/AqKj/8tPT//LO - zv+5p6b/w6qq//fBv//7wr//8LWy/86Ojf/Ojoz/0ZGP/9GSkP/OkY//zpOR/9GamP/VoJ//2qel/+Gv - rf/nt7X/6727/+3Dwf/wycf/8czL//LLyf/yxsT/8cC+//G7uf/yubf/87m3//S7uP/4vrv/1J6c/3JH - RrAdCgsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANRcXEYJNTcvPiIn/15aW/2VNTf85Ojr/Q0VF/0JF - RP9dXFz/n5GR/+S/v/+bh4f/hXp6/+25uP/7wr//9bu4/9qcmv/Zmpj/252b/96gnf/ipKH/5q+s/+u+ - vP/vycf/8srI/+3Hxv/wysj/9c7M//TNy//0ysj/9MbE//TBv//1vrz/9r26//e9u//4vrv/+L+8//vB - vv/hqqf/g1ZVzDwcHC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW4+Ppq/env/05OT/2ZX - V/9rbm7/fX9//3l6ev99f3//cHJy/5F9ff+ff3//XFhY/9eop//8wr//+L+8/+Wppv/ipaP/5qil/96i - pP/Kmaz/1qi1//LGxP/tyMf/qb3J/23E3P9kw9//vMTN//jDwP/3wb//+MC9//i/vf/5v73/+b+8//i/ - vP/3vrv/+L68/92mo/+IWlnRRSMjOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcv - L0mbX1/y15GS/6GAgP9XV1b/iYuL/4CBgf98fX3/cnR0/1dPT/++j4//km9w/9Sfnv/6wL3/+cC9/+6z - sP/ssK3/0Z+u/4OH1P9YffD/QGPs/7KYyv/Ct7z/Ytrz/3Ts//8s2f//cbvU//m+u//4v7z/+L67//e9 - uv/1vLn/9Lq3//O5tv/zuLX/0puZ/4RVVctGIyM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADIXFwdrPDySq2ts/diZmf/ApKT/sKur/4CBgP95enr/iYiI/49zdP/do6P/36Ch/96e - nv/zuLX/+sK///W7uP/1ubT/qZC//2qY+/9tnf//MGT6/56FxP/esK//nMbS/57n8/9+z+T/ybG3//a6 - t//zubb/8re0//C1s//utLH/7rKw/+qvrP++iIb9dklJtkMgISoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHIyMSazw8kZ5hYvXNjI3/2aSk/7OMjP+bd3f/sIKC/9KV - lv/cnJz/2peY/9aRkf/koqL/+sG+//nAvf/5v7z/4amw/6qZx/+aouP/qpvP/+mxtv/2urj/6rGv/+S6 - u//ptrX/466n/+Ovqf/ssK7/6q6s/+isqv/oq6n/2J2b/6JubfFoPT2NOxoaFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBoaCFowMFd7SEjAomZm9sWC - gv/XkZL/25SV/9iSk//Wj5D/1IyN/9KHiP/UiIj/8bOx//rCv//3vbv/9ru4//O3s//xuLX/7q6e/+ej - hf/npIn/7bCp/+Otp/+KsX3/ULdm/1WjWv+7oYz/5KWk/9uenP+4gH79glJRzVYuLlQgCAkGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAA8HBwQVy4uS3FBQaCPV1fjsG5v/cmAgf/ShYb/0YKD/85+f//LeXr/2I2M//e8uf/1vLn/7rOx/+2y - sP/lpJX/5qFY/+6xXP/djS3/35h9/86gl/9SwW7/Nd90/0WxXP+vlH//wYSE/49cW+VlOTmBQR4eHAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGk7OhqIWFd8oG5u8J5qav+eX2D/tmts/8Z0df/KdHX/yXJz/92T - k//3vLn/7LGu/+Snpf/dm5L/4Z1q/+61dP/fmmX/15WM/9eYlv/Bm43/r6uR/6uNgP+WYWDtbkBAnUwn - JzQVAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiFJSBnhC - QgpqNDQJWSUlB08dHQdfKisKfENDFJJWViinbGtRvYOCjtOcm8/pt7X157y6/7eOjfhxRUW7aTk5m4RK - StehWlr6uGdo/8Zwcf/dkpH/8bSx/+OnpP/YmZj/1ZWT/9ealP/Vl5X/0JCP/8eIhv+zdnb/lFtc6nA/ - QKRSKio/JQwNBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADTn6AB2qioDMuUlCHBhYU8voCAWcCBgXTEhoaLzZGQqdeensngrKvn47Sz/NOop/+yiIfyi2Bgs2k+ - PlZXKysPAAAAAUYlJRxcMTFYcj4+pYpMTeWmXF3+xnl5/9+Zl//dnJr/z46M/8KCgf+vc3L/ll9e831L - S8hlOTl/TigoMy0REQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABzQUIDnmprDriGhifHlpZMzp6eeNCgoZ7On5+2yJqaybuPj9WnfHzVj2RkunVJ - SYNbLy8/PRQUCgAAAAAAAAAAAAAAAAAAAAAAAAAAKRUVBU0pKSphNDRtd0BAsotNTd2ZW1vrkVlY4HtJ - Sb5lOTmCUysrQTsbGxEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCwsA2Y4OA5xQkImdkhIRHhKSll0R0dibUBAWWI2 - NkNUKCgoOhISDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhkZB0km - Jh5LJiYsRSEhITATFAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD/+H////8AAP/gH////wAA/8Af//// - AAD/gA////8AAP+AD////wAA/wAP////AAD/AA////8AAP4AB////wAA/gAH////AAD8AAf///8AAPwA - B////wAA/AAH////AAD8AAf///8AAPgAB////wAA+AAH//4HAAD4AAP/8AEAAPgAAf/AAQAA8AAA/wAA - AADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAEAAPAAAAAAAQAA8AAAAAADAADwAAAAAAcAAPAA - AAAADwAA+AAAAAAfAAD4AAAAAD8AAPwAAAAAfwAA/gAAAAD/AAD/gAAAA/8AAP/gAAAH/wAAgAAAAB// - AAAAAAAAf/8AAAAD4AP//wAAgB/8H///AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAYAAAAZAAAAGQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAARCQkYOh8fb0ooKK80HByiCQUFTAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAIhERFmA2Np2ITUz3lVNT/4dLS/5IKCi9AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAANjODiBllhY+61kZP+vY2P/pV5e/3xHRvEhEhJfAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAASSgoN41VVeS6bW3/xW9w/8dwcf+9bG3/klZW/jogIIEAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1RkWcs2xs/8dxcv/HcHH/x3Bx/8Zwcf+iYWH/SSkpmAAA - AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUC0tMZtgX+fGcnP/x3Bx/8dwcf/HcHH/x3Fy/61q - av9UMTGqAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxRER1tm9v/8hxcv/HcHH/x3Bx/8dw - cf/HcnP/tnRz/185OboAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAACIxXV7TEdHT/yHJz/8l1 - dv/Kd3j/ynd4/8p4eP/Bf37/bURDywAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNKysjo2Zm4Mt4 - ef/NfH3/z4GC/9GFhf/RhYb/0YWF/82Mi/9+UVHeCAICOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAACwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGc+ - Pkm1c3P30IGC/9OJiv/XkZL/2ZaW/9mWl//YlJX/2JmY/5hnZfMeEBBrAAAABwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA0FAgItHhAQWzAbG4IqFxeHDQcHWwAAABkAAAAAAAAAAAAA - AAAAAAAAek1MdMN/f//VjI3/2piZ/9+io//hqKn/4qmp/+Clpf/jpqT/wImH/04xMLwAAAA6AAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABEbDg5GRygokW5CQs+MVlbxnGJh/JdfXvxnPz7hHA8PbgAA - AAwAAAAAAAAAAAAAAACMW1qbz4qK/9qXl//gpqb/5rKz/+q6u//rvLz/6La2/+qxr//epKL/j1lZ+DUc - HLACAQFPAAAAHQAAAA8AAAAPAAAAEwAAACIbDg5MVDExnYZUU+SpbWz+uXl4/7x+fP/AgoD/xoeF/72A - f/9fOzu1AAAAHAAAAAAAAAAAAAAABJhkZK/VkZH/3Z+g/+axsf/twMD/8svL//LNzf/vxcX/8Lq4/+6z - sf+1dHP/j1VU+144N9g7IiKqMhwclDcfH5RGKSmiYTw7v4tZWOiydXT+woOC/8aKiP/Ol5X/2aWj/9ui - of/cnpz/2pyb/35TUrgAAAAVAAAAAAAAAAAAAAAFmmVkstaTk//hpaX/7Lm6//TLy//419f/+NnZ//TP - z//1wb//9Lq3/8aGhP+1dHP/s3Rz/6xwb/+pb27+rnNy/7Z7ev/BhIL/yY2L/8+WlP/apqT/5be2/+vB - v//rvrz/6bKw/+uvrf/Um5n/bUVEgAAAAAMAAAAAAAAAAAAAAAOTXV2q1ZGR/9CYmP+dfX7/o4yM/9e8 - vP/z0tL/zLOz/+u8u//5v7z/1peV/8uLif/Ki4r/yoyL/86Ukv/TnJv/2qSi/+Gtq//nuLb/7cPB//DJ - x//xxsT/8b+9//G6t//zubf/77az/6d1dM89Hx8lAAAAAAAAAAAAAAAAAAAAAIJOTojNiIn/jGlp/01O - Tv9UVlb/dnNz/7uhof+Pfn7/xJ+e//zCv//lqKb/3J2b/+Chnv/hpaT/7Ly5/+vHxv/MxMn/0MjN//LK - yf/1x8X/9sLA//a/vP/3vrv/+L+8//S7uP+5hoXhYTo5RwAAAAAAAAAAAAAAAAAAAAAAAAAAaTs7RrVz - dPKmfn7/cXJx/4SGhv97fX3/b2Zm/516ev+7kJD/+sG+//C2s//lqqr/rpbA/3aB2/+ql83/tMHK/2jc - 9P9OzOz/2r3B//q/vP/3vrv/9ry6//a8uf/ss7D/tYGA32c+Pk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAvEhIHg01Njbp9fvrCn5//nI+P/4R7ev+fgID/2Jyd/9ybnP/ytrT/+b+8/+ewtf+Mld3/ZI36/5eI - zv/Ttrn/sNLc/6/Czv/stLT/8re0/++0sf/tsq//2qCe/6Rxb8phODg+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABCIB8MeUZGbqRpata8gYH8x4mJ/9eTk//YkpP/04qL/+Cbmv/5wL3/9726/+Sw - t//Zrrn/56qY/+2smf/lr6n/nLWJ/4Gtdf/Pppn/3qGf/7yEg/KJWViYTyoqIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQh0dGXJAQGOXXl7NtnR1/8V7fP/MfH3/znt8/+il - o//0urj/7LCu/+Whg//rq13/35VX/9Kek/9yvXz/ZbNv/6iCdfqYY2O/aj4+TCUJCgcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACcamsBjFRVB4FERAh9PT0JjU1ND6VnZx+/hINF0JqZiNOjoty0iIf2hFBQw5lX - V8+wY2P4xXR0/+aioP/oq6j/2pqT/92fif/Vlor/yYqJ/7N8efiVZmPGdERFYkEfHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALiFhgXFkJEdx5CQSMqSknbNlZWbz5uaws2cnOXBlJPnqH18r4dc - XFFULy8OSCUlFm07O0+FSUmeoV1d3sF9fPrGhoX/snZ295xkZNiFUlKbbD4+T0UdHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc0JDA5FgYRKdbm46onR0Zp9ycnuWampzhFlZVmY6 - OikvDAwHAAAAAAAAAAAAAAAAAAAAAB0ODgRULCwhbjo7UXhERGVrPDxHTCYmGxAAAQMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//////////////////////D////gf///wH///4A///+AP///AD///wA///8AP//+AD - ///gA//D4AH+AeAA+ADgAAAAwAAAAMAAAADAAAAB4AAAA+AAAAfgAAAP8AAAH/wAAD8AAAD/AAAD/wB4 - D//H////////////////////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABMAAAAtAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgIO1cwMM1qOjrsHhAQmwAA - ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAATCgogfUhI6ahgYP6lXV3+f0hI9wIBAT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGBgFPLy6kuW1t/sZv - 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 - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/AutofireConfig.Designer.cs b/BizHawk.Client.EmuHawk/config/AutofireConfig.Designer.cs index 8b07aca2ed..4954e729ae 100644 --- a/BizHawk.Client.EmuHawk/config/AutofireConfig.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/AutofireConfig.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AutofireConfig)); this.Ok = new System.Windows.Forms.Button(); this.Cancel = new System.Windows.Forms.Button(); this.OnNumeric = new System.Windows.Forms.NumericUpDown(); @@ -161,7 +160,7 @@ this.Controls.Add(this.groupBox1); this.Controls.Add(this.Cancel); this.Controls.Add(this.Ok); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.Lightning_MultiSize; this.MaximizeBox = false; this.MaximumSize = new System.Drawing.Size(512, 512); this.MinimumSize = new System.Drawing.Size(218, 179); diff --git a/BizHawk.Client.EmuHawk/config/AutofireConfig.resx b/BizHawk.Client.EmuHawk/config/AutofireConfig.resx index c238781912..c7e0d4bdf1 100644 --- a/BizHawk.Client.EmuHawk/config/AutofireConfig.resx +++ b/BizHawk.Client.EmuHawk/config/AutofireConfig.resx @@ -117,543 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAQAQEAAAAAAIAAoQgAARgAAADAwAAAAACAAqCUAAG5CAAAgIAAAAAAgAKgQAAAWaAAAEBAAAAAA - IABoBAAAvngAACgAAABAAAAAgAAAAAEAIAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq4 - 7ykKue88Cr3wAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAKte4hCsHxtQrZ9nQKwPEKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArA8UYK1/bhCtD0nAqy7hsAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsbyagrW - 9vYKw/HACrXuNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAql6ggKzPOSCtX2/wq88N0Kt+9YCrjvBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACrPuFwrR9bgK0PX/Crnv8Aq474AKuO8QAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKvPAvCtX21grL - 8/8KuO/7CrjvqQq47yMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAArC8VEK1vbtCsTy/wq37/8KuO/LCrjvQQq47wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJf+ICCsjzeArW9vkKv/D/Crjv/wq47+UKuO9nCrjvCAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqs7AwKzvSgCtT1/wq7 - 8P8KuO//Crjv9Qq4748KuO8WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAACrfvHgrS9cQKz/T/Crjv/wq47/8KuO/9Crjvtwq47y4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKvvA7CtX24ArI8/8Kt+//Crjv/wq47/8KuO/WCrjvTgq4 - 7wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArE8l4K1/byCsLx/wq3 - 7/8KuO//Crjv/wq47+wKuO92CrjvDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAKnOgFCsrzhwrW9v0KvfD/Crjv/wq47/8KuO//Crjv+Qq4758KuO8dAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqw7RIKz/SuCtL1/wq67/8KuO//Crjv/wq47/8KuO//Crjvwwq4 - 7zkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACrrvKArU9c8KzPT/Crjv/wq4 - 7/8KuO//Crjv/wq47/8KuO/gCrjvXQq47wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAKwPFHCtb25wrG8v8Kt+//Crjv/wq47/8KuO//Crjv/wq47/IKuO+FCrjvEQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAACBnLAQrH8mwK1/b3CsDx/wq37/8KuO//Crjv/wq47/8KuO//Crjv+wq4 - 760KuO8nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKp+sJCsz0lQrV9v4Ku/D/Crjv/wq4 - 7/8KuO//Crjv/wq47/8KuO//Crjvzwq470UKtu4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq0 - 7hkK0fW6CtD0/wq57/8KuO//Crjv/wq47/8Kue//Crnv/wq67/8Kuu/oCrvwbAq98AkAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAACrzwMgrV9dkKyvP/Crjv/wq67/8Ku/D/Cr3w/wq+8P8Jv/D/Cr/w/wm/ - 8fYJwPGVCcDxGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKw/FUCtj27grH8v8JvvD/CcDx/wnC - 8f8Jw/H/CcTy/wnE8v8JxPL/CcTx/gnE8boJxPIxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACo/mAwrN - 9HsJ2/f6Ccjz/wnF8v8Jx/L/Ccny/wnK8/8JyvP/Ccrz/wnJ8/8JyPL/Ccjy2QnI8lMJyPIDAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAJuO8NCdf2ownc9/8JzPP/Cczz/wnO8/8JzvT/Cc/0/wnP9P8JzvT/Cc3z/wnM - 8/8Jy/PuCcrzewnJ8w0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnK8yEJ3vfHCd33/wjR9P8I0vT/CNP1/wjT - 9f8I0/X/CNP1/wjS9P8I0fT/CM/0/wnN8/oJy/OjCcrzIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNX1Pgjk - +OUI3ff/CNb1/wjX9v8I2Pb/CNj2/wjX9v8I1vX/CNX1/wjT9f8I0fT/Cc70/wnM88cJy/M9CcPzAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAeE4gEI3PeQCOP4/wjb9v8I3Pb/CNz3/wjc9/8I2/b/CNr2/wjZ9v8I1/X/CNX1/wjS - 9P8Iz/T/Cczz4gnK82EJx/IGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNz3aAjf9/8H3/f/B+D3/wfg+P8H4Pf/B+D3/wfe - 9/8I3ff/CNv2/wjY9v8I1fX/CNL0/wjP9P8Jy/PzCcjyignF8hMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+D3AQfg95EH4fj/B+L4/wfk - +P8H5Pj/B+T4/wfj+P8H4vj/B+D3/wfe9/8I3Pb/CNn2/wjV9f8I0vT/Cc7z/wnJ8/wJxvKxCcLxKgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB972BQfh - +FgH4vjqB+T4/wfm+f8H5/n/B+j5/wfo+f8H5/n/B+b5/wfk+P8H4fj/B973/wjb9v8I2Pb/CNT1/wjQ - 9P8JzPP/Ccfy/wnC8dIJv/E8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAI2fYGCN33PAff96AH4vjwB+X4/wfn+f8H6fn/B+r6/wfr+v8H6/r/B+r6/wfp+f8H5vn/B+T4/wfh - +P8H3vf/CNr2/wjW9f8I0vT/Cc7z/wnJ8v8Jw/H/CcHxvArA8Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAjS9AUI1vU3CNr2nwjd9+0H4Pj/B+T4/wfn+f8H6vr/B+z6/wbt+v8G7vv/Bu76/wbt - +v8H6/r/B+n5/wfm+f8H4/j/B+D3/wjc9/8I2Pb/CNT1/wjP9P8JyvP/Cc70/wnU9dsKw/EbAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAACcrzBQjO9DcI0vSZCNb16Qja9v8H3vf/B+L4/wfm+f8H6fn/B+z6/wbu - +v8G8Pv/BvH7/wbx+/8G7/v/Bu76/wfr+v8H6Pn/B+X4/wfh+P8I3ff/CNn2/wjV9f8I1fX/Cd33/wnj - +f0J1vaSCarsBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJv/EFCcTyNwnJ85kJzvTpCNL0/wjX9f8I2/b/B9/3/wfj - +P8H5/n/B+r6/wbt+v8G8Pv/BvL7/wbz/P8G8/z/BvH7/wbv+/8H7Pr/B+n5/wfm+f8H4vj/B973/wjc - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqY6AIKv/BRCtT13Qnf+P8Jz/T/Cc3z/wjR - 9P8I1PX/CNf2/wja9v8I3ff/B9/3/wfg+P8H4fj/B+L4/wfi+NkH4vgaAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAm/ - 8DwJ0/XNCeD4/wnT9f8JzfP/CNH0/wjU9f8I1/X/CNn2/wjb9v8I3Pf/CN33/wfe9/8I3ffdCN33HgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAACb7wKQnQ9LkJ4fj+Cdb1/wnN8/8I0PT/CNP1/wjV9f8I1/X/CNj2/wjZ - 9v8I2vb/CNn2+AjZ9lUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJvfAbCc70ogng+PsJ2fb/Cc3z/wjP - 9P8I0fT/CNP1/wjU9f8I1fX/CNX1/wjV9f8I1PW5CNL1DwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAm7 - 7w8Jy/OKCd339gnb9/8JzPP/Cczz/wnO9P8Iz/T/CND0/wjR9P8I0fT/CND0+AjP9FkAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAACbbuCAnH8nEJ2vfuCd33/wnL8/8JyfP/Ccvz/wnM8/8JzPP/Cczz/wnL - 8/8JyvPACcjyEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJrOwDCcPyWQnW9uIK3ff/Ccrz/wnF - 8v8JxvL/Ccfy/wnG8v8JxvL/CcXy+gnD8WEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAKvvBDCtH10wrd9/8JyfP/CcDx/wnB8f8JwfH/CcHx/wnA8f8JvvDHCrzwFgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq57zAKy/PACtz3/wrK8/8Ku/D/Crzw/wq78P8Ku/D/Crrv+wq5 - 72kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACrPuIArG8qoK2vf9Csvz/wq4 - 7/8KuO//Crjv/wq47/8KuO/NCrjvGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAKr+0TCsPxkwrZ9vgKz/T/Crnv/wq47/8KuO//Crjv/Qq473IAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqs7AoKv/F6Ctb28QrU9f8Ku/D/Crjv/wq47/8KuO/SCrjvHwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqXrBAq88GEK0/XnCtf2/wq+ - 8P8Kt+//Crjv/wq473kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAKieUBCrnvSgrP9NgK2ff/CsHx/wq37/8KuO/ZCrjvJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKt+82Csvzxwrb9/8KxfL/Crfv/wq474EAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq07iQKyPOyCtr3/grJ - 8/8KuO/eCrfvKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAACrHtFwrE8psK2ff6Cs70/wq674sKlOcBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKre0NCsHxgwrX9vYK1vbjCtD0LwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqn6wYKvfBqCtP17QrY - 9pAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAACqPqAgq5704Ku/B9CrfvBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACrDtAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////+P/////////4f/////////w//////////h/////////+B/////////8D/////////4H///////// - wH/////////AP////////+Af////////8A/////////4A/////////wB/////////AD////////+AH// - //////8AH////////4AP////////gAf////////AAf///////+AA////////8AB////////4AD////// - //gAD////////AAH///////+AAP///////8AAP///////wAAf///////gAA///////8AAB///////gAA - D//////4AAAH/////+AAAAf/////gAAAB/////4AAAAP////+AAAAB/////4AAAAf/////AAAAH///// - 8AAAB//////wAAAf//////gAAH///////AAA///////+AAD///////+AAP///////8AA////////4AB/ - ///////wAH////////gAP////////AA/////////AB////////+AH////////8AP////////4A////// - ///wB/////////gH/////////AP/////////A/////////+B/////////8D/////////4P/////////w - //////////h//////////v////////////8oAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACrjvAQq47wgKuO8BAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACrHtAgq7 - 8F4KzPRFCuH4AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAq98CsK0/W5Cs/0bAqm6wgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKyfNJCtL14wrB8ZQKs+4XAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICMIBCs30bgrP9PcKu/C5CrfvLwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACq7tCQrR - 9ZYKyvP/Crjv2Aq471EKuO8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAq98BkK0vW8CsXy/wq37+0KuO95CrjvDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKxfIyCtL12grA8f8Kt+/6CrjvoQq47x4AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsvzVArR9e8KvPD/Crjv/wq4 - 78UKuO87AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYrkAwrP - 9HwKzfT7Crnv/wq47/8KuO/hCrjvXwq47wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAq27g4K0fWkCsjz/wq47/8KuO//Crjv8wq474gKuO8SAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKwPEhCtL1yArD8f8Kt+//Crjv/wq47/wKuO+vCrjvKAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsfyPgrS9eIKvvD/Crjv/wq4 - 7/8KuO//Crjv0Qq470gKuO8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArM - 9GIK0PT0Crvw/wq47/8KuO//Crjv/wq47+kKuO9uCrjvCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAqi6gYK0PSLCszz/Qq47/8KuO//Crjv/wq47/8KuO/4Crjvlwq47xkAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKu/ATCtL1sQrG8v8KuO//Crjv/wq57/8Kuu//Crvv/gq8 - 8L0KvfAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsPxKgrT9dIKw/H/Crzw/wm/ - 8P8JwPH/CcHx/wnB8f8JwvHbCcPxVQnD8gQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArM - 9EoK1vbqCcfy/wnF8v8JyPL/Ccny/wnJ8/8JyPL/Ccjy7wnI8n0JyPIOAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAdg3AEJ1/ZxCdn2+AnN8/8JzvT/CM/0/wjQ9P8Iz/T/Cc70/wnM8/oJy/OmCcrzIQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq37xsKzfSjCtT1/ArA8f8KuO//Crjv/wq47+gKuO82AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKsO0QCsrziwrU9fYKwvH/Crfv/wq4 - 7/8KuO+cCrjvBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqfrCArH - 8nIK1PXuCsby/wq47/8KuO/sCrjvPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAqR5gMKw/JZCtT14wrK8/8Kue//CrjvpAq47wcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsDxQwrS9dQKzfT/Crrv7wq370QAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq88DAK0PTBCtD0/wq9 - 8KwKrOwJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAKt+8gCs70rArU9fEK0fVMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAACrLuEwrL85cK0fWiCrXuBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqx7QwKuO8zCrnvBgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4//////AAD/h/////8AAP/D - /////wAA/+H/////AAD/4P////8AAP/wP////wAA//gf////AAD//A////8AAP/+B////wAA//4B//// - AAD//wD///8AAP//gH///wAA///AH///AAD//+AP//8AAP//4Af//wAA///wA///AAD///gA//8AAP// - /AB//wAA///8AD//AAD///4AD/8AAP///wAH/wAA////AAP/AAD///8AAf8AAP///AAA/wAA///wAAD/ - AAD//8AAAP8AAP//AAAB/wAA//4AAAf/AAD//gAAH/8AAP/+AAB//wAA//8AAf//AAD//4AD//8AAP// - wAP//wAA///gA///AAD///AB//8AAP//+AD//wAA///+AP//AAD///8Af/8AAP///4B//wAA////wD// - AAD////gP/8AAP////Af/wAA/////B//AAD////+D/8AAP////8P/wAA/////4f/AAD/////x/8AAP// - /////wAAKAAAACAAAABAAAAAAQAgAAAAAACAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAq57w4KwPEbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAACrXuDwrN9HgKz/Q/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsz0LgrO9LkKv/FkCq7tBgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACs70TQrJ8+IKue+MCrfvEwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJjOUBCs/0cgrE - 8vcKuO+zCrjvKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAKxPEKCs/0mgrA8f8Kt+/TCrjvSQq47wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAKy/MbCs30vwq88P8KuO/qCrjvcAq47woAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKzvQ1Csrz3Qq67/8KuO/4Crjvmgq47xoAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKz/RYCsfy8Aq47/8KuO/+Crjvvwq4 - 7zQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq37wQKz/SACsPx/Aq4 - 7/8KuO//Crjv3Qq471cKt+8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArI - 8w8KzvSoCr/x/wq57/8Ku/D/Cr3w8Qm/8IAJwfEPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAArN9CMK0PTLCcXy/wnF8v8Jx/L/Ccfy+wnH8qgJyPIjAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnY9kEJ1/blCND0/wjR9P8I0fT/CM/0/wnN88sJy/NACsPyAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjg93MI3Pf+CNr2/wja9v8I2Pb/CNT1/wjP - 9OUJzPNmCcfyBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9/3TQfh+PkH4vj/B+L4/wff - 9/8I2/b/CNX1/wnO9PUJyPKPCcLxFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNn2CAff90QH4/jDB+b5/wfp - +f8H6fn/B+b5/wfh+P8I2/b/CNP1/wnK8/4JxPKmCsTxCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcnzBwjR9EEI2faoB+D38Qfm - +f8H7Pr/Bu/7/wbv+/8H6/r/B+X5/wfe9/8I1/X/CdT1/wnU9ccJy/MTAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACrHtBAq98D8Jx/KmCND08AjZ - 9v8H4fj/B+n5/wbv+/8G8/z/BvL7/wbu+v8H6Pn/B+P4/wji+O0J4PicCdn2LgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKxPJVCr3w7gnF - 8v8I0PT/CNn2/wfh+P8H6Pn/Bu77/wby+/8G8vv/Bu/7/wfs+vMH6vqpCOT4PgjS9AUAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArQ - 9V8Ky/P5CcXy/wnO8/8I1/X/B973/wfl+f8H6vr/Bu36/wbv+/wH7/u4B+z6Sgfk+AgAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAACrnvCQrP9HoK0fXyCc3z/wjS9P8I2vb/B+D3/wfl+P8H5/n/B+r6tQfr+hMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAACqzrBArR9WEJ1vbnCdH0/wjU9f8I2vb/B973/wff9/8H4PeAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHbhAQnS9UoJ2PbZCdL1/wjS9P8I1fX/CNf2/wjX - 9bcI0/UMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnQ9DUJ1/bICdH0/wnM - 8/8JzvT/Cc709gnM81QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnL - 8yQK1fWzCc70/gnE8f8Jw/H/CcHxvAq88BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAArE8hcK0PScCsrz+gq78P8Kue/5CrjvXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq78A0KzvSDCsrz9Aq78P8Kt+/DCrjvEwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqw7QYKzfRqCsz07Aq98PwKt+9kAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqS5QIKzPNSCs304grA - 8csKtO4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAKyfM9Cs/0zQrO9G8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAKx/ItCs30dwrE8goAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKre0HCrbuAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD8/////H////4f////D////wf///+B////wP///+B////wP///8A////gH///8A////gD///8Af/// - AD///AAf//AAH//AAD//wAB//8AB///AB///4A////AH///8B////gP///8D////gf///8H////g//// - +P////x////+fygAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAKyfMpCszzIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAACs70FgrJ83gKvfA5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAKzPMwCsLxtwq571wKtu8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAArK81EKvvDiCrjvhAq47w8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL6voCCsfydwq88PcKuO+rCrjvJAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArS9QsKx/KeCsHx/wnD8c0JyPJCCsnyAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACdf2HAjW9ckI1fX/CNL05wnO - 9GgJxvIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAff9yEH5Pi+B+X5/wfg - 9/8I1PX4CcrzjQrE8ggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACrzwHQnN83kI3ffYB+r6/gbw - +/8H6vr/CN/38wnW9ZgKzfQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfD8AQrF8pIJy/P/CNv2/wfp - +f8G8Pv6B+76tAfo+UcJ5PkHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKzvQwCdD0wgjV - 9f8H3/f/B+T4xgfs+hMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnU - 9R8J1PWsCdL0/wjR9N0JzPMmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAACdT1EwrP9JQKxPL6CrzwhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAKzvQKCsnzfQrA8dYKue8uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAArR9QQKyvNkCsjzdwrS9QMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACs30BArM9DAKyfMJAAAAAAAAAAAAAAAA5/8AAOP/ - AADw/wAA+H8AAPg/AAD8DwAA/gcAAP4DAAD4AwAA8AcAAPgfAAD8HwAA/h8AAP8PAAD/hwAA/8cAAA== - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/ColecoVision/ColecoControllerSettings.Designer.cs b/BizHawk.Client.EmuHawk/config/ColecoVision/ColecoControllerSettings.Designer.cs index 93adad549e..933d90e80c 100644 --- a/BizHawk.Client.EmuHawk/config/ColecoVision/ColecoControllerSettings.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/ColecoVision/ColecoControllerSettings.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ColecoControllerSettings)); this.OkBtn = new System.Windows.Forms.Button(); this.CancelBtn = new System.Windows.Forms.Button(); this.label5 = new System.Windows.Forms.Label(); @@ -124,7 +123,7 @@ this.Controls.Add(this.Port1ComboBox); this.Controls.Add(this.CancelBtn); this.Controls.Add(this.OkBtn); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController_MultiSize; this.Name = "ColecoControllerSettings"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Controller Settings"; diff --git a/BizHawk.Client.EmuHawk/config/ColecoVision/ColecoControllerSettings.resx b/BizHawk.Client.EmuHawk/config/ColecoVision/ColecoControllerSettings.resx index ca821b54f8..1af7de150c 100644 --- a/BizHawk.Client.EmuHawk/config/ColecoVision/ColecoControllerSettings.resx +++ b/BizHawk.Client.EmuHawk/config/ColecoVision/ColecoControllerSettings.resx @@ -117,508 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAwAMDAQAAAABABoBgAAxgAAACAgEAAAAAQA6AIAAC4HAAAYGBAAAAAEAOgBAAAWCgAAEBAQAAAA - BAAoAQAA/gsAADAwAAAAAAgAqA4AACYNAAAgIAAAAAAIAKgIAADOGwAAGBgAAAAACADIBgAAdiQAABAQ - AAAAAAgAaAUAAD4rAAAwMAAAAAAgAKglAACmMAAAICAAAAAAIACoEAAATlYAABgYAAAAACAAiAkAAPZm - AAAQEAAAAAAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAQAAAAEAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAHR3AAAAAAAAAAAAAAAAAAAAAAAAAAAAdHdEcAAAAAAAAAAAAAAAAA - AAAAAAAAAHd0d3QAAAAAAAAAAAAAAAAAAAAAAAAAAEd8d3UAAAAAAAAAAAAAAAAAAAAAAAAAB3yHfHZw - AAAAAAAAAAAAAAAAAAAAAAAAd3fIyHVwAAAAAAAAAAAAAAAAAAAAAAAAfHh3jIxwAAAAAAAAAAAAAAAA - AAAAAAAHd8jIyHdgAAAAAAAAAAAAAAAAAAAAAAAHd4yHfIdAAAAAAAAAAAAAAAAAAAAAAAAHyMjIyMhQ - AAAAAAAAAAAAAAAAAAAAAAB3d3eMh4dgAAAAAAAAAAAAAAAAAAAAAAB8jIyIfIdQAAAAAAAAAAAAAAAA - AAAAAAB3h4jIiMh3AAAAAAAAAAAAAAAAAAAAAAB8jIeHeIjHAAAAAAAAAAAAAAAAAAAAAAeIiHh4eMiE - AAAAAAAAAAAAB0dHcAAAAAd8h4eIiIiHcAAAAAAAAAB0d3d3RwAAAAeIeIiIiIh3RwAAAAAAAHR3d8h3 - dAAAAAfIh4iIiHiIx0cAAAAAdHh3eIeHhwAAAAeHiIiIiIiId3R3dHR0eHd4h4eHhAAAAAd4eIiIiIiH - x3d2d3eId4iIiIiIhwAAAAd4eIiI+IiIh3d3eHh3iIiIiIeHwAAAAAfIjHeIiIiIyIeHh4iIiIiIiIiI - cAAAAAeIQ0R3h3iIiMiIiIiIiIiIiIiEAAAAAAfIR3d3d0iIiIh4iIeIiIiIiHhAAAAAAAB4d3d3SHiI - h4fTiIi3iIiIeIwAAAAAAAB3h4d3eIeIiHiJiIuIiIh4jHAAAAAAAAAHyId3h3h4iIh4iIiIiIiHeAAA - AAAAAAAAB8iMiMjIiIiIh4h3aMjHAAAAAAAAAAAAAAdYyIeIiIiMjId6d4eAAAAAAAAAAAAAAAAHdsjH - eIeH6MiId3AAAAAAAAAAAAAAAIiIh4V8jIh4eIfHcAAAAAAAAAAAAACIiIh3AAAHd3h3fHcAAAAAAAAA - AAAAAAiIjHgAAAAAAHx8eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAA - AAd0dAAAAAAAAAAAAAAAAAB3x3cAAAAAAAAAAAAAAAAAd3fHcAAAAAAAAAAAAAAAB3yMh3AAAAAAAAAA - AAAAAAfIeMdwAAAAAAAAAAAAAAAHjIyHQAAAAAAAAAAAAAAAfId4yHAAAAAAAAAAAAAAAHjIyIdQAAAA - AAAAAAAAAAB3iId4YAAAAAAAAAdwAAAAjIiIiIUAAAAAAHd3dAAAB4iIiHh8cAAAAHd3x4dwAAd4iIiI - h3Z3d3R3yIh4cAAHh4iIiIfHd3d4iIiIh3AAB3jHiIiIiHeHiIiIiIwAAAh3dXh4iMiIiIiIiIhwAAAA - yGd0d4iIeIi4iIiMAAAAAIeHd4iIh32IiIiIcAAAAAAAd4jIyIiIiHeHyAAAAAAAAAB3h4iIh8h3dwAA - AAAAAAAIh8fIh4eIaAAAAAAAAACIiHAAB8jIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////////////////////n////g////wP///8B///+Af///gH///4B///8Af///AH///wB//n8AP/A+AB - /AHgAAAB4AAAAeAAAAPgAAAH8AAAD/AAAB/8AAA//wAA//4AA//weA////////////////////////// - //8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRwAAAAAAAAAAAAB3dAAAAAAAAAAAAA - d8dwAAAAAAAAAAAAfId3AAAAAAAAAAAHeMjHAAAAAAAAAAAHyHh3AAAAAAAAAAAHh3eEAAAAAAAAAAAI - yIiHAAAAAHd2cAAIiIiIQAAAd3d4UACHiIiId3d3eHiIcACHh4iIyHeHiIiIcAAIR3d4iIiIiIiMAAAH - d3eIh3iIiIhwAAAAeMh4iIiHiMAAAAAAAHfIiMh4aAAAAAAAiIgHyIfIAAAAAAAIgAAAAIAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD8f/8A+H//APB/ - /wDwP/8A4D//AOA//wDgP/8A4D/BAOAfAQDAAAEAwAABAOAAAwDgAAcA8AAfAPwAPwDwgP8A5/f/AP// - /wD///8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAd1AAAAAAAAB8cAAAAAAAB4eAAAAAAAAHyMgAAAAAAAiIhwAAAHcACI - iHcAd3hwAIz4jIeIiIAAd3eIiIiIAACHeIiIiHAAAACMeMh4AAAAiAAIgAAAAAAAAAAAAAAAAAAAAAAA - AAD//wAA//8AAP//AADj/wAA4/8AAMP/AADB/wAAwfkAAMDBAADAAQAAwAMAAMAHAADwDwAAzn8AAP// - AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAA9OzsAZD8/AGg8 - PABtPj4AQkNDAEZIRwBWQkIAV0REAF5AQABbRkYAVklJAFxPTwBTU1MAXFJSAF5ZWQBkQEAAYUREAGZF - RQBqQkEAYEtLAGNPTwBwQUEAfUZGAHJKSgB2SUkAfU9PAGBRUQBgVFQAZlZWAGZYWABqWVkAclZWAHpU - VAB9W1oAbmJiAGtoaABtaWkAcWdnAHdnZwB8Y2MAe2pqAHJxcQB+dHQAd3l5AHl6egCGT08AiU9PAIFP - UACGU1MAjVFRAIlWVgCMV1cAg1xbAIxaWQCQUlIAlVJSAJFXVgCXVVUAmVVVAJZaWQCSXV0AlV9eAJpZ - WgCeW1sAml5eAKBZWgCgXFwAql9fAIRmZQCIZWQAhWtrAI5ragCTYmEAnGBhAJ9kYwCaZmYAk25uAJ1s - awCFdHQAiXd3AIt+fgCWd3cAmHR0AJV5eQCbfHwAo2JhAKZhYQChZWUApGVkAKplZACsZGQAqmhnAKZr - agCnbGsAqmloAKlubQCsbW0AtGZnALhsbACxb3AAv29wAKVxcACrc3IAr35+ALN0cwC5c3MAvXBxALR4 - dgC1fHsAunt6AMNtbgDGb3AAw3FyAMZwcQDGdXUAyHR1AMp3eADBeXkAxnt7AMB/fgDLensANLBSAEWf - TgBBtFwAPMdnADHkdgDciiIAvoF/AISrdwDln0sA35lhAN2XfADgmmEA8LdlAO61cAArWPIALWT+AEh5 - +gDOf4AAfoCAAHiA1ABZv9wAZrnUAGK+2ABxnv4Ad6P/ADPX/QBw0OcAW+D7AIKEgwCPgoIAjI2NAJuC - ggCUiIgAmYqKAJGSkgCjhIQAqoKCAKKLiwC+hIMAsoqKALaSgQCum5sAsZubALqqlQCdgr4Ar6ytALGh - oAC6pKQAwoSDAMyBggDGiIYAyYiHAMWMigDMjIoA0ISFANKHiADUjIwA2Y6NAMCUjQDIk44A0JCPANaP - kADHlZQAzpSSAMScmwDUkpIA2ZSVANWYlgDampcA2ZeYANWcnADam5sA4p2cAMChjwDeoJ4A5aCFAOaj - jQDlpJoA2p6hAMOkowDOoaEAy62tANegoADdoqEA2aGpANGsrwDdq6kAwbG4ANGysQDdtLQA2ri3AOGk - owDjqKYA66ylAOGnqADjq6oA6a2rAOOwrwDssK4A5K+wAOaztADttLIA57i2AO24tgDmurgA6rq6APC1 - swDyuLYA9Ly5APi+uwD1wL0A+cC9AKKMwACkk8QAqprMALSayACptsEAlaDkAOy/wACRxtQAgOv9AJnr - 9wDEwsoA5sbGAOzCwgDuyMcA7MzMAPPEwgDxy8oA9dPTAPja2gAAAAAAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAADLytDi9tOemQAAAAAAUy9EecLEsa1uPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj11Mme - VakAAAAAAAAAAAAATS84M0akAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE - AAAAAAAAAAAAAAABAAAAAQAAAAAAAFFNTQBRUlIAU1RUAGJHRwBiT08Aa0lIAGJTUwBrVlYAYllZAGZc - XABpWloAb1xbAHNTUwB7V1YAc1hXAHFbWwBkZWUAaWFhAG5kZABpamkAcGFhAHlubgB2cHAAf3V1AH55 - eQB8fX0AgUpKAI1PTwCLWFcAhlhYAI9ZWQCKXFsAm1ZWAJJZWQCWWVgAmlpbAJtcWwCiXFwAl2BfAIBg - YACAZ2YAgG9vAI9oaACWZWQAmGBhAJ5kZACcaWoAmm9vAIV0dACNcHAAiXZ2AIB8fACac3IAm3V0AJ51 - dQCZfHwAnHx8AKNmZgCnZmYAqmJiAK5jYwCvb24AtWVmALBtbgC5bW0AvmxtAKx+fQCxcnIAtHBwALZz - dACydXQAtnd2ALlwcAC5dnYAt3p5ALh5eAC8fHsAun18ALx+fQDGb3AAxnBxAMdzdADAd3YAyHJzAMlz - dADJdXYAynd4AMd/fwDMe3wAzXx9AHunbwBhvHIAYsN4ANuLOwC2hn4A4Zt5APC3ZABte9sAX47+AHWM - 5QAl0foAY+P8AIeDgwCFhoYAioSEAJOIiACWi4sAmpKRAKGCgQCmhYUAqYGBAKuDhACniooApYyMAKiO - jQCyhYMAvoWEALeNjQCrj5AAr5eXALSVlAC9lJMAmbCEAK6RugDBgYAAwoSCAMWDhADChoQAxYeFAM6A - gQDFiIYAxoqIAMqIiQDMi4oAy4yKAMiPjQDPj44A0ISFANKJigDUi4wA04+NANWNjgDKkY8A0JCOANud - iQDWj5AAzJSTAM2XlgDGm5oA1pGSANOUkgDVl5EA1pOUANiVlgDYmJUA2ZeYANKenADbmpsA3pmYANuc - mgDbn5wA1aacAN6gngDqqZoA3Z+gAMyjowDCra0AxqysAMqpqQDboaAA3qKiAN6logDbp6UA3aWkANer - qgDWsbMA0rW0ANe0tADfs7IA4aSiAOGlpQDkp6UA46imAOWopgDsraIA6qimAOGoqADhrqwA6a2rAOqv - rADpsK4A7LGuAOGzswDlsbEA7bKxAO+1sgDotrYA5rm3AO+4twDot7sA6bq5AOu9uwDrv70A8bazAPG2 - tADxuLUA9Lm2APC9uwD2vboA9L+9APi+uwD4v7wA8sC+APXAvgD5wL0AkILJAKqXzACsu8cAqr/LALLV - 3QDawMIA48XFAOvDwQDswMAA7cTDAO/ExQDgxsgA8cbEAPTGxADwyskA9MvJAPLNzQD21dYA+NjZAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAMEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHCEcBQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAayU9PSYbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQlBSQiJpAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAM0pSUlJQPRcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnUlJSUlJGFQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAFJSUlJSUkoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzUlJSWVJZfxAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5XWYqKioqGDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoqMkpqa - mqAsAAAAAAAAAAAAAAAAAABoNAAAAAAAAACMjJyuvLy2toYHAAAAAAAAAAAAABcOIDouBgAAAAAAc4yc - tsHKysPAriIKAAAAAAAAABYgRk1LTX+DEAAAAABukqXB4ejo4dHPQCIEChcXEwggTXV/k66unKMpAAAA - AG6Srsro6ero0dN/Rk1NRk2Dg4STrsbh4cHAt2sAAAAAbpKuOXPe6ajW15KGg4OGk528yuHo5eHPz882 - AAAAAAB4jCkDAxSoMabXt5yjt8ro3ePo5dbT09HTdAAAAAAAAABGcBFoGgFwdtfDwHxi2dpmZcrX09HP - z0MAAAAAAAAAAHh/qWwaOa6cz9PNZGPYsdzbzc3DwLk2AAAAAAAAAAAAAAAvhpKakoyg19HNyKS5wHtb - orZ/cwAAAAAAAAAAAAAAAAAANkaKWVm5zb1gYV6cXVxfNgAAAAAAAAAAAAAAAAAAALGvlTIuP1K5tqCR - l4xfLwAAAAAAAAAAAAAAAAAAsbPBenkAAAAAcCVYjE0scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////+f///+D////A////wH - ///4B///+Af///gH///wB///8Af///AH/+fwA/8D4AH8AeAAAAHgAAAB4AAAA+AAAAfwAAAP8AAAH/wA - AD//AAD//gAD//B4D////////////////////////////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAAWlJSAHBJSQB1SEgAe1dXAHdYWAB5WlkAel1dAGBiYgB1bGwAfWtrAHh2 - dgB9fn4Ag01NAIRXVwCIV1cAhV9eAItbWgCgX14ApV1dAJhgXwCNYGAAnWtqAJhtbQCCdnYAh3x8AI15 - eACeensAqGBgAKhoZwCga2oArGpqALNqagCzb28AtG1tALltbQCxb3AApnVzAKlzcwCqdHMApnp6AKd+ - fgCpensAq3x7ALZ3dgC8dHQAvH59AMZvcADGcHEAxXN0AMhycwDJdncAynh5AMx5egDNfn8Ajo1wAOek - VgDGgH8A4p53AEZ2+gB8u4AAd8PaAIuEhACOh4cAjo6OAJ+DggCejo4Ao4SEAKSIiACsi4sAqo2MAK6P - jgC+gYAAvoaGAL+KiACskJAAtJeXALWenQC5np4At6iOAKmyjgC9nroAwYSDAMaGhADOhoYAxomHAMiK - iQDJjYwA0oeIANOOjwDUjY0A2ZiPANaPkADGkZEAx5eXAMySkADGnZwA1ZOSANeTlADWl5YA2JSVANGZ - mADan50A3J6dAOCcmwDVoJ8A7K2fAMOtrQDXo6IA3aCgAN+kpADVq6oA3ay3AMu0tADPtrYA3L+/AOCi - oQDhpqUA5KelAOinpgDlq6gA46usAOOvrQDqrqwA7LGuAOayswDjtrQA5re1AOqysQDts7EA57y6AO+8 - ugDrvL0A8LOwAPC1sgDwtrQA87q3APS6twD2vboA8b69APi/vAD2wb4A+cC9AJmTzwDHqMMAu8PMAIHf - 8QDByNAA7cLCAO3FwwDvxsQA5cjIAOzOzgDwxcQA9cbEAPPP0AD10tIAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - BQMJAAAAAAAAAAAAAAAAAAAAAAAAAAAPHBMNAAAAAAAAAAAAAAAAAAAAAAAAABojLy8TAAAAAAAAAAAA - AAAAAAAAAAAAAB0wMDAiPgAAAAAAAAAAAAAAAAAAAAAAQjAwMDAtGAAAAAAAAAAAAAAAAAAAAAAAFzIy - NTU5CgAAAAAAAAAAAAAAAAAAAAAAIjZYWFxcBwAAAAAAAAAAAAAAAAAAAAAANlxtdW11JQAAAAAAAAAA - PgcRDgkAAAAAXG1/lISAZgMAAAAAABkVLC5SVhcAAABNY3WWnJuLfB8UBAcQHkhWaX91dSsAAABNY2BM - mJeCiVJSVl9laX+WloSJgEIAAAAAXAEIC0tGjnR0dJaRk5qNjIyJQwAAAAAAJkNADBtdjIaPO1GSPYuJ - hnVEAAAAAAAAAClISWRcd4xwkGp8UE90VwAAAAAAAAAAAAAAKSQ1NYZ7OjhbPDdGAAAAAAAAAAAAAHNv - YGsAKyJoXFYmRwAAAAAAAAAAAAAAcnIAAAAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// - /wD///8A////APx//wD4f/8A8H//APA//wDgP/8A4D//AOA//wDgP8EA4B8BAMAAAQDAAAEA4AADAOAA - BwDwAB8A/AA/APCA/wDn9/8A////AP///wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAABjZGQAdmRjAHtpaQB/eHgAgU9PAKBaWgCFbm0AlWtqAKptbgCwZ2cAsGhoAKxw - cACteHkAvnJyAMZvcADGcHEAy3l5AMx9fgCFmXQAwIB/ANeUfQDhoX8AlIqJAJWMjACYiIgAoIaGAK2K - igCxh4cAvoGAALKKigC4iYgAuJWVAL2cnACss50AuqKhAL+mpgDLgoIAxImHAMeNjADLkI8AxpWTANCS - kQDYlZUA1J6dANqZmgDdnp4A1J+oAMaiogDOr68AzLKyANi5uADhpaIA4qypAOWtqADrrqsA4bKwAOay - sgDtuLYA57++AOy4uADxtLIA8be0APa9ugDswL4A9sG+ALCcxwC5ncIA06zBALnH0QC2ytQA7sPDAPLS - 0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAZBgUAAAAAAAAAAAAAAAAACw8KAAAAAAAAAAAAAAAAGhAQDgAAAAAAAAAAAAAAAAkRESUYAAAA - AAAAAAAAAAAlKy4uBwAAAAAAAAcDAAAAKzlHPCYCAAAYCB0oKgAAAC0wSDs0FB0nLDlAOiwAAAANAQQb - Pi9DRkVBPzUAAAAAJB4cKz5EQjMiNSkAAAAAAAAAHwwRNxYVEyQAAAAAAAAxMgAAACEgAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA4/8AAOP/AADD/wAAwf8AAMH5 - AADAwQAAwAEAAMADAADABwAA8A8AAM5/AAD//wAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAkAAAAJAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAUAAAAOAEBAVUAAABUAAAANQAAABAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkFBSUvGRl5TCkpwlYuLtxDJCTQFw0NmQAA - AEkAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAwMKE8rK6V6RET2klJR/5ZS - U/+OT0//ZDc38B0QEJoAAAAyAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDAwYVzAwoopP - T/ygXVz/oFtb/55ZWf+bWFf/k1NT/1UvL9wGAwNcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AARNKipxhk5O+adkY/+uZWX/tWdo/7VmZ/+qYWH/nltb/3hERPcfERGCAAAAFgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADEZGS1zQ0LXqGdm/7ptbf/Fb3D/x3Bx/8hwcf/BbW7/q2Vl/4hPT/82HR2gAAAAIAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAB1gxMYyYXl3/vXFx/8Zwcf/HcHH/x3Bx/8dwcf/HcHH/uG1t/5NY - V/9EJia2AAAAKQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPB8fNH1MS+K4cnH/x3Fy/8dwcf/HcHH/x3Bx/8dw - cf/HcHH/wHBx/51gX/9PLCzGAAAAMwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAMAAAAAAAAAAAAAAAAAAAAALhAQFIZXVs/RjIz/1Y2O/9qYmP/eoaL/46qr/+aysv/ot7f/6rm5/+m4 - uf/otbX/5q+v/+uvrf/jqab/wYeF/28/P/QhEhKvAAAAXwAAACgAAAANAAAABQAAAAMAAAACAAAAAwAA - AAUAAAAKAAAAFQAAADAdDg9oSSkptHZHRu2dYmL+t3Z1/758e/+6enn/tnh3/7d5eP+8fn3/w4SD/7Z6 - ef9eODfbBgICTgAAAAgAAAAAAAAAAAAAAAAAAAAAPhwcJJVjYuPXkZH/2JOU/92fn//iqqr/57O0/+u8 - vP/uwsL/78XG/+/Exf/twMD/67i4/+60sv/wtrP/zZKQ/5taWv9xQED2MRsaxAgEBIcAAABaAAAAQQAA - ADcAAAA2AAAAOwAAAEUEAgJZHA4OfUcnJ7l5SkntqGxr/8CAfv/DgoH/vH59/7p+ff/DiIb/zZGP/9GT - kf/UlJP/1peV/9eZl/+GVlbuGQsLVwAAAAcAAAAAAAAAAAAAAAAAAAAARiIiLZ9rauvZk5P/2peY/+Ck - pP/lsLD/6ru7/+/Fxf/yzMz/9NDQ//PPz//xycr/7sDA//K5tv/1u7j/36Kg/6dmZf+mZWX/j1ZW/WM6 - OutDJSXQNBwcvDAaGrQ0HBy1PiIivUwsLMtkPDzfh1VU9a1xcP/EhIP/xIWE/7+Cgf/Ch4b/zZST/9mk - ov/grq3/4a6t/96lo//eoJ7/36Kg/+Cjof+IWVjnGwwMQwAAAAIAAAAAAAAAAAAAAAAAAAAARyQkL6Br - auzZk5P/25qb/+GnqP/ntLT/7cDA//LLy//209T/+NjY//fX1//00ND/8cbG//W9u//4vrz/46ak/7d0 - c/+vb27/s3Jy/7d2df+ucXD/pWpp/6Npaf+nbWz/sHVz/7p9fP/EhYT/yImI/8WIhv/DiIb/ypGP/9eg - n//hr63/57q5/+rCwP/rwsD/6bq4/+evrf/nq6n/6q6r/9qgnv9wRkbDBwAAHgAAAAAAAAAAAAAAAAAA - AAAAAAAASCQkLZ1nZuvYkpP/25uc/+Opqv/qtrf/7cHB//TOzv/52Nj/+tzc//na2v/xz9D/8MfH//fA - vv/6wb7/6a6r/8OBgP/DgoD/vX58/7h7ev+8fn3/woOC/8aHhv/HiYj/xoqJ/8aLif/Ijoz/zZST/9eg - nv/hrav/6Lm3/+zCwf/uyMf/78nH/+/Dwf/uvLr/7ba0/+60sf/vtLL/8ri1/7J+fflMKSltAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAQyEhI5JcXOPWj5D/3Juc/8qVlf+BZmb/bl5e/4l4eP/AqKj/8tPT//LO - zv+5p6b/w6qq//fBv//7wr//8LWy/86Ojf/Ojoz/0ZGP/9GSkP/OkY//zpOR/9GamP/VoJ//2qel/+Gv - rf/nt7X/6727/+3Dwf/wycf/8czL//LLyf/yxsT/8cC+//G7uf/yubf/87m3//S7uP/4vrv/1J6c/3JH - RrAdCgsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANRcXEYJNTcvPiIn/15aW/2VNTf85Ojr/Q0VF/0JF - RP9dXFz/n5GR/+S/v/+bh4f/hXp6/+25uP/7wr//9bu4/9qcmv/Zmpj/252b/96gnf/ipKH/5q+s/+u+ - vP/vycf/8srI/+3Hxv/wysj/9c7M//TNy//0ysj/9MbE//TBv//1vrz/9r26//e9u//4vrv/+L+8//vB - vv/hqqf/g1ZVzDwcHC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW4+Ppq/env/05OT/2ZX - V/9rbm7/fX9//3l6ev99f3//cHJy/5F9ff+ff3//XFhY/9eop//8wr//+L+8/+Wppv/ipaP/5qil/96i - pP/Kmaz/1qi1//LGxP/tyMf/qb3J/23E3P9kw9//vMTN//jDwP/3wb//+MC9//i/vf/5v73/+b+8//i/ - vP/3vrv/+L68/92mo/+IWlnRRSMjOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcv - L0mbX1/y15GS/6GAgP9XV1b/iYuL/4CBgf98fX3/cnR0/1dPT/++j4//km9w/9Sfnv/6wL3/+cC9/+6z - sP/ssK3/0Z+u/4OH1P9YffD/QGPs/7KYyv/Ct7z/Ytrz/3Ts//8s2f//cbvU//m+u//4v7z/+L67//e9 - uv/1vLn/9Lq3//O5tv/zuLX/0puZ/4RVVctGIyM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADIXFwdrPDySq2ts/diZmf/ApKT/sKur/4CBgP95enr/iYiI/49zdP/do6P/36Ch/96e - nv/zuLX/+sK///W7uP/1ubT/qZC//2qY+/9tnf//MGT6/56FxP/esK//nMbS/57n8/9+z+T/ybG3//a6 - t//zubb/8re0//C1s//utLH/7rKw/+qvrP++iIb9dklJtkMgISoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHIyMSazw8kZ5hYvXNjI3/2aSk/7OMjP+bd3f/sIKC/9KV - lv/cnJz/2peY/9aRkf/koqL/+sG+//nAvf/5v7z/4amw/6qZx/+aouP/qpvP/+mxtv/2urj/6rGv/+S6 - u//ptrX/466n/+Ovqf/ssK7/6q6s/+isqv/oq6n/2J2b/6JubfFoPT2NOxoaFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBoaCFowMFd7SEjAomZm9sWC - gv/XkZL/25SV/9iSk//Wj5D/1IyN/9KHiP/UiIj/8bOx//rCv//3vbv/9ru4//O3s//xuLX/7q6e/+ej - hf/npIn/7bCp/+Otp/+KsX3/ULdm/1WjWv+7oYz/5KWk/9uenP+4gH79glJRzVYuLlQgCAkGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAA8HBwQVy4uS3FBQaCPV1fjsG5v/cmAgf/ShYb/0YKD/85+f//LeXr/2I2M//e8uf/1vLn/7rOx/+2y - sP/lpJX/5qFY/+6xXP/djS3/35h9/86gl/9SwW7/Nd90/0WxXP+vlH//wYSE/49cW+VlOTmBQR4eHAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGk7OhqIWFd8oG5u8J5qav+eX2D/tmts/8Z0df/KdHX/yXJz/92T - k//3vLn/7LGu/+Snpf/dm5L/4Z1q/+61dP/fmmX/15WM/9eYlv/Bm43/r6uR/6uNgP+WYWDtbkBAnUwn - JzQVAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiFJSBnhC - QgpqNDQJWSUlB08dHQdfKisKfENDFJJWViinbGtRvYOCjtOcm8/pt7X157y6/7eOjfhxRUW7aTk5m4RK - StehWlr6uGdo/8Zwcf/dkpH/8bSx/+OnpP/YmZj/1ZWT/9ealP/Vl5X/0JCP/8eIhv+zdnb/lFtc6nA/ - QKRSKio/JQwNBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADTn6AB2qioDMuUlCHBhYU8voCAWcCBgXTEhoaLzZGQqdeensngrKvn47Sz/NOop/+yiIfyi2Bgs2k+ - PlZXKysPAAAAAUYlJRxcMTFYcj4+pYpMTeWmXF3+xnl5/9+Zl//dnJr/z46M/8KCgf+vc3L/ll9e831L - S8hlOTl/TigoMy0REQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABzQUIDnmprDriGhifHlpZMzp6eeNCgoZ7On5+2yJqaybuPj9WnfHzVj2RkunVJ - SYNbLy8/PRQUCgAAAAAAAAAAAAAAAAAAAAAAAAAAKRUVBU0pKSphNDRtd0BAsotNTd2ZW1vrkVlY4HtJ - Sb5lOTmCUysrQTsbGxEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCwsA2Y4OA5xQkImdkhIRHhKSll0R0dibUBAWWI2 - NkNUKCgoOhISDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhkZB0km - Jh5LJiYsRSEhITATFAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD/+H////8AAP/gH////wAA/8Af//// - AAD/gA////8AAP+AD////wAA/wAP////AAD/AA////8AAP4AB////wAA/gAH////AAD8AAf///8AAPwA - B////wAA/AAH////AAD8AAf///8AAPgAB////wAA+AAH//4HAAD4AAP/8AEAAPgAAf/AAQAA8AAA/wAA - AADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAEAAPAAAAAAAQAA8AAAAAADAADwAAAAAAcAAPAA - AAAADwAA+AAAAAAfAAD4AAAAAD8AAPwAAAAAfwAA/gAAAAD/AAD/gAAAA/8AAP/gAAAH/wAAgAAAAB// - AAAAAAAAf/8AAAAD4AP//wAAgB/8H///AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAYAAAAZAAAAGQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAARCQkYOh8fb0ooKK80HByiCQUFTAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAIhERFmA2Np2ITUz3lVNT/4dLS/5IKCi9AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAANjODiBllhY+61kZP+vY2P/pV5e/3xHRvEhEhJfAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAASSgoN41VVeS6bW3/xW9w/8dwcf+9bG3/klZW/jogIIEAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1RkWcs2xs/8dxcv/HcHH/x3Bx/8Zwcf+iYWH/SSkpmAAA - AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUC0tMZtgX+fGcnP/x3Bx/8dwcf/HcHH/x3Fy/61q - av9UMTGqAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxRER1tm9v/8hxcv/HcHH/x3Bx/8dw - cf/HcnP/tnRz/185OboAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAACIxXV7TEdHT/yHJz/8l1 - dv/Kd3j/ynd4/8p4eP/Bf37/bURDywAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNKysjo2Zm4Mt4 - ef/NfH3/z4GC/9GFhf/RhYb/0YWF/82Mi/9+UVHeCAICOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAACwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGc+ - Pkm1c3P30IGC/9OJiv/XkZL/2ZaW/9mWl//YlJX/2JmY/5hnZfMeEBBrAAAABwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA0FAgItHhAQWzAbG4IqFxeHDQcHWwAAABkAAAAAAAAAAAAA - AAAAAAAAek1MdMN/f//VjI3/2piZ/9+io//hqKn/4qmp/+Clpf/jpqT/wImH/04xMLwAAAA6AAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABEbDg5GRygokW5CQs+MVlbxnGJh/JdfXvxnPz7hHA8PbgAA - AAwAAAAAAAAAAAAAAACMW1qbz4qK/9qXl//gpqb/5rKz/+q6u//rvLz/6La2/+qxr//epKL/j1lZ+DUc - HLACAQFPAAAAHQAAAA8AAAAPAAAAEwAAACIbDg5MVDExnYZUU+SpbWz+uXl4/7x+fP/AgoD/xoeF/72A - f/9fOzu1AAAAHAAAAAAAAAAAAAAABJhkZK/VkZH/3Z+g/+axsf/twMD/8svL//LNzf/vxcX/8Lq4/+6z - sf+1dHP/j1VU+144N9g7IiKqMhwclDcfH5RGKSmiYTw7v4tZWOiydXT+woOC/8aKiP/Ol5X/2aWj/9ui - of/cnpz/2pyb/35TUrgAAAAVAAAAAAAAAAAAAAAFmmVkstaTk//hpaX/7Lm6//TLy//419f/+NnZ//TP - z//1wb//9Lq3/8aGhP+1dHP/s3Rz/6xwb/+pb27+rnNy/7Z7ev/BhIL/yY2L/8+WlP/apqT/5be2/+vB - v//rvrz/6bKw/+uvrf/Um5n/bUVEgAAAAAMAAAAAAAAAAAAAAAOTXV2q1ZGR/9CYmP+dfX7/o4yM/9e8 - vP/z0tL/zLOz/+u8u//5v7z/1peV/8uLif/Ki4r/yoyL/86Ukv/TnJv/2qSi/+Gtq//nuLb/7cPB//DJ - x//xxsT/8b+9//G6t//zubf/77az/6d1dM89Hx8lAAAAAAAAAAAAAAAAAAAAAIJOTojNiIn/jGlp/01O - Tv9UVlb/dnNz/7uhof+Pfn7/xJ+e//zCv//lqKb/3J2b/+Chnv/hpaT/7Ly5/+vHxv/MxMn/0MjN//LK - yf/1x8X/9sLA//a/vP/3vrv/+L+8//S7uP+5hoXhYTo5RwAAAAAAAAAAAAAAAAAAAAAAAAAAaTs7RrVz - dPKmfn7/cXJx/4SGhv97fX3/b2Zm/516ev+7kJD/+sG+//C2s//lqqr/rpbA/3aB2/+ql83/tMHK/2jc - 9P9OzOz/2r3B//q/vP/3vrv/9ry6//a8uf/ss7D/tYGA32c+Pk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAvEhIHg01Njbp9fvrCn5//nI+P/4R7ev+fgID/2Jyd/9ybnP/ytrT/+b+8/+ewtf+Mld3/ZI36/5eI - zv/Ttrn/sNLc/6/Czv/stLT/8re0/++0sf/tsq//2qCe/6Rxb8phODg+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABCIB8MeUZGbqRpata8gYH8x4mJ/9eTk//YkpP/04qL/+Cbmv/5wL3/9726/+Sw - t//Zrrn/56qY/+2smf/lr6n/nLWJ/4Gtdf/Pppn/3qGf/7yEg/KJWViYTyoqIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQh0dGXJAQGOXXl7NtnR1/8V7fP/MfH3/znt8/+il - o//0urj/7LCu/+Whg//rq13/35VX/9Kek/9yvXz/ZbNv/6iCdfqYY2O/aj4+TCUJCgcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACcamsBjFRVB4FERAh9PT0JjU1ND6VnZx+/hINF0JqZiNOjoty0iIf2hFBQw5lX - V8+wY2P4xXR0/+aioP/oq6j/2pqT/92fif/Vlor/yYqJ/7N8efiVZmPGdERFYkEfHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALiFhgXFkJEdx5CQSMqSknbNlZWbz5uaws2cnOXBlJPnqH18r4dc - XFFULy8OSCUlFm07O0+FSUmeoV1d3sF9fPrGhoX/snZ295xkZNiFUlKbbD4+T0UdHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc0JDA5FgYRKdbm46onR0Zp9ycnuWampzhFlZVmY6 - OikvDAwHAAAAAAAAAAAAAAAAAAAAAB0ODgRULCwhbjo7UXhERGVrPDxHTCYmGxAAAQMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//////////////////////D////gf///wH///4A///+AP///AD///wA///8AP//+AD - ///gA//D4AH+AeAA+ADgAAAAwAAAAMAAAADAAAAB4AAAA+AAAAfgAAAP8AAAH/wAAD8AAAD/AAAD/wB4 - D//H////////////////////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABMAAAAtAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgIO1cwMM1qOjrsHhAQmwAA - ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAATCgogfUhI6ahgYP6lXV3+f0hI9wIBAT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGBgFPLy6kuW1t/sZv - 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 - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/ControllerConfig.Designer.cs b/BizHawk.Client.EmuHawk/config/ControllerConfig.Designer.cs index cc024b4a27..03e1169a8a 100644 --- a/BizHawk.Client.EmuHawk/config/ControllerConfig.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/ControllerConfig.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ControllerConfig)); this.tabControl1 = new System.Windows.Forms.TabControl(); this.NormalControlsTab = new System.Windows.Forms.TabPage(); this.AutofireControlsTab = new System.Windows.Forms.TabPage(); @@ -298,7 +297,7 @@ this.Controls.Add(this.buttonCancel); this.Controls.Add(this.buttonOK); this.Controls.Add(this.checkBoxAutoTab); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController_MultiSize; this.Name = "ControllerConfig"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Controller Config"; diff --git a/BizHawk.Client.EmuHawk/config/ControllerConfig.cs b/BizHawk.Client.EmuHawk/config/ControllerConfig.cs index f838b1fbd0..24ef2380de 100644 --- a/BizHawk.Client.EmuHawk/config/ControllerConfig.cs +++ b/BizHawk.Client.EmuHawk/config/ControllerConfig.cs @@ -15,7 +15,7 @@ namespace BizHawk.Client.EmuHawk public partial class ControllerConfig : Form { private const int MaxPlayers = 12; - private static readonly Dictionary ControllerImages = new Dictionary(); + private static readonly Dictionary> ControllerImages = new Dictionary>(); private readonly ControllerDefinition _theDefinition; static ControllerConfig() @@ -249,12 +249,8 @@ namespace BizHawk.Client.EmuHawk private void SetControllerPicture(string controlName) { - Bitmap bmp; - if (!ControllerImages.TryGetValue(controlName, out bmp)) - { - bmp = Properties.Resources.Help; - } - + ControllerImages.TryGetValue(controlName, out var lazyBmp); + var bmp = lazyBmp?.Value ?? Properties.Resources.Help; pictureBox1.Image = bmp; pictureBox1.Size = bmp.Size; tableLayoutPanel1.ColumnStyles[1].Width = bmp.Width; @@ -264,10 +260,10 @@ namespace BizHawk.Client.EmuHawk { var pictureBox2 = new PictureBox { - Image = Properties.Resources.C64Keyboard, - Size = Properties.Resources.C64Keyboard.Size + Image = Properties.Resources.C64Keyboard.Value, + Size = Properties.Resources.C64Keyboard.Value.Size }; - tableLayoutPanel1.ColumnStyles[1].Width = Properties.Resources.C64Keyboard.Width; + tableLayoutPanel1.ColumnStyles[1].Width = Properties.Resources.C64Keyboard.Value.Width; pictureBox1.Height /= 2; pictureBox1.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; pictureBox1.Dock = DockStyle.Top; @@ -279,9 +275,9 @@ namespace BizHawk.Client.EmuHawk if (controlName == "ZXSpectrum Controller") { - pictureBox1.Image = Properties.Resources.ZXSpectrumKeyboards; - pictureBox1.Size = Properties.Resources.ZXSpectrumKeyboards.Size; - tableLayoutPanel1.ColumnStyles[1].Width = Properties.Resources.ZXSpectrumKeyboards.Width; + pictureBox1.Image = Properties.Resources.ZXSpectrumKeyboards.Value; + pictureBox1.Size = Properties.Resources.ZXSpectrumKeyboards.Value.Size; + tableLayoutPanel1.ColumnStyles[1].Width = Properties.Resources.ZXSpectrumKeyboards.Value.Width; } if (controlName == "ChannelF Controller") @@ -291,11 +287,11 @@ namespace BizHawk.Client.EmuHawk if (controlName == "AmstradCPC Controller") { - /* - pictureBox1.Image = Properties.Resources.ZXSpectrumKeyboards; - pictureBox1.Size = Properties.Resources.ZXSpectrumKeyboards.Size; - tableLayoutPanel1.ColumnStyles[1].Width = Properties.Resources.ZXSpectrumKeyboards.Width; - */ +#if false + pictureBox1.Image = Properties.Resources.ZXSpectrumKeyboards.Value; + pictureBox1.Size = Properties.Resources.ZXSpectrumKeyboards.Value.Size; + tableLayoutPanel1.ColumnStyles[1].Width = Properties.Resources.ZXSpectrumKeyboards.Value.Width; +#endif } } diff --git a/BizHawk.Client.EmuHawk/config/ControllerConfig.resx b/BizHawk.Client.EmuHawk/config/ControllerConfig.resx index 47c65361ff..47f85b73de 100644 --- a/BizHawk.Client.EmuHawk/config/ControllerConfig.resx +++ b/BizHawk.Client.EmuHawk/config/ControllerConfig.resx @@ -123,508 +123,4 @@ 172, 17 - - - - AAABAAwAMDAQAAAABABoBgAAxgAAACAgEAAAAAQA6AIAAC4HAAAYGBAAAAAEAOgBAAAWCgAAEBAQAAAA - BAAoAQAA/gsAADAwAAAAAAgAqA4AACYNAAAgIAAAAAAIAKgIAADOGwAAGBgAAAAACADIBgAAdiQAABAQ - AAAAAAgAaAUAAD4rAAAwMAAAAAAgAKglAACmMAAAICAAAAAAIACoEAAATlYAABgYAAAAACAAiAkAAPZm - AAAQEAAAAAAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAQAAAAEAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAHR3AAAAAAAAAAAAAAAAAAAAAAAAAAAAdHdEcAAAAAAAAAAAAAAAAA - AAAAAAAAAHd0d3QAAAAAAAAAAAAAAAAAAAAAAAAAAEd8d3UAAAAAAAAAAAAAAAAAAAAAAAAAB3yHfHZw - AAAAAAAAAAAAAAAAAAAAAAAAd3fIyHVwAAAAAAAAAAAAAAAAAAAAAAAAfHh3jIxwAAAAAAAAAAAAAAAA - AAAAAAAHd8jIyHdgAAAAAAAAAAAAAAAAAAAAAAAHd4yHfIdAAAAAAAAAAAAAAAAAAAAAAAAHyMjIyMhQ - AAAAAAAAAAAAAAAAAAAAAAB3d3eMh4dgAAAAAAAAAAAAAAAAAAAAAAB8jIyIfIdQAAAAAAAAAAAAAAAA - AAAAAAB3h4jIiMh3AAAAAAAAAAAAAAAAAAAAAAB8jIeHeIjHAAAAAAAAAAAAAAAAAAAAAAeIiHh4eMiE - AAAAAAAAAAAAB0dHcAAAAAd8h4eIiIiHcAAAAAAAAAB0d3d3RwAAAAeIeIiIiIh3RwAAAAAAAHR3d8h3 - dAAAAAfIh4iIiHiIx0cAAAAAdHh3eIeHhwAAAAeHiIiIiIiId3R3dHR0eHd4h4eHhAAAAAd4eIiIiIiH - x3d2d3eId4iIiIiIhwAAAAd4eIiI+IiIh3d3eHh3iIiIiIeHwAAAAAfIjHeIiIiIyIeHh4iIiIiIiIiI - cAAAAAeIQ0R3h3iIiMiIiIiIiIiIiIiEAAAAAAfIR3d3d0iIiIh4iIeIiIiIiHhAAAAAAAB4d3d3SHiI - h4fTiIi3iIiIeIwAAAAAAAB3h4d3eIeIiHiJiIuIiIh4jHAAAAAAAAAHyId3h3h4iIh4iIiIiIiHeAAA - AAAAAAAAB8iMiMjIiIiIh4h3aMjHAAAAAAAAAAAAAAdYyIeIiIiMjId6d4eAAAAAAAAAAAAAAAAHdsjH - eIeH6MiId3AAAAAAAAAAAAAAAIiIh4V8jIh4eIfHcAAAAAAAAAAAAACIiIh3AAAHd3h3fHcAAAAAAAAA - AAAAAAiIjHgAAAAAAHx8eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAA - AAd0dAAAAAAAAAAAAAAAAAB3x3cAAAAAAAAAAAAAAAAAd3fHcAAAAAAAAAAAAAAAB3yMh3AAAAAAAAAA - AAAAAAfIeMdwAAAAAAAAAAAAAAAHjIyHQAAAAAAAAAAAAAAAfId4yHAAAAAAAAAAAAAAAHjIyIdQAAAA - AAAAAAAAAAB3iId4YAAAAAAAAAdwAAAAjIiIiIUAAAAAAHd3dAAAB4iIiHh8cAAAAHd3x4dwAAd4iIiI - h3Z3d3R3yIh4cAAHh4iIiIfHd3d4iIiIh3AAB3jHiIiIiHeHiIiIiIwAAAh3dXh4iMiIiIiIiIhwAAAA - yGd0d4iIeIi4iIiMAAAAAIeHd4iIh32IiIiIcAAAAAAAd4jIyIiIiHeHyAAAAAAAAAB3h4iIh8h3dwAA - AAAAAAAIh8fIh4eIaAAAAAAAAACIiHAAB8jIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////////////////////n////g////wP///8B///+Af///gH///4B///8Af///AH///wB//n8AP/A+AB - /AHgAAAB4AAAAeAAAAPgAAAH8AAAD/AAAB/8AAA//wAA//4AA//weA////////////////////////// - //8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRwAAAAAAAAAAAAB3dAAAAAAAAAAAAA - d8dwAAAAAAAAAAAAfId3AAAAAAAAAAAHeMjHAAAAAAAAAAAHyHh3AAAAAAAAAAAHh3eEAAAAAAAAAAAI - yIiHAAAAAHd2cAAIiIiIQAAAd3d4UACHiIiId3d3eHiIcACHh4iIyHeHiIiIcAAIR3d4iIiIiIiMAAAH - d3eIh3iIiIhwAAAAeMh4iIiHiMAAAAAAAHfIiMh4aAAAAAAAiIgHyIfIAAAAAAAIgAAAAIAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD8f/8A+H//APB/ - /wDwP/8A4D//AOA//wDgP/8A4D/BAOAfAQDAAAEAwAABAOAAAwDgAAcA8AAfAPwAPwDwgP8A5/f/AP// - /wD///8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAd1AAAAAAAAB8cAAAAAAAB4eAAAAAAAAHyMgAAAAAAAiIhwAAAHcACI - iHcAd3hwAIz4jIeIiIAAd3eIiIiIAACHeIiIiHAAAACMeMh4AAAAiAAIgAAAAAAAAAAAAAAAAAAAAAAA - AAD//wAA//8AAP//AADj/wAA4/8AAMP/AADB/wAAwfkAAMDBAADAAQAAwAMAAMAHAADwDwAAzn8AAP// - AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAA9OzsAZD8/AGg8 - PABtPj4AQkNDAEZIRwBWQkIAV0REAF5AQABbRkYAVklJAFxPTwBTU1MAXFJSAF5ZWQBkQEAAYUREAGZF - RQBqQkEAYEtLAGNPTwBwQUEAfUZGAHJKSgB2SUkAfU9PAGBRUQBgVFQAZlZWAGZYWABqWVkAclZWAHpU - VAB9W1oAbmJiAGtoaABtaWkAcWdnAHdnZwB8Y2MAe2pqAHJxcQB+dHQAd3l5AHl6egCGT08AiU9PAIFP - UACGU1MAjVFRAIlWVgCMV1cAg1xbAIxaWQCQUlIAlVJSAJFXVgCXVVUAmVVVAJZaWQCSXV0AlV9eAJpZ - WgCeW1sAml5eAKBZWgCgXFwAql9fAIRmZQCIZWQAhWtrAI5ragCTYmEAnGBhAJ9kYwCaZmYAk25uAJ1s - awCFdHQAiXd3AIt+fgCWd3cAmHR0AJV5eQCbfHwAo2JhAKZhYQChZWUApGVkAKplZACsZGQAqmhnAKZr - agCnbGsAqmloAKlubQCsbW0AtGZnALhsbACxb3AAv29wAKVxcACrc3IAr35+ALN0cwC5c3MAvXBxALR4 - dgC1fHsAunt6AMNtbgDGb3AAw3FyAMZwcQDGdXUAyHR1AMp3eADBeXkAxnt7AMB/fgDLensANLBSAEWf - TgBBtFwAPMdnADHkdgDciiIAvoF/AISrdwDln0sA35lhAN2XfADgmmEA8LdlAO61cAArWPIALWT+AEh5 - +gDOf4AAfoCAAHiA1ABZv9wAZrnUAGK+2ABxnv4Ad6P/ADPX/QBw0OcAW+D7AIKEgwCPgoIAjI2NAJuC - ggCUiIgAmYqKAJGSkgCjhIQAqoKCAKKLiwC+hIMAsoqKALaSgQCum5sAsZubALqqlQCdgr4Ar6ytALGh - oAC6pKQAwoSDAMyBggDGiIYAyYiHAMWMigDMjIoA0ISFANKHiADUjIwA2Y6NAMCUjQDIk44A0JCPANaP - kADHlZQAzpSSAMScmwDUkpIA2ZSVANWYlgDampcA2ZeYANWcnADam5sA4p2cAMChjwDeoJ4A5aCFAOaj - jQDlpJoA2p6hAMOkowDOoaEAy62tANegoADdoqEA2aGpANGsrwDdq6kAwbG4ANGysQDdtLQA2ri3AOGk - owDjqKYA66ylAOGnqADjq6oA6a2rAOOwrwDssK4A5K+wAOaztADttLIA57i2AO24tgDmurgA6rq6APC1 - swDyuLYA9Ly5APi+uwD1wL0A+cC9AKKMwACkk8QAqprMALSayACptsEAlaDkAOy/wACRxtQAgOv9AJnr - 9wDEwsoA5sbGAOzCwgDuyMcA7MzMAPPEwgDxy8oA9dPTAPja2gAAAAAAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAADLytDi9tOemQAAAAAAUy9EecLEsa1uPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj11Mme - VakAAAAAAAAAAAAATS84M0akAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE - AAAAAAAAAAAAAAABAAAAAQAAAAAAAFFNTQBRUlIAU1RUAGJHRwBiT08Aa0lIAGJTUwBrVlYAYllZAGZc - XABpWloAb1xbAHNTUwB7V1YAc1hXAHFbWwBkZWUAaWFhAG5kZABpamkAcGFhAHlubgB2cHAAf3V1AH55 - eQB8fX0AgUpKAI1PTwCLWFcAhlhYAI9ZWQCKXFsAm1ZWAJJZWQCWWVgAmlpbAJtcWwCiXFwAl2BfAIBg - YACAZ2YAgG9vAI9oaACWZWQAmGBhAJ5kZACcaWoAmm9vAIV0dACNcHAAiXZ2AIB8fACac3IAm3V0AJ51 - dQCZfHwAnHx8AKNmZgCnZmYAqmJiAK5jYwCvb24AtWVmALBtbgC5bW0AvmxtAKx+fQCxcnIAtHBwALZz - dACydXQAtnd2ALlwcAC5dnYAt3p5ALh5eAC8fHsAun18ALx+fQDGb3AAxnBxAMdzdADAd3YAyHJzAMlz - dADJdXYAynd4AMd/fwDMe3wAzXx9AHunbwBhvHIAYsN4ANuLOwC2hn4A4Zt5APC3ZABte9sAX47+AHWM - 5QAl0foAY+P8AIeDgwCFhoYAioSEAJOIiACWi4sAmpKRAKGCgQCmhYUAqYGBAKuDhACniooApYyMAKiO - jQCyhYMAvoWEALeNjQCrj5AAr5eXALSVlAC9lJMAmbCEAK6RugDBgYAAwoSCAMWDhADChoQAxYeFAM6A - gQDFiIYAxoqIAMqIiQDMi4oAy4yKAMiPjQDPj44A0ISFANKJigDUi4wA04+NANWNjgDKkY8A0JCOANud - iQDWj5AAzJSTAM2XlgDGm5oA1pGSANOUkgDVl5EA1pOUANiVlgDYmJUA2ZeYANKenADbmpsA3pmYANuc - mgDbn5wA1aacAN6gngDqqZoA3Z+gAMyjowDCra0AxqysAMqpqQDboaAA3qKiAN6logDbp6UA3aWkANer - qgDWsbMA0rW0ANe0tADfs7IA4aSiAOGlpQDkp6UA46imAOWopgDsraIA6qimAOGoqADhrqwA6a2rAOqv - rADpsK4A7LGuAOGzswDlsbEA7bKxAO+1sgDotrYA5rm3AO+4twDot7sA6bq5AOu9uwDrv70A8bazAPG2 - tADxuLUA9Lm2APC9uwD2vboA9L+9APi+uwD4v7wA8sC+APXAvgD5wL0AkILJAKqXzACsu8cAqr/LALLV - 3QDawMIA48XFAOvDwQDswMAA7cTDAO/ExQDgxsgA8cbEAPTGxADwyskA9MvJAPLNzQD21dYA+NjZAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAMEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHCEcBQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAayU9PSYbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQlBSQiJpAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAM0pSUlJQPRcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnUlJSUlJGFQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAFJSUlJSUkoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzUlJSWVJZfxAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5XWYqKioqGDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoqMkpqa - mqAsAAAAAAAAAAAAAAAAAABoNAAAAAAAAACMjJyuvLy2toYHAAAAAAAAAAAAABcOIDouBgAAAAAAc4yc - tsHKysPAriIKAAAAAAAAABYgRk1LTX+DEAAAAABukqXB4ejo4dHPQCIEChcXEwggTXV/k66unKMpAAAA - AG6Srsro6ero0dN/Rk1NRk2Dg4STrsbh4cHAt2sAAAAAbpKuOXPe6ajW15KGg4OGk528yuHo5eHPz882 - AAAAAAB4jCkDAxSoMabXt5yjt8ro3ePo5dbT09HTdAAAAAAAAABGcBFoGgFwdtfDwHxi2dpmZcrX09HP - z0MAAAAAAAAAAHh/qWwaOa6cz9PNZGPYsdzbzc3DwLk2AAAAAAAAAAAAAAAvhpKakoyg19HNyKS5wHtb - orZ/cwAAAAAAAAAAAAAAAAAANkaKWVm5zb1gYV6cXVxfNgAAAAAAAAAAAAAAAAAAALGvlTIuP1K5tqCR - l4xfLwAAAAAAAAAAAAAAAAAAsbPBenkAAAAAcCVYjE0scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////+f///+D////A////wH - ///4B///+Af///gH///wB///8Af///AH/+fwA/8D4AH8AeAAAAHgAAAB4AAAA+AAAAfwAAAP8AAAH/wA - AD//AAD//gAD//B4D////////////////////////////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAAWlJSAHBJSQB1SEgAe1dXAHdYWAB5WlkAel1dAGBiYgB1bGwAfWtrAHh2 - dgB9fn4Ag01NAIRXVwCIV1cAhV9eAItbWgCgX14ApV1dAJhgXwCNYGAAnWtqAJhtbQCCdnYAh3x8AI15 - eACeensAqGBgAKhoZwCga2oArGpqALNqagCzb28AtG1tALltbQCxb3AApnVzAKlzcwCqdHMApnp6AKd+ - fgCpensAq3x7ALZ3dgC8dHQAvH59AMZvcADGcHEAxXN0AMhycwDJdncAynh5AMx5egDNfn8Ajo1wAOek - VgDGgH8A4p53AEZ2+gB8u4AAd8PaAIuEhACOh4cAjo6OAJ+DggCejo4Ao4SEAKSIiACsi4sAqo2MAK6P - jgC+gYAAvoaGAL+KiACskJAAtJeXALWenQC5np4At6iOAKmyjgC9nroAwYSDAMaGhADOhoYAxomHAMiK - iQDJjYwA0oeIANOOjwDUjY0A2ZiPANaPkADGkZEAx5eXAMySkADGnZwA1ZOSANeTlADWl5YA2JSVANGZ - mADan50A3J6dAOCcmwDVoJ8A7K2fAMOtrQDXo6IA3aCgAN+kpADVq6oA3ay3AMu0tADPtrYA3L+/AOCi - oQDhpqUA5KelAOinpgDlq6gA46usAOOvrQDqrqwA7LGuAOayswDjtrQA5re1AOqysQDts7EA57y6AO+8 - ugDrvL0A8LOwAPC1sgDwtrQA87q3APS6twD2vboA8b69APi/vAD2wb4A+cC9AJmTzwDHqMMAu8PMAIHf - 8QDByNAA7cLCAO3FwwDvxsQA5cjIAOzOzgDwxcQA9cbEAPPP0AD10tIAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - BQMJAAAAAAAAAAAAAAAAAAAAAAAAAAAPHBMNAAAAAAAAAAAAAAAAAAAAAAAAABojLy8TAAAAAAAAAAAA - AAAAAAAAAAAAAB0wMDAiPgAAAAAAAAAAAAAAAAAAAAAAQjAwMDAtGAAAAAAAAAAAAAAAAAAAAAAAFzIy - NTU5CgAAAAAAAAAAAAAAAAAAAAAAIjZYWFxcBwAAAAAAAAAAAAAAAAAAAAAANlxtdW11JQAAAAAAAAAA - PgcRDgkAAAAAXG1/lISAZgMAAAAAABkVLC5SVhcAAABNY3WWnJuLfB8UBAcQHkhWaX91dSsAAABNY2BM - mJeCiVJSVl9laX+WloSJgEIAAAAAXAEIC0tGjnR0dJaRk5qNjIyJQwAAAAAAJkNADBtdjIaPO1GSPYuJ - hnVEAAAAAAAAAClISWRcd4xwkGp8UE90VwAAAAAAAAAAAAAAKSQ1NYZ7OjhbPDdGAAAAAAAAAAAAAHNv - YGsAKyJoXFYmRwAAAAAAAAAAAAAAcnIAAAAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// - /wD///8A////APx//wD4f/8A8H//APA//wDgP/8A4D//AOA//wDgP8EA4B8BAMAAAQDAAAEA4AADAOAA - BwDwAB8A/AA/APCA/wDn9/8A////AP///wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAABjZGQAdmRjAHtpaQB/eHgAgU9PAKBaWgCFbm0AlWtqAKptbgCwZ2cAsGhoAKxw - cACteHkAvnJyAMZvcADGcHEAy3l5AMx9fgCFmXQAwIB/ANeUfQDhoX8AlIqJAJWMjACYiIgAoIaGAK2K - igCxh4cAvoGAALKKigC4iYgAuJWVAL2cnACss50AuqKhAL+mpgDLgoIAxImHAMeNjADLkI8AxpWTANCS - kQDYlZUA1J6dANqZmgDdnp4A1J+oAMaiogDOr68AzLKyANi5uADhpaIA4qypAOWtqADrrqsA4bKwAOay - sgDtuLYA57++AOy4uADxtLIA8be0APa9ugDswL4A9sG+ALCcxwC5ncIA06zBALnH0QC2ytQA7sPDAPLS - 0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAZBgUAAAAAAAAAAAAAAAAACw8KAAAAAAAAAAAAAAAAGhAQDgAAAAAAAAAAAAAAAAkRESUYAAAA - AAAAAAAAAAAlKy4uBwAAAAAAAAcDAAAAKzlHPCYCAAAYCB0oKgAAAC0wSDs0FB0nLDlAOiwAAAANAQQb - Pi9DRkVBPzUAAAAAJB4cKz5EQjMiNSkAAAAAAAAAHwwRNxYVEyQAAAAAAAAxMgAAACEgAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA4/8AAOP/AADD/wAAwf8AAMH5 - AADAwQAAwAEAAMADAADABwAA8A8AAM5/AAD//wAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAkAAAAJAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAUAAAAOAEBAVUAAABUAAAANQAAABAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkFBSUvGRl5TCkpwlYuLtxDJCTQFw0NmQAA - AEkAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAwMKE8rK6V6RET2klJR/5ZS - U/+OT0//ZDc38B0QEJoAAAAyAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDAwYVzAwoopP - T/ygXVz/oFtb/55ZWf+bWFf/k1NT/1UvL9wGAwNcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AARNKipxhk5O+adkY/+uZWX/tWdo/7VmZ/+qYWH/nltb/3hERPcfERGCAAAAFgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADEZGS1zQ0LXqGdm/7ptbf/Fb3D/x3Bx/8hwcf/BbW7/q2Vl/4hPT/82HR2gAAAAIAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAB1gxMYyYXl3/vXFx/8Zwcf/HcHH/x3Bx/8dwcf/HcHH/uG1t/5NY - V/9EJia2AAAAKQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPB8fNH1MS+K4cnH/x3Fy/8dwcf/HcHH/x3Bx/8dw - cf/HcHH/wHBx/51gX/9PLCzGAAAAMwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAMAAAAAAAAAAAAAAAAAAAAALhAQFIZXVs/RjIz/1Y2O/9qYmP/eoaL/46qr/+aysv/ot7f/6rm5/+m4 - uf/otbX/5q+v/+uvrf/jqab/wYeF/28/P/QhEhKvAAAAXwAAACgAAAANAAAABQAAAAMAAAACAAAAAwAA - AAUAAAAKAAAAFQAAADAdDg9oSSkptHZHRu2dYmL+t3Z1/758e/+6enn/tnh3/7d5eP+8fn3/w4SD/7Z6 - ef9eODfbBgICTgAAAAgAAAAAAAAAAAAAAAAAAAAAPhwcJJVjYuPXkZH/2JOU/92fn//iqqr/57O0/+u8 - vP/uwsL/78XG/+/Exf/twMD/67i4/+60sv/wtrP/zZKQ/5taWv9xQED2MRsaxAgEBIcAAABaAAAAQQAA - ADcAAAA2AAAAOwAAAEUEAgJZHA4OfUcnJ7l5SkntqGxr/8CAfv/DgoH/vH59/7p+ff/DiIb/zZGP/9GT - kf/UlJP/1peV/9eZl/+GVlbuGQsLVwAAAAcAAAAAAAAAAAAAAAAAAAAARiIiLZ9rauvZk5P/2peY/+Ck - pP/lsLD/6ru7/+/Fxf/yzMz/9NDQ//PPz//xycr/7sDA//K5tv/1u7j/36Kg/6dmZf+mZWX/j1ZW/WM6 - OutDJSXQNBwcvDAaGrQ0HBy1PiIivUwsLMtkPDzfh1VU9a1xcP/EhIP/xIWE/7+Cgf/Ch4b/zZST/9mk - ov/grq3/4a6t/96lo//eoJ7/36Kg/+Cjof+IWVjnGwwMQwAAAAIAAAAAAAAAAAAAAAAAAAAARyQkL6Br - auzZk5P/25qb/+GnqP/ntLT/7cDA//LLy//209T/+NjY//fX1//00ND/8cbG//W9u//4vrz/46ak/7d0 - c/+vb27/s3Jy/7d2df+ucXD/pWpp/6Npaf+nbWz/sHVz/7p9fP/EhYT/yImI/8WIhv/DiIb/ypGP/9eg - n//hr63/57q5/+rCwP/rwsD/6bq4/+evrf/nq6n/6q6r/9qgnv9wRkbDBwAAHgAAAAAAAAAAAAAAAAAA - AAAAAAAASCQkLZ1nZuvYkpP/25uc/+Opqv/qtrf/7cHB//TOzv/52Nj/+tzc//na2v/xz9D/8MfH//fA - vv/6wb7/6a6r/8OBgP/DgoD/vX58/7h7ev+8fn3/woOC/8aHhv/HiYj/xoqJ/8aLif/Ijoz/zZST/9eg - nv/hrav/6Lm3/+zCwf/uyMf/78nH/+/Dwf/uvLr/7ba0/+60sf/vtLL/8ri1/7J+fflMKSltAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAQyEhI5JcXOPWj5D/3Juc/8qVlf+BZmb/bl5e/4l4eP/AqKj/8tPT//LO - zv+5p6b/w6qq//fBv//7wr//8LWy/86Ojf/Ojoz/0ZGP/9GSkP/OkY//zpOR/9GamP/VoJ//2qel/+Gv - rf/nt7X/6727/+3Dwf/wycf/8czL//LLyf/yxsT/8cC+//G7uf/yubf/87m3//S7uP/4vrv/1J6c/3JH - RrAdCgsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANRcXEYJNTcvPiIn/15aW/2VNTf85Ojr/Q0VF/0JF - RP9dXFz/n5GR/+S/v/+bh4f/hXp6/+25uP/7wr//9bu4/9qcmv/Zmpj/252b/96gnf/ipKH/5q+s/+u+ - vP/vycf/8srI/+3Hxv/wysj/9c7M//TNy//0ysj/9MbE//TBv//1vrz/9r26//e9u//4vrv/+L+8//vB - vv/hqqf/g1ZVzDwcHC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW4+Ppq/env/05OT/2ZX - V/9rbm7/fX9//3l6ev99f3//cHJy/5F9ff+ff3//XFhY/9eop//8wr//+L+8/+Wppv/ipaP/5qil/96i - pP/Kmaz/1qi1//LGxP/tyMf/qb3J/23E3P9kw9//vMTN//jDwP/3wb//+MC9//i/vf/5v73/+b+8//i/ - vP/3vrv/+L68/92mo/+IWlnRRSMjOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcv - L0mbX1/y15GS/6GAgP9XV1b/iYuL/4CBgf98fX3/cnR0/1dPT/++j4//km9w/9Sfnv/6wL3/+cC9/+6z - sP/ssK3/0Z+u/4OH1P9YffD/QGPs/7KYyv/Ct7z/Ytrz/3Ts//8s2f//cbvU//m+u//4v7z/+L67//e9 - uv/1vLn/9Lq3//O5tv/zuLX/0puZ/4RVVctGIyM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADIXFwdrPDySq2ts/diZmf/ApKT/sKur/4CBgP95enr/iYiI/49zdP/do6P/36Ch/96e - nv/zuLX/+sK///W7uP/1ubT/qZC//2qY+/9tnf//MGT6/56FxP/esK//nMbS/57n8/9+z+T/ybG3//a6 - t//zubb/8re0//C1s//utLH/7rKw/+qvrP++iIb9dklJtkMgISoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHIyMSazw8kZ5hYvXNjI3/2aSk/7OMjP+bd3f/sIKC/9KV - lv/cnJz/2peY/9aRkf/koqL/+sG+//nAvf/5v7z/4amw/6qZx/+aouP/qpvP/+mxtv/2urj/6rGv/+S6 - u//ptrX/466n/+Ovqf/ssK7/6q6s/+isqv/oq6n/2J2b/6JubfFoPT2NOxoaFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBoaCFowMFd7SEjAomZm9sWC - gv/XkZL/25SV/9iSk//Wj5D/1IyN/9KHiP/UiIj/8bOx//rCv//3vbv/9ru4//O3s//xuLX/7q6e/+ej - hf/npIn/7bCp/+Otp/+KsX3/ULdm/1WjWv+7oYz/5KWk/9uenP+4gH79glJRzVYuLlQgCAkGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAA8HBwQVy4uS3FBQaCPV1fjsG5v/cmAgf/ShYb/0YKD/85+f//LeXr/2I2M//e8uf/1vLn/7rOx/+2y - sP/lpJX/5qFY/+6xXP/djS3/35h9/86gl/9SwW7/Nd90/0WxXP+vlH//wYSE/49cW+VlOTmBQR4eHAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGk7OhqIWFd8oG5u8J5qav+eX2D/tmts/8Z0df/KdHX/yXJz/92T - k//3vLn/7LGu/+Snpf/dm5L/4Z1q/+61dP/fmmX/15WM/9eYlv/Bm43/r6uR/6uNgP+WYWDtbkBAnUwn - JzQVAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiFJSBnhC - QgpqNDQJWSUlB08dHQdfKisKfENDFJJWViinbGtRvYOCjtOcm8/pt7X157y6/7eOjfhxRUW7aTk5m4RK - StehWlr6uGdo/8Zwcf/dkpH/8bSx/+OnpP/YmZj/1ZWT/9ealP/Vl5X/0JCP/8eIhv+zdnb/lFtc6nA/ - QKRSKio/JQwNBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADTn6AB2qioDMuUlCHBhYU8voCAWcCBgXTEhoaLzZGQqdeensngrKvn47Sz/NOop/+yiIfyi2Bgs2k+ - PlZXKysPAAAAAUYlJRxcMTFYcj4+pYpMTeWmXF3+xnl5/9+Zl//dnJr/z46M/8KCgf+vc3L/ll9e831L - S8hlOTl/TigoMy0REQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABzQUIDnmprDriGhifHlpZMzp6eeNCgoZ7On5+2yJqaybuPj9WnfHzVj2RkunVJ - SYNbLy8/PRQUCgAAAAAAAAAAAAAAAAAAAAAAAAAAKRUVBU0pKSphNDRtd0BAsotNTd2ZW1vrkVlY4HtJ - Sb5lOTmCUysrQTsbGxEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCwsA2Y4OA5xQkImdkhIRHhKSll0R0dibUBAWWI2 - NkNUKCgoOhISDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhkZB0km - Jh5LJiYsRSEhITATFAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD/+H////8AAP/gH////wAA/8Af//// - AAD/gA////8AAP+AD////wAA/wAP////AAD/AA////8AAP4AB////wAA/gAH////AAD8AAf///8AAPwA - B////wAA/AAH////AAD8AAf///8AAPgAB////wAA+AAH//4HAAD4AAP/8AEAAPgAAf/AAQAA8AAA/wAA - AADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAEAAPAAAAAAAQAA8AAAAAADAADwAAAAAAcAAPAA - AAAADwAA+AAAAAAfAAD4AAAAAD8AAPwAAAAAfwAA/gAAAAD/AAD/gAAAA/8AAP/gAAAH/wAAgAAAAB// - AAAAAAAAf/8AAAAD4AP//wAAgB/8H///AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAYAAAAZAAAAGQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAARCQkYOh8fb0ooKK80HByiCQUFTAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAIhERFmA2Np2ITUz3lVNT/4dLS/5IKCi9AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAANjODiBllhY+61kZP+vY2P/pV5e/3xHRvEhEhJfAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAASSgoN41VVeS6bW3/xW9w/8dwcf+9bG3/klZW/jogIIEAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1RkWcs2xs/8dxcv/HcHH/x3Bx/8Zwcf+iYWH/SSkpmAAA - AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUC0tMZtgX+fGcnP/x3Bx/8dwcf/HcHH/x3Fy/61q - av9UMTGqAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxRER1tm9v/8hxcv/HcHH/x3Bx/8dw - cf/HcnP/tnRz/185OboAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAACIxXV7TEdHT/yHJz/8l1 - dv/Kd3j/ynd4/8p4eP/Bf37/bURDywAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNKysjo2Zm4Mt4 - ef/NfH3/z4GC/9GFhf/RhYb/0YWF/82Mi/9+UVHeCAICOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAACwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGc+ - Pkm1c3P30IGC/9OJiv/XkZL/2ZaW/9mWl//YlJX/2JmY/5hnZfMeEBBrAAAABwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA0FAgItHhAQWzAbG4IqFxeHDQcHWwAAABkAAAAAAAAAAAAA - AAAAAAAAek1MdMN/f//VjI3/2piZ/9+io//hqKn/4qmp/+Clpf/jpqT/wImH/04xMLwAAAA6AAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABEbDg5GRygokW5CQs+MVlbxnGJh/JdfXvxnPz7hHA8PbgAA - AAwAAAAAAAAAAAAAAACMW1qbz4qK/9qXl//gpqb/5rKz/+q6u//rvLz/6La2/+qxr//epKL/j1lZ+DUc - HLACAQFPAAAAHQAAAA8AAAAPAAAAEwAAACIbDg5MVDExnYZUU+SpbWz+uXl4/7x+fP/AgoD/xoeF/72A - f/9fOzu1AAAAHAAAAAAAAAAAAAAABJhkZK/VkZH/3Z+g/+axsf/twMD/8svL//LNzf/vxcX/8Lq4/+6z - sf+1dHP/j1VU+144N9g7IiKqMhwclDcfH5RGKSmiYTw7v4tZWOiydXT+woOC/8aKiP/Ol5X/2aWj/9ui - of/cnpz/2pyb/35TUrgAAAAVAAAAAAAAAAAAAAAFmmVkstaTk//hpaX/7Lm6//TLy//419f/+NnZ//TP - z//1wb//9Lq3/8aGhP+1dHP/s3Rz/6xwb/+pb27+rnNy/7Z7ev/BhIL/yY2L/8+WlP/apqT/5be2/+vB - v//rvrz/6bKw/+uvrf/Um5n/bUVEgAAAAAMAAAAAAAAAAAAAAAOTXV2q1ZGR/9CYmP+dfX7/o4yM/9e8 - vP/z0tL/zLOz/+u8u//5v7z/1peV/8uLif/Ki4r/yoyL/86Ukv/TnJv/2qSi/+Gtq//nuLb/7cPB//DJ - x//xxsT/8b+9//G6t//zubf/77az/6d1dM89Hx8lAAAAAAAAAAAAAAAAAAAAAIJOTojNiIn/jGlp/01O - Tv9UVlb/dnNz/7uhof+Pfn7/xJ+e//zCv//lqKb/3J2b/+Chnv/hpaT/7Ly5/+vHxv/MxMn/0MjN//LK - yf/1x8X/9sLA//a/vP/3vrv/+L+8//S7uP+5hoXhYTo5RwAAAAAAAAAAAAAAAAAAAAAAAAAAaTs7RrVz - dPKmfn7/cXJx/4SGhv97fX3/b2Zm/516ev+7kJD/+sG+//C2s//lqqr/rpbA/3aB2/+ql83/tMHK/2jc - 9P9OzOz/2r3B//q/vP/3vrv/9ry6//a8uf/ss7D/tYGA32c+Pk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAvEhIHg01Njbp9fvrCn5//nI+P/4R7ev+fgID/2Jyd/9ybnP/ytrT/+b+8/+ewtf+Mld3/ZI36/5eI - zv/Ttrn/sNLc/6/Czv/stLT/8re0/++0sf/tsq//2qCe/6Rxb8phODg+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABCIB8MeUZGbqRpata8gYH8x4mJ/9eTk//YkpP/04qL/+Cbmv/5wL3/9726/+Sw - t//Zrrn/56qY/+2smf/lr6n/nLWJ/4Gtdf/Pppn/3qGf/7yEg/KJWViYTyoqIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQh0dGXJAQGOXXl7NtnR1/8V7fP/MfH3/znt8/+il - o//0urj/7LCu/+Whg//rq13/35VX/9Kek/9yvXz/ZbNv/6iCdfqYY2O/aj4+TCUJCgcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACcamsBjFRVB4FERAh9PT0JjU1ND6VnZx+/hINF0JqZiNOjoty0iIf2hFBQw5lX - V8+wY2P4xXR0/+aioP/oq6j/2pqT/92fif/Vlor/yYqJ/7N8efiVZmPGdERFYkEfHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALiFhgXFkJEdx5CQSMqSknbNlZWbz5uaws2cnOXBlJPnqH18r4dc - XFFULy8OSCUlFm07O0+FSUmeoV1d3sF9fPrGhoX/snZ295xkZNiFUlKbbD4+T0UdHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc0JDA5FgYRKdbm46onR0Zp9ycnuWampzhFlZVmY6 - OikvDAwHAAAAAAAAAAAAAAAAAAAAAB0ODgRULCwhbjo7UXhERGVrPDxHTCYmGxAAAQMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//////////////////////D////gf///wH///4A///+AP///AD///wA///8AP//+AD - ///gA//D4AH+AeAA+ADgAAAAwAAAAMAAAADAAAAB4AAAA+AAAAfgAAAP8AAAH/wAAD8AAAD/AAAD/wB4 - D//H////////////////////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABMAAAAtAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgIO1cwMM1qOjrsHhAQmwAA - ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAATCgogfUhI6ahgYP6lXV3+f0hI9wIBAT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGBgFPLy6kuW1t/sZv - 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 - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/A78Joystick.png b/BizHawk.Client.EmuHawk/config/ControllerImages/A78Joystick.png deleted file mode 100644 index 1c1dad9150..0000000000 Binary files a/BizHawk.Client.EmuHawk/config/ControllerImages/A78Joystick.png and /dev/null differ diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/C64Joystick.png b/BizHawk.Client.EmuHawk/config/ControllerImages/C64Joystick.png deleted file mode 100644 index 3069753d0c..0000000000 Binary files a/BizHawk.Client.EmuHawk/config/ControllerImages/C64Joystick.png and /dev/null differ diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/C64Keyboard.png b/BizHawk.Client.EmuHawk/config/ControllerImages/C64Keyboard.png deleted file mode 100644 index 2c87e91ce0..0000000000 Binary files a/BizHawk.Client.EmuHawk/config/ControllerImages/C64Keyboard.png and /dev/null differ diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/GBA_Controller.png b/BizHawk.Client.EmuHawk/config/ControllerImages/GBA_Controller.png deleted file mode 100644 index 1311133ffd..0000000000 Binary files a/BizHawk.Client.EmuHawk/config/ControllerImages/GBA_Controller.png and /dev/null differ diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/GBController.png b/BizHawk.Client.EmuHawk/config/ControllerImages/GBController.png deleted file mode 100644 index 2bbbd380b5..0000000000 Binary files a/BizHawk.Client.EmuHawk/config/ControllerImages/GBController.png and /dev/null differ diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/GENController.png b/BizHawk.Client.EmuHawk/config/ControllerImages/GENController.png deleted file mode 100644 index 898b8cac19..0000000000 Binary files a/BizHawk.Client.EmuHawk/config/ControllerImages/GENController.png and /dev/null differ diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/IntVController.png b/BizHawk.Client.EmuHawk/config/ControllerImages/IntVController.png deleted file mode 100644 index 3f52174551..0000000000 Binary files a/BizHawk.Client.EmuHawk/config/ControllerImages/IntVController.png and /dev/null differ diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/Lynx.png b/BizHawk.Client.EmuHawk/config/ControllerImages/Lynx.png deleted file mode 100644 index ab135c6d7d..0000000000 Binary files a/BizHawk.Client.EmuHawk/config/ControllerImages/Lynx.png and /dev/null differ diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/N64.png b/BizHawk.Client.EmuHawk/config/ControllerImages/N64.png deleted file mode 100644 index 85255b7a73..0000000000 Binary files a/BizHawk.Client.EmuHawk/config/ControllerImages/N64.png and /dev/null differ diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/NES_Controller.png b/BizHawk.Client.EmuHawk/config/ControllerImages/NES_Controller.png deleted file mode 100644 index 242c232a0f..0000000000 Binary files a/BizHawk.Client.EmuHawk/config/ControllerImages/NES_Controller.png and /dev/null differ diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/PCEngineController.png b/BizHawk.Client.EmuHawk/config/ControllerImages/PCEngineController.png deleted file mode 100644 index d2637c411e..0000000000 Binary files a/BizHawk.Client.EmuHawk/config/ControllerImages/PCEngineController.png and /dev/null differ diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/PSX-Original-Controller.png b/BizHawk.Client.EmuHawk/config/ControllerImages/PSX-Original-Controller.png deleted file mode 100644 index 6dd8398dae..0000000000 Binary files a/BizHawk.Client.EmuHawk/config/ControllerImages/PSX-Original-Controller.png and /dev/null differ diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/SMSController.png b/BizHawk.Client.EmuHawk/config/ControllerImages/SMSController.png deleted file mode 100644 index 5a735e54ef..0000000000 Binary files a/BizHawk.Client.EmuHawk/config/ControllerImages/SMSController.png and /dev/null differ diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/SNES_Controller.png b/BizHawk.Client.EmuHawk/config/ControllerImages/SNES_Controller.png deleted file mode 100644 index 86e997787f..0000000000 Binary files a/BizHawk.Client.EmuHawk/config/ControllerImages/SNES_Controller.png and /dev/null differ diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/SaturnController.jpg b/BizHawk.Client.EmuHawk/config/ControllerImages/SaturnController.jpg deleted file mode 100644 index 7888841362..0000000000 Binary files a/BizHawk.Client.EmuHawk/config/ControllerImages/SaturnController.jpg and /dev/null differ diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/TI83Calculator.png b/BizHawk.Client.EmuHawk/config/ControllerImages/TI83Calculator.png deleted file mode 100644 index 3036917333..0000000000 Binary files a/BizHawk.Client.EmuHawk/config/ControllerImages/TI83Calculator.png and /dev/null differ diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/TI83_Controller.png b/BizHawk.Client.EmuHawk/config/ControllerImages/TI83_Controller.png deleted file mode 100644 index 51e57f97a1..0000000000 Binary files a/BizHawk.Client.EmuHawk/config/ControllerImages/TI83_Controller.png and /dev/null differ diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/WonderSwanColor.png b/BizHawk.Client.EmuHawk/config/ControllerImages/WonderSwanColor.png deleted file mode 100644 index 996fb672ef..0000000000 Binary files a/BizHawk.Client.EmuHawk/config/ControllerImages/WonderSwanColor.png and /dev/null differ diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/colecovisioncontroller.png b/BizHawk.Client.EmuHawk/config/ControllerImages/colecovisioncontroller.png deleted file mode 100644 index e865a07b86..0000000000 Binary files a/BizHawk.Client.EmuHawk/config/ControllerImages/colecovisioncontroller.png and /dev/null differ diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/psx_dualshock.png b/BizHawk.Client.EmuHawk/config/ControllerImages/psx_dualshock.png deleted file mode 100644 index 2fe9d86ad4..0000000000 Binary files a/BizHawk.Client.EmuHawk/config/ControllerImages/psx_dualshock.png and /dev/null differ diff --git a/BizHawk.Client.EmuHawk/config/DisplayConfigLite.Designer.cs b/BizHawk.Client.EmuHawk/config/DisplayConfigLite.Designer.cs index 8d6155f93d..14cb33e0ef 100644 --- a/BizHawk.Client.EmuHawk/config/DisplayConfigLite.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/DisplayConfigLite.Designer.cs @@ -59,8 +59,6 @@ this.label3 = new System.Windows.Forms.Label(); this.txtCustomARWidth = new System.Windows.Forms.TextBox(); this.rbUseCustom = new System.Windows.Forms.RadioButton(); - this.label2 = new System.Windows.Forms.Label(); - this.checkSnowyNullEmulator = new System.Windows.Forms.CheckBox(); this.rbOpenGL = new System.Windows.Forms.RadioButton(); this.label5 = new System.Windows.Forms.Label(); this.tabControl1 = new System.Windows.Forms.TabControl(); @@ -440,25 +438,6 @@ this.rbUseCustom.Text = "Use custom size:"; this.rbUseCustom.UseVisualStyleBackColor = true; // - // label2 - // - this.label2.Location = new System.Drawing.Point(6, 128); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(398, 27); - this.label2.TabIndex = 17; - this.label2.Text = "Some people think the white noise is a great idea, and some people don\'t. Disabli" + - "ng this displays black instead."; - // - // checkSnowyNullEmulator - // - this.checkSnowyNullEmulator.AutoSize = true; - this.checkSnowyNullEmulator.Location = new System.Drawing.Point(6, 108); - this.checkSnowyNullEmulator.Name = "checkSnowyNullEmulator"; - this.checkSnowyNullEmulator.Size = new System.Drawing.Size(159, 17); - this.checkSnowyNullEmulator.TabIndex = 16; - this.checkSnowyNullEmulator.Text = "Enable Snowy Null Emulator"; - this.checkSnowyNullEmulator.UseVisualStyleBackColor = true; - // // rbOpenGL // this.rbOpenGL.AutoSize = true; @@ -760,8 +739,6 @@ // tpMisc // this.tpMisc.Controls.Add(this.groupBox5); - this.tpMisc.Controls.Add(this.label2); - this.tpMisc.Controls.Add(this.checkSnowyNullEmulator); this.tpMisc.Location = new System.Drawing.Point(4, 22); this.tpMisc.Name = "tpMisc"; this.tpMisc.Size = new System.Drawing.Size(528, 291); @@ -1054,8 +1031,6 @@ private System.Windows.Forms.RadioButton rbUseRaw; private System.Windows.Forms.RadioButton rbUseSystem; private System.Windows.Forms.GroupBox grpARSelection; - private System.Windows.Forms.CheckBox checkSnowyNullEmulator; - private System.Windows.Forms.Label label2; private System.Windows.Forms.Label lblScanlines; private System.Windows.Forms.TextBox txtCustomARHeight; private System.Windows.Forms.Label label3; diff --git a/BizHawk.Client.EmuHawk/config/DisplayConfigLite.cs b/BizHawk.Client.EmuHawk/config/DisplayConfigLite.cs index cd1530a72e..34f8bc09e3 100644 --- a/BizHawk.Client.EmuHawk/config/DisplayConfigLite.cs +++ b/BizHawk.Client.EmuHawk/config/DisplayConfigLite.cs @@ -1,7 +1,6 @@ using System; using System.IO; using System.Windows.Forms; -using BizHawk.Emulation.Common; using BizHawk.Client.Common; using BizHawk.Common; @@ -58,16 +57,6 @@ namespace BizHawk.Client.EmuHawk nudPrescale.Value = Global.Config.DispPrescale; - // null emulator config hack - { - NullEmulator.NullEmulatorSettings s; - if (Global.Emulator is NullEmulator) - s = (Global.Emulator as dynamic).GetSettings(); - else - s = (NullEmulator.NullEmulatorSettings)Global.Config.GetCoreSettings(); - checkSnowyNullEmulator.Checked = s.SnowyDisplay; - } - if (Global.Config.DispManagerAR == Config.EDispManagerAR.None) rbUseRaw.Checked = true; else if (Global.Config.DispManagerAR == Config.EDispManagerAR.System) @@ -145,20 +134,6 @@ namespace BizHawk.Client.EmuHawk if (rbDisplayMinimal.Checked) Global.Config.DispSpeedupFeatures = 1; if (rbDisplayAbsoluteZero.Checked) Global.Config.DispSpeedupFeatures = 0; - // HACK:: null emulator's settings don't persist to config normally - { - NullEmulator.NullEmulatorSettings s; - if (Global.Emulator is NullEmulator) - s = (Global.Emulator as dynamic).GetSettings(); - else - s = (NullEmulator.NullEmulatorSettings)Global.Config.GetCoreSettings(); - s.SnowyDisplay = checkSnowyNullEmulator.Checked; - - Global.Config.PutCoreSettings(s); - if (Global.Emulator is NullEmulator) - (Global.Emulator as dynamic).PutSettings(s); - } - if (rbUseRaw.Checked) Global.Config.DispManagerAR = Config.EDispManagerAR.None; else if (rbUseSystem.Checked) diff --git a/BizHawk.Client.EmuHawk/config/FirmwaresConfig.Designer.cs b/BizHawk.Client.EmuHawk/config/FirmwaresConfig.Designer.cs index ee81cbecb3..2d0fed6a9b 100644 --- a/BizHawk.Client.EmuHawk/config/FirmwaresConfig.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/FirmwaresConfig.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FirmwaresConfig)); this.imageList1 = new System.Windows.Forms.ImageList(this.components); this.lvFirmwares = new System.Windows.Forms.ListView(); this.columnHeader5 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); @@ -216,7 +215,7 @@ this.tbbGroup.CheckOnClick = true; this.tbbGroup.CheckState = System.Windows.Forms.CheckState.Checked; this.tbbGroup.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; - this.tbbGroup.Image = ((System.Drawing.Image)(resources.GetObject("tbbGroup.Image"))); + this.tbbGroup.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.placeholder_bitmap; this.tbbGroup.ImageTransparentColor = System.Drawing.Color.Magenta; this.tbbGroup.Name = "tbbGroup"; this.tbbGroup.Size = new System.Drawing.Size(44, 22); @@ -231,7 +230,7 @@ // tbbScan // this.tbbScan.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; - this.tbbScan.Image = ((System.Drawing.Image)(resources.GetObject("tbbScan.Image"))); + this.tbbScan.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.placeholder_bitmap; this.tbbScan.ImageTransparentColor = System.Drawing.Color.Magenta; this.tbbScan.Name = "tbbScan"; this.tbbScan.Size = new System.Drawing.Size(36, 22); @@ -241,7 +240,7 @@ // tbbOrganize // this.tbbOrganize.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; - this.tbbOrganize.Image = ((System.Drawing.Image)(resources.GetObject("tbbOrganize.Image"))); + this.tbbOrganize.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.placeholder_bitmap; this.tbbOrganize.ImageTransparentColor = System.Drawing.Color.Magenta; this.tbbOrganize.Name = "tbbOrganize"; this.tbbOrganize.Size = new System.Drawing.Size(58, 22); @@ -251,7 +250,7 @@ // tbbImport // this.tbbImport.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; - this.tbbImport.Image = ((System.Drawing.Image)(resources.GetObject("tbbImport.Image"))); + this.tbbImport.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.placeholder_bitmap; this.tbbImport.ImageTransparentColor = System.Drawing.Color.Magenta; this.tbbImport.Name = "tbbImport"; this.tbbImport.Size = new System.Drawing.Size(47, 22); @@ -262,7 +261,7 @@ // this.tbbClose.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; this.tbbClose.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; - this.tbbClose.Image = ((System.Drawing.Image)(resources.GetObject("tbbClose.Image"))); + this.tbbClose.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.placeholder_bitmap; this.tbbClose.ImageTransparentColor = System.Drawing.Color.Magenta; this.tbbClose.Margin = new System.Windows.Forms.Padding(0, 1, 2, 2); this.tbbClose.Name = "tbbClose"; @@ -282,7 +281,7 @@ this.tbbCloseReload.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; this.tbbCloseReload.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; this.tbbCloseReload.Enabled = false; - this.tbbCloseReload.Image = ((System.Drawing.Image)(resources.GetObject("tbbCloseReload.Image"))); + this.tbbCloseReload.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.placeholder_bitmap; this.tbbCloseReload.ImageTransparentColor = System.Drawing.Color.Magenta; this.tbbCloseReload.Name = "tbbCloseReload"; this.tbbCloseReload.Size = new System.Drawing.Size(129, 22); @@ -294,7 +293,7 @@ // tbbOpenFolder // this.tbbOpenFolder.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; - this.tbbOpenFolder.Image = ((System.Drawing.Image)(resources.GetObject("tbbOpenFolder.Image"))); + this.tbbOpenFolder.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.placeholder_bitmap; this.tbbOpenFolder.ImageTransparentColor = System.Drawing.Color.Magenta; this.tbbOpenFolder.Name = "tbbOpenFolder"; this.tbbOpenFolder.Size = new System.Drawing.Size(128, 22); diff --git a/BizHawk.Client.EmuHawk/config/FirmwaresConfig.resx b/BizHawk.Client.EmuHawk/config/FirmwaresConfig.resx index 18c3d121ad..08258773f7 100644 --- a/BizHawk.Client.EmuHawk/config/FirmwaresConfig.resx +++ b/BizHawk.Client.EmuHawk/config/FirmwaresConfig.resx @@ -126,112 +126,6 @@ 122, 17 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== - - 221, 17 diff --git a/BizHawk.Client.EmuHawk/config/GB/CGBColorChooserForm.Designer.cs b/BizHawk.Client.EmuHawk/config/GB/CGBColorChooserForm.Designer.cs index c5ddb59dad..860243695c 100644 --- a/BizHawk.Client.EmuHawk/config/GB/CGBColorChooserForm.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/GB/CGBColorChooserForm.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CGBColorChooserForm)); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.radioButton6 = new System.Windows.Forms.RadioButton(); this.radioButton5 = new System.Windows.Forms.RadioButton(); @@ -183,7 +182,7 @@ this.Controls.Add(this.groupBox2); this.Controls.Add(this.groupBox1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.gambatte_MultiSize; this.Name = "CGBColorChooserForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Game Boy Color Palette Config"; diff --git a/BizHawk.Client.EmuHawk/config/GB/CGBColorChooserForm.resx b/BizHawk.Client.EmuHawk/config/GB/CGBColorChooserForm.resx index f6a0374127..29dcb1b3a3 100644 --- a/BizHawk.Client.EmuHawk/config/GB/CGBColorChooserForm.resx +++ b/BizHawk.Client.EmuHawk/config/GB/CGBColorChooserForm.resx @@ -117,161 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAQAICAAAAEAIACoEAAARgAAACAgAAABAAgAqAgAAO4QAAAQEAAAAQAgAGgEAACWGQAAEBAAAAEA - CABoBQAA/h0AACgAAAAgAAAAQAAAAAEAIAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAB7e3tAfHx8v3d3d/9tbW3/aWlp/2lpaf9paWn/aWlp/2lpaf9paWn/aWlp/2lpaf9paWn/aWlp/2lp - af9paWn/aWlp/2lpaf9oaGj/ZmZm/3BwcP+EhIT/jo6Ov4+Pj0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAHt7e0B6enq/fX19/4GBgf+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4KCgv+BgYH/fn5+/3x8 - fP98fHz/fn5+/4GBgf+CgoL/goKC/3x8fP9ycnL/dXV1/4WFhf+MjIzPiIiIcISEhDB/f38QAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAd3d3QHl5eb+JiYn/qKio/7i4uP+3t7f/t7e3/7e3t/+3t7f/tra2/7Gx - sf+oqKj/o6Oj/6SkpP+pqan/s7Oz/7a2tv+0tLT/paWl/4iIiP9+fn7/h4eH/4mJie+FhYXPgoKCj4SE - hDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3dAeHh4v4+Pj/+7u7v/0dHR/8/Pz//Pz8//0NDQ/9HR - 0f/Q0ND/ycnJ/729vf+3t7f/uLi4/729vv/IyMr/zs7P/83Nzv+9vb3/np6e/46Ojv+NjY3/ioqK/4KC - gv9+fn6/f39/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHd3d0B4eHi/jo6O/7q6uv/Ozs7/ysrK/8rK - yv/Ozs7/0NDQ/9DQ0P/Kysr/vb29/7e3t/+3t7f/urq8/8LCx//IyM3/zMzO/8TExf+ysrL/o6Oj/5iY - mP+MjIz/fn5+/3Z2dr93d3dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3QHZ2dr+JiYn/ra2t/7e3 - t/+lpaX/p6en/7y8vP/Jycn/zs7O/8zMzP/Dw8L/urq9/7Kyu/+oqLz/nZ3C/6Cgxf+xscf/ubnD/7i4 - vP+vr7D/oKCh/5OTlP+JiYr/hYWFz4aGhnCKioowj4+PEAAAAAAAAAAAAAAAAAAAAAB3d3dAdXV1v4CA - gP+VlZX/ioqK/2BgYP9mZmb/mpqa/7u7u//Jycn/z8/O/8zMzP/AwMj/qqrE/4iIv/9ZWbn/Vla3/39/ - uP+cnLn/rq66/7GxtP+kpKf/n5+i/6Skpf+hoaHvkpKSz4uLi4+KioowAAAAAAAAAAAAAAAAAAAAAHNz - c0B0dHS/dHR0/3R0dP9gYGD/NjY2/zs7O/9wcHD/m5ub/7y8vP/Ozs7/0NDQ/8PDzv+mpsn/eHjD/zg4 - u/8xMbf/ZGS1/4SEtf+Rkbf/lJS1/4yMrf+UlK7/ra22/62trv+Wlpb/ioqKv4uLi0AAAAAAAAAAAAAA - AAAAAAAAb29vQHBwcL9jY2P/S0tL/zY2Nv8mJib/KCgo/zw8PP9nZ2f/qKio/8rKyv/Pz87/wsLO/6am - yv94eMj/ODjJ/zAwxf9hYb7/cXG4/19fsv9YWLH/WVmz/3Jyt/+jo73/sLCy/5eXmP+Kioq/i4uLQAAA - AAAAAAAAAAAAAAAAAABvb29AcHBwv2VlZf9QUFD/PDw8/ygoKP8pKSn/Pz8//2pqav+pqan/ysrK/87O - zv/Gxs//sLDM/42NzP9cXND/VFTN/3d3w/90dLv/S0u0/zo6tf9AQL3/YWHC/5+fwv+xsbX/l5eZ/4qK - ir+Li4tAAAAAAAAAAAAAAAAAAAAAAHNzc0B1dXW/enp6/4WFhf9wcHD/PDw8/z8/P/94eHj/o6Oj/7+/ - v//Ozs7/0NDQ/83N0P/Gxs//uLjP/6Sk0f+ens3/paXD/42Nvv9VVb3/OzvB/0BAzP9hYc7/n5/H/7Gx - tf+Xl5n/ioqKv4uLi0AAAAAAAAAAAAAAAAAAAAAAd3d3QHh4eL+Hh4f/pqam/5ubm/9nZ2f/ampq/6Oj - o//ExMT/zMzM/9DQ0P/Q0ND/0dHR/9HR0f/OztH/ysrS/8bGzv/Cwsf/p6fE/3Z2xf9fX8r/YmLT/3t7 - 0/+oqMj/srK1/5iYmf+Kioq/i4uLQAAAAAAAAAAAAAAAAAAAAAB3d3dAeHh4v4yMjP+0tLT/vb29/6io - qP+pqan/v7+//8zMzP/Pz8//0NDQ/9DQ0P/R0dH/0dHR/9DQ0f/OztH/zc3Q/8zMzf/Bwcz/r6/N/6am - z/+oqNP/r6/Q/7u7x/+0tLX/mJiZ/4qKir+Li4tAAAAAAAAAAAAAAAAAAAAAAHd3d0B4eHi/jo6O/7q6 - uv/Nzc3/yMjI/8fHx//Ly8v/zc3N/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/8zM - zv/Kys7/ycnP/8nJz//IyMz/xMTG/7W1tf+ZmZn/ioqKv4uLi0AAAAAAAAAAAAAAAAAAAAAAd3d3QHh4 - eL+Ojo7/uLi4/8zMzP/IyMj/xsbG/8fHx//IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jI - yP/IyMj/yMjI/8fHyP/Hx8n/x8fJ/8bGyP/ExMT/tbW1/5mZmf+Kioq/i4uLQAAAAAAAAAAAAAAAAAAA - AAB3d3dAdnZ2v4aGhv+jo6P/r6+v/6qqqv+nqKj/pqio/6WpqP+lqaj/pamo/6WpqP+lqaj/pamo/6Wp - qP+lqaj/pamo/6WpqP+mqaj/pqio/6eoqP+oqKj/rKys/7Kysv+rq6v/lZWV/4qKir+Li4tAAAAAAAAA - AAAAAAAAAAAAAHNzc0B0dHS/dnZ2/3t7e/94eXn/b3Bw/2lsbP9nbm3/ZW9t/2Vvbf9lb23/ZW9t/2Vv - bf9lb23/ZW9t/2Vvbf9lb23/ZW9t/2Zvbf9obmz/am1s/2xtbP94eHj/j4+P/5eXl/+Pj4//ioqKv4uL - i0AAAAAAAAAAAAAAAAAAAAAAb29vQHFxcb9sbGz/Y2Nj/11eXv9bXV3/UWNf/0FtY/84c2b/NnNm/zZz - Zv82c2b/NnNm/zZzZv82c2b/NnNm/zZzZv82c2b/O3Bl/0RrYv9OZV//Vl5c/2VkZf95eHn/hYWF/4mJ - if+Kioq/i4uLQAAAAAAAAAAAAAAAAAAAAABra2tAbW1tv2dnZ/9bW1v/XV9e/2xzcf9eioD/NKWM/x2z - kv8atJP/GLWT/xi1k/8YtZP/GLWT/xi1k/8YtZP/GLWT/xi1k/8krZD/PZ6J/1OOgf9oe3f/cXBx/25u - bv90dHT/hISE/4qKir+Li4tAAAAAAAAAAAAAAAAAAAAAAGtra0BsbGy/ZWVl/1dXV/9cX1//dH17/2Se - kf8swaD/DdSp/wnWqv8H16r/B9eq/wfXqv8H16r/B9eq/wfXqv8H16r/B9eq/xfNpv83uZ3/VaOS/3GK - hf93d3f/aWlp/2xsbP+BgYH/jIyMv4uLi0AAAAAAAAAAAAAAAAAAAAAAa2trQGxsbL9lZWX/V1dX/1xf - Xv90fXv/Y5+R/yjDof8J1qr/BNir/wLZq/8C2av/Atmr/wLZq/8C2av/Atmr/wLZq/8C2av/E8+m/zS6 - nf9To5L/cIqE/3d3d/9paWn/bGxs/4GBgf+MjIy/i4uLQAAAAAAAAAAAAAAAAAAAAABra2tAbGxsv2Vl - Zf9XV1f/XF9e/3R9e/9in5L/JsOi/wbXqv8C2av/ANus/wDbrP8A26z/ANus/wDbrP8A26z/ANus/wDb - rP8R0Kf/M7ud/1Kkkv9wioT/d3d3/2lpaf9sbGz/gYGB/4yMjL+Li4tAAAAAAAAAAAAAAAAAAAAAAGtr - a0BsbGy/ZWVl/1dXV/9cX17/dH17/2Kfkv8mw6L/Bteq/wLZq/8A26z/ANus/wDbrP8A26z/ANus/wDb - rP8A26z/ANus/xHQp/8zu53/UqSS/3CKhP93d3f/aWlp/2xsbP+BgYH/jIyMv4uLi0AAAAAAAAAAAAAA - AAAAAAAAa2trQGxsbL9lZWX/V1dX/1xfXv90fXv/Yp+S/ybDov8G16r/Atmr/wDbrP8A26z/ANus/wDb - rP8A26z/ANus/wDbrP8A26z/EdCn/zO7nf9SpJL/cIqE/3d3d/9paWn/bGxs/4GBgf+MjIy/i4uLQAAA - AAAAAAAAAAAAAAAAAABra2tAbGxsv2VlZf9XV1f/XF9e/3R9e/9in5L/JsOi/wbXqv8C2av/ANus/wDb - rP8A26z/ANus/wDbrP8A26z/ANus/wDbrP8R0Kf/M7ud/1Kkkv9wioT/d3d3/2lpaf9sbGz/gYGB/4yM - jL+Li4tAAAAAAAAAAAAAAAAAAAAAAGtra0BsbGy/ZWVl/1dXV/9cX17/dH17/2Ofkf8ow6H/Cdaq/wTY - q/8C2qv/Atqr/wLaq/8C2qv/Atqr/wLaq/8C2qv/Atqr/xPPpv80up3/U6OS/3CKhP93d3f/aWlp/2xs - bP+BgYH/jIyMv4uLi0AAAAAAAAAAAAAAAAAAAAAAa2trQGxsbL9lZWX/V1dX/1xfX/90fXv/ZJ6R/yzB - oP8N1Kn/Cdaq/wfYqv8H2Kr/B9iq/wfYqv8H2Kr/B9iq/wfYqv8H2Kr/F82m/ze5nf9Vo5L/cYqE/3d3 - d/9paWn/bGxs/4GBgf+MjIy/i4uLQAAAAAAAAAAAAAAAAAAAAABra2tAbW1tv2dnZ/9bW1v/XWBf/210 - cv9fi4H/NaaN/x60k/8btpT/GbeU/xm3lP8Zt5T/GbeU/xm3lP8Zt5T/GbeU/xm3lP8lr5H/Pp+K/1SP - gv9pfHj/cnFx/25ubv90dHT/hISE/4qKir+Li4tAAAAAAAAAAAAAAAAAAAAAAG9vb0BxcXG/bGxs/2Rk - ZP9fYGD/XWBg/1RmYv9EcGb/O3Zp/zl2af85d2n/OXdp/zl3af85d2n/OXdp/zl3af85d2n/OXdp/z5z - aP9HbWX/UWdi/1lhX/9nZ2f/enp6/4WFhf+JiYn/ioqKv4uLi0AAAAAAAAAAAAAAAAAAAAAAc3NzQHV1 - db9xcXH/aGho/2BgYP9XWFj/UVRU/09WVf9NV1X/TVdV/01XVf9NV1X/TVdV/01XVf9NV1X/TVdV/01X - Vf9NV1X/TldV/1BWVP9SVVT/VFVU/2FhYf95eXn/hoaG74iIiM+Li4uPioqKMAAAAAAAAAAAAAAAAAAA - AAB3d3dAeXl5v3R0dP9oaGj/YGBg/1paWv9XWFj/VlhY/1VZWP9VWVj/VVlY/1VZWP9VWVj/VVlY/1VZ - WP9VWVj/VVlY/1VZWP9WWVj/VlhY/1dYWP9YWFj/X19f/2xsbP91dXXPfX19cIqKijCPj48QAAAAAAAA - AAAAAAAAAAAAAHt7e0B8fHy/dXV1/2hoaP9gYGD/XFxc/1paWv9aWlr/Wlpa/1paWv9aWlr/Wlpa/1pa - Wv9aWlr/Wlpa/1paWv9aWlr/Wlpa/1paWv9aWlr/Wlpa/1paWv9eXl7/ZmZm/2lpab9ra2tAAAAAAAAA - AAAAAAAA8AAAP/AAAD/wAAAP8AAAD/AAAA/wAAAP8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AA - AAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AA - AAPwAAAD8AAAD/AAAA8oAAAAIAAAAEAAAAABAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/zMz - M/82Njb/ODg4/z57bv87fW//OH9v/zd/cP9DQ0P/SEhI/01NTf9MX1v/T15b/1FRUf9XV1f/VFlY/1dY - WP9TXFr/UF5b/1RcWv9YWln/Wlpa/1ldXP9aXFz/XFxc/11eXv9KYVz/TGBc/11lY/9UbWf/XWhm/1Jt - aP9HdWv/RnZs/1dzbf9Zcm3/THpw/0t8cf9gYGD/YGJi/2JiYv9hZGP/YWVk/2FmZP9kZGT/ZmZm/2Nq - af9ibmv/aGho/2pqav9pbGv/bGxs/25ubv9jcm//ZHNv/29xcf9tcnH/bnNy/2R6dv9ofHf/aHx4/2h/ - ev9sf3v/b357/3BwcP9ycnL/cXd2/3R0dP92dnb/cnl3/3N8ev90fHr/eHh4/3p6ev95fHv/en18/3x8 - fP9+fn7/NoBw/zuFdf88hHT/Q4Bz/0CCdP9Whnz/Uol9/2qAfP9sgHz/Skq5/0tLvP9PT77/UVG//1pa - uP9jY7T/Z2e1/2pqtv9mZrn/YWG+/2Rkv/9vb7n/bW28/3FxvP99fbj/SkrD/05Owv9RUcf/UlLI/25u - wf9pacr/dXXD/3l5xP9wcMr/cXHO/3p6yf87m4b/PpiE/zych/8crY7/HqyN/x2vj/8ero//K6SK/yym - i/8mqIv/IKuN/yepjP8hrY7/OLKX/zS2mf84spj/M7ud/zW6nf8wvp//Lr+g/1Sdjf9Ymov/WJqM/1if - kP9piIL/aoiB/2qMhf9To5H/V6CQ/1Kkkv8ewp//D8yj/wvOpP8OzaT/DM6k/w7OpP8Yx6H/EM2j/xbN - pv8Wzqb/Gcyl/wbXqv8P0qj/CNaq/wPZq/8E2Kv/Btiq/wDarP8R0aj/gICA/4KCgv+DhIT/hISE/4aG - hv+IiIj/ioqK/4yMjP+Ojo7/j4+Q/5CQkP+SkpL/lJSU/5aWl/+YmJj/mpqa/5ubnf+cnJ3/np6i/5yc - pP+Tk6//n5+p/4qKsf+Kirf/gYG5/5WVv/+amrr/nqKh/6Ghof+jpKT/pKSk/6ampv+lpan/pqau/6mp - qf+rq67/ra2t/6KisP+lpbL/qamz/66usv+mprn/pKS+/7CwsP+1tbX/srK4/7e3uv+xsb7/t7e+/7i4 - uP+9vb7/hobA/4ODxv+KisD/h4fP/5aWw/+amsH/nJzD/5iYxv+QkM3/mprM/6Kixf+oqMT/o6PJ/6Wl - y/+goM7/qqrN/7KywP+zs8X/u7vA/76+wf+6usX/vb3H/7e3yf+wsM3/u7vL/7+/yv++vs3/oKDQ/7Gx - 0P+/wMD/wMHB/8TExf/Bwcr/wMDN/8bGzf/Jycn/y8vN/83Nzf/BwdD/ycnQ/83N0P/Q0ND/AAAA/wBM - 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 - qv8K1qr/Ctaq/0mvmf9/fn//YmJi/4yMjP8AAAAAAAAAAAAAAABsbGz/UFBQ/4CNiv8J1qr/ANus/wDb - rP8A26z/ANus/wDbrP9EsZn/f35+/2JiYv+MjIz/AAAAAAAAAAAAAAAAbGxs/1BQUP+AjYr/Cdaq/wDb - rP8A26z/ANus/wDbrP8A26z/RLGZ/39+fv9iYmL/jIyM/wAAAAAAAAAAAAAAAGxsbP9QUFD/gI2K/wnW - qv8A26z/ANus/wDbrP8A26z/ANus/0Sxmf9/fn7/YmJi/4yMjP8AAAAAAAAAAAAAAABsbGz/UVFR/4GN - iv8S0qj/Cteq/wrXqv8K16r/Cteq/wrXqv9Jr5n/f35+/2JiYv+MjIz/AAAAAAAAAAAAAAAAc3Nz/2Vl - Zf9RUlL/SldU/0lXVP9JV1T/SVdU/0lXVP9JV1T/TlRT/1NTU/+Pj4//i4uL/wAAAAAAAAAAAAAAAHx8 - fP9iYmL/Wlpa/1paWv9aWlr/Wlpa/1paWv9aWlr/Wlpa/1paWv9bW1v/ampq/wAAAAAAAAAAwAcAAMAD - AADAAwAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAMAACgA - AAAQAAAAIAAAAAEACAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAcHBz/IyMj/yQkJP8lJSX/TU5O/09P - T/9KUU//RVNQ/0ZTUP9OVFP/SVdU/0pXVP9QUFD/UVFR/1FSUv9TU1P/Wlpa/1tbW/9iYmL/Y2Nj/2Vl - Zf9mZmb/aWlp/2pqav9sbGz/bm5u/3Nzc/90dHT/dnZ2/3h4eP95eXn/fHx8/39+fv8YGK//Nzes/0ND - uv94eL7/GBjS/zo6wv9CQtr/Sa+Z/0Sxmf8J1qr/Ctaq/wDbrP8S0qj/gYGB/4ODg/+AjYr/gY2K/4uL - i/+MjIz/jo6O/4+Pj/+QkJD/lpaW/4CAsv+goKX/rKys/62trf+2trb/t7e3/7i4uP+5ubn/u7u7/7i4 - vf+6ur//mJjH/5iYyf++vsP/vr7E/8PDw//Gxsb/x8fH/8PDzP/Nzc3/zs7P/8/Pz//GxtP/ysrS/8vL - 0//Q0ND/0dHR/9LS0f/T09P//////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VVUfFhYWFhYWFxYVNVVVVVVV - HlRTU009P1NLLjIvVVVVVR1RSFFSPjxKTD03G1VVVVUcNgE6UVNDIThBOT4yVVVVGQIAA0hSRCUkIiNF - MlVVVR07A0BRUlJOQiYnRjJVVVUdUkhRUlJSUlJPUEcyVVVVHktISEhISEhISElHMlVVVRoTBAgHBwcH - BwYFNDJVVVUYDTEtKysrKysoIBIzVVVVGAwwKiwsLCwsKSASM1VVVRgMMCosLCwsLCkgEjNVVVUYDDAq - LCwsLCwpIBIzVVVVGA0xLSsrKysrKCASM1VVVRoUDgsKCgoKCgkPNTJVVVUfEhAQEBAQEBAQERdVVcAH - AADAAwAAwAMAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMAD - AAA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/GB/ColorChooserForm.Designer.cs b/BizHawk.Client.EmuHawk/config/GB/ColorChooserForm.Designer.cs index ba9a874de5..f9f5212dd4 100644 --- a/BizHawk.Client.EmuHawk/config/GB/ColorChooserForm.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/GB/ColorChooserForm.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ColorChooserForm)); this.panel1 = new System.Windows.Forms.Panel(); this.panel2 = new System.Windows.Forms.Panel(); this.panel3 = new System.Windows.Forms.Panel(); @@ -315,7 +314,7 @@ this.Controls.Add(this.panel3); this.Controls.Add(this.panel2); this.Controls.Add(this.panel1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.gambatte_MultiSize; this.MinimumSize = new System.Drawing.Size(310, 264); this.Name = "ColorChooserForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; diff --git a/BizHawk.Client.EmuHawk/config/GB/ColorChooserForm.resx b/BizHawk.Client.EmuHawk/config/GB/ColorChooserForm.resx index f6a0374127..29dcb1b3a3 100644 --- a/BizHawk.Client.EmuHawk/config/GB/ColorChooserForm.resx +++ b/BizHawk.Client.EmuHawk/config/GB/ColorChooserForm.resx @@ -117,161 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAQAICAAAAEAIACoEAAARgAAACAgAAABAAgAqAgAAO4QAAAQEAAAAQAgAGgEAACWGQAAEBAAAAEA - CABoBQAA/h0AACgAAAAgAAAAQAAAAAEAIAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAB7e3tAfHx8v3d3d/9tbW3/aWlp/2lpaf9paWn/aWlp/2lpaf9paWn/aWlp/2lpaf9paWn/aWlp/2lp - af9paWn/aWlp/2lpaf9oaGj/ZmZm/3BwcP+EhIT/jo6Ov4+Pj0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAHt7e0B6enq/fX19/4GBgf+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4KCgv+BgYH/fn5+/3x8 - fP98fHz/fn5+/4GBgf+CgoL/goKC/3x8fP9ycnL/dXV1/4WFhf+MjIzPiIiIcISEhDB/f38QAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAd3d3QHl5eb+JiYn/qKio/7i4uP+3t7f/t7e3/7e3t/+3t7f/tra2/7Gx - sf+oqKj/o6Oj/6SkpP+pqan/s7Oz/7a2tv+0tLT/paWl/4iIiP9+fn7/h4eH/4mJie+FhYXPgoKCj4SE - hDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3dAeHh4v4+Pj/+7u7v/0dHR/8/Pz//Pz8//0NDQ/9HR - 0f/Q0ND/ycnJ/729vf+3t7f/uLi4/729vv/IyMr/zs7P/83Nzv+9vb3/np6e/46Ojv+NjY3/ioqK/4KC - gv9+fn6/f39/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHd3d0B4eHi/jo6O/7q6uv/Ozs7/ysrK/8rK - yv/Ozs7/0NDQ/9DQ0P/Kysr/vb29/7e3t/+3t7f/urq8/8LCx//IyM3/zMzO/8TExf+ysrL/o6Oj/5iY - mP+MjIz/fn5+/3Z2dr93d3dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3QHZ2dr+JiYn/ra2t/7e3 - t/+lpaX/p6en/7y8vP/Jycn/zs7O/8zMzP/Dw8L/urq9/7Kyu/+oqLz/nZ3C/6Cgxf+xscf/ubnD/7i4 - vP+vr7D/oKCh/5OTlP+JiYr/hYWFz4aGhnCKioowj4+PEAAAAAAAAAAAAAAAAAAAAAB3d3dAdXV1v4CA - gP+VlZX/ioqK/2BgYP9mZmb/mpqa/7u7u//Jycn/z8/O/8zMzP/AwMj/qqrE/4iIv/9ZWbn/Vla3/39/ - uP+cnLn/rq66/7GxtP+kpKf/n5+i/6Skpf+hoaHvkpKSz4uLi4+KioowAAAAAAAAAAAAAAAAAAAAAHNz - c0B0dHS/dHR0/3R0dP9gYGD/NjY2/zs7O/9wcHD/m5ub/7y8vP/Ozs7/0NDQ/8PDzv+mpsn/eHjD/zg4 - u/8xMbf/ZGS1/4SEtf+Rkbf/lJS1/4yMrf+UlK7/ra22/62trv+Wlpb/ioqKv4uLi0AAAAAAAAAAAAAA - AAAAAAAAb29vQHBwcL9jY2P/S0tL/zY2Nv8mJib/KCgo/zw8PP9nZ2f/qKio/8rKyv/Pz87/wsLO/6am - yv94eMj/ODjJ/zAwxf9hYb7/cXG4/19fsv9YWLH/WVmz/3Jyt/+jo73/sLCy/5eXmP+Kioq/i4uLQAAA - AAAAAAAAAAAAAAAAAABvb29AcHBwv2VlZf9QUFD/PDw8/ygoKP8pKSn/Pz8//2pqav+pqan/ysrK/87O - zv/Gxs//sLDM/42NzP9cXND/VFTN/3d3w/90dLv/S0u0/zo6tf9AQL3/YWHC/5+fwv+xsbX/l5eZ/4qK - ir+Li4tAAAAAAAAAAAAAAAAAAAAAAHNzc0B1dXW/enp6/4WFhf9wcHD/PDw8/z8/P/94eHj/o6Oj/7+/ - v//Ozs7/0NDQ/83N0P/Gxs//uLjP/6Sk0f+ens3/paXD/42Nvv9VVb3/OzvB/0BAzP9hYc7/n5/H/7Gx - tf+Xl5n/ioqKv4uLi0AAAAAAAAAAAAAAAAAAAAAAd3d3QHh4eL+Hh4f/pqam/5ubm/9nZ2f/ampq/6Oj - o//ExMT/zMzM/9DQ0P/Q0ND/0dHR/9HR0f/OztH/ysrS/8bGzv/Cwsf/p6fE/3Z2xf9fX8r/YmLT/3t7 - 0/+oqMj/srK1/5iYmf+Kioq/i4uLQAAAAAAAAAAAAAAAAAAAAAB3d3dAeHh4v4yMjP+0tLT/vb29/6io - qP+pqan/v7+//8zMzP/Pz8//0NDQ/9DQ0P/R0dH/0dHR/9DQ0f/OztH/zc3Q/8zMzf/Bwcz/r6/N/6am - z/+oqNP/r6/Q/7u7x/+0tLX/mJiZ/4qKir+Li4tAAAAAAAAAAAAAAAAAAAAAAHd3d0B4eHi/jo6O/7q6 - uv/Nzc3/yMjI/8fHx//Ly8v/zc3N/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/8zM - zv/Kys7/ycnP/8nJz//IyMz/xMTG/7W1tf+ZmZn/ioqKv4uLi0AAAAAAAAAAAAAAAAAAAAAAd3d3QHh4 - eL+Ojo7/uLi4/8zMzP/IyMj/xsbG/8fHx//IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jI - yP/IyMj/yMjI/8fHyP/Hx8n/x8fJ/8bGyP/ExMT/tbW1/5mZmf+Kioq/i4uLQAAAAAAAAAAAAAAAAAAA - AAB3d3dAdnZ2v4aGhv+jo6P/r6+v/6qqqv+nqKj/pqio/6WpqP+lqaj/pamo/6WpqP+lqaj/pamo/6Wp - qP+lqaj/pamo/6WpqP+mqaj/pqio/6eoqP+oqKj/rKys/7Kysv+rq6v/lZWV/4qKir+Li4tAAAAAAAAA - AAAAAAAAAAAAAHNzc0B0dHS/dnZ2/3t7e/94eXn/b3Bw/2lsbP9nbm3/ZW9t/2Vvbf9lb23/ZW9t/2Vv - bf9lb23/ZW9t/2Vvbf9lb23/ZW9t/2Zvbf9obmz/am1s/2xtbP94eHj/j4+P/5eXl/+Pj4//ioqKv4uL - i0AAAAAAAAAAAAAAAAAAAAAAb29vQHFxcb9sbGz/Y2Nj/11eXv9bXV3/UWNf/0FtY/84c2b/NnNm/zZz - Zv82c2b/NnNm/zZzZv82c2b/NnNm/zZzZv82c2b/O3Bl/0RrYv9OZV//Vl5c/2VkZf95eHn/hYWF/4mJ - if+Kioq/i4uLQAAAAAAAAAAAAAAAAAAAAABra2tAbW1tv2dnZ/9bW1v/XV9e/2xzcf9eioD/NKWM/x2z - kv8atJP/GLWT/xi1k/8YtZP/GLWT/xi1k/8YtZP/GLWT/xi1k/8krZD/PZ6J/1OOgf9oe3f/cXBx/25u - bv90dHT/hISE/4qKir+Li4tAAAAAAAAAAAAAAAAAAAAAAGtra0BsbGy/ZWVl/1dXV/9cX1//dH17/2Se - kf8swaD/DdSp/wnWqv8H16r/B9eq/wfXqv8H16r/B9eq/wfXqv8H16r/B9eq/xfNpv83uZ3/VaOS/3GK - hf93d3f/aWlp/2xsbP+BgYH/jIyMv4uLi0AAAAAAAAAAAAAAAAAAAAAAa2trQGxsbL9lZWX/V1dX/1xf - Xv90fXv/Y5+R/yjDof8J1qr/BNir/wLZq/8C2av/Atmr/wLZq/8C2av/Atmr/wLZq/8C2av/E8+m/zS6 - nf9To5L/cIqE/3d3d/9paWn/bGxs/4GBgf+MjIy/i4uLQAAAAAAAAAAAAAAAAAAAAABra2tAbGxsv2Vl - Zf9XV1f/XF9e/3R9e/9in5L/JsOi/wbXqv8C2av/ANus/wDbrP8A26z/ANus/wDbrP8A26z/ANus/wDb - rP8R0Kf/M7ud/1Kkkv9wioT/d3d3/2lpaf9sbGz/gYGB/4yMjL+Li4tAAAAAAAAAAAAAAAAAAAAAAGtr - a0BsbGy/ZWVl/1dXV/9cX17/dH17/2Kfkv8mw6L/Bteq/wLZq/8A26z/ANus/wDbrP8A26z/ANus/wDb - rP8A26z/ANus/xHQp/8zu53/UqSS/3CKhP93d3f/aWlp/2xsbP+BgYH/jIyMv4uLi0AAAAAAAAAAAAAA - AAAAAAAAa2trQGxsbL9lZWX/V1dX/1xfXv90fXv/Yp+S/ybDov8G16r/Atmr/wDbrP8A26z/ANus/wDb - rP8A26z/ANus/wDbrP8A26z/EdCn/zO7nf9SpJL/cIqE/3d3d/9paWn/bGxs/4GBgf+MjIy/i4uLQAAA - AAAAAAAAAAAAAAAAAABra2tAbGxsv2VlZf9XV1f/XF9e/3R9e/9in5L/JsOi/wbXqv8C2av/ANus/wDb - rP8A26z/ANus/wDbrP8A26z/ANus/wDbrP8R0Kf/M7ud/1Kkkv9wioT/d3d3/2lpaf9sbGz/gYGB/4yM - jL+Li4tAAAAAAAAAAAAAAAAAAAAAAGtra0BsbGy/ZWVl/1dXV/9cX17/dH17/2Ofkf8ow6H/Cdaq/wTY - q/8C2qv/Atqr/wLaq/8C2qv/Atqr/wLaq/8C2qv/Atqr/xPPpv80up3/U6OS/3CKhP93d3f/aWlp/2xs - bP+BgYH/jIyMv4uLi0AAAAAAAAAAAAAAAAAAAAAAa2trQGxsbL9lZWX/V1dX/1xfX/90fXv/ZJ6R/yzB - oP8N1Kn/Cdaq/wfYqv8H2Kr/B9iq/wfYqv8H2Kr/B9iq/wfYqv8H2Kr/F82m/ze5nf9Vo5L/cYqE/3d3 - d/9paWn/bGxs/4GBgf+MjIy/i4uLQAAAAAAAAAAAAAAAAAAAAABra2tAbW1tv2dnZ/9bW1v/XWBf/210 - cv9fi4H/NaaN/x60k/8btpT/GbeU/xm3lP8Zt5T/GbeU/xm3lP8Zt5T/GbeU/xm3lP8lr5H/Pp+K/1SP - gv9pfHj/cnFx/25ubv90dHT/hISE/4qKir+Li4tAAAAAAAAAAAAAAAAAAAAAAG9vb0BxcXG/bGxs/2Rk - ZP9fYGD/XWBg/1RmYv9EcGb/O3Zp/zl2af85d2n/OXdp/zl3af85d2n/OXdp/zl3af85d2n/OXdp/z5z - aP9HbWX/UWdi/1lhX/9nZ2f/enp6/4WFhf+JiYn/ioqKv4uLi0AAAAAAAAAAAAAAAAAAAAAAc3NzQHV1 - db9xcXH/aGho/2BgYP9XWFj/UVRU/09WVf9NV1X/TVdV/01XVf9NV1X/TVdV/01XVf9NV1X/TVdV/01X - Vf9NV1X/TldV/1BWVP9SVVT/VFVU/2FhYf95eXn/hoaG74iIiM+Li4uPioqKMAAAAAAAAAAAAAAAAAAA - AAB3d3dAeXl5v3R0dP9oaGj/YGBg/1paWv9XWFj/VlhY/1VZWP9VWVj/VVlY/1VZWP9VWVj/VVlY/1VZ - WP9VWVj/VVlY/1VZWP9WWVj/VlhY/1dYWP9YWFj/X19f/2xsbP91dXXPfX19cIqKijCPj48QAAAAAAAA - AAAAAAAAAAAAAHt7e0B8fHy/dXV1/2hoaP9gYGD/XFxc/1paWv9aWlr/Wlpa/1paWv9aWlr/Wlpa/1pa - Wv9aWlr/Wlpa/1paWv9aWlr/Wlpa/1paWv9aWlr/Wlpa/1paWv9eXl7/ZmZm/2lpab9ra2tAAAAAAAAA - AAAAAAAA8AAAP/AAAD/wAAAP8AAAD/AAAA/wAAAP8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AA - AAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AA - AAPwAAAD8AAAD/AAAA8oAAAAIAAAAEAAAAABAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/zMz - M/82Njb/ODg4/z57bv87fW//OH9v/zd/cP9DQ0P/SEhI/01NTf9MX1v/T15b/1FRUf9XV1f/VFlY/1dY - WP9TXFr/UF5b/1RcWv9YWln/Wlpa/1ldXP9aXFz/XFxc/11eXv9KYVz/TGBc/11lY/9UbWf/XWhm/1Jt - aP9HdWv/RnZs/1dzbf9Zcm3/THpw/0t8cf9gYGD/YGJi/2JiYv9hZGP/YWVk/2FmZP9kZGT/ZmZm/2Nq - af9ibmv/aGho/2pqav9pbGv/bGxs/25ubv9jcm//ZHNv/29xcf9tcnH/bnNy/2R6dv9ofHf/aHx4/2h/ - ev9sf3v/b357/3BwcP9ycnL/cXd2/3R0dP92dnb/cnl3/3N8ev90fHr/eHh4/3p6ev95fHv/en18/3x8 - fP9+fn7/NoBw/zuFdf88hHT/Q4Bz/0CCdP9Whnz/Uol9/2qAfP9sgHz/Skq5/0tLvP9PT77/UVG//1pa - uP9jY7T/Z2e1/2pqtv9mZrn/YWG+/2Rkv/9vb7n/bW28/3FxvP99fbj/SkrD/05Owv9RUcf/UlLI/25u - wf9pacr/dXXD/3l5xP9wcMr/cXHO/3p6yf87m4b/PpiE/zych/8crY7/HqyN/x2vj/8ero//K6SK/yym - i/8mqIv/IKuN/yepjP8hrY7/OLKX/zS2mf84spj/M7ud/zW6nf8wvp//Lr+g/1Sdjf9Ymov/WJqM/1if - kP9piIL/aoiB/2qMhf9To5H/V6CQ/1Kkkv8ewp//D8yj/wvOpP8OzaT/DM6k/w7OpP8Yx6H/EM2j/xbN - pv8Wzqb/Gcyl/wbXqv8P0qj/CNaq/wPZq/8E2Kv/Btiq/wDarP8R0aj/gICA/4KCgv+DhIT/hISE/4aG - hv+IiIj/ioqK/4yMjP+Ojo7/j4+Q/5CQkP+SkpL/lJSU/5aWl/+YmJj/mpqa/5ubnf+cnJ3/np6i/5yc - pP+Tk6//n5+p/4qKsf+Kirf/gYG5/5WVv/+amrr/nqKh/6Ghof+jpKT/pKSk/6ampv+lpan/pqau/6mp - qf+rq67/ra2t/6KisP+lpbL/qamz/66usv+mprn/pKS+/7CwsP+1tbX/srK4/7e3uv+xsb7/t7e+/7i4 - uP+9vb7/hobA/4ODxv+KisD/h4fP/5aWw/+amsH/nJzD/5iYxv+QkM3/mprM/6Kixf+oqMT/o6PJ/6Wl - y/+goM7/qqrN/7KywP+zs8X/u7vA/76+wf+6usX/vb3H/7e3yf+wsM3/u7vL/7+/yv++vs3/oKDQ/7Gx - 0P+/wMD/wMHB/8TExf/Bwcr/wMDN/8bGzf/Jycn/y8vN/83Nzf/BwdD/ycnQ/83N0P/Q0ND/AAAA/wBM - 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 - qv8K1qr/Ctaq/0mvmf9/fn//YmJi/4yMjP8AAAAAAAAAAAAAAABsbGz/UFBQ/4CNiv8J1qr/ANus/wDb - rP8A26z/ANus/wDbrP9EsZn/f35+/2JiYv+MjIz/AAAAAAAAAAAAAAAAbGxs/1BQUP+AjYr/Cdaq/wDb - rP8A26z/ANus/wDbrP8A26z/RLGZ/39+fv9iYmL/jIyM/wAAAAAAAAAAAAAAAGxsbP9QUFD/gI2K/wnW - qv8A26z/ANus/wDbrP8A26z/ANus/0Sxmf9/fn7/YmJi/4yMjP8AAAAAAAAAAAAAAABsbGz/UVFR/4GN - iv8S0qj/Cteq/wrXqv8K16r/Cteq/wrXqv9Jr5n/f35+/2JiYv+MjIz/AAAAAAAAAAAAAAAAc3Nz/2Vl - Zf9RUlL/SldU/0lXVP9JV1T/SVdU/0lXVP9JV1T/TlRT/1NTU/+Pj4//i4uL/wAAAAAAAAAAAAAAAHx8 - fP9iYmL/Wlpa/1paWv9aWlr/Wlpa/1paWv9aWlr/Wlpa/1paWv9bW1v/ampq/wAAAAAAAAAAwAcAAMAD - AADAAwAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAMAACgA - AAAQAAAAIAAAAAEACAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAcHBz/IyMj/yQkJP8lJSX/TU5O/09P - T/9KUU//RVNQ/0ZTUP9OVFP/SVdU/0pXVP9QUFD/UVFR/1FSUv9TU1P/Wlpa/1tbW/9iYmL/Y2Nj/2Vl - Zf9mZmb/aWlp/2pqav9sbGz/bm5u/3Nzc/90dHT/dnZ2/3h4eP95eXn/fHx8/39+fv8YGK//Nzes/0ND - uv94eL7/GBjS/zo6wv9CQtr/Sa+Z/0Sxmf8J1qr/Ctaq/wDbrP8S0qj/gYGB/4ODg/+AjYr/gY2K/4uL - i/+MjIz/jo6O/4+Pj/+QkJD/lpaW/4CAsv+goKX/rKys/62trf+2trb/t7e3/7i4uP+5ubn/u7u7/7i4 - vf+6ur//mJjH/5iYyf++vsP/vr7E/8PDw//Gxsb/x8fH/8PDzP/Nzc3/zs7P/8/Pz//GxtP/ysrS/8vL - 0//Q0ND/0dHR/9LS0f/T09P//////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VVUfFhYWFhYWFxYVNVVVVVVV - HlRTU009P1NLLjIvVVVVVR1RSFFSPjxKTD03G1VVVVUcNgE6UVNDIThBOT4yVVVVGQIAA0hSRCUkIiNF - MlVVVR07A0BRUlJOQiYnRjJVVVUdUkhRUlJSUlJPUEcyVVVVHktISEhISEhISElHMlVVVRoTBAgHBwcH - BwYFNDJVVVUYDTEtKysrKysoIBIzVVVVGAwwKiwsLCwsKSASM1VVVRgMMCosLCwsLCkgEjNVVVUYDDAq - LCwsLCwpIBIzVVVVGA0xLSsrKysrKCASM1VVVRoUDgsKCgoKCgkPNTJVVVUfEhAQEBAQEBAQERdVVcAH - AADAAwAAwAMAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMAD - AAA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/GB/DGBPrefs.Designer.cs b/BizHawk.Client.EmuHawk/config/GB/DGBPrefs.Designer.cs index 24d2208b81..a1552ccef6 100644 --- a/BizHawk.Client.EmuHawk/config/GB/DGBPrefs.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/GB/DGBPrefs.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DGBPrefs)); this.tabControl1 = new System.Windows.Forms.TabControl(); this.tabPage1 = new System.Windows.Forms.TabPage(); this.gbPrefControl1 = new GBPrefControl(); @@ -126,7 +125,7 @@ this.Controls.Add(this.buttonOK); this.Controls.Add(this.buttonCancel); this.Controls.Add(this.tabControl1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.dual_MultiSize; this.Name = "DGBPrefs"; this.Text = "Gameboy Link Settings"; this.tabControl1.ResumeLayout(false); diff --git a/BizHawk.Client.EmuHawk/config/GB/DGBPrefs.resx b/BizHawk.Client.EmuHawk/config/GB/DGBPrefs.resx index d794d13b51..29dcb1b3a3 100644 --- a/BizHawk.Client.EmuHawk/config/GB/DGBPrefs.resx +++ b/BizHawk.Client.EmuHawk/config/GB/DGBPrefs.resx @@ -117,384 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAYAMDAAAAEAIACoJQAAZgAAADAwAAABAAgAqA4AAA4mAAAgIAAAAQAgAKgQAAC2NAAAICAAAAEA - CACoCAAAXkUAABAQAAABACAAaAQAAAZOAAAQEAAAAQAIAGgFAABuUgAAKAAAADAAAABgAAAAAQAgAAAA - AAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACAgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgID/gICA/4CA - gP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CA - gP+AgID/gICA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACAgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgID/gICA/4CA - gP+AgID/gICA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgID/gICA/4CAgP+AgID/gICA/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACAgID/gICA/4CAgP+AgID/gICA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgID/gICA/4CAgP+AgID/gICA/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACAgID/gICA/4CAgP+AgID/gICA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgID/gICA/4CA - gP+AgID/gICA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDg4P/iYmJ/46O - jv+UlJT/mZmZ/56env+kpKT/qamp/6+vr/+0tLT/ubm5/7+/v//AwMD/wMDA/8DAwP/AwMD/wMDA/8DA - wP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAAAACDg4P/iYmJ/46Ojv+UlJT/mZmZ/56env+kpKT/qamp/6+v - r/+0tLT/ubm5/7+/v//AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAA - AACFhYX/ioqK/5CQkP+VlZX/mpqa/6CgoP+lpaX/q6ur/7CwsP+1tbX/u7u7/8DAwP/AwMD/wMDA/8DA - wP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAAAACFhYX/ioqK/5CQkP+VlZX/mpqa/6Cg - oP+lpaX/q6ur/7CwsP+1tbX/u7u7/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DA - wP/AwMD/wMDA/wAAAACGhob/jIyM/zAwMP8wMDD/QEBA/zAwMP8wMDD/QEBA/zAwMP8wMDD/QEBA/zAw - MP8wMDD/QEBA/zAwMP8wMDD/QEBA/zAwMP8wMDD/QEBA/zAwMP/AwMD/wMDA/wAAAACGhob/jIyM//8+ - I///PiP//z4j//8+I///PiP//z4j//8+I///PiP//z4j//8+I///PiP//z4j//8+I///PiP//z4j//8+ - I///PiP//z4j//8+I//AwMD/wMDA/wAAAACIiIj/jY2N/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BA - QP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP/AwMD/wMDA/wAA - AACIiIj/jY2N//9BKf//QSn//0Ep//9BKf//QSn//0Ep//9BKf//QSn//0Ep//9BKf//QSn//0Ep//9B - Kf//QSn//0Ep//9BKf//QSn//0Ep//9BKf/AwMD/wMDA/wAAAACJiYn/j4+P//9FLv//RS7//0Uu//9F - Lv//RS7//0Uu//9FLv//RS7//0Uu//9FLv//RS7//0Uu//9FLv//RS7//0Uu//9FLv//RS7//0Uu//9F - Lv/AwMD/wMDA/wAAAACJiYn/j4+P//9FLv//RS7//0Uu//9FLv//RS7//0Uu//9FLv//RS7//0Uu//9F - Lv//RS7//0Uu//9FLv//RS7//0Uu//9FLv//RS7//0Uu//9FLv/AwMD/wMDA/wAAAACLi4v/kJCQ//9I - M///SDP//0gz//9IM///SDP//0gz//9IM///SDP//0gz//9IM///SDP//0gz//9IM///SDP//0gz//9I - M///SDP//0gz//9IM//AwMD/wMDA/wAAAACLi4v/kJCQ//9IM///SDP//0gz//9IM///SDP//0gz//9I - M///SDP//0gz//9IM///SDP//0gz//9IM///SDP//0gz//9IM///SDP//0gz//9IM//AwMD/wMDA/wAA - AACMjIz/kpKS//9MOP//TDj//0w4//9MOP//TDj//0w4//9MOP//TDj//0w4//9MOP//TDj//0w4//9M - OP//TDj//0w4//9MOP//TDj//0w4//9MOP/AwMD/wMDA/wAAAACMjIz/kpKS//9MOP//TDj//0w4//9M - OP//TDj//0w4//9MOP//TDj//0w4//9MOP//TDj//0w4//9MOP//TDj//0w4//9MOP//TDj//0w4//9M - OP/AwMD/wMDA/wAAAACOjo7/k5OT//9QPv//UD7//1A+//9QPv//UD7//1A+//9QPv//UD7//1A+//9Q - Pv//UD7//1A+//9QPv//UD7//1A+//9QPv//UD7//1A+//9QPv/AwMD/wMDA/wAAAACOjo7/k5OT//9Q - Pv//UD7//1A+//9QPv//UD7//1A+//9QPv//UD7//1A+//9QPv//UD7//1A+//9QPv//UD7//1A+//9Q - Pv//UD7//1A+//9QPv/AwMD/wMDA/wAAAACPj4//lZWV//9TQ///U0P//1ND//9TQ///U0P//1ND//9T - Q///U0P//1ND//9TQ///U0P//1ND//9TQ///U0P//1ND//9TQ///U0P//1ND//9TQ//AwMD/wMDA/wAA - AACPj4//lZWV//9TQ///U0P//1ND//9TQ///U0P//1ND//9TQ///U0P//1ND//9TQ///U0P//1ND//9T - Q///U0P//1ND//9TQ///U0P//1ND//9TQ//AwMD/wMDA/wAAAACRkZH/lpaW//9XSP//V0j//1dI//9X - SP//V0j//1dI//9XSP//V0j//1dI//9XSP//V0j//1dI//9XSP//V0j//1dI//9XSP//V0j//1dI//9X - SP/AwMD/wMDA/wAAAACRkZH/lpaW//9XSP//V0j//1dI//9XSP//V0j//1dI//9XSP//V0j//1dI//9X - SP//V0j//1dI//9XSP//V0j//1dI//9XSP//V0j//1dI//9XSP/AwMD/wMDA/wAAAACSkpL/mJiY//9a - Tf//Wk3//1pN//9aTf//Wk3//1pN//9aTf//Wk3//1pN//9aTf//Wk3//1pN//9aTf//Wk3//1pN//9a - Tf//Wk3//1pN//9aTf/AwMD/wMDA/wAAAACSkpL/mJiY//9aTf//Wk3//1pN//9aTf//Wk3//1pN//9a - Tf//Wk3//1pN//9aTf//Wk3//1pN//9aTf//Wk3//1pN//9aTf//Wk3//1pN//9aTf/AwMD/wMDA/wAA - AACUlJT/mZmZ//9eUv//XlL//15S//9eUv//XlL//15S//9eUv//XlL//15S//9eUv//XlL//15S//9e - Uv//XlL//15S//9eUv//XlL//15S//9eUv/AwMD/wMDA/wAAAACUlJT/mZmZ//9eUv//XlL//15S//9e - Uv//XlL//15S//9eUv//XlL//15S//9eUv//XlL//15S//9eUv//XlL//15S//9eUv//XlL//15S//9e - Uv/AwMD/wMDA/wAAAACVlZX/mpqa//9hV///YVf//2FX//9hV///YVf//2FX//9hV///YVf//2FX//9h - V///YVf//2FX//9hV///YVf//2FX//9hV///YVf//2FX//9hV//AwMD/wMDA/wAAAACVlZX/mpqa//9h - V///YVf//2FX//9hV///YVf//2FX//9hV///YVf//2FX//9hV///YVf//2FX//9hV///YVf//2FX//9h - V///YVf//2FX//9hV//AwMD/wMDA/wAAAACXl5f/nJyc//9lXP//ZVz//2Vc//9lXP//ZVz//2Vc//9l - XP//ZVz//2Vc//9lXP//ZVz//2Vc//9lXP//ZVz//2Vc//9lXP//ZVz//2Vc//9lXP/AwMD/wMDA/wAA - AACXl5f/nJyc//9lXP//ZVz//2Vc//9lXP//ZVz//2Vc//9lXP//ZVz//2Vc//9lXP//ZVz//2Vc//9l - XP//ZVz//2Vc//9lXP//ZVz//2Vc//9lXP/AwMD/wMDA/wAAAACYmJj/nZ2d//9oYv//aGL//2hi//9o - Yv//aGL//2hi//9oYv//aGL//2hi//9oYv//aGL//2hi//9oYv//aGL//2hi//9oYv//aGL//2hi//9o - Yv/AwMD/wMDA/wAAAACYmJj/nZ2d//9oYv//aGL//2hi//9oYv//aGL//2hi//9oYv//aGL//2hi//9o - Yv//aGL//2hi//9oYv//aGL//2hi//9oYv//aGL//2hi//9oYv/AwMD/wMDA/wAAAACZmZn/n5+f//9s - Z///bGf//2xn//9sZ///bGf//2xn//9sZ///bGf//2xn//9sZ///bGf//2xn//9sZ///bGf//2xn//9s - Z///bGf//2xn//9sZ//AwMD/wMDA/wAAAACZmZn/n5+f//9sZ///bGf//2xn//9sZ///bGf//2xn//9s - Z///bGf//2xn//9sZ///bGf//2xn//9sZ///bGf//2xn//9sZ///bGf//2xn//9sZ//AwMD/wMDA/wAA - AACbm5v/oKCg//9vbP//b2z//29s//9vbP//b2z//29s//9vbP//b2z//29s//9vbP//b2z//29s//9v - bP//b2z//29s//9vbP//b2z//29s//9vbP/AwMD/wMDA/wAAAACbm5v/oKCg//9vbP//b2z//29s//9v - bP//b2z//29s//9vbP//b2z//29s//9vbP//b2z//29s//9vbP//b2z//29s//9vbP//b2z//29s//9v - bP/AwMD/wMDA/wAAAACcnJz/oqKi/6enp/+tra3/srKy/7e3t/+9vb3/wMDA/8DAwP/AwMD/wMDA/8DA - wP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAAAACcnJz/oqKi/6en - p/+tra3/srKy/7e3t/+9vb3/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DA - wP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAAAACenp7/o6Oj/6mpqf+urq7/s7Oz/7m5uf++vr7/wMDA/8DA - wP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAA - AACenp7/o6Oj/6mpqf+urq7/s7Oz/7m5uf++vr7/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DA - wP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA////////AAD///////8AAP4AP/4APwAA/gA//gA/AAD/wf//wf8AAP/B - ///B/wAA/8H//8H/AACAAACAAAAAAIAAAIAAAAAAgAAAgAAAAACAAACAAAAAAIAAAIAAAAAAgAAAgAAA - AACAAACAAAAAAIAAAIAAAAAAgAAAgAAAAACAAACAAAAAAIAAAIAAAAAAgAAAgAAAAACAAACAAAAAAIAA - AIAAAAAAgAAAgAAAAACAAACAAAAAAIAAAIAAAAAAgAAAgAAAAACAAACAAAAAAP///////wAA//////// - AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AACgAAAAwAAAAYAAAAAEACAAAAAAAABIAAAAAAAAAAAAAAAAAAAAA - AAAAAAD/MDAw/0BAQP//PiP//0Ep//9FLv//SDP//0w4//9QPv//U0P//1dI//9aTf//XlL//2FX//9l - XP//aGL//2xn//9vbP+AgID/g4OD/4WFhf+Ghob/iIiI/4mJif+Kior/i4uL/4yMjP+NjY3/jo6O/4+P - j/+QkJD/kZGR/5KSkv+Tk5P/lJSU/5WVlf+Wlpb/l5eX/5iYmP+ZmZn/mpqa/5ubm/+cnJz/nZ2d/56e - nv+fn5//oKCg/6Kiov+jo6P/pKSk/6Wlpf+np6f/qamp/6urq/+tra3/rq6u/6+vr/+wsLD/srKy/7Oz - s/+0tLT/tbW1/7e3t/+5ubn/u7u7/729vf++vr7/v7+//8DAwP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABISEhISEhISEhIS - AAAAAAAAAAAAAAAAABISEhISEhISEhISAAAAAAAAAAAAAAAAABISEhISEhISEhISAAAAAAAAAAAAAAAA - ABISEhISEhISEhISAAAAAAAAAAAAAAAAAAAAABISEhISAAAAAAAAAAAAAAAAAAAAAAAAABISEhISAAAA - AAAAAAAAAAAAAAAAAAAAABISEhISAAAAAAAAAAAAAAAAAAAAAAAAABISEhISAAAAAAAAAAAAAAAAAAAA - AAAAABISEhISAAAAAAAAAAAAAAAAAAAAAAAAABISEhISAAAAAAAAAAAAABMXHCInLDE0ODw/Q0RERERE - REREREREABMXHCInLDE0ODw/Q0REREREREREREREABQYHiMoLjI1OT1AREREREREREREREREABQYHiMo - LjI1OT1AREREREREREREREREABUaAQECAQECAQECAQECAQECAQECAUREABUaAwMDAwMDAwMDAwMDAwMD - AwMDA0REABYbAgICAgICAgICAgICAgICAgICAkREABYbBAQEBAQEBAQEBAQEBAQEBAQEBEREABcdBQUF - BQUFBQUFBQUFBQUFBQUFBUREABcdBQUFBQUFBQUFBQUFBQUFBQUFBUREABkeBgYGBgYGBgYGBgYGBgYG - BgYGBkREABkeBgYGBgYGBgYGBgYGBgYGBgYGBkREABogBwcHBwcHBwcHBwcHBwcHBwcHB0REABogBwcH - BwcHBwcHBwcHBwcHBwcHB0REABwhCAgICAgICAgICAgICAgICAgICEREABwhCAgICAgICAgICAgICAgI - CAgICEREAB0jCQkJCQkJCQkJCQkJCQkJCQkJCUREAB0jCQkJCQkJCQkJCQkJCQkJCQkJCUREAB8kCgoK - CgoKCgoKCgoKCgoKCgoKCkREAB8kCgoKCgoKCgoKCgoKCgoKCgoKCkREACAmCwsLCwsLCwsLCwsLCwsL - CwsLC0REACAmCwsLCwsLCwsLCwsLCwsLCwsLC0REACInDAwMDAwMDAwMDAwMDAwMDAwMDEREACInDAwM - DAwMDAwMDAwMDAwMDAwMDEREACMoDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUREACMoDQ0NDQ0NDQ0NDQ0NDQ0N - DQ0NDUREACUqDg4ODg4ODg4ODg4ODg4ODg4ODkREACUqDg4ODg4ODg4ODg4ODg4ODg4ODkREACYrDw8P - Dw8PDw8PDw8PDw8PDw8PD0REACYrDw8PDw8PDw8PDw8PDw8PDw8PD0REACctEBAQEBAQEBAQEBAQEBAQ - EBAQEEREACctEBAQEBAQEBAQEBAQEBAQEBAQEEREACkuEREREREREREREREREREREREREUREACkuERER - EREREREREREREREREREREUREACovMzY6PkFEREREREREREREREREREREACovMzY6PkFERERERERERERE - REREREREACwwNDc7P0JEREREREREREREREREREREACwwNDc7P0JEREREREREREREREREREREAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA/gA//gA/AAD+AD/+AD8AAP/B///B/wAA/8H//8H/AAD/wf//wf8AAIAAAIAAAAAAgAAAgAAA - AACAAACAAAAAAIAAAIAAAAAAgAAAgAAAAACAAACAAAAAAIAAAIAAAAAAgAAAgAAAAACAAACAAAAAAIAA - AIAAAAAAgAAAgAAAAACAAACAAAAAAIAAAIAAAAAAgAAAgAAAAACAAACAAAAAAIAAAIAAAAAAgAAAgAAA - AACAAACAAAAAAIAAAIAAAAAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAAKAAAACAA - AABAAAAAAQAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf39/QICA - gP+AgID/gICA/4CAgP+AgID/gICA/4CAgP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9/ - f0CAgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAB/f38Qf39/QH9/f3CAgID/gICA/4CAgP9/f39Af39/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAf39/EH9/f0B/f39wgICA/4CAgP+AgID/f39/QH9/f0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAf39/QICAgP+AgID/gICA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9/f0CAgID/gICA/4CAgP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACEhIQwhoaGv46Ojr+Wlpa/np6ev6ampr+srKzPqamp/6+vr/+wsLD/wMDAv8DAwL/AwMC/wMDAv8DA - wL/AwMC/hISEMIaGhr+Ojo6/lpaWv56enr+mpqa/rKysz6mpqf+vr6//sLCw/8DAwL/AwMC/wMDAv8DA - wL/AwMC/wMDAv4ODg0CJiYn/eHh4/4GBgf+EhIT/jo6O/5CQkP+ampr/nJyc/5+fn/+cnJz/n5+f/5yc - nP+fn5//paWl/8DAwP+Dg4NAiYmJ/6x8df+ygnv/uIiB/76Oh//ElI3/ypqT/8+fmP/Pn5j/z5+Y/8+f - mP/Pn5j/z5+Y/8unov/AwMD/h4eHQIuLi/88PDz/Pz8//zw8PP8/Pz//PDw8/z8/P/88PDz/Pz8//zw8 - PP8/Pz//PDw8/z8/P/9dXV3/wMDA/4eHh0CLi4v//0An//9AJ///QCf//0An//9AJ///QCf//0An//9A - J///QCf//0An//9AJ///QCf/72BN/8DAwP+Hh4dAjY2N//9FL///RS///0Uv//9FL///RS///0Uv//9F - L///RS///0Uv//9FL///RS///0Uv/+9kU//AwMD/h4eHQI2Njf//RS///0Uv//9FL///RS///0Uv//9F - L///RS///0Uv//9FL///RS///0Uv//9FL//vZFP/wMDA/4uLi0CQkJD//0s2//9LNv//Szb//0s2//9L - Nv//Szb//0s2//9LNv//Szb//0s2//9LNv//Szb/72hZ/8DAwP+Li4tAkJCQ//9LNv//Szb//0s2//9L - Nv//Szb//0s2//9LNv//Szb//0s2//9LNv//Szb//0s2/+9oWf/AwMD/j4+PQJKSkv//UD///1A///9Q - P///UD///1A///9QP///UD///1A///9QP///UD///1A///9QP//vbF//wMDA/4+Pj0CSkpL//1A///9Q - P///UD///1A///9QP///UD///1A///9QP///UD///1A///9QP///UD//72xf/8DAwP+Pj49AlJSU//9W - Rv//Vkb//1ZG//9WRv//Vkb//1ZG//9WRv//Vkb//1ZG//9WRv//Vkb//1ZG/+9wZf/AwMD/j4+PQJSU - lP//Vkb//1ZG//9WRv//Vkb//1ZG//9WRv//Vkb//1ZG//9WRv//Vkb//1ZG//9WRv/vcGX/wMDA/5OT - k0CWlpb//1tO//9bTv//W07//1tO//9bTv//W07//1tO//9bTv//W07//1tO//9bTv//W07/73Rq/8DA - wP+Tk5NAlpaW//9bTv//W07//1tO//9bTv//W07//1tO//9bTv//W07//1tO//9bTv//W07//1tO/+90 - av/AwMD/k5OTQJiYmP//YFX//2BV//9gVf//YFX//2BV//9gVf//YFX//2BV//9gVf//YFX//2BV//9g - Vf/veHD/wMDA/5OTk0CYmJj//2BV//9gVf//YFX//2BV//9gVf//YFX//2BV//9gVf//YFX//2BV//9g - Vf//YFX/73hw/8DAwP+Xl5dAm5ub//9lXf//ZV3//2Vd//9lXf//ZV3//2Vd//9lXf//ZV3//2Vd//9l - Xf//ZV3//2Vd/+98dv/AwMD/l5eXQJubm///ZV3//2Vd//9lXf//ZV3//2Vd//9lXf//ZV3//2Vd//9l - Xf//ZV3//2Vd//9lXf/vfHb/wMDA/5eXl0CdnZ3//2tl//9rZf//a2X//2tl//9rZf//a2X//2tl//9r - Zf//a2X//2tl//9rZf//a2X/74B8/8DAwP+Xl5dAnZ2d//9rZf//a2X//2tl//9rZf//a2X//2tl//9r - Zf//a2X//2tl//9rZf//a2X//2tl/++AfP/AwMD/m5ubQJ+fn//pfXv/6399/+2Bf//vg4D/74OB/++D - gf/vg4H/74OB/++Dgf/vg4H/74OB/++Dgf/jkpD/wMDA/5ubm0Cfn5//6X17/+t/ff/tgX//74OA/++D - gf/vg4H/74OB/++Dgf/vg4H/74OB/++Dgf/vg4H/45KQ/8DAwP+bm5tAoaGh/6mpqf+xsbH/ubm5/7+/ - v//AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/m5ubQKGhof+pqan/sbGx/7m5 - uf+/v7//wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////// - //////////////////////////////gP+A/+P/4//j/+P4AAgACAAIAAgACAAIAAgACAAIAAgACAAIAA - gACAAIAAgACAAIAAgACAAIAAgACAAIAAgAD//////////////////////////////////////////ygA - AAAgAAAAQAAAAAEACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Ozs7/z4+Pv9nZ2f/cXFx/3l5 - ef98fHz//0An//9GMP//Szb/tnZt/7t6cf//UUD//1ZG//9bT//qa1r//2BV//9mXv/qb2D//2tl/+py - ZP/qdmr/6nlv/+p9dP/BgHf/xoV8/+qAef/qhH//gICA/4ODg/+EhIT/hYWF/4aGhv+Hh4f/iYmJ/4qK - iv+Li4v/jIyM/42Njf+Ojo7/j4+P/5CQkP+SkpL/k5OT/5SUlP+VlZX/lpaW/5eXl/+YmJj/mZmZ/5ub - m/+cnJz/nZ2d/5+fn/+goKD/oaGh/6Wlpf+np6f/qqqq/6urq/+xsbH/urq6/7+/v//Li4L/0JCH/9WV - jP/cnJv/4oKA/+WFg//qh4T/6IiG/+qKiP/Oo53/wMDA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAcHBwcHBwcHAAAAAAAAAAAHBwcHBwcHBwAAAAAAAAAABwcHBwcHBwcAAAAAAAAAAAcHBwcHBwcHAAA - AAAAAAAAAAAcHBwcAAAAAAAAAAAAAAAAHBwcHAAAAAAAAB0hKS82OTo4OjtJSUlJSUkdISkvNjk6ODo7 - SUlJSUlJHyIEBQYeICgpLCksKSw2SR8iCgsYGT9AQUFBQUFBSEkhJAECAQIBAgECAQIBAgNJISQHBwcH - BwcHBwcHBwcPSSMmCAgICAgICAgICAgIEkkjJggICAgICAgICAgICBJJJSgJCQkJCQkJCQkJCQkUSSUo - CQkJCQkJCQkJCQkJFEknKgwMDAwMDAwMDAwMDBVJJyoMDAwMDAwMDAwMDAwVSSksDQ0NDQ0NDQ0NDQ0N - FkkpLA0NDQ0NDQ0NDQ0NDRZJKy4ODg4ODg4ODg4ODg4XSSsuDg4ODg4ODg4ODg4OF0ktMBAQEBAQEBAQ - EBAQEBpJLTAQEBAQEBAQEBAQEBAaSS8yERERERERERERERERG0kvMhERERERERERERERERtJMTMTExMT - ExMTExMTExNFSTEzExMTExMTExMTExMTRUkyNUNERkdHR0dHR0dHR0JJMjVDREZHR0dHR0dHR0dCSTQ3 - Ojw9PklJSUlJSUlJSUk0Nzo8PT5JSUlJSUlJSUlJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////// - ////////////////////////+A/4D/4//j/+P/4/gACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAA - gACAAIAAgACAAIAAgACAAIAAgACAAP//////////////////////////////////////////KAAAABAA - AAAgAAAAAQAgAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICA - gP+AgID/gICA/4CAgP8AAAAAAAAAAAAAAAAAAAAAgICA/4CAgP+AgID/gICA/wAAAAAAAAAAAAAAAAAA - AAAAAAAAgICA/4CAgP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgID/gICA/wAAAAAAAAAAAAAAAIaG - hv8wMDD/MDAw/zAwMP8wMDD/MDAw/zAwMP/AwMD/hoaG//8+I///PiP//z4j//8+I///PiP//z4j/8DA - wP+Li4v//0gz//9IM///SDP//0gz//9IM///SDP/wMDA/4uLi///SDP//0gz//9IM///SDP//0gz//9I - M//AwMD/j4+P//9TQ///U0P//1ND//9TQ///U0P//1ND/8DAwP+Pj4///1ND//9TQ///U0P//1ND//9T - Q///U0P/wMDA/5SUlP//XlL//15S//9eUv//XlL//15S//9eUv/AwMD/lJSU//9eUv//XlL//15S//9e - Uv//XlL//15S/8DAwP+YmJj//2hi//9oYv//aGL//2hi//9oYv//aGL/wMDA/5iYmP//aGL//2hi//9o - Yv//aGL//2hi//9oYv/AwMD/nJyc/62trf+9vb3/wMDA/8DAwP/AwMD/wMDA/8DAwP+cnJz/ra2t/729 - vf/AwMD/wMDA/8DAwP/AwMD/wMDA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAAw8MAAOfn - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAAKAAAABAAAAAgAAAAAQAIAAAA - AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAP9ZWVn/Xl5e/2RkZP9nZ2f//0gz/9xcS///U0P//15S/+Fh - UP/mZ1b/6mpZ//9oYv+AgID/hoaG/4mJif+Ojo7/kpKS/5SUlP+VlZX/lpaW/5ubm/+fn5//oqKi/6Sk - pP/JmZj/1ZiR/9Wclv/Vn5v/zqOe/9Ojov/Vo6H/1aWk/8e3t//AwMD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANDQ0NAAAAAA0NDQ0AAA4SGBQTIiIiDhIYFBMi - IiIPAQIDBAQEFw8GCQoLCwsdEAUFBQUFBRoQBQUFBQUFGhEHBwcHBwcbEQcHBwcHBxsUCAgICAgIHBQI - CAgICAgcFQwMDAwMDB8VDAwMDAwMHxYZHiAgICAhFhkeICAgICEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA//8AAMPD - AADn5wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA//8AAA== - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/GB/GBPrefs.Designer.cs b/BizHawk.Client.EmuHawk/config/GB/GBPrefs.Designer.cs index 0165a0e85b..fde514516d 100644 --- a/BizHawk.Client.EmuHawk/config/GB/GBPrefs.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/GB/GBPrefs.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GBPrefs)); this.buttonOK = new System.Windows.Forms.Button(); this.buttonCancel = new System.Windows.Forms.Button(); this.gbPrefControl1 = new GBPrefControl(); @@ -77,7 +76,7 @@ this.Controls.Add(this.buttonCancel); this.Controls.Add(this.buttonOK); this.Controls.Add(this.gbPrefControl1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.gambatte_MultiSize; this.Name = "GBPrefs"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Game Boy Settings"; diff --git a/BizHawk.Client.EmuHawk/config/GB/GBPrefs.resx b/BizHawk.Client.EmuHawk/config/GB/GBPrefs.resx index f6a0374127..29dcb1b3a3 100644 --- a/BizHawk.Client.EmuHawk/config/GB/GBPrefs.resx +++ b/BizHawk.Client.EmuHawk/config/GB/GBPrefs.resx @@ -117,161 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAQAICAAAAEAIACoEAAARgAAACAgAAABAAgAqAgAAO4QAAAQEAAAAQAgAGgEAACWGQAAEBAAAAEA - CABoBQAA/h0AACgAAAAgAAAAQAAAAAEAIAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAB7e3tAfHx8v3d3d/9tbW3/aWlp/2lpaf9paWn/aWlp/2lpaf9paWn/aWlp/2lpaf9paWn/aWlp/2lp - af9paWn/aWlp/2lpaf9oaGj/ZmZm/3BwcP+EhIT/jo6Ov4+Pj0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAHt7e0B6enq/fX19/4GBgf+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4KCgv+BgYH/fn5+/3x8 - fP98fHz/fn5+/4GBgf+CgoL/goKC/3x8fP9ycnL/dXV1/4WFhf+MjIzPiIiIcISEhDB/f38QAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAd3d3QHl5eb+JiYn/qKio/7i4uP+3t7f/t7e3/7e3t/+3t7f/tra2/7Gx - sf+oqKj/o6Oj/6SkpP+pqan/s7Oz/7a2tv+0tLT/paWl/4iIiP9+fn7/h4eH/4mJie+FhYXPgoKCj4SE - hDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3dAeHh4v4+Pj/+7u7v/0dHR/8/Pz//Pz8//0NDQ/9HR - 0f/Q0ND/ycnJ/729vf+3t7f/uLi4/729vv/IyMr/zs7P/83Nzv+9vb3/np6e/46Ojv+NjY3/ioqK/4KC - gv9+fn6/f39/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHd3d0B4eHi/jo6O/7q6uv/Ozs7/ysrK/8rK - yv/Ozs7/0NDQ/9DQ0P/Kysr/vb29/7e3t/+3t7f/urq8/8LCx//IyM3/zMzO/8TExf+ysrL/o6Oj/5iY - mP+MjIz/fn5+/3Z2dr93d3dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3QHZ2dr+JiYn/ra2t/7e3 - t/+lpaX/p6en/7y8vP/Jycn/zs7O/8zMzP/Dw8L/urq9/7Kyu/+oqLz/nZ3C/6Cgxf+xscf/ubnD/7i4 - vP+vr7D/oKCh/5OTlP+JiYr/hYWFz4aGhnCKioowj4+PEAAAAAAAAAAAAAAAAAAAAAB3d3dAdXV1v4CA - gP+VlZX/ioqK/2BgYP9mZmb/mpqa/7u7u//Jycn/z8/O/8zMzP/AwMj/qqrE/4iIv/9ZWbn/Vla3/39/ - uP+cnLn/rq66/7GxtP+kpKf/n5+i/6Skpf+hoaHvkpKSz4uLi4+KioowAAAAAAAAAAAAAAAAAAAAAHNz - c0B0dHS/dHR0/3R0dP9gYGD/NjY2/zs7O/9wcHD/m5ub/7y8vP/Ozs7/0NDQ/8PDzv+mpsn/eHjD/zg4 - u/8xMbf/ZGS1/4SEtf+Rkbf/lJS1/4yMrf+UlK7/ra22/62trv+Wlpb/ioqKv4uLi0AAAAAAAAAAAAAA - AAAAAAAAb29vQHBwcL9jY2P/S0tL/zY2Nv8mJib/KCgo/zw8PP9nZ2f/qKio/8rKyv/Pz87/wsLO/6am - yv94eMj/ODjJ/zAwxf9hYb7/cXG4/19fsv9YWLH/WVmz/3Jyt/+jo73/sLCy/5eXmP+Kioq/i4uLQAAA - AAAAAAAAAAAAAAAAAABvb29AcHBwv2VlZf9QUFD/PDw8/ygoKP8pKSn/Pz8//2pqav+pqan/ysrK/87O - zv/Gxs//sLDM/42NzP9cXND/VFTN/3d3w/90dLv/S0u0/zo6tf9AQL3/YWHC/5+fwv+xsbX/l5eZ/4qK - ir+Li4tAAAAAAAAAAAAAAAAAAAAAAHNzc0B1dXW/enp6/4WFhf9wcHD/PDw8/z8/P/94eHj/o6Oj/7+/ - v//Ozs7/0NDQ/83N0P/Gxs//uLjP/6Sk0f+ens3/paXD/42Nvv9VVb3/OzvB/0BAzP9hYc7/n5/H/7Gx - tf+Xl5n/ioqKv4uLi0AAAAAAAAAAAAAAAAAAAAAAd3d3QHh4eL+Hh4f/pqam/5ubm/9nZ2f/ampq/6Oj - o//ExMT/zMzM/9DQ0P/Q0ND/0dHR/9HR0f/OztH/ysrS/8bGzv/Cwsf/p6fE/3Z2xf9fX8r/YmLT/3t7 - 0/+oqMj/srK1/5iYmf+Kioq/i4uLQAAAAAAAAAAAAAAAAAAAAAB3d3dAeHh4v4yMjP+0tLT/vb29/6io - qP+pqan/v7+//8zMzP/Pz8//0NDQ/9DQ0P/R0dH/0dHR/9DQ0f/OztH/zc3Q/8zMzf/Bwcz/r6/N/6am - z/+oqNP/r6/Q/7u7x/+0tLX/mJiZ/4qKir+Li4tAAAAAAAAAAAAAAAAAAAAAAHd3d0B4eHi/jo6O/7q6 - uv/Nzc3/yMjI/8fHx//Ly8v/zc3N/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/8zM - zv/Kys7/ycnP/8nJz//IyMz/xMTG/7W1tf+ZmZn/ioqKv4uLi0AAAAAAAAAAAAAAAAAAAAAAd3d3QHh4 - eL+Ojo7/uLi4/8zMzP/IyMj/xsbG/8fHx//IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jI - yP/IyMj/yMjI/8fHyP/Hx8n/x8fJ/8bGyP/ExMT/tbW1/5mZmf+Kioq/i4uLQAAAAAAAAAAAAAAAAAAA - AAB3d3dAdnZ2v4aGhv+jo6P/r6+v/6qqqv+nqKj/pqio/6WpqP+lqaj/pamo/6WpqP+lqaj/pamo/6Wp - qP+lqaj/pamo/6WpqP+mqaj/pqio/6eoqP+oqKj/rKys/7Kysv+rq6v/lZWV/4qKir+Li4tAAAAAAAAA - AAAAAAAAAAAAAHNzc0B0dHS/dnZ2/3t7e/94eXn/b3Bw/2lsbP9nbm3/ZW9t/2Vvbf9lb23/ZW9t/2Vv - bf9lb23/ZW9t/2Vvbf9lb23/ZW9t/2Zvbf9obmz/am1s/2xtbP94eHj/j4+P/5eXl/+Pj4//ioqKv4uL - i0AAAAAAAAAAAAAAAAAAAAAAb29vQHFxcb9sbGz/Y2Nj/11eXv9bXV3/UWNf/0FtY/84c2b/NnNm/zZz - Zv82c2b/NnNm/zZzZv82c2b/NnNm/zZzZv82c2b/O3Bl/0RrYv9OZV//Vl5c/2VkZf95eHn/hYWF/4mJ - if+Kioq/i4uLQAAAAAAAAAAAAAAAAAAAAABra2tAbW1tv2dnZ/9bW1v/XV9e/2xzcf9eioD/NKWM/x2z - kv8atJP/GLWT/xi1k/8YtZP/GLWT/xi1k/8YtZP/GLWT/xi1k/8krZD/PZ6J/1OOgf9oe3f/cXBx/25u - bv90dHT/hISE/4qKir+Li4tAAAAAAAAAAAAAAAAAAAAAAGtra0BsbGy/ZWVl/1dXV/9cX1//dH17/2Se - kf8swaD/DdSp/wnWqv8H16r/B9eq/wfXqv8H16r/B9eq/wfXqv8H16r/B9eq/xfNpv83uZ3/VaOS/3GK - hf93d3f/aWlp/2xsbP+BgYH/jIyMv4uLi0AAAAAAAAAAAAAAAAAAAAAAa2trQGxsbL9lZWX/V1dX/1xf - Xv90fXv/Y5+R/yjDof8J1qr/BNir/wLZq/8C2av/Atmr/wLZq/8C2av/Atmr/wLZq/8C2av/E8+m/zS6 - nf9To5L/cIqE/3d3d/9paWn/bGxs/4GBgf+MjIy/i4uLQAAAAAAAAAAAAAAAAAAAAABra2tAbGxsv2Vl - Zf9XV1f/XF9e/3R9e/9in5L/JsOi/wbXqv8C2av/ANus/wDbrP8A26z/ANus/wDbrP8A26z/ANus/wDb - rP8R0Kf/M7ud/1Kkkv9wioT/d3d3/2lpaf9sbGz/gYGB/4yMjL+Li4tAAAAAAAAAAAAAAAAAAAAAAGtr - a0BsbGy/ZWVl/1dXV/9cX17/dH17/2Kfkv8mw6L/Bteq/wLZq/8A26z/ANus/wDbrP8A26z/ANus/wDb - rP8A26z/ANus/xHQp/8zu53/UqSS/3CKhP93d3f/aWlp/2xsbP+BgYH/jIyMv4uLi0AAAAAAAAAAAAAA - AAAAAAAAa2trQGxsbL9lZWX/V1dX/1xfXv90fXv/Yp+S/ybDov8G16r/Atmr/wDbrP8A26z/ANus/wDb - rP8A26z/ANus/wDbrP8A26z/EdCn/zO7nf9SpJL/cIqE/3d3d/9paWn/bGxs/4GBgf+MjIy/i4uLQAAA - AAAAAAAAAAAAAAAAAABra2tAbGxsv2VlZf9XV1f/XF9e/3R9e/9in5L/JsOi/wbXqv8C2av/ANus/wDb - rP8A26z/ANus/wDbrP8A26z/ANus/wDbrP8R0Kf/M7ud/1Kkkv9wioT/d3d3/2lpaf9sbGz/gYGB/4yM - jL+Li4tAAAAAAAAAAAAAAAAAAAAAAGtra0BsbGy/ZWVl/1dXV/9cX17/dH17/2Ofkf8ow6H/Cdaq/wTY - q/8C2qv/Atqr/wLaq/8C2qv/Atqr/wLaq/8C2qv/Atqr/xPPpv80up3/U6OS/3CKhP93d3f/aWlp/2xs - bP+BgYH/jIyMv4uLi0AAAAAAAAAAAAAAAAAAAAAAa2trQGxsbL9lZWX/V1dX/1xfX/90fXv/ZJ6R/yzB - oP8N1Kn/Cdaq/wfYqv8H2Kr/B9iq/wfYqv8H2Kr/B9iq/wfYqv8H2Kr/F82m/ze5nf9Vo5L/cYqE/3d3 - d/9paWn/bGxs/4GBgf+MjIy/i4uLQAAAAAAAAAAAAAAAAAAAAABra2tAbW1tv2dnZ/9bW1v/XWBf/210 - cv9fi4H/NaaN/x60k/8btpT/GbeU/xm3lP8Zt5T/GbeU/xm3lP8Zt5T/GbeU/xm3lP8lr5H/Pp+K/1SP - gv9pfHj/cnFx/25ubv90dHT/hISE/4qKir+Li4tAAAAAAAAAAAAAAAAAAAAAAG9vb0BxcXG/bGxs/2Rk - ZP9fYGD/XWBg/1RmYv9EcGb/O3Zp/zl2af85d2n/OXdp/zl3af85d2n/OXdp/zl3af85d2n/OXdp/z5z - aP9HbWX/UWdi/1lhX/9nZ2f/enp6/4WFhf+JiYn/ioqKv4uLi0AAAAAAAAAAAAAAAAAAAAAAc3NzQHV1 - db9xcXH/aGho/2BgYP9XWFj/UVRU/09WVf9NV1X/TVdV/01XVf9NV1X/TVdV/01XVf9NV1X/TVdV/01X - Vf9NV1X/TldV/1BWVP9SVVT/VFVU/2FhYf95eXn/hoaG74iIiM+Li4uPioqKMAAAAAAAAAAAAAAAAAAA - AAB3d3dAeXl5v3R0dP9oaGj/YGBg/1paWv9XWFj/VlhY/1VZWP9VWVj/VVlY/1VZWP9VWVj/VVlY/1VZ - WP9VWVj/VVlY/1VZWP9WWVj/VlhY/1dYWP9YWFj/X19f/2xsbP91dXXPfX19cIqKijCPj48QAAAAAAAA - AAAAAAAAAAAAAHt7e0B8fHy/dXV1/2hoaP9gYGD/XFxc/1paWv9aWlr/Wlpa/1paWv9aWlr/Wlpa/1pa - Wv9aWlr/Wlpa/1paWv9aWlr/Wlpa/1paWv9aWlr/Wlpa/1paWv9eXl7/ZmZm/2lpab9ra2tAAAAAAAAA - AAAAAAAA8AAAP/AAAD/wAAAP8AAAD/AAAA/wAAAP8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AA - AAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AA - AAPwAAAD8AAAD/AAAA8oAAAAIAAAAEAAAAABAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/zMz - M/82Njb/ODg4/z57bv87fW//OH9v/zd/cP9DQ0P/SEhI/01NTf9MX1v/T15b/1FRUf9XV1f/VFlY/1dY - WP9TXFr/UF5b/1RcWv9YWln/Wlpa/1ldXP9aXFz/XFxc/11eXv9KYVz/TGBc/11lY/9UbWf/XWhm/1Jt - aP9HdWv/RnZs/1dzbf9Zcm3/THpw/0t8cf9gYGD/YGJi/2JiYv9hZGP/YWVk/2FmZP9kZGT/ZmZm/2Nq - af9ibmv/aGho/2pqav9pbGv/bGxs/25ubv9jcm//ZHNv/29xcf9tcnH/bnNy/2R6dv9ofHf/aHx4/2h/ - ev9sf3v/b357/3BwcP9ycnL/cXd2/3R0dP92dnb/cnl3/3N8ev90fHr/eHh4/3p6ev95fHv/en18/3x8 - fP9+fn7/NoBw/zuFdf88hHT/Q4Bz/0CCdP9Whnz/Uol9/2qAfP9sgHz/Skq5/0tLvP9PT77/UVG//1pa - uP9jY7T/Z2e1/2pqtv9mZrn/YWG+/2Rkv/9vb7n/bW28/3FxvP99fbj/SkrD/05Owv9RUcf/UlLI/25u - wf9pacr/dXXD/3l5xP9wcMr/cXHO/3p6yf87m4b/PpiE/zych/8crY7/HqyN/x2vj/8ero//K6SK/yym - i/8mqIv/IKuN/yepjP8hrY7/OLKX/zS2mf84spj/M7ud/zW6nf8wvp//Lr+g/1Sdjf9Ymov/WJqM/1if - kP9piIL/aoiB/2qMhf9To5H/V6CQ/1Kkkv8ewp//D8yj/wvOpP8OzaT/DM6k/w7OpP8Yx6H/EM2j/xbN - pv8Wzqb/Gcyl/wbXqv8P0qj/CNaq/wPZq/8E2Kv/Btiq/wDarP8R0aj/gICA/4KCgv+DhIT/hISE/4aG - hv+IiIj/ioqK/4yMjP+Ojo7/j4+Q/5CQkP+SkpL/lJSU/5aWl/+YmJj/mpqa/5ubnf+cnJ3/np6i/5yc - pP+Tk6//n5+p/4qKsf+Kirf/gYG5/5WVv/+amrr/nqKh/6Ghof+jpKT/pKSk/6ampv+lpan/pqau/6mp - qf+rq67/ra2t/6KisP+lpbL/qamz/66usv+mprn/pKS+/7CwsP+1tbX/srK4/7e3uv+xsb7/t7e+/7i4 - uP+9vb7/hobA/4ODxv+KisD/h4fP/5aWw/+amsH/nJzD/5iYxv+QkM3/mprM/6Kixf+oqMT/o6PJ/6Wl - y/+goM7/qqrN/7KywP+zs8X/u7vA/76+wf+6usX/vb3H/7e3yf+wsM3/u7vL/7+/yv++vs3/oKDQ/7Gx - 0P+/wMD/wMHB/8TExf/Bwcr/wMDN/8bGzf/Jycn/y8vN/83Nzf/BwdD/ycnQ/83N0P/Q0ND/AAAA/wBM - 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 - qv8K1qr/Ctaq/0mvmf9/fn//YmJi/4yMjP8AAAAAAAAAAAAAAABsbGz/UFBQ/4CNiv8J1qr/ANus/wDb - rP8A26z/ANus/wDbrP9EsZn/f35+/2JiYv+MjIz/AAAAAAAAAAAAAAAAbGxs/1BQUP+AjYr/Cdaq/wDb - rP8A26z/ANus/wDbrP8A26z/RLGZ/39+fv9iYmL/jIyM/wAAAAAAAAAAAAAAAGxsbP9QUFD/gI2K/wnW - qv8A26z/ANus/wDbrP8A26z/ANus/0Sxmf9/fn7/YmJi/4yMjP8AAAAAAAAAAAAAAABsbGz/UVFR/4GN - iv8S0qj/Cteq/wrXqv8K16r/Cteq/wrXqv9Jr5n/f35+/2JiYv+MjIz/AAAAAAAAAAAAAAAAc3Nz/2Vl - Zf9RUlL/SldU/0lXVP9JV1T/SVdU/0lXVP9JV1T/TlRT/1NTU/+Pj4//i4uL/wAAAAAAAAAAAAAAAHx8 - fP9iYmL/Wlpa/1paWv9aWlr/Wlpa/1paWv9aWlr/Wlpa/1paWv9bW1v/ampq/wAAAAAAAAAAwAcAAMAD - AADAAwAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAMAACgA - AAAQAAAAIAAAAAEACAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAcHBz/IyMj/yQkJP8lJSX/TU5O/09P - T/9KUU//RVNQ/0ZTUP9OVFP/SVdU/0pXVP9QUFD/UVFR/1FSUv9TU1P/Wlpa/1tbW/9iYmL/Y2Nj/2Vl - Zf9mZmb/aWlp/2pqav9sbGz/bm5u/3Nzc/90dHT/dnZ2/3h4eP95eXn/fHx8/39+fv8YGK//Nzes/0ND - uv94eL7/GBjS/zo6wv9CQtr/Sa+Z/0Sxmf8J1qr/Ctaq/wDbrP8S0qj/gYGB/4ODg/+AjYr/gY2K/4uL - i/+MjIz/jo6O/4+Pj/+QkJD/lpaW/4CAsv+goKX/rKys/62trf+2trb/t7e3/7i4uP+5ubn/u7u7/7i4 - vf+6ur//mJjH/5iYyf++vsP/vr7E/8PDw//Gxsb/x8fH/8PDzP/Nzc3/zs7P/8/Pz//GxtP/ysrS/8vL - 0//Q0ND/0dHR/9LS0f/T09P//////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VVUfFhYWFhYWFxYVNVVVVVVV - HlRTU009P1NLLjIvVVVVVR1RSFFSPjxKTD03G1VVVVUcNgE6UVNDIThBOT4yVVVVGQIAA0hSRCUkIiNF - MlVVVR07A0BRUlJOQiYnRjJVVVUdUkhRUlJSUlJPUEcyVVVVHktISEhISEhISElHMlVVVRoTBAgHBwcH - BwYFNDJVVVUYDTEtKysrKysoIBIzVVVVGAwwKiwsLCwsKSASM1VVVRgMMCosLCwsLCkgEjNVVVUYDDAq - LCwsLCwpIBIzVVVVGA0xLSsrKysrKCASM1VVVRoUDgsKCgoKCgkPNTJVVVUfEhAQEBAQEBAQERdVVcAH - AADAAwAAwAMAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMAD - AAA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/GuiOptions.cs b/BizHawk.Client.EmuHawk/config/GuiOptions.cs index f05e73be46..5a38dc3f4d 100644 --- a/BizHawk.Client.EmuHawk/config/GuiOptions.cs +++ b/BizHawk.Client.EmuHawk/config/GuiOptions.cs @@ -51,7 +51,7 @@ namespace BizHawk.Client.EmuHawk AcceptBackgroundInputCheckbox.Checked = Global.Config.AcceptBackgroundInput; AcceptBackgroundInputControllerOnlyCheckBox.Checked = Global.Config.AcceptBackgroundInputControllerOnly; HandleAlternateKeyboardLayoutsCheckBox.Checked = Global.Config.HandleAlternateKeyboardLayouts; - NeverAskSaveCheckbox.Checked = Global.Config.SupressAskSave; + NeverAskSaveCheckbox.Checked = Global.Config.SuppressAskSave; SingleInstanceModeCheckbox.Checked = Global.Config.SingleInstanceMode; BackupSRamCheckbox.Checked = Global.Config.BackupSaveram; @@ -87,7 +87,7 @@ namespace BizHawk.Client.EmuHawk Global.Config.AcceptBackgroundInput = AcceptBackgroundInputCheckbox.Checked; Global.Config.AcceptBackgroundInputControllerOnly = AcceptBackgroundInputControllerOnlyCheckBox.Checked; Global.Config.HandleAlternateKeyboardLayouts = HandleAlternateKeyboardLayoutsCheckBox.Checked; - Global.Config.SupressAskSave = NeverAskSaveCheckbox.Checked; + Global.Config.SuppressAskSave = NeverAskSaveCheckbox.Checked; Global.Config.SingleInstanceMode = SingleInstanceModeCheckbox.Checked; Global.Config.BackupSaveram = BackupSRamCheckbox.Checked; diff --git a/BizHawk.Client.EmuHawk/config/HotkeyConfig.Designer.cs b/BizHawk.Client.EmuHawk/config/HotkeyConfig.Designer.cs index d37183c230..1998af011d 100644 --- a/BizHawk.Client.EmuHawk/config/HotkeyConfig.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/HotkeyConfig.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HotkeyConfig)); this.label38 = new System.Windows.Forms.Label(); this.AutoTabCheckBox = new System.Windows.Forms.CheckBox(); this.HotkeyTabControl = new System.Windows.Forms.TabControl(); @@ -224,7 +223,7 @@ this.Controls.Add(this.HotkeyTabControl); this.Controls.Add(this.AutoTabCheckBox); this.Controls.Add(this.label38); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.HotKeys_MultiSize; this.Name = "HotkeyConfig"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Configure Hotkeys"; diff --git a/BizHawk.Client.EmuHawk/config/HotkeyConfig.resx b/BizHawk.Client.EmuHawk/config/HotkeyConfig.resx index 62c9bc5870..beb8b73c42 100644 --- a/BizHawk.Client.EmuHawk/config/HotkeyConfig.resx +++ b/BizHawk.Client.EmuHawk/config/HotkeyConfig.resx @@ -123,753 +123,4 @@ 114, 17 - - - - AAABAAsAMDAQAAAABABoBgAAtgAAACAgEAAAAAQA6AIAAB4HAAAQEBAAAAAEACgBAAAGCgAAMDAAAAAA - CACoDgAALgsAACAgAAAAAAgAqAgAANYZAAAQEAAAAAAIAGgFAAB+IgAAQEAAAAAAIAAoQgAA5icAADAw - AAAAACAAqCUAAA5qAAAgIAAAAAAgAKgQAAC2jwAAGBgAAAAAIACICQAAXqAAABAQAAAAACAAaAQAAOap - AAAoAAAAMAAAAGAAAAABAAQAAAAAAIAEAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHd3d3d3gIk5uTm5 - OAh3d3d3d4AAAAAAd3eHeHd3c5t5d5iXmTd3h3h3h3cAAAAAeIeIh4iIeXiIiIiIh5iIeIeIeHcAAAAA - d4+IiIiIiYiIiIiIiJuIiI+IiIcAAAAAePiPj/j4ibj4/4/4+JiPj4+Pj4cAAAAAeI+PiPj4iYj4j4j4 - iJiPj4+PiIcAAAAAePiI+IiPiYiIiPiPiLeIiIiI+IcAAAAAf4eId/iIiYiHeIiIiJiId3j4iIcAAAAA - eIhneIiIibiId4iIiJuHeHeIiPcAAAAAf4h3d4iIiYiHeIiIiJiHeHeIiIcAAAAAf3h3eHh4i4h3d4eI - iLiHd3eHiIgAAAAAf4d3d4eIiYh3d3h3iJh3d3h4eIcAAAAAf4h4eIeIibiHh4h4iJiIh4eHiPcAAAAA - h4+PiIiIg5l5uXmJuZuZuPj4+HgAAAAAAHd3d4eHeHuXm5uTl7l7mXd4dwAAAAAAAAAAeHh4h4eIeXiI - iHiHibAAAAAAAAAAAAAIeIiIiIiIm4iIiIiIh5AAAAAAAAAAAAAIePj4+P+IeYj4/4/495AAAAAAAAAA - AAAIiIj4+I+Pm4+PiPiPiJAAAAAAAAAAAAAIf4iIiIj4iYiHiI+I85AAAAAAAAAAAAAIiIh3d4iIefh3 - iIiIiJAAAAAAAAAAAAAIiIh3d3iIuYh3eIiIiJAAAAAAAAAAAAAIiId3Z3iIifh3iIiIiJAAAAAAAAAA - AAAIiId3d3iIk/d3d4iIi5AAAAAAAAAAAAAIiId4eHd4ifd3eHd3iJAAAAAAAAAAAAAIj3h3h4ePiYiH - h4eIibAAAAAAAAAAAAAAeI+Pj4+IebmHd3d5iYAAAAAAAAAAAAAAB3d3d3d3AIm5m5m5uAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA+ABAAgAfAADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAA - AAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAP - AADwAAAAAA8AAPwAAAAAPwAA/8AAAAf/AAD/gAAAB/8AAP+AAAAH/wAA/4AAAAf/AAD/gAAAB/8AAP+A - AAAH/wAA/4AAAAf/AAD/gAAAB/8AAP+AAAAH/wAA/4AAAAf/AAD/gAAAB/8AAP/AAAAH/wAA/+ADAA// - AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEABAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// - AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH - d3d3d5OXk5N3d3d3cAAAB4iIiImIiIiImIiIiHAAAIiPiPiDj4/4+Jj4+I94AACIiPj4+Yj4j4i4j4+I - iAAAiIiHiIuIeIiIn3eIj4gAAIiHeIiJiHeIiJh4eIiIAACIh3eIh4d4iIi4d3h4iAAAiId4d4mId3eI - mHd4eIgAAAf4iIj3uYt3uTh4iIiAAAAAAHeHd3eZmJibmYAAAAAAAACIiIiIi4iIiPewAAAAAAAAeI+P - +ImPj/j3cAAAAAAAAIiIiI+J+IiI+JAAAAAAAACIh4eIiYd4iIiwAAAAAAAAf4d3eIuHeIiIkAAAAAAA - AIiHd3iJh3h4iIAAAAAAAACIh3h3+Yh4d4eQAAAAAAAAB4iIiIebeYm5AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////// - ////////4AAAB+AAAAfAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPgAAAH/AAAf/wAAH/8AAB//AAAf/wA - AH/8AAB//AAAf/wAAH/+AAD//////////////////////////////////////ygAAAAQAAAAIAAAAAEA - BAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDA - wAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiIh7iI - iAAIiIeIiJiIgAiIiIiIiIiACHeHh4iYeIAIiIe3eLeIgAAHiHmJh4AAAAiI94+IAAAACHeHh4gAAAAI - h3eIeAAAAACI8ImLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AADAAwAAgAEAAIAB - AACAAQAAgAEAAOAHAADgDwAA4A8AAOAPAADxDwAA//8AAP//AAD//wAAKAAAADAAAABgAAAAAQAIAAAA - AAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAABsaGUAb2toAHBsaQBybmwAdXFuAHZzcAB5dXIAenZ0AH14 - dgB+enkAf3x5AIB7egCBfXoAgn58AISAfgAqW7oAPGa5AHp8gwB3f48AK2HMADtt1gA8btcAMGnbADxv - 2AA8cNgAEljhABFY5wAcXuUAElrrABNb7AABUPYABFP0AABR+AALWfgAFV73ABxg6AAYYPcAHWP3ABxk - 9wAYYfgAJmPgACdk4QAhYuQAKWXhACFn9gAkaPMAI2n3AClr8gAobfkALnH4ADl18gA6d/QAOnjzADR1 - +ABVecAAU3jEAFV+zwBHdNMAQnXZAEd32gBMfN8ATn/hAG+KvwBdgsUAX4bUAGOGygBmicwAb47NAGaN - 2wBvk9UAaZDeAHqX1gB0mNsAeJveAFGC5ABUhecAV4fqAFqL7QBGgfYATon5AFaI8ABTiPYAWIryAFKJ - +ABtlOIAcZfmAHqe4AB1m+kAeZ/tAGCQ8QBxm/EAfKDjAH+j5gBzofYAeqLyAH2l+ACDgYIAhoKAAIiE - ggCKhoQAi4iFAIyJhgCOiogAj4yJAIyLjACOjIwAkIuJAJCMigCRjowAk5COAJSQjgCWkpAAmJORAJiU - kgCalpQAm5iWAJyYlgCQlJ4AlZacAJmYmQCempgAn5yaAJybngCgm5oAoJyaAKKdnACkn50ApKCeAImS - qQCTm6kAhJS3AIibuwCjn6AAoqKiAKaioACnpKIAoqCkAKWlpQCoo6EAqKSiAKqlpACqqKYArKimAKOm - qwClpqkAoqWsAKmpqgCtqqgArqyqAKiprQCwrKoAsa6tALKwrgC1sa8ArrC0ALSxsAC1tLUAuLSyALm1 - tAC8ubcAvbq5AL+8uwC/vbwAwL27AMG+vQDDwb8AgJ3bAJChxACaq8oAmKjMAIOh3wCcrdAAn7HUAKGy - 0QCltdQAp7jXAKO12ACqu9oAqLndAK6/3QCHpeMAjKnnAIGl6QCGqu4AkK3rAJSx7wCDqfIAlbP0AJK0 - 9ACsveEAscHgALLD5wC2x+YAqMT3AKzG9QDDwcAAxMLAAMbEwwDGxcQAycbFAMvIxwDFxcgAzMrJAM7M - ygDPzcwA0M7NANLQzwDNztIAzM/XANLR0ADU0tEA1tTTANPT1QDW1dQA2NbUANnY1gDa2dgA3NrZAN7c - 2wDe3dwA4t/eAOLg3gDP2e4A4+LhAOTi4gDm5OMA6OblAOzq6gDw7u4A8/PyAPTz8gAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI5iYmJiYmJiYmJhlgBbLSUoKCUoKCUoJVIAlmFh - YmJiYmJiYmKOAAAAAAAAAAAAbw5zc3Nzc3JzcnJvChQhLBkYFhYWFhYWFyEaEnNzc3Nzc3Fxb28ObwAA - AAAAAAAAB42NjY2NjY2Nh4d/gSE7lpaWlpaWjpGHh0AhP42NjY2NjY2Nh39/BwAAAAAAAAAADpjG1tjY - 2NjW2NakgyFExtbX19fY2NjWyoQhQ8bW2NjY2NTW1qaNCgAAAAAAAAAAYqTa2tra19rX2traqCFI19ra - 2tfa2tra2qkhRtra2trX19vX2tqfDgAAAAAAAAAAY8na2tra2tva2traqR+n2tra29va2tra2q4hSdra - 2tra29va2trGYgAAAAAAAAAAY87YzM7Yzs7Y2NjYrB+r2M6kydjY2NjY2K4hStjMpMnW2NjY2NjJYgAA - AAAAAAAAZ9bJb23MDn/JyczMrCG1zHNiBYfJycnMzLAhV8xzBwcOpMnJycnMYwAAAAAAAAAAZ9qkjgEF - ApikpKTJsSG2xqScDmempqakxrIhXMZvbaQObaSmpqbWZgAAAAAAAAAAb96fmAVtB5yfn5+fsiG5oX8E - Do6fn5+fn7IhXaBnY59mYZ+fn5/XbQAAAAAAAAAAb+OOjg4EY5aXjo6aviG6mmEJc4eOjo6OmL8ht5hm - DnMEbY6OjpfbbQAAAAAAAAAAcuWNf20Kc39/f3+NwCG8lnkOB3F/f39/jcEhuI5tCQlmf39/f3/kbQAA - AAAAAAAAYubOjY2Hh4eHh43W3yFS0Y6NjYeHjX+Nxl4hwtCJh4eHh4eHjc7kDgAAAAAAAAAAf23Y2tra - 2trSzM7MZxAhMTMzMzMzMzMzMiEhLjIxM7za2tra2tZtfwAAAAAAAAAAAAB6enlmBGJycm9ycm04KRwc - GiEhJCQkKywsKykpHiERdnp6enoAAAAAAAAAAAAAAAAAAAAAYo2HjYeHh4eHiXp7OCFCkZGRkZGHjoeH - gisoAAAAAAAAAAAAAAAAAAAAAAAAAACWc5jJ0tbWztbO0syYOiGcytbW1tbW1tHMnDkhAAAAAAAAAAAA - AAAAAAAAAAAAAACOh8nX2tfa2tra2trOPCHG2trZ2dnZ2tra1kEhAAAAAAAAAAAAAAAAAAAAAAAAAACY - h8za2tra2tra2trYPSHW2tra2tra2tra2kUhAAAAAAAAAAAAAAAAAAAAAAAAAACYjtbY1oehpH/Y2NjW - Ph/W1od6eszY2NjY2EchAAAAAAAAAAAAAAAAAAAAAAAAAACamNLMoQJtcgGhzMzOSx/WyQZ5jcbMzMzM - zlUhAAAAAAAAAAAAAAAAAAAAAAAAAACanNamhwoKCgd6xqbJSyHYoQZjcqHGpsamyVYhAAAAAAAAAAAA - AAAAAAAAAAAAAACcodafY20HBG0On5/GTR/YmgVyepyfn5+fpFghAAAAAAAAAAAAAAAAAAAAAAAAAACc - xtaOB29iBXoEjZakTSHajQUHDo2Wl5aXn1khAAAAAAAAAAAAAAAAAAAAAAAAAACaxth/c39zc39zf3+g - WiHah3Nycn9/f39/ml8hAAAAAAAAAAAAAAAAAAAAAAAAAAChmOaYc3l5eXlzf3/buyHCn3pzf3N5eXl/ - 1k8jAAAAAAAAAAAAAAAAAAAAAAAAAAAADsbj4eHh4eHh2+PYEx4iUlFRUVFSTVFRNiFgAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAHNmZ2dnZ2dnZ2dnAABPKCUoKCUlKCgoLmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAPgAQAIAHwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAA - AAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAP - AAD8AAAAAD8AAP/AAAAH/wAA/4AAAAf/AAD/gAAAB/8AAP+AAAAH/wAA/4AAAAf/AAD/gAAAB/8AAP+A - AAAH/wAA/4AAAAf/AAD/gAAAB/8AAP+AAAAH/wAA/4AAAAf/AAD/wAAAB/8AAP/gAwAP/wAA//////// - AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAEAAAAAAAAAAAAAAABAAAAAQAAAAAAAG5q - ZwB2cnAAeHRyAHt3dAB9eXcAf3t4AIF9ewCCfnwAhIB+AEJqugAOWe8AEVrtAAVT8AAAUfcABFT2AAlW - 8gAIVvQAClj1AA9d9wAAUfgAC1n4ABNd9AAVYPgAI2LjACdk4QAnZeQAKGTiACBi6QAiZOwAJGbuACdp - 8AApa/MAJGv5AC5w9QAxc/cAOXbzADl29QBFcc0ATHbMAFR4wQBQeMwARnXTAEd11ABUfdMAZoG4AGSA - vAB9krgAVYDcAGqJxQBihMoAbozIAGGI2wBOhPMAT4b2AFGG9QBWifIAWY33AGaN4QBpkeUAa5n2AIaC - gACIhIIAioaEAIyHhQCMiIUAjoqIAJCMigCSjowAl5ORAJiUkgCalpQAm5iWAJyZlwCempkAn5yaAKCc - mgChnpwApaGgAKakogClpKcAqKOiAKikogCppqQArKemAKqopQCsqKcArqqoALCsqgCxrq0AsrCuAKmu - twCysbEAtbKxALa1tQC4tLIAuLW0ALq4twC8ubcAubi4AL26uQC+vLsAvLy8AMC9uwDAvbwAwsC+AIeh - 1ACKptsAjqfbAI+o3ACVqdIAkardAJ+y2wCrtssAu77HALK8zwCgs9wAs77RALC+2ACEp+8An7XlAL7B - ygC1wNMAtsDUAL7I3QDCwcAAxcLBAMbEwgDFxMQAycbFAMrIxgDBxc4AzMnIAM7MywDPzcwA0M7MANLQ - zwDEx9EA09HQANTS0ADW1NMA2NbVANvY1wDa2dkA3NrZAN7c2wDf3t0A7OvqAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEFBQUFBPz4uEBsbGxsY - GBAoP0FBQUE/PwgAAAAAAABNWWBgYGBgTxgzYGZgZmBgLwtVYGBgYGBTRwAAAAAAWVmOjo6Ojo6FHW6O - jo6Ojo5xEIeOjo6Ojo5VWQAAAABaZo6OjpGOjo0dcI6OkZGRjnoTjY6OkY6OjmJaAAAAAGCAhUmAS4yM - hx10YERPhYuLehONR0RPjYuMZmAAAAAAYIVmBQRLaGaBIXRmRz5pZmZ1E4E+YgZgZmaBYAAAAABgjVlE - A1NZWWghdEcIT1lZWXMTaQhLBFNZWYdgAAAAAGCOT0k/TU1NgCF4TT9ETU1NdROARD9ETU1TjV4AAAAA - AEuOhYWFgICMCiE7NDQ0NDojFjwwa4eFhY1JAAAAAAAAAAAARD9HR0dHLiYmDxgmKikpKScMMgAAAAAA - AAAAAAAAAABNWWiAgYCAaE8PW4CAgICAZjE4AAAAAAAAAAAAAAAAAE2Ajo6Ojo6OgA+LjpGOjo6OajUA - AAAAAAAAAAAAAAAAT4WOaYdgjo6JD42AYICOjo5vNQAAAAAAAAAAAAAAAABPjYUIRwFmhYMPjURNZoWF - hW81AAAAAAAAAAAAAAAAAFWNYAgECElmeQ+FPj9ZZmZgbzUAAAAAAAAAAAAAAAAAVY5LQQhHP1NmD4U/ - CUlTU1NvNQAAAAAAAAAAAAAAAABPk1NLTUlLTZEPfE1LS0tJU3c5AAAAAAAAAAAAAAAAAABJaWiAaICA - TykXJCQkJCQkEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD/////////////////////////////////////4AAAB+AAAAfAAAADwAAAA8AAAAPAAAADwAAAA8AA - AAPgAAAH/AAAf/wAAH/8AAB//AAAf/wAAH/8AAB//AAAf/wAAH/+AAD///////////////////////// - /////////////ygAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAgX17ADtu - 1wB4ibEAfo6xAGGFzwBujM4Ad5PMAGWK1gBpj9wAc5PXAHqX0wB2ltkAe5veAF+K4gBVhekAYIriAGaP - 5ABvleMAapbvAHOc7wBvmvAAdJ71AHeg9QB5ovcAjouIAJKOjACXkpAAmJWSAJ2YlwCempgAop+dAKah - nwCBkrsApqOhAKilowCqp6UAr6uqAK+sqwCwrKsAsa6tALKwrgC0sK4Arq2xALOxsQC0sbAAt7W0ALi0 - swC5trUAuri2ALy5twC+u7oAv728AMC+vACMnMIAgZrPAImeyQCbqMYApa3BAK61wwClscoAqrXOAK+4 - ygC1uMIAtLzQALO/2ACjtuAAxcLBAMbEwwDJxsUAycjIAMzKyQDPzcwA0c/OAMXK0wDV09IA1tTSANzZ - 2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtLS0+FBMTFT0tLS0AAAAk - RUVFBjxGRjsIRUVDJAAALUNDTA1AMkxKEi5GTCYAADIeGS4MOhouPwkcHC4tAAA0Mi0tNwoDIQsPAy4y - NAAAAAAcJic2Agc4OAVCAAAAAAAAJ0xGTRBJRk1BAAAAAAAAADIfAS4QJyRDPQAAAAAAAAA1HRwdECsb - HzkAAAAAAAAAAEZGSQAXFhYXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//AAD//wAA//8AAMADAACAAQAAgAEAAIABAACAAQAA4AcAAOAPAADgDwAA4A8AAPEP - AAD//wAA//8AAP//AAAoAAAAQAAAAIAAAAABACAAAAAAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUfgDAFH4AwBR - +AMAUfgDAFH4AwBR+AMAUfgDAFH4AwBR+AMAUfgDAFH4AwBR+AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1pZgxsaGVKbGhle2xo - ZYBsaGWAbGhlgGxoZYBsaGWAbGhlgGxoZYBsaGWAbGhlgGxoZYBsaGWAbGhlfmxoZVtuaWUWAEv/AQBR - +C0AUfh1AFH4lgBR+JkAUfiZAFH4mQBR+JkAUfiZAFH4mQBR+JkAUfiZAFH4mQBR+JkAUfiYAFH4ggBR - +EEAUPwHcGphFmxoZVtsaGV+bGhlgGxoZYBsaGWAbGhlgGxoZYBsaGWAbGhlgGxoZYBsaGWAbGhlgGxo - ZYBsaGV7bGhlSm1pZgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1p - ZhRsaGWWb2to8Xh0cv98eHX/fHh1/3x4df98eHX/fHh1/3x4df98eHX/fHh1/3x4df98eHX/fHh1/3p1 - c/9xbWv4bGlmtxxY0HkAUfnaAFD5/gBP+f8AT/r/AE/6/wBP+v8AT/r/AE/6/wBP+v8AT/r/AFD6/wBQ - +v8AUPr/AFD6/wBQ+f8AUfnrDFTllmZnbblybmr4enZz/3x4df98eHX/fHh1/3x4df98eHX/fHh1/3x4 - df98eHX/fHh1/3x4df98eHX/eHRx/29raPFsaGWWbWlmFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAG1pZgFsaGV6cm5r+4+Lif+fm5n/oJya/6Cbmf+fmpn/n5qZ/56amP+emZf/npmX/52Z - l/+dmJf/nZiX/52Ylv+cl5b/k46L/2Jviv4LVOX7AFH5/yRl5f9OedD/UnvO/1F6zv9Res3/UXnN/1B5 - zf9Qec3/UHnM/1B4zP9QeMz/T3jL/053y/8wadz/BFP2/wNR8f5Qa6L/l5KO/6Cbmv+gnJr/oJuZ/5+a - mf+fmpn/npqY/56Zl/+emZf/nZmX/52Yl/+dmJb/nZiW/5uWlf+Mh4X/cW1r/GxoZXltaWcBAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsaGUVbWlmzYmFg/+qpaT/qaSj/6ijov+ppKP/qKSj/6ij - ov+noqH/p6Kh/6ahoP+moZ//paCf/6Sgnv+jnp3/op2c/6Sem/9Rd8T/AE/5/yFk6P+PnbX/q6qn/6uq - p/+rqqf/q6mn/6qppv+pqKX/qail/6inpP+npqP/p6aj/6alov+ko6D/l56n/ztx1/8AUPn/NGvc/6Ki - p/+ppKP/qaSj/6mko/+opKP/qKOi/6eiof+noqH/pqGg/6ahn/+loJ//pJ+e/6OenP+inpz/op2c/4WB - f/9taWbLbGllFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbGhlK3BsaeialpT/sKyr/7Wx - sP/DwL//ycbF/8nGxf/JxsX/ycbE/8jFxP/IxcT/yMXE/8jEw//IxMP/xMHA/7Swr/+mo6P/Q3PV/wBO - +/9Tftb/tLOx/729vP/Ixsb/ycjI/8nIyP/JyMf/yMfH/8jHx//Ix8f/yMbG/8fGxv/GxcX/vby8/6+t - q/9ujML/A1P2/yBk6P+hpLD/ura0/8bDwv/JxsX/ycbF/8nGxf/JxsT/yMXE/8jFxP/IxcT/yMTD/8fE - w//Avbz/r6uq/6mko/+UkI7/b2to6GxoZSsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGxo - ZTVxbWrsn5ya/7u3tv/S0M7/3dva/97c2//e3Nv/3tzb/97c2//e3Nv/3tzb/97c2//e3Nv/3tzb/97c - 2//X1NP/trS1/0R01/8ATvv/XITX/8nGw//b2dj/3tzb/97c2//e3Nv/3tzb/97c2//e3Nv/3tzb/97c - 2//e3Nv/3tzb/93b2v/Lycb/eJPG/wVU9f8gZOn/r7S//9jV0//e3Nv/3tzb/97c2//e3Nv/3tzb/97c - 2//e3Nv/3tzb/97c2//e3Nv/3dva/9DOzP+zr67/mZWT/3BsaexsaGU1AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABsaGU1cW1q66Ognv/IxcT/3NrZ/93b2v/d29r/3dva/93b2v/d29r/3dva/93b - 2v/d29r/3dva/93b2v/d29r/3tzb/8fGx/9Hd9r/AE36/2GJ3P/Z1dH/3tzb/93b2v/d29r/3dva/93b - 2v/d29r/3dva/93b2v/d29r/3dva/93b2v/d29r/3NnV/4Kcz/8FVPX/Imbr/77Dz//f3Nr/3dva/93b - 2v/d29r/3dva/93b2v/d29r/3dva/93b2v/d29r/3dva/93b2v/c2tn/w8C+/52Zl/9wbGrrbGhlNQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa2dkNXFtauunpKL/zsvK/93b2v/d29r/3dva/93b - 2v/d29r/3dva/93b2v/d29r/3dva/93b2v/d29r/3dva/97c2//My8z/Snrd/wBN+v9kjN//3NnU/93b - 2v/d29r/3dva/93b2v/d29r/3dva/93b2v/d29r/3dva/93b2v/d29r/3dva/93a1/+HotT/BVT1/yNo - 7P/Cx9P/39za/93b2v/d29r/3dva/93b2v/d29r/3dva/93b2v/d29r/3dva/93b2v/d29r/3dva/8nG - xf+hnZz/cW1q62xoZTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGtnZDVxbWvrrKmn/9HP - zv/c2dj/3NrZ/93b2v/c2tn/3NnY/9za2f/e29r/3drZ/9zZ2P/c2dj/3NnY/9zZ2P/d2tn/zs3O/0x8 - 4P8ATfr/Z4/i/93Z1f/c2tj/3drZ/9vY1//b2Nf/3drZ/9za2P/c2dj/3NnY/9zZ2P/c2dj/3NnY/9zZ - 2P/d2db/iqTX/wZU9v8lae7/w8nU/93a2P/c2tn/29jX/9rY1//c2tn/3dvZ/9za2P/c2dj/3NnY/9zZ - 2P/c2dj/3NnY/9vZ2P/Mysn/paKg/3FtautsaGQ1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABrZ2Q1cm5r67Ctq//V0tH/1tTS/8XDwf+loqD/wb68/9fV0//Gw8H/pKGf/727uf/V09L/1dLR/9XS - 0f/V0tH/1tPR/87Nzv9Of+P/AE36/2qS5f/b19P/0tDO/7Ctq/+XlJH/mZaT/7GvrP/Rzsz/1dPR/9XS - 0f/V0tH/1dLR/9XS0f/V0tH/2dXR/42n2v8GVfb/Jmrv/8PJ1P/X1dL/v727/5qWlP+XlJH/oJ2b/7m2 - tP/Rz83/1dPR/9XS0f/V0tH/1dLR/9XS0f/V09H/z83M/6qnpf9xbWrra2dkNQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAa2dkNXJua+u1srD/2NXU/87My/+7ubf/dXFu/5WRj//DwcD/m5mX/3Bs - af+urKr/zcvK/8zJyP/Mycj/zMnI/83Lyf/Ozc7/UYLl/wBM+f9tlej/2NXQ/8jGxP+UkY//iYaE/4WC - f/9zb23/qqem/83Lyv/Mycj/zMnI/8zJyP/Mycj/y8nI/9PPzP+Pqt3/BlX2/ydr8P/DyNT/z83L/6Si - oP9va2j/iISC/4F9e/90cW7/n5ya/8rIx//Mysn/zMnI/8zJyP/Lycj/zcvK/9LQz/+uq6n/cm5r62tn - ZDUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGtnZDVybmzruba1/9rY1//HxMP/wL28/4eE - gf9wbGn/enZ0/3Jua/98eHX/u7m3/8TCwf/EwcD/xMHA/8TBwP/Gw8H/zs3O/1OE6P8ATPn/cJjr/9XS - zf/DwL//v727/766uf+joJ7/b2to/5iVk//Gw8L/xMHA/8TBwP/EwcD/xMHA/8TBwP/Oysf/kq3g/wdW - 9/8obfL/wsfT/8jEwv+gnZv/dXFu/7GurP+7ubf/h4OB/3ZycP+2s7L/xcLB/8TBwP/EwcD/xMHA/8fE - w//V09H/s7Cu/3Jua+trZ2Q1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrZ2Q1c29s6767 - uf/d29r/wL27/726uP+YlJL/cm5r/5KOjP9zb2z/jYmH/7u4t/+8urj/vLm4/7y5uP+8ubf/vru5/87N - zv9Wh+r/AEz5/3Sc7v/Tz8v/vLm3/62qqP+IhIL/c29s/3l1c/+opaP/vbq4/7y5uP+8ubj/vLm4/7y5 - uP+8ubf/ycbC/5aw4/8HVvf/Km7z/8LH0//Avbr/m5iW/3Rwbf+sqaf/v7y6/5mWlP9wbWr/pKGf/726 - uf+8ubj/vLm4/7y5t//Avbv/2NbU/7e1s/9ybmvra2dkNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAa2dkNXNvbOvDwL7/4d7d/7m1s/+0sa//paGf/3Zyb/+IhIL/dHBt/5uYlf+1srD/tLGv/7Sx - r/+0sa//tLCu/7azsf/Ozc7/WYnt/wBM+f93n/L/0c3I/7GurP+Ig4H/cW1q/4+Mif+opKL/tLGv/7Sx - r/+0sa//tLGv/7Sxr/+0sa//s7Cu/8TAvP+ZtOb/B1b4/ytw9f/Cx9P/uLSx/5eTkf9zb23/pqKg/7Wx - r/+Niof/cW1q/6Kenf+1sa//tLGv/7Sxr/+0sK7/ubWz/9vZ1/+8ubf/cm9s62tnZDUAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGtnZDVzb2zrx8XD/+Ti4P+xraz/rKem/6ijov98eHb/bmto/3Zy - b/+jn57/rKin/6ynpv+sp6b/rKem/6ynpv+uqqj/zs3O/1uM8P8ATPn/eqL1/87Jxf+opKP/gn58/3Nv - bf+QjIr/kY6M/6Whn/+sqKf/rKem/6ynpv+sp6b/rKem/6unpv+/urf/nLfp/whX+P8scfb/wcbS/7Cr - qf+Sjoz/cGxp/4yIhv+NiIf/c29s/356eP+no6L/rKin/6ynpv+sp6b/q6em/7GtrP/e29v/wL68/3Nv - bOtrZ2Q1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqZmMzdHBt68zKyf/o5ub/rain/6Oe - nf+kn57/i4eF/3Zyb/+FgX7/op2c/6Sfnv+kn57/pJ+e/6Sfnv+kn57/p6Kh/9DP0P9dj/L/AEv4/3yk - 9//OycX/o56d/5eSkf99eXb/dnJv/3t2dP+ZlZP/pZ+e/6Sfnv+kn57/pJ+e/6Sfnv+jnp3/vbi0/6G7 - 7f8IV/j/LXL4/8PI1f+po6H/k46M/3h0cv94dHH/eXVy/4N/ff+blpX/pJ+e/6Sfnv+kn57/pJ+e/6Oe - nf+tqKf/4+Df/8XCwf9zb2zra2dkMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa2dkH3Bs - ad/CwL//+Pf2/8G9vP+gm5n/npmX/5yXlf+ZlJL/m5aU/56Zl/+emZf/npmX/56Zl/+emZf/n5qY/7Ov - rf/n5eT/bJr3/wBM+P9bkPr/29ze/6yno/+gmpf/nZiU/5uVkv+clpP/n5mW/6Cal/+gmpf/oJqX/6Ca - l/+gmpf/paCd/9PQzP+Hrvb/AFH4/z19+v/e4ur/t7Kt/6Calv+clpP/m5WS/5qVk/+dmJb/npmX/56Z - l/+emZf/npmX/56Zl/+gm5n/wLy7//Dv7v+8urj/b2to32tnZB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAG1pZgprZ2SokY6M/+zs6//19PT/1NHQ/8fEw//HxMP/x8XD/8fEw//HxMP/x8TD/8fE - wv/HxML/x8TC/87Lyf/q6ej/8/Hu/3mWzP8BUPH/D176/4av+v++yN//rbPE/6qwwf+qsMH/qrDB/6qv - wP+qr8D/qq/A/6mvwP+pr8D/qrDB/7nB1f+du/P/Jmz5/wBO+P9JgvH/w9f6/7XG5/+Vpcb/maXA/7G1 - wf/Gw8H/yMXD/8fEw//HxMP/x8TC/8fEwv/HxML/0tDP//Hw8P/m5eT/j4uJ/2tnZKhtaWYKAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbGhlO21qZ9qQjYv/w8LB/9LR0f/S0dD/0tHQ/9LR - 0P/S0dH/0tHQ/9HQz//JyMb/xcTC/8XEwv/GxMP/xsTC/6KfnP9tb3T/KVy//wFR9/8GVfr/GGL6/xpj - +P8aYvj/GmL4/xpi+P8bY/f/GmP3/xpi+P8aYvj/GmL4/xpi+P8ZYvn/Clj5/wBQ+f8AUPn/B1X2/xJe - +f8TX/r/EV34/xNe+P8wdPn/iq/2/8zQ1//S0M//0dDP/9HQz//R0M//0c/P/9HPzv/Bv73/j4yJ/21p - ZtptaGU7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG9raAFsaGU+a2dkqG9s - adt1cW7kdXFv43Vxb+N1cW7mdHBt+3h0cf+KhoT/k46N/5OPjf+Tjoz/k46M/5KNi/+Oiof/kIuI/4aJ - lP9KdMj/Gl3n/wtW8P8KVfH/Clbx/wlV8P8CUfT/AFD4/wBQ+P8HVPT/Clby/wpW8v8KVvL/C1bx/w9Z - 7/8RWu7/EVru/xFZ7v8QWO7/EFju/xBY7v8MV/D/AVD3/wVT9v86ZLj7cnFx5nVxbuN1cW7jdXFu43Vx - buN0cG7kb2to22tnZKdtaGU7bmpnAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAG1pZgpqZmMZaGRhHGhkYRxnY2AZa2dkVG5qZ+6MiIb/paCf/6ahoP+loJ//paCe/6Sf - nv+jn53/o56d/6Oenf+jnpv/n5uc/5KVo/+Djqv/fYyt/36Nrf9zhq7/G1zd/wBQ+v8kZeb/dY6+/4OV - t/+Bk7f/gZO2/4GTtf+NmK7/kJqs/5CZq/+PmKv/j5iq/46Xqv+Ol6n/g5Ku/0Z10P8EU/X/A1Hz7SJX - xU9yZlEZaGRhHGhkYRxoZGEcaGRhHGtmYxltaWYKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGxoZXB4dHH/pqGg/62o - p/+tqaj/sa2s/7Swr/+0sK//tLCu/7Ovrf+zr63/s66t/7KurP+yrqz/sKuo/6umo/+oop3/k5in/xNb - 7P8HVfX/eJLE/7Cuq/+ysK//tbSy/7a1s/+2tbP/tbSz/7Szsv+0s7L/s7Kx/7Kysf+ysbD/rays/6mo - pv+Yn6v/Jmbj/wBQ+f4AUfltAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABrZ2R/gX16/6+rqv+4tLP/zcrJ/9jW1f/Z19b/2dfW/9nX1v/Z19b/2dfW/9nX1v/Z19b/2dfW/9nW - 1f/S0M//vLe1/4iVtf8MV/L/Elvx/5+ovP/DwsD/1dPS/9nX1v/Z2Nf/2dfX/9nX1//Z19f/2dfW/9nX - 1v/Z19b/2dfW/9fV1P/Jx8f/ra6x/0J12f8AUPn/AFH4fwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAa2dkf4SAfv+2srH/zcrI/97b2v/d29r/3dva/93b2v/d29r/3dva/93b - 2v/d29r/3dva/93b2v/d29r/3tzb/9jU0f+QoMH/C1fy/xNc8f+ttMb/2tjV/97c2//d29r/3dva/93b - 2v/d29r/3dva/93b2v/d29r/3dva/93b2v/d29r/3tva/8PExf9GeNv/AE/5/wBR+IAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGtnZH+Fgn//vLm4/9TS0f/d29r/3dva/93b - 2v/d29r/3dva/93b2v/d29r/3dva/93b2v/d29r/3dva/93b2v/d2tf/mqrL/wxX8v8UXPL/tr7P/97b - 2f/d29r/3dva/93b2v/d29r/3dva/93b2v/d29r/3dva/93b2v/d29r/3dva/97c2v/Pz9D/Snzf/wBP - +f8AUfiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrZ2R/h4OB/8K/ - vv/W09L/3dva/93b2v/b2dj/2NbV/9vZ1//d29r/2dfW/9nX1v/d29r/3dva/93b2v/d29r/3drY/56u - z/8MWPP/FF3z/7vC1P/e29n/29nY/9jW1f/Y1tX/2NbV/9nX1v/c2tn/3dva/93b2v/d29r/3dva/93b - 2v/e29r/0dHS/01+4v8AT/n/AFH4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAa2Zjf4mGg//HxcT/1tTT/9nX1f/a2Nb/wL68/5CNiv+uq6n/0tDO/5uYlv+YlZL/0c7N/9nX - 1v/Z19X/2dfV/9vX1P+hsdL/DVj0/xVe9P+9xdf/3NnW/8LAvv+Sj4z/jYqH/4yJhv+cmZf/09HP/9nX - 1v/Z19X/2dfV/9nX1f/Z19X/2tfV/9HR0v9PgOT/AE/5/wBR+IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpmY3+Lh4X/zsvK/9XS0f/Rz87/0dDO/6GenP9qZmP/iISC/7u4 - t/92cm//cW1q/7e1s//S0M//0M7N/9DOzf/U0c7/o7PV/w1Z9P8WX/T/wMfZ/9XS0P+xr63/cm5r/42K - h/+dmpj/p6Sj/8zKyf/Rz87/0M7N/9DOzf/Qzs3/0M7N/9HPzv/Q0NH/UYPn/wBP+f8AUfiAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqZmN/jYmH/9TR0P/T0c//yMbF/8XC - wf+LiIb/c29s/3x4df+fnJr/dHBt/3NvbP+fnJr/ycbF/8jFxP/HxcT/zsrH/6W21/8OWfX/F2D1/8LK - 2//Nysj/q6mn/3Rxbv+gnZv/t7W0/767uv/HxcT/yMXE/8jFxP/IxcT/yMXE/8jFxP/IxsT/zs7P/1SG - 6f8AT/n/AFH4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAamZjf4+L - if/Z19X/0s/O/8G+vf+4tbP/enZz/4eEgf99enf/gn98/3p2dP+BfXv/iYaD/767uf/Avrz/wL28/8jE - wf+ouNr/Dlr1/xhh9v/Fzd7/xsPA/6ajof9xbWr/dnJv/3l1cv+WkpD/v7y7/8C+vP/Avbz/wL28/8C9 - vP/Avbz/wb68/83Nzv9WiOz/AE/4/wBR+IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAGpmY3+RjYv/393c/9HOzf+6trX/paKg/3NvbP+Vko//g399/25qZ/+Hg4H/joqI/3h0 - cf+wrKr/uba0/7i1s//Cvrv/qrrc/w9a9v8ZYff/yM/g/7+8uP+hnZv/c29s/5SRj/+no6H/rqqo/7i1 - s/+5tbP/ubWz/7m1s/+5tbP/uLWz/7m2tP/My8z/WYvv/wBP+P8AUfiAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqZmN/k4+N/+Xj4v/Qzcv/sq6t/5KOjP9wbGr/npuZ/4uH - hf9qZmP/joqI/5iUk/9xbWv/nZmX/7GtrP+wrKv/vLe0/6293/8PW/b/GmL4/8rS4/+4tLH/m5eV/3Bs - av+AfHr/iYWD/5WRj/+vq6n/sa2r/7Gsq/+xrKv/sayr/7Csq/+xraz/y8rL/1yO8f8AT/j/AFH4gAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaWVif5WSj//r6un/zsvK/6ij - ov+Tjo3/hoKA/6Oenf+YlJL/hH99/5mVk/+gm5r/hoJ//5iUkv+ppKP/p6Kh/7axrv+vwOH/EFz3/xtj - +f/O1Ob/sq2q/5yYlv+FgX7/gn58/4J9e/+OiYf/pqGg/6ijov+oo6L/qKOi/6ijov+oo6L/qaSi/8rJ - yv9gkfT/AE/4/wBR+IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpm - Y36Oioj/8O/u/9bT0v+jnp3/n5qZ/6Cbmf+gm5r/oJua/6Cbmf+gm5r/oJua/6Cbmf+gm5n/oJua/5+a - mf+8t7X/xNDp/xVf+P8VYPn/xtTv/7izsP+fmpn/oJuZ/6Cbmf+gm5n/oJuZ/6Cbmv+gm5r/oJua/6Cb - mv+gm5r/oJuZ/6ahn//T1Nf/VYz3/wBP+P8AUfh7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABrZ2Reend0+d/f3f/19fT/xMHA/6mko/+noqD/p6Kg/6eioP+noqD/p6Kg/6ei - oP+noqD/p6Kg/6eioP+0sK//4uDe/9/l8f8na/D/AVL5/3yn+v/Y2Nv/trGs/6uloP+rpaD/q6Wg/6ul - oP+rpaD/q6Wg/6uloP+rpaD/q6Wg/66oo//Lx8X/uczx/x9o+P8AUPj2AFH4VQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbGhlHG1pZsWXlJL/4+Pi//Hx8P/n5eX/5eTj/+Xk - 4//l5OP/5ePj/+Xj4//k4+L/5OPi/+Tj4v/k4+L/7Ovq/+7t7P+1s7L/PGSy/ABQ9v0PW/n/WpD6/3Ka - 7f9sk+b/bJPm/2yT5v9sk+b/bJPm/2uT5v9rk+b/a5Pm/2uT5v9vluj/bJn1/yhu+f8AUfj/AFH4wgBR - +BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsaGU7bWlmyn56 - ePyVk5H/m5mX/5uYlv+bmJb/m5iX/5uYlv+bmJb/mpiW/5qYlv+al5X/mpeV/5qWlf+JhoP/cW1p6lxk - eYoDUvSeAFD49ABP+P8ATvn/AE/5/wBP+f8AT/n/AE/5/wBP+f8AT/n/AE/5/wBP+f8AT/n/AE/5/wBO - +P8AUPj8AFH4ygBR+DsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAGxoZSNrZ2NnaWVigGllYoBpZWJ/aWVif2llYn9pZWJ/aWVif2llYn9pZWJ/aWVif2ll - Yn9pZWKAamZjd2xoZT56bFYGAFD8DQBR+FIAUfiKAFH4mQBR+JkAUfiZAFH4mQBR+JkAUfiZAFH4mQBR - +JkAUfiZAFH4mQBR+JkAUfiUAFH4bgBR+CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFH4AgBR+AMAUfgDAFH4AwBR - +AMAUfgDAFH4AwBR+AMAUfgDAFH4AwBR+AMAUfgDAFH4AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////8AD/////AAAAAAAAD/4AAAAAAAAH/AA - AAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAA - AA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AA - AAAAAAAP+AAAAAAAAB/4AAAAAAAAH/4AAAAAAAB///AAAAAAP///8AAAAAA////wAAAAAD////AAAAAA - P///8AAAAAA////wAAAAAD////AAAAAAP///8AAAAAA////wAAAAAD////AAAAAAP///8AAAAAA////w - AAAAAD////AAAAAAP///8AAAAAA////wAAAAAD////gAAAAAf////AAAAAD///////+AA/////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////KAAAADAAAABgAAAAAQAgAAAAAACAJQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAbGhlBGllYg1nY2AOZ2NgDmdjYA5nY2AOZ2NgDmdjYA5nY2AOZ2NgDmll - Yg1saGUEAAAAAABR+AQAUfgVAFH4HQBR+B0AUfgdAFH4HQBR+B0AUfgdAFH4HQBR+B0AUfgYAFH4BwAA - AABsaGUEaWViDWdjYA5nY2AOZ2NgDmdjYA5nY2AOZ2NgDmdjYA5nY2AOaWViDWxoZQQAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsaGUibWlmlHJta8xzb2zPc29sz3NvbM9zb2zPc29sz3Nv - bM9zb2zPc29sz3FtaspuaWSMNl2uOgBQ+o8AT/rSAE/62gBP+toAT/raAE/62gBP+toAT/raAE/62gBP - +toAT/rWAFD6oyNZxkpuaWSMcW1qynNvbM9zb2zPc29sz3NvbM9zb2zPc29sz3NvbM9zb2zPcm1rzG1p - ZpRsaGUiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGxoZRBuamewg399/5eTkf+ZlJL/mJOR/5eT - kf+XkpD/l5KQ/5aSkP+WkZD/lpGP/5SPjf98e3/8H1nM6wRU9/0vauD/P3HY/z5w1/8+cNf/PnDX/z1v - 1v89b9b/PW/W/z1v1f8zatr/Clbz/hJW3fJ2e4r9l5KQ/5mUkv+Yk5H/l5OR/5eSkP+XkpD/lpKQ/5aR - kP+WkY//lI+N/4F9e/9uamewbGhlDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpmYz97d3TzpqGg/6un - pv+uqaj/r6qp/66qqP+tqaf/rain/6ynpv+rp6b/qaWj/6ahnf+Ajq3/CVXw/0F02/+jp67/rq6s/6+u - rv+urq3/ra2s/62sq/+srKv/q6uq/6qpqP+io6X/Vn7K/wRU9f9siMH/rqik/66qqP+vqqn/rqqo/62p - p/+tqKf/rKem/6unpv+ppKP/paCf/5+amP95dXLya2dkPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpm - Y1qFgX/9s6+u/8fDwv/V0tH/1tTT/9bT0v/W09L/1tPS/9bT0v/V09L/1NHQ/8S/vP99kb3/BVP1/26O - z//IxcH/1NPS/9bU1P/W1NP/1tTT/9bU0//W1NP/1dTT/9TT0v/IxcL/gZfB/wdW9P9kiM7/yMTA/9XS - 0f/W1NP/1tPS/9bT0v/W09L/1tPS/9XT0v/U0dD/w8C//6unpv+Cfnv9a2djWgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAGpmY12IhIH9wr69/9vZ2P/e3Nv/3dva/93b2v/d3Nv/3dzb/93c2//d3Nv/3tzb/9zZ - 1v+Knsr/BFP1/3mX2P/d2tb/3tzb/93b2v/d29r/3dva/93b2v/d29r/3dva/97c2//e29j/kKbQ/wdW - 8/9uk9n/3drW/97c2//d29r/3dva/93b2//d3Nv/3dzb/93c2//e3Nv/29nY/7y4t/+EgH79amZjXQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpmY12Kh4T9ysfG/93b2v/e3Nv/3tzb/93b2v/e3Nv/3tzb/93b - 2v/d29r/3dva/97b2P+RpdH/BVP1/36d3v/g3Nj/3tzb/97c2//e3Nv/3dva/93b2v/d29r/3dva/93b - 2v/g3Nn/l63W/whW9P9zmN7/39zY/97c2//e3Nv/3tzb/93b2v/d29r/3dva/93b2v/d29r/3drZ/8TB - wP+Hg4H9amZjXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGllYl2Nioj9zszL/9jW1f/Lycf/z8zL/9nX - 1f/Mycj/zcrJ/9nW1f/Y1tX/2dbV/9vX1P+UqdX/BVT2/4Gg4f/d2dT/zMrI/7y5uP/EwcD/1tPS/9nW - 1f/Y1tX/2NbV/9jW1f/c2NT/mq/Y/wlX9f91muD/3NjU/8zJyP+8ubj/wb+9/9HPzf/Z19X/2NbV/9jW - 1f/Z1tX/2dbV/8nGxf+Kh4T9amZjXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGllYl2RjYv909DP/8/N - y/+al5T/ko+N/7+9u/+IhIL/op+d/87My//Ny8r/zcvK/9LPy/+WrNj/BlT2/4Sj4//U0cz/pKGf/4qG - hP+AfHr/pqSi/87My//Ny8r/zcvK/83Lyv/Szsv/m7Ha/wpY9v93m+L/1NDM/5yZl/98eXb/h4OB/4mG - g/+9u7n/zszL/83Lyv/Ny8r/z83L/83Kyf+Niof9aWViXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGll - Yl2UkI7919XT/8fEw/+npKL/dHBt/357eP90cG7/r6yq/8TBwP/DwL//wsC+/8nGwv+Zrtr/BlX3/4em - 5v/MyMT/vbq5/66qqf9/fHn/kI2K/8PBv//DwL//w8C//8LAvv/IxMH/nbLb/wtZ9v94neP/y8fD/5OQ - jv+PjIn/ure2/4OAff+TkI3/w8C//8PAv//CwL7/xsPC/9HPzf+QjYv9aWViXQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAGhkYV2XlJH93NnY/726uP+vq6r/fnp3/4eDgf9/fHn/s7Cu/7i1s/+4tbP/uLWz/8G9 - uf+csd3/B1b3/4qp6f/Fwbz/n5uZ/3l1c/+GgoD/qqel/7m1tP+4tbP/uLWz/7i1s/+/u7f/n7Td/wta - 9/96nuX/w7+6/4+Lif+MiYb/uba0/4yIhv+Gg4D/t7Sy/7i1s/+4tbP/vbq4/9bT0v+UkI79aWViXQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhkYV2al5X94N7d/7Ovrv+sqKb/hYF//3Ftav+Lh4X/ramo/62p - qP+tqaj/rain/7izsP+ftOD/CFb4/42s7P+8t7P/i4aE/3l1c/+VkZD/pKCf/66pqP+tqaj/ramo/62p - p/+1sK3/obbf/w1b+P97oOb/urWx/4mFg/9/e3n/lJCP/3h0cf+RjYv/rqmo/62pqP+tqaf/s6+u/9rX - 1v+Xk5H9aGRhXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdjYFicmZf95+bl/66qqP+inZz/k46M/396 - eP+WkY//o56c/6KdnP+inZz/oZyb/7Suq/+mu+b/CFf5/46u8P+6tK//mZSS/4N+fP9/enj/lZCO/6Oe - nP+inZz/op2c/6Kdm/+wqqb/pbrk/wxb+f+Bpez/trCs/5CLiP9/enj/gHx5/4yHhf+fmpn/op2c/6Kd - nP+hnJv/rqmo/+Hf3v+ZlZP9aGRhWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdjYDmIhYPv6ejo/9bT - 0/+xraz/r6qp/6+qqf+vq6n/r6qp/6+rqf+vqqn/sq6s/9jV0v+/zev/DVnz/1CK+v/Cydf/rqys/6mm - p/+ppqb/qaan/6mmp/+ppqf/qaam/6uoqf/Aw8r/b5z1/wVV9/+auvb/yszS/6Giqv+mpKb/r6qn/7Cr - qf+vq6n/r6qo/6+qqP+xrav/1NHQ/+Ph4P+Gg4HvZ2NgOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGtm - YwpuamebmpeV/c7NzP/Qz87/zs3M/8/Ozf/Qzs3/z87M/8rIx//IxsT/ysjH/8zKyf+VlJb/MV+5/wVV - 9/8ucfr/Pnjy/zt28P88du//PXfu/z127v87de//O3Xv/zx38P8zdPj/CFb6/wFQ+P8obPf/Nnb6/y1t - 8f89eO//iqzt/8vN0//Pzcv/zs3L/87My//Pzs3/zMrJ/5iVk/1uameba2dkCgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABrZ2QWa2djd3RwbbJ5dnO3eXZztnh0cc95dXP+j4uJ/5mVk/+YlJL/mJOS/5aR - j/+TjYr/i4yU/1V4w/8pY97/H1/j/yBf4/8SWOf/AE74/wdU9P8eYef/IWHm/yBh5f8kY+P/LWff/y1n - 3/8qZd//KWXf/yll3/8WXOr/BlX2/z5nuut5dXO5eXZzt3l1c7d5dXO3c29ssmtnZHZrZ2QWAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFMSANGQT0EAAAAAWtnZH2FgX7/qKOi/6ml - o/+qpqX/q6al/6qlpP+ppaP/qaSi/6ijof+hoKP/mpuj/5qaoP9Rd8P/A1P2/12Dzf+epK7/oKWv/6Cl - sP+ipq3/pqeq/6Wnqf+kpqn/pKWo/6Gipf+LmK3/J2bj/wBP+NcIT+IggjQAAkdCPgRHQj4EU09LAwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5q - aJyXk5H/trKx/8jFw//Rz83/0s/O/9LPzv/Rz87/0c/O/9HOzf/Rzs3/y8jG/7Wwrv9JddP/EFry/52n - vf/IxsP/0dDO/9LRz//S0M//0tDP/9LQz//R0M//0c/O/8zLyv+5uLX/VH7Q/wBQ+fAAUfgvAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAG9saZyem5n/ysfG/93b2v/e3Nv/3tzb/97c2//e3Nv/3tzb/97c2//e3Nv/3tzb/8/N - zP9Kedr/Elvy/7K6zP/e29n/3tzb/97c2//e3Nv/3tzb/97c2//e3Nv/3tzb/97c2//W09H/YYjW/wBQ - +PEAUfgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBsaZyjoJ7/0tDP/93b2v/d29r/3dva/93b2v/d29r/3dva/93b - 2v/d29r/3tza/9fV1P9PfuD/E1zz/7vD1f/f3Nr/3dva/93b2v/d29r/3dva/93b2v/d29r/3dva/93b - 2v/c2db/aI7d/wBQ+PEAUfgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBsaZyppqT/1dLR/9rY1//T0M//p6Si/7+8 - u//Avbv/pqOh/9PQz//a2Nf/2tjW/9bU0/9SgeL/FF30/73F2P/V0tD/qaak/56bmP+in53/zMrI/9vY - 1//a19b/2tfW/9rX1v/a19T/apHg/wBQ+PEAUfgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBsaZyuq6r/1dPS/9DO - zf+7uLf/cm9s/5OQjv+XlJL/cW1q/7i1tP/Qzs3/z83M/9DOzf9UhOX/FV71/77G2P/Gw8H/f3x5/5aT - kP+opqT/xcPC/8/NzP/Pzcz/z83M/8/NzP/T0M3/bZTj/wBQ+PEAUfgwAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFt - apy0sa//1tPS/8bDwv+in53/eXZz/4SAfv+Cf3z/eHRy/5+bmf/FwsH/xMHA/8rIx/9Xhuj/F2D2/77G - 2P+9ubf/fnp3/4qHhP+dmpj/v7y7/8TBwP/EwcD/xMHA/8TBwP/Mycb/cJfl/wBQ+PEAUfgwAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAHFtapy6t7X/1tTS/7q3tf+MiIb/iIWC/4B8ev94dHH/i4eF/4iEgv+4tbP/ura0/8bD - wv9Zier/GGH3/7/G2P+0sK3/fHh2/42Jh/+empj/trOx/7q3tf+6t7X/ure1/7m2tP/Gwr//c5ro/wBQ - +PEAUfgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFtapzAvbv/19TT/6yop/9+enf/lJCO/4aCgP98eHX/mZST/315 - dv+opKP/r6qp/8C9vP9ci+3/GWL5/7/G2P+rpqP/e3d1/4B8ev+Lh4X/qKSj/6+rqv+vq6r/r6uq/66q - qf+/urf/dp3r/wBQ+PEAUfgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBsaZzDwb//2dfW/6Oenf+WkY//n5qY/5uW - lf+Yk5H/oJua/5aRkP+hnJv/o56c/8C8uv9jkfH/GWL6/8HJ3f+nop//lpGP/5KOjP+Uj47/oZya/6Sf - nv+kn53/pJ+d/6KdnP+8t7T/eKDw/wBQ+PAAUfgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGtnZIWurKr/8O/u/7y4 - t/+ppaP/qaSi/6mko/+ppKP/qaSi/6mko/+opKL/sa2r/+Lf3P+Ape//B1b4/5e18v/Bvbz/qqWi/6qk - ov+qpKL/qaSh/6mkof+ppKH/qKOg/6+qp//GytX/SYP3/wBP+NwAUfggAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGll - YjR8eXbcwb++/9va2v/U09L/1NPS/9TT0v/U0tH/1NLR/9TS0f/U0dD/2dfW/9DOy/93g572CFLo7hlj - +v9Sh/T/UoPp/1CB6P9Qgej/UIHo/1CB6P9Qgej/UIHo/1SF7P89e/f/BlX4/ABQ+IkAUfgDAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABqZmNCcW1qsX57eM+BfnzPgX58z4F+fM+BfnvPgX57z4F+e8+BfnvPgH16z3Vx - b8FsZ2NqDlTkSABP+LAATvjYAE752gBO+doATvnaAE752gBO+doATvnaAE752gBO+doATvjQAFD4ggBR - +BIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ2NgCF5aVw5cV1QOXFdUDlxXVA5cWFQOXFhUDlxY - VA5cWFUOXVlVD2VgXQtwamQBAAAAAABR+AkAUfgaAFH4HQBR+B0AUfgdAFH4HQBR+B0AUfgdAFH4HQBR - +B0AUfgTAFH4AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA//////// - AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAPgA - QAIAHwAA8AAAAAAPAADgAAAAAAcAAOAAAAAABwAA4AAAAAAHAADgAAAAAAcAAOAAAAAABwAA4AAAAAAH - AADgAAAAAAcAAOAAAAAABwAA4AAAAAAHAADgAAAAAAcAAOAAAAAABwAA4AAAAAAHAADgAAAAAAcAAPAA - AAAADwAA/AAAAAA/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/ - AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/8AAAAf/AAD/4AEAD/8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpZWIhbGhlR21p - ZkltaWZJbWlmSW1pZkltaWZJbGhkPlZifxIATvwyAE38VQBN/FcATfxWAE38VgBN/FcATfxWAE79Okpf - jxZsZ2M+bWlmSW1pZkltaWZJbWlmSW1pZkltaWZHamZjIQAAAAAAAAAAAAAAAAAAAAAAAAAAbGhlL3x4 - ds6MiIb6jYmH+o2IhvqMiIX6jIeF+oyHhfqHgn/zPWOwxQ9Z8ectaOH9Lmjf/C5o3/wuZ978LWfe/Cxn - 3v0SW+7tM2C+zYiEgvOOiYf6jYiG+oyIhfqMh4X6jIeF+oqFg/p7dnTObGhlLgAAAAAAAAAAAAAAAAAA - AABybmx7m5eV/7WxsP+7t7b/ura1/7m1tP+5tbT/t7Ox/6Wjp/8uZtv/Y4fP/7S1t/+3uLv/tre6/7W2 - uf+0tbn/srK0/3CMw/8lZOP/oqWx/7u3tf+6t7b/ura0/7m1tP+4tLP/sKyr/5WRj/9ybmt7AAAAAAAA - AAAAAAAAAAAAAHZyb42uqqn/2NbV/93b2v/d29r/3dva/93b2v/d29n/w8TL/y5q5f+Opdb/3tvX/93b - 2v/d29r/3dva/93b2v/e29j/na7Q/ydo6P+7wtH/3tvZ/93b2v/d29r/3dva/93b2v/X1NP/qaWj/3Vx - bo0AAAAAAAAAAAAAAAAAAAAAd3Nxjbi1s//c2tj/29nY/9za2f/b2Nf/3NrZ/93b2f/MztT/Mm7p/5at - 3v/e29f/19XU/9vZ2P/c2tn/3NrZ/9/c2f+mt9n/K2vs/8PJ2f/b2Nb/2NXU/9za2f/c2tn/3NrZ/9za - 2f+zsK//dnJvjQAAAAAAAAAAAAAAAAAAAAB5dnONvru6/8fFw/+loqD/tbKw/6mmpP/Qzsz/0c7N/8fJ - z/81cez/lq3f/7+7tv+ZlpP/q6im/9DOzP/Qzs3/09DM/6S12P8tbu//vMPS/6Shnf+Wk5H/qqim/87M - y//Qzs3/0tDO/7i2tP94dHGNAAAAAAAAAAAAAAAAAAAAAHt4dY3DwL7/wL28/4eDgf99eXf/nZqY/8G+ - vf/Avbv/v8HH/zl07/+VrN3/uray/5GOi/+RjYv/v7y7/8C9vP/Dv7v/obLU/zBx8f+zusn/kY2J/6ek - ov+JhoP/sq+t/8G+vP/EwsD/vbu5/3p2dI0AAAAAAAAAAAAAAAAAAAAAfnp3jcjFw/+3tLL/kIyK/3p2 - dP+koJ7/sK2r/7Crqf+4ub//PHjz/5Wr3P+emZT/f3t5/6Ccm/+wrKv/sKyq/7Ktqv+fr9D/M3T0/6ux - wP+JhIH/lJGO/4SAfv+moqH/sKyr/7azsf/DwL7/fHl2jQAAAAAAAAAAAAAAAAAAAAB8eXaEzszL/7i0 - s/+cl5X/kIyK/6Oenf+loJ//pqGf/8DAxv9BfPf/jKjj/6ulnv+Ri4b/mpSQ/6ehnf+noZ3/raah/5qu - 2P82d/j/tbrH/5eRjP+PiYX/mJSR/6Wgnv+kn57/t7Ox/8nGxf97d3SEAAAAAAAAAAAAAAAAAAAAAG1p - ZkSloqDpysjH/8G+vf/Bv77/wb69/7+8uv/Bvr3/xsPC/0xzwv8ucPT/YYvk/12F2v9fhtn/XYTZ/1yE - 2f9gieD/NHT2/xhh+P9fj/H/VIDc/4Kf2P+9vsL/wL27/8C9vP/IxsT/op+d6W1pZkQAAAAAAAAAAAAA - AAAAAAAAYl5bA21pZkR/fHl9hYJ/gH57eMqUkI7/oZ2b/6Ccmv+cl5X/kJCW/2J+vf9Gcs7/PW3S/wtV - 8P8pZ+T/R3bV/0d11P9OeM//UHnN/013zf9Idc//IGPp/0Frw8iGgn1/hYF/gH57eH1taWZDY15bAwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBPTkEfHh1sKqmpf/Bvrz/xsPC/8bDwf/GwsH/x8K//8O+ - uv+WnrP/IWLn/5Wkw//GxMH/x8XE/8fFw//HxcL/xsTB/8C9uf9kh8z/AFD5rgBM/gQAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw4MwWDf3y2wL28/93b2v/f3dz/393c/9/d - 3P/e3Nv/4N3a/6q20f8nZur/uMHU/+He3P/g3t3/393c/97c2//e3Nv/39zY/4Ke1/8CUva2AE37BQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANTAsBYaDgLbIxcT/29nX/8G+ - vf/HxcP/vLq4/9XT0f/d2tf/sLzX/ypq7f+9xdn/w8C9/7Kvrv/Jx8X/29nY/9rY1//e2tb/h6Pd/wJS - 97YATPoFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtKCQFioeEtsvJ - x//Jx8b/iYaD/5GNi/9/e3n/t7Wz/9DNyv+suNP/LW3w/7jA1P+XlJD/lJGP/7u4t//Ny8r/zMrJ/9DN - yf+Ho93/A1P3tgBM+gUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUg - HAWPi4m2z8zL/7Kvrf+FgX//fnt4/4F9ev+cmZf/v7u4/6izzv8wcPT/s7vP/4+Lh/+Lh4X/r6yq/726 - uP+8ubf/wb25/4ej3f8EVPi2AEv5BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAHRgTBZOQjbbSz87/oJua/4+KiP+JhYP/kY2L/5GNi/+tqKX/pK/K/zNz9/+wt8r/j4qH/4eD - gP+fm5n/rKim/6ynpv+yrKj/iaTd/wVV+bYASvkFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAOCAMDiYaEqtfV1P+2s7H/qqWk/6qmpP+qpqT/qaWj/7Ktqv++xtj/MHH1/5yx - 3P+opaX/oZ6f/6Ogov+koaP/pKGi/7GusP9ymur/AFL5pwBK+AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxbWpOoZ+d4ry6ufu4trX6uLa1+ri2tPq4tbT6u7m3+qin - qOwpX83EImn58T127P06c+n8OnPp/Dpz6fw6c+n8O3Xv/RVf+OMAT/hMAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5ZVgJlYV4tb2xpSXJua0lybmtJcm5rSXJu - a0lxbWpJamRfNi5YshIAS/k/AEv6VwBM+1YAS/tWAEv7VgBL+1cAS/pVAE34LwBU+AIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA////////////////////////////////4AAAB8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AA - AAPAAAADwAAAA8AAAAP4AAA/+AAAP/gAAD/4AAA/+AAAP/gAAD/4AAA//AAAf/wAAH////////////// - //////////////////8oAAAAGAAAADAAAAABACAAAAAAAGAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI13TAgtW - 8AgNV/AIDVfwCAtW8QgaWt4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH15 - dwF5dHKbhoKA7oeDgO+GgoDvhoJ/74SAf+1UapuqEFnu3h5g6PMeYOfzHV/n8x1f5/MPWO7kTWmlsIWB - ge2Hg4DvhoKA74aCf++FgX7ueHRxm4B7eQEAAAAAAAAAAH15diOVkY/9vbm4/8G+vf/Bvbz/wLy7/7i0 - s/9DctP/h5zF/8HAwP/BwMD/wL+//7++vv+Tobr/NW3e/7y5t//Cvr3/wb28/8C8u/+5tbT/kIyK/YB8 - eSMAAAAAAAAAAIB8eSumoqD+3dva/9za2f7c2tn+3dva/9za2f5KeuD+rLrY/9za2f7d29r/3NrZ/tza - 2f69xNP+OXPo/9za2f7c2tn+3dva/9za2f7c2tn+oZ6c/4SAfSsAAAAAAAAAAISAfiuvrKr+wsC+/8K/ - vv6wrav+0tDP/9PRz/5OgOX+rLrZ/6ypp/6vrKr/0tDP/tLQz/69xNP+PHbr/8TBwP6fnJr+vLm3/9LQ - z/7S0M/+qqem/4mFgysAAAAAAAAAAIiEgiu4tbP/trOx/3p2dP+UkY//vbq4/7+8uv9ShOn/p7XT/6Kf - nf+QjIr/vbq4/726uP+1vMv/P3nu/6mmpP+loZ//iYaD/726uP+9urj/s7Cu/42JhysAAAAAAAAAAIeE - gSrBvr3+qKSj/4F9e/6cmJb+qKOi/6ynpv5XiO7+o7DP/4mEgv6UkI7/p6Oi/qejov6vtsT+Qnzx/56a - mP6FgX/+jYiG/6ejov6opKP+vLm3/42KhyoAAAAAAAAAAJGNiw2enJrnzcvK/8PAv//DwL//vLm3/8fF - w/9jhcr/UYbw/3KOy/9wjMr/cIzK/3GNyv9aiuv/M3P2/3KT2P+GnMr/w8C//8PAvv/Lycj/nJmX55aS - kAwAAAAAAAAAAAAAAACVkpAfjYqHXoSBfoKIhIL+n5uZ/5+amf6emZj+cIe5/1x9wv4ZXOX/SXjV/mCD - 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 - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/INTV/IntvControllerSettings.Designer.cs b/BizHawk.Client.EmuHawk/config/INTV/IntvControllerSettings.Designer.cs index 444ac1be7d..0b8b47002c 100644 --- a/BizHawk.Client.EmuHawk/config/INTV/IntvControllerSettings.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/INTV/IntvControllerSettings.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(IntvControllerSettings)); this.OkBtn = new System.Windows.Forms.Button(); this.CancelBtn = new System.Windows.Forms.Button(); this.label5 = new System.Windows.Forms.Label(); @@ -124,7 +123,7 @@ this.Controls.Add(this.Port1ComboBox); this.Controls.Add(this.CancelBtn); this.Controls.Add(this.OkBtn); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController_MultiSize; this.Name = "IntvControllerSettings"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Controller Settings"; diff --git a/BizHawk.Client.EmuHawk/config/INTV/IntvControllerSettings.resx b/BizHawk.Client.EmuHawk/config/INTV/IntvControllerSettings.resx index ca821b54f8..1af7de150c 100644 --- a/BizHawk.Client.EmuHawk/config/INTV/IntvControllerSettings.resx +++ b/BizHawk.Client.EmuHawk/config/INTV/IntvControllerSettings.resx @@ -117,508 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAwAMDAQAAAABABoBgAAxgAAACAgEAAAAAQA6AIAAC4HAAAYGBAAAAAEAOgBAAAWCgAAEBAQAAAA - BAAoAQAA/gsAADAwAAAAAAgAqA4AACYNAAAgIAAAAAAIAKgIAADOGwAAGBgAAAAACADIBgAAdiQAABAQ - AAAAAAgAaAUAAD4rAAAwMAAAAAAgAKglAACmMAAAICAAAAAAIACoEAAATlYAABgYAAAAACAAiAkAAPZm - AAAQEAAAAAAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAQAAAAEAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAHR3AAAAAAAAAAAAAAAAAAAAAAAAAAAAdHdEcAAAAAAAAAAAAAAAAA - AAAAAAAAAHd0d3QAAAAAAAAAAAAAAAAAAAAAAAAAAEd8d3UAAAAAAAAAAAAAAAAAAAAAAAAAB3yHfHZw - AAAAAAAAAAAAAAAAAAAAAAAAd3fIyHVwAAAAAAAAAAAAAAAAAAAAAAAAfHh3jIxwAAAAAAAAAAAAAAAA - AAAAAAAHd8jIyHdgAAAAAAAAAAAAAAAAAAAAAAAHd4yHfIdAAAAAAAAAAAAAAAAAAAAAAAAHyMjIyMhQ - AAAAAAAAAAAAAAAAAAAAAAB3d3eMh4dgAAAAAAAAAAAAAAAAAAAAAAB8jIyIfIdQAAAAAAAAAAAAAAAA - AAAAAAB3h4jIiMh3AAAAAAAAAAAAAAAAAAAAAAB8jIeHeIjHAAAAAAAAAAAAAAAAAAAAAAeIiHh4eMiE - AAAAAAAAAAAAB0dHcAAAAAd8h4eIiIiHcAAAAAAAAAB0d3d3RwAAAAeIeIiIiIh3RwAAAAAAAHR3d8h3 - dAAAAAfIh4iIiHiIx0cAAAAAdHh3eIeHhwAAAAeHiIiIiIiId3R3dHR0eHd4h4eHhAAAAAd4eIiIiIiH - x3d2d3eId4iIiIiIhwAAAAd4eIiI+IiIh3d3eHh3iIiIiIeHwAAAAAfIjHeIiIiIyIeHh4iIiIiIiIiI - cAAAAAeIQ0R3h3iIiMiIiIiIiIiIiIiEAAAAAAfIR3d3d0iIiIh4iIeIiIiIiHhAAAAAAAB4d3d3SHiI - h4fTiIi3iIiIeIwAAAAAAAB3h4d3eIeIiHiJiIuIiIh4jHAAAAAAAAAHyId3h3h4iIh4iIiIiIiHeAAA - AAAAAAAAB8iMiMjIiIiIh4h3aMjHAAAAAAAAAAAAAAdYyIeIiIiMjId6d4eAAAAAAAAAAAAAAAAHdsjH - eIeH6MiId3AAAAAAAAAAAAAAAIiIh4V8jIh4eIfHcAAAAAAAAAAAAACIiIh3AAAHd3h3fHcAAAAAAAAA - AAAAAAiIjHgAAAAAAHx8eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAA - AAd0dAAAAAAAAAAAAAAAAAB3x3cAAAAAAAAAAAAAAAAAd3fHcAAAAAAAAAAAAAAAB3yMh3AAAAAAAAAA - AAAAAAfIeMdwAAAAAAAAAAAAAAAHjIyHQAAAAAAAAAAAAAAAfId4yHAAAAAAAAAAAAAAAHjIyIdQAAAA - AAAAAAAAAAB3iId4YAAAAAAAAAdwAAAAjIiIiIUAAAAAAHd3dAAAB4iIiHh8cAAAAHd3x4dwAAd4iIiI - h3Z3d3R3yIh4cAAHh4iIiIfHd3d4iIiIh3AAB3jHiIiIiHeHiIiIiIwAAAh3dXh4iMiIiIiIiIhwAAAA - yGd0d4iIeIi4iIiMAAAAAIeHd4iIh32IiIiIcAAAAAAAd4jIyIiIiHeHyAAAAAAAAAB3h4iIh8h3dwAA - AAAAAAAIh8fIh4eIaAAAAAAAAACIiHAAB8jIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////////////////////n////g////wP///8B///+Af///gH///4B///8Af///AH///wB//n8AP/A+AB - /AHgAAAB4AAAAeAAAAPgAAAH8AAAD/AAAB/8AAA//wAA//4AA//weA////////////////////////// - //8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRwAAAAAAAAAAAAB3dAAAAAAAAAAAAA - d8dwAAAAAAAAAAAAfId3AAAAAAAAAAAHeMjHAAAAAAAAAAAHyHh3AAAAAAAAAAAHh3eEAAAAAAAAAAAI - yIiHAAAAAHd2cAAIiIiIQAAAd3d4UACHiIiId3d3eHiIcACHh4iIyHeHiIiIcAAIR3d4iIiIiIiMAAAH - d3eIh3iIiIhwAAAAeMh4iIiHiMAAAAAAAHfIiMh4aAAAAAAAiIgHyIfIAAAAAAAIgAAAAIAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD8f/8A+H//APB/ - /wDwP/8A4D//AOA//wDgP/8A4D/BAOAfAQDAAAEAwAABAOAAAwDgAAcA8AAfAPwAPwDwgP8A5/f/AP// - /wD///8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAd1AAAAAAAAB8cAAAAAAAB4eAAAAAAAAHyMgAAAAAAAiIhwAAAHcACI - iHcAd3hwAIz4jIeIiIAAd3eIiIiIAACHeIiIiHAAAACMeMh4AAAAiAAIgAAAAAAAAAAAAAAAAAAAAAAA - AAD//wAA//8AAP//AADj/wAA4/8AAMP/AADB/wAAwfkAAMDBAADAAQAAwAMAAMAHAADwDwAAzn8AAP// - AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAA9OzsAZD8/AGg8 - PABtPj4AQkNDAEZIRwBWQkIAV0REAF5AQABbRkYAVklJAFxPTwBTU1MAXFJSAF5ZWQBkQEAAYUREAGZF - RQBqQkEAYEtLAGNPTwBwQUEAfUZGAHJKSgB2SUkAfU9PAGBRUQBgVFQAZlZWAGZYWABqWVkAclZWAHpU - VAB9W1oAbmJiAGtoaABtaWkAcWdnAHdnZwB8Y2MAe2pqAHJxcQB+dHQAd3l5AHl6egCGT08AiU9PAIFP - UACGU1MAjVFRAIlWVgCMV1cAg1xbAIxaWQCQUlIAlVJSAJFXVgCXVVUAmVVVAJZaWQCSXV0AlV9eAJpZ - WgCeW1sAml5eAKBZWgCgXFwAql9fAIRmZQCIZWQAhWtrAI5ragCTYmEAnGBhAJ9kYwCaZmYAk25uAJ1s - awCFdHQAiXd3AIt+fgCWd3cAmHR0AJV5eQCbfHwAo2JhAKZhYQChZWUApGVkAKplZACsZGQAqmhnAKZr - agCnbGsAqmloAKlubQCsbW0AtGZnALhsbACxb3AAv29wAKVxcACrc3IAr35+ALN0cwC5c3MAvXBxALR4 - dgC1fHsAunt6AMNtbgDGb3AAw3FyAMZwcQDGdXUAyHR1AMp3eADBeXkAxnt7AMB/fgDLensANLBSAEWf - TgBBtFwAPMdnADHkdgDciiIAvoF/AISrdwDln0sA35lhAN2XfADgmmEA8LdlAO61cAArWPIALWT+AEh5 - +gDOf4AAfoCAAHiA1ABZv9wAZrnUAGK+2ABxnv4Ad6P/ADPX/QBw0OcAW+D7AIKEgwCPgoIAjI2NAJuC - ggCUiIgAmYqKAJGSkgCjhIQAqoKCAKKLiwC+hIMAsoqKALaSgQCum5sAsZubALqqlQCdgr4Ar6ytALGh - oAC6pKQAwoSDAMyBggDGiIYAyYiHAMWMigDMjIoA0ISFANKHiADUjIwA2Y6NAMCUjQDIk44A0JCPANaP - kADHlZQAzpSSAMScmwDUkpIA2ZSVANWYlgDampcA2ZeYANWcnADam5sA4p2cAMChjwDeoJ4A5aCFAOaj - jQDlpJoA2p6hAMOkowDOoaEAy62tANegoADdoqEA2aGpANGsrwDdq6kAwbG4ANGysQDdtLQA2ri3AOGk - owDjqKYA66ylAOGnqADjq6oA6a2rAOOwrwDssK4A5K+wAOaztADttLIA57i2AO24tgDmurgA6rq6APC1 - swDyuLYA9Ly5APi+uwD1wL0A+cC9AKKMwACkk8QAqprMALSayACptsEAlaDkAOy/wACRxtQAgOv9AJnr - 9wDEwsoA5sbGAOzCwgDuyMcA7MzMAPPEwgDxy8oA9dPTAPja2gAAAAAAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAADLytDi9tOemQAAAAAAUy9EecLEsa1uPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj11Mme - VakAAAAAAAAAAAAATS84M0akAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE - AAAAAAAAAAAAAAABAAAAAQAAAAAAAFFNTQBRUlIAU1RUAGJHRwBiT08Aa0lIAGJTUwBrVlYAYllZAGZc - XABpWloAb1xbAHNTUwB7V1YAc1hXAHFbWwBkZWUAaWFhAG5kZABpamkAcGFhAHlubgB2cHAAf3V1AH55 - eQB8fX0AgUpKAI1PTwCLWFcAhlhYAI9ZWQCKXFsAm1ZWAJJZWQCWWVgAmlpbAJtcWwCiXFwAl2BfAIBg - YACAZ2YAgG9vAI9oaACWZWQAmGBhAJ5kZACcaWoAmm9vAIV0dACNcHAAiXZ2AIB8fACac3IAm3V0AJ51 - dQCZfHwAnHx8AKNmZgCnZmYAqmJiAK5jYwCvb24AtWVmALBtbgC5bW0AvmxtAKx+fQCxcnIAtHBwALZz - dACydXQAtnd2ALlwcAC5dnYAt3p5ALh5eAC8fHsAun18ALx+fQDGb3AAxnBxAMdzdADAd3YAyHJzAMlz - dADJdXYAynd4AMd/fwDMe3wAzXx9AHunbwBhvHIAYsN4ANuLOwC2hn4A4Zt5APC3ZABte9sAX47+AHWM - 5QAl0foAY+P8AIeDgwCFhoYAioSEAJOIiACWi4sAmpKRAKGCgQCmhYUAqYGBAKuDhACniooApYyMAKiO - jQCyhYMAvoWEALeNjQCrj5AAr5eXALSVlAC9lJMAmbCEAK6RugDBgYAAwoSCAMWDhADChoQAxYeFAM6A - gQDFiIYAxoqIAMqIiQDMi4oAy4yKAMiPjQDPj44A0ISFANKJigDUi4wA04+NANWNjgDKkY8A0JCOANud - iQDWj5AAzJSTAM2XlgDGm5oA1pGSANOUkgDVl5EA1pOUANiVlgDYmJUA2ZeYANKenADbmpsA3pmYANuc - mgDbn5wA1aacAN6gngDqqZoA3Z+gAMyjowDCra0AxqysAMqpqQDboaAA3qKiAN6logDbp6UA3aWkANer - qgDWsbMA0rW0ANe0tADfs7IA4aSiAOGlpQDkp6UA46imAOWopgDsraIA6qimAOGoqADhrqwA6a2rAOqv - rADpsK4A7LGuAOGzswDlsbEA7bKxAO+1sgDotrYA5rm3AO+4twDot7sA6bq5AOu9uwDrv70A8bazAPG2 - tADxuLUA9Lm2APC9uwD2vboA9L+9APi+uwD4v7wA8sC+APXAvgD5wL0AkILJAKqXzACsu8cAqr/LALLV - 3QDawMIA48XFAOvDwQDswMAA7cTDAO/ExQDgxsgA8cbEAPTGxADwyskA9MvJAPLNzQD21dYA+NjZAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAMEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHCEcBQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAayU9PSYbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQlBSQiJpAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAM0pSUlJQPRcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnUlJSUlJGFQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAFJSUlJSUkoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzUlJSWVJZfxAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5XWYqKioqGDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoqMkpqa - mqAsAAAAAAAAAAAAAAAAAABoNAAAAAAAAACMjJyuvLy2toYHAAAAAAAAAAAAABcOIDouBgAAAAAAc4yc - tsHKysPAriIKAAAAAAAAABYgRk1LTX+DEAAAAABukqXB4ejo4dHPQCIEChcXEwggTXV/k66unKMpAAAA - AG6Srsro6ero0dN/Rk1NRk2Dg4STrsbh4cHAt2sAAAAAbpKuOXPe6ajW15KGg4OGk528yuHo5eHPz882 - AAAAAAB4jCkDAxSoMabXt5yjt8ro3ePo5dbT09HTdAAAAAAAAABGcBFoGgFwdtfDwHxi2dpmZcrX09HP - z0MAAAAAAAAAAHh/qWwaOa6cz9PNZGPYsdzbzc3DwLk2AAAAAAAAAAAAAAAvhpKakoyg19HNyKS5wHtb - orZ/cwAAAAAAAAAAAAAAAAAANkaKWVm5zb1gYV6cXVxfNgAAAAAAAAAAAAAAAAAAALGvlTIuP1K5tqCR - l4xfLwAAAAAAAAAAAAAAAAAAsbPBenkAAAAAcCVYjE0scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////+f///+D////A////wH - ///4B///+Af///gH///wB///8Af///AH/+fwA/8D4AH8AeAAAAHgAAAB4AAAA+AAAAfwAAAP8AAAH/wA - AD//AAD//gAD//B4D////////////////////////////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAAWlJSAHBJSQB1SEgAe1dXAHdYWAB5WlkAel1dAGBiYgB1bGwAfWtrAHh2 - dgB9fn4Ag01NAIRXVwCIV1cAhV9eAItbWgCgX14ApV1dAJhgXwCNYGAAnWtqAJhtbQCCdnYAh3x8AI15 - eACeensAqGBgAKhoZwCga2oArGpqALNqagCzb28AtG1tALltbQCxb3AApnVzAKlzcwCqdHMApnp6AKd+ - fgCpensAq3x7ALZ3dgC8dHQAvH59AMZvcADGcHEAxXN0AMhycwDJdncAynh5AMx5egDNfn8Ajo1wAOek - VgDGgH8A4p53AEZ2+gB8u4AAd8PaAIuEhACOh4cAjo6OAJ+DggCejo4Ao4SEAKSIiACsi4sAqo2MAK6P - jgC+gYAAvoaGAL+KiACskJAAtJeXALWenQC5np4At6iOAKmyjgC9nroAwYSDAMaGhADOhoYAxomHAMiK - iQDJjYwA0oeIANOOjwDUjY0A2ZiPANaPkADGkZEAx5eXAMySkADGnZwA1ZOSANeTlADWl5YA2JSVANGZ - mADan50A3J6dAOCcmwDVoJ8A7K2fAMOtrQDXo6IA3aCgAN+kpADVq6oA3ay3AMu0tADPtrYA3L+/AOCi - oQDhpqUA5KelAOinpgDlq6gA46usAOOvrQDqrqwA7LGuAOayswDjtrQA5re1AOqysQDts7EA57y6AO+8 - ugDrvL0A8LOwAPC1sgDwtrQA87q3APS6twD2vboA8b69APi/vAD2wb4A+cC9AJmTzwDHqMMAu8PMAIHf - 8QDByNAA7cLCAO3FwwDvxsQA5cjIAOzOzgDwxcQA9cbEAPPP0AD10tIAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - BQMJAAAAAAAAAAAAAAAAAAAAAAAAAAAPHBMNAAAAAAAAAAAAAAAAAAAAAAAAABojLy8TAAAAAAAAAAAA - AAAAAAAAAAAAAB0wMDAiPgAAAAAAAAAAAAAAAAAAAAAAQjAwMDAtGAAAAAAAAAAAAAAAAAAAAAAAFzIy - NTU5CgAAAAAAAAAAAAAAAAAAAAAAIjZYWFxcBwAAAAAAAAAAAAAAAAAAAAAANlxtdW11JQAAAAAAAAAA - PgcRDgkAAAAAXG1/lISAZgMAAAAAABkVLC5SVhcAAABNY3WWnJuLfB8UBAcQHkhWaX91dSsAAABNY2BM - mJeCiVJSVl9laX+WloSJgEIAAAAAXAEIC0tGjnR0dJaRk5qNjIyJQwAAAAAAJkNADBtdjIaPO1GSPYuJ - hnVEAAAAAAAAAClISWRcd4xwkGp8UE90VwAAAAAAAAAAAAAAKSQ1NYZ7OjhbPDdGAAAAAAAAAAAAAHNv - YGsAKyJoXFYmRwAAAAAAAAAAAAAAcnIAAAAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// - /wD///8A////APx//wD4f/8A8H//APA//wDgP/8A4D//AOA//wDgP8EA4B8BAMAAAQDAAAEA4AADAOAA - BwDwAB8A/AA/APCA/wDn9/8A////AP///wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAABjZGQAdmRjAHtpaQB/eHgAgU9PAKBaWgCFbm0AlWtqAKptbgCwZ2cAsGhoAKxw - cACteHkAvnJyAMZvcADGcHEAy3l5AMx9fgCFmXQAwIB/ANeUfQDhoX8AlIqJAJWMjACYiIgAoIaGAK2K - igCxh4cAvoGAALKKigC4iYgAuJWVAL2cnACss50AuqKhAL+mpgDLgoIAxImHAMeNjADLkI8AxpWTANCS - kQDYlZUA1J6dANqZmgDdnp4A1J+oAMaiogDOr68AzLKyANi5uADhpaIA4qypAOWtqADrrqsA4bKwAOay - sgDtuLYA57++AOy4uADxtLIA8be0APa9ugDswL4A9sG+ALCcxwC5ncIA06zBALnH0QC2ytQA7sPDAPLS - 0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAZBgUAAAAAAAAAAAAAAAAACw8KAAAAAAAAAAAAAAAAGhAQDgAAAAAAAAAAAAAAAAkRESUYAAAA - AAAAAAAAAAAlKy4uBwAAAAAAAAcDAAAAKzlHPCYCAAAYCB0oKgAAAC0wSDs0FB0nLDlAOiwAAAANAQQb - Pi9DRkVBPzUAAAAAJB4cKz5EQjMiNSkAAAAAAAAAHwwRNxYVEyQAAAAAAAAxMgAAACEgAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA4/8AAOP/AADD/wAAwf8AAMH5 - AADAwQAAwAEAAMADAADABwAA8A8AAM5/AAD//wAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAkAAAAJAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAUAAAAOAEBAVUAAABUAAAANQAAABAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkFBSUvGRl5TCkpwlYuLtxDJCTQFw0NmQAA - AEkAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAwMKE8rK6V6RET2klJR/5ZS - U/+OT0//ZDc38B0QEJoAAAAyAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDAwYVzAwoopP - T/ygXVz/oFtb/55ZWf+bWFf/k1NT/1UvL9wGAwNcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AARNKipxhk5O+adkY/+uZWX/tWdo/7VmZ/+qYWH/nltb/3hERPcfERGCAAAAFgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADEZGS1zQ0LXqGdm/7ptbf/Fb3D/x3Bx/8hwcf/BbW7/q2Vl/4hPT/82HR2gAAAAIAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAB1gxMYyYXl3/vXFx/8Zwcf/HcHH/x3Bx/8dwcf/HcHH/uG1t/5NY - V/9EJia2AAAAKQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPB8fNH1MS+K4cnH/x3Fy/8dwcf/HcHH/x3Bx/8dw - cf/HcHH/wHBx/51gX/9PLCzGAAAAMwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAMAAAAAAAAAAAAAAAAAAAAALhAQFIZXVs/RjIz/1Y2O/9qYmP/eoaL/46qr/+aysv/ot7f/6rm5/+m4 - uf/otbX/5q+v/+uvrf/jqab/wYeF/28/P/QhEhKvAAAAXwAAACgAAAANAAAABQAAAAMAAAACAAAAAwAA - AAUAAAAKAAAAFQAAADAdDg9oSSkptHZHRu2dYmL+t3Z1/758e/+6enn/tnh3/7d5eP+8fn3/w4SD/7Z6 - ef9eODfbBgICTgAAAAgAAAAAAAAAAAAAAAAAAAAAPhwcJJVjYuPXkZH/2JOU/92fn//iqqr/57O0/+u8 - vP/uwsL/78XG/+/Exf/twMD/67i4/+60sv/wtrP/zZKQ/5taWv9xQED2MRsaxAgEBIcAAABaAAAAQQAA - ADcAAAA2AAAAOwAAAEUEAgJZHA4OfUcnJ7l5SkntqGxr/8CAfv/DgoH/vH59/7p+ff/DiIb/zZGP/9GT - kf/UlJP/1peV/9eZl/+GVlbuGQsLVwAAAAcAAAAAAAAAAAAAAAAAAAAARiIiLZ9rauvZk5P/2peY/+Ck - pP/lsLD/6ru7/+/Fxf/yzMz/9NDQ//PPz//xycr/7sDA//K5tv/1u7j/36Kg/6dmZf+mZWX/j1ZW/WM6 - OutDJSXQNBwcvDAaGrQ0HBy1PiIivUwsLMtkPDzfh1VU9a1xcP/EhIP/xIWE/7+Cgf/Ch4b/zZST/9mk - ov/grq3/4a6t/96lo//eoJ7/36Kg/+Cjof+IWVjnGwwMQwAAAAIAAAAAAAAAAAAAAAAAAAAARyQkL6Br - auzZk5P/25qb/+GnqP/ntLT/7cDA//LLy//209T/+NjY//fX1//00ND/8cbG//W9u//4vrz/46ak/7d0 - c/+vb27/s3Jy/7d2df+ucXD/pWpp/6Npaf+nbWz/sHVz/7p9fP/EhYT/yImI/8WIhv/DiIb/ypGP/9eg - n//hr63/57q5/+rCwP/rwsD/6bq4/+evrf/nq6n/6q6r/9qgnv9wRkbDBwAAHgAAAAAAAAAAAAAAAAAA - AAAAAAAASCQkLZ1nZuvYkpP/25uc/+Opqv/qtrf/7cHB//TOzv/52Nj/+tzc//na2v/xz9D/8MfH//fA - vv/6wb7/6a6r/8OBgP/DgoD/vX58/7h7ev+8fn3/woOC/8aHhv/HiYj/xoqJ/8aLif/Ijoz/zZST/9eg - nv/hrav/6Lm3/+zCwf/uyMf/78nH/+/Dwf/uvLr/7ba0/+60sf/vtLL/8ri1/7J+fflMKSltAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAQyEhI5JcXOPWj5D/3Juc/8qVlf+BZmb/bl5e/4l4eP/AqKj/8tPT//LO - zv+5p6b/w6qq//fBv//7wr//8LWy/86Ojf/Ojoz/0ZGP/9GSkP/OkY//zpOR/9GamP/VoJ//2qel/+Gv - rf/nt7X/6727/+3Dwf/wycf/8czL//LLyf/yxsT/8cC+//G7uf/yubf/87m3//S7uP/4vrv/1J6c/3JH - RrAdCgsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANRcXEYJNTcvPiIn/15aW/2VNTf85Ojr/Q0VF/0JF - RP9dXFz/n5GR/+S/v/+bh4f/hXp6/+25uP/7wr//9bu4/9qcmv/Zmpj/252b/96gnf/ipKH/5q+s/+u+ - vP/vycf/8srI/+3Hxv/wysj/9c7M//TNy//0ysj/9MbE//TBv//1vrz/9r26//e9u//4vrv/+L+8//vB - vv/hqqf/g1ZVzDwcHC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW4+Ppq/env/05OT/2ZX - V/9rbm7/fX9//3l6ev99f3//cHJy/5F9ff+ff3//XFhY/9eop//8wr//+L+8/+Wppv/ipaP/5qil/96i - pP/Kmaz/1qi1//LGxP/tyMf/qb3J/23E3P9kw9//vMTN//jDwP/3wb//+MC9//i/vf/5v73/+b+8//i/ - vP/3vrv/+L68/92mo/+IWlnRRSMjOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcv - L0mbX1/y15GS/6GAgP9XV1b/iYuL/4CBgf98fX3/cnR0/1dPT/++j4//km9w/9Sfnv/6wL3/+cC9/+6z - sP/ssK3/0Z+u/4OH1P9YffD/QGPs/7KYyv/Ct7z/Ytrz/3Ts//8s2f//cbvU//m+u//4v7z/+L67//e9 - uv/1vLn/9Lq3//O5tv/zuLX/0puZ/4RVVctGIyM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADIXFwdrPDySq2ts/diZmf/ApKT/sKur/4CBgP95enr/iYiI/49zdP/do6P/36Ch/96e - nv/zuLX/+sK///W7uP/1ubT/qZC//2qY+/9tnf//MGT6/56FxP/esK//nMbS/57n8/9+z+T/ybG3//a6 - t//zubb/8re0//C1s//utLH/7rKw/+qvrP++iIb9dklJtkMgISoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHIyMSazw8kZ5hYvXNjI3/2aSk/7OMjP+bd3f/sIKC/9KV - lv/cnJz/2peY/9aRkf/koqL/+sG+//nAvf/5v7z/4amw/6qZx/+aouP/qpvP/+mxtv/2urj/6rGv/+S6 - u//ptrX/466n/+Ovqf/ssK7/6q6s/+isqv/oq6n/2J2b/6JubfFoPT2NOxoaFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBoaCFowMFd7SEjAomZm9sWC - gv/XkZL/25SV/9iSk//Wj5D/1IyN/9KHiP/UiIj/8bOx//rCv//3vbv/9ru4//O3s//xuLX/7q6e/+ej - hf/npIn/7bCp/+Otp/+KsX3/ULdm/1WjWv+7oYz/5KWk/9uenP+4gH79glJRzVYuLlQgCAkGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAA8HBwQVy4uS3FBQaCPV1fjsG5v/cmAgf/ShYb/0YKD/85+f//LeXr/2I2M//e8uf/1vLn/7rOx/+2y - sP/lpJX/5qFY/+6xXP/djS3/35h9/86gl/9SwW7/Nd90/0WxXP+vlH//wYSE/49cW+VlOTmBQR4eHAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGk7OhqIWFd8oG5u8J5qav+eX2D/tmts/8Z0df/KdHX/yXJz/92T - k//3vLn/7LGu/+Snpf/dm5L/4Z1q/+61dP/fmmX/15WM/9eYlv/Bm43/r6uR/6uNgP+WYWDtbkBAnUwn - JzQVAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiFJSBnhC - QgpqNDQJWSUlB08dHQdfKisKfENDFJJWViinbGtRvYOCjtOcm8/pt7X157y6/7eOjfhxRUW7aTk5m4RK - StehWlr6uGdo/8Zwcf/dkpH/8bSx/+OnpP/YmZj/1ZWT/9ealP/Vl5X/0JCP/8eIhv+zdnb/lFtc6nA/ - QKRSKio/JQwNBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADTn6AB2qioDMuUlCHBhYU8voCAWcCBgXTEhoaLzZGQqdeensngrKvn47Sz/NOop/+yiIfyi2Bgs2k+ - PlZXKysPAAAAAUYlJRxcMTFYcj4+pYpMTeWmXF3+xnl5/9+Zl//dnJr/z46M/8KCgf+vc3L/ll9e831L - S8hlOTl/TigoMy0REQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABzQUIDnmprDriGhifHlpZMzp6eeNCgoZ7On5+2yJqaybuPj9WnfHzVj2RkunVJ - SYNbLy8/PRQUCgAAAAAAAAAAAAAAAAAAAAAAAAAAKRUVBU0pKSphNDRtd0BAsotNTd2ZW1vrkVlY4HtJ - Sb5lOTmCUysrQTsbGxEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCwsA2Y4OA5xQkImdkhIRHhKSll0R0dibUBAWWI2 - NkNUKCgoOhISDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhkZB0km - Jh5LJiYsRSEhITATFAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD/+H////8AAP/gH////wAA/8Af//// - AAD/gA////8AAP+AD////wAA/wAP////AAD/AA////8AAP4AB////wAA/gAH////AAD8AAf///8AAPwA - B////wAA/AAH////AAD8AAf///8AAPgAB////wAA+AAH//4HAAD4AAP/8AEAAPgAAf/AAQAA8AAA/wAA - AADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAEAAPAAAAAAAQAA8AAAAAADAADwAAAAAAcAAPAA - AAAADwAA+AAAAAAfAAD4AAAAAD8AAPwAAAAAfwAA/gAAAAD/AAD/gAAAA/8AAP/gAAAH/wAAgAAAAB// - AAAAAAAAf/8AAAAD4AP//wAAgB/8H///AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAYAAAAZAAAAGQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAARCQkYOh8fb0ooKK80HByiCQUFTAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAIhERFmA2Np2ITUz3lVNT/4dLS/5IKCi9AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAANjODiBllhY+61kZP+vY2P/pV5e/3xHRvEhEhJfAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAASSgoN41VVeS6bW3/xW9w/8dwcf+9bG3/klZW/jogIIEAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1RkWcs2xs/8dxcv/HcHH/x3Bx/8Zwcf+iYWH/SSkpmAAA - AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUC0tMZtgX+fGcnP/x3Bx/8dwcf/HcHH/x3Fy/61q - av9UMTGqAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxRER1tm9v/8hxcv/HcHH/x3Bx/8dw - cf/HcnP/tnRz/185OboAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAACIxXV7TEdHT/yHJz/8l1 - dv/Kd3j/ynd4/8p4eP/Bf37/bURDywAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNKysjo2Zm4Mt4 - ef/NfH3/z4GC/9GFhf/RhYb/0YWF/82Mi/9+UVHeCAICOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAACwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGc+ - Pkm1c3P30IGC/9OJiv/XkZL/2ZaW/9mWl//YlJX/2JmY/5hnZfMeEBBrAAAABwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA0FAgItHhAQWzAbG4IqFxeHDQcHWwAAABkAAAAAAAAAAAAA - AAAAAAAAek1MdMN/f//VjI3/2piZ/9+io//hqKn/4qmp/+Clpf/jpqT/wImH/04xMLwAAAA6AAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABEbDg5GRygokW5CQs+MVlbxnGJh/JdfXvxnPz7hHA8PbgAA - AAwAAAAAAAAAAAAAAACMW1qbz4qK/9qXl//gpqb/5rKz/+q6u//rvLz/6La2/+qxr//epKL/j1lZ+DUc - HLACAQFPAAAAHQAAAA8AAAAPAAAAEwAAACIbDg5MVDExnYZUU+SpbWz+uXl4/7x+fP/AgoD/xoeF/72A - f/9fOzu1AAAAHAAAAAAAAAAAAAAABJhkZK/VkZH/3Z+g/+axsf/twMD/8svL//LNzf/vxcX/8Lq4/+6z - sf+1dHP/j1VU+144N9g7IiKqMhwclDcfH5RGKSmiYTw7v4tZWOiydXT+woOC/8aKiP/Ol5X/2aWj/9ui - of/cnpz/2pyb/35TUrgAAAAVAAAAAAAAAAAAAAAFmmVkstaTk//hpaX/7Lm6//TLy//419f/+NnZ//TP - z//1wb//9Lq3/8aGhP+1dHP/s3Rz/6xwb/+pb27+rnNy/7Z7ev/BhIL/yY2L/8+WlP/apqT/5be2/+vB - v//rvrz/6bKw/+uvrf/Um5n/bUVEgAAAAAMAAAAAAAAAAAAAAAOTXV2q1ZGR/9CYmP+dfX7/o4yM/9e8 - vP/z0tL/zLOz/+u8u//5v7z/1peV/8uLif/Ki4r/yoyL/86Ukv/TnJv/2qSi/+Gtq//nuLb/7cPB//DJ - x//xxsT/8b+9//G6t//zubf/77az/6d1dM89Hx8lAAAAAAAAAAAAAAAAAAAAAIJOTojNiIn/jGlp/01O - Tv9UVlb/dnNz/7uhof+Pfn7/xJ+e//zCv//lqKb/3J2b/+Chnv/hpaT/7Ly5/+vHxv/MxMn/0MjN//LK - yf/1x8X/9sLA//a/vP/3vrv/+L+8//S7uP+5hoXhYTo5RwAAAAAAAAAAAAAAAAAAAAAAAAAAaTs7RrVz - dPKmfn7/cXJx/4SGhv97fX3/b2Zm/516ev+7kJD/+sG+//C2s//lqqr/rpbA/3aB2/+ql83/tMHK/2jc - 9P9OzOz/2r3B//q/vP/3vrv/9ry6//a8uf/ss7D/tYGA32c+Pk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAvEhIHg01Njbp9fvrCn5//nI+P/4R7ev+fgID/2Jyd/9ybnP/ytrT/+b+8/+ewtf+Mld3/ZI36/5eI - zv/Ttrn/sNLc/6/Czv/stLT/8re0/++0sf/tsq//2qCe/6Rxb8phODg+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABCIB8MeUZGbqRpata8gYH8x4mJ/9eTk//YkpP/04qL/+Cbmv/5wL3/9726/+Sw - t//Zrrn/56qY/+2smf/lr6n/nLWJ/4Gtdf/Pppn/3qGf/7yEg/KJWViYTyoqIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQh0dGXJAQGOXXl7NtnR1/8V7fP/MfH3/znt8/+il - o//0urj/7LCu/+Whg//rq13/35VX/9Kek/9yvXz/ZbNv/6iCdfqYY2O/aj4+TCUJCgcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACcamsBjFRVB4FERAh9PT0JjU1ND6VnZx+/hINF0JqZiNOjoty0iIf2hFBQw5lX - V8+wY2P4xXR0/+aioP/oq6j/2pqT/92fif/Vlor/yYqJ/7N8efiVZmPGdERFYkEfHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALiFhgXFkJEdx5CQSMqSknbNlZWbz5uaws2cnOXBlJPnqH18r4dc - XFFULy8OSCUlFm07O0+FSUmeoV1d3sF9fPrGhoX/snZ295xkZNiFUlKbbD4+T0UdHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc0JDA5FgYRKdbm46onR0Zp9ycnuWampzhFlZVmY6 - OikvDAwHAAAAAAAAAAAAAAAAAAAAAB0ODgRULCwhbjo7UXhERGVrPDxHTCYmGxAAAQMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//////////////////////D////gf///wH///4A///+AP///AD///wA///8AP//+AD - ///gA//D4AH+AeAA+ADgAAAAwAAAAMAAAADAAAAB4AAAA+AAAAfgAAAP8AAAH/wAAD8AAAD/AAAD/wB4 - D//H////////////////////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABMAAAAtAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgIO1cwMM1qOjrsHhAQmwAA - ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAATCgogfUhI6ahgYP6lXV3+f0hI9wIBAT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGBgFPLy6kuW1t/sZv - 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 - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/InputCompositeWidget.Designer.cs b/BizHawk.Client.EmuHawk/config/InputCompositeWidget.Designer.cs index d95edc4e0f..2ded5a4670 100644 --- a/BizHawk.Client.EmuHawk/config/InputCompositeWidget.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/InputCompositeWidget.Designer.cs @@ -30,7 +30,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(InputCompositeWidget)); this.btnSpecial = new System.Windows.Forms.Button(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); this.widget = new BizHawk.Client.EmuHawk.InputWidget(); @@ -39,7 +38,7 @@ // // btnSpecial // - this.btnSpecial.Image = ((System.Drawing.Image)(resources.GetObject("btnSpecial.Image"))); + this.btnSpecial.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.arrow_black_down; this.btnSpecial.Location = new System.Drawing.Point(472, 0); this.btnSpecial.Margin = new System.Windows.Forms.Padding(2, 0, 0, 0); this.btnSpecial.Name = "btnSpecial"; diff --git a/BizHawk.Client.EmuHawk/config/InputCompositeWidget.resx b/BizHawk.Client.EmuHawk/config/InputCompositeWidget.resx index 1f731cd00e..29dcb1b3a3 100644 --- a/BizHawk.Client.EmuHawk/config/InputCompositeWidget.resx +++ b/BizHawk.Client.EmuHawk/config/InputCompositeWidget.resx @@ -117,12 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - iVBORw0KGgoAAAANSUhEUgAAAAkAAAAGCAYAAAARx7TFAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAAAWdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjA76PVpAAAA - HUlEQVQYV2MgBfzHg1EAQQUwQFABDBBUgAUwMAAAQwwP8VwP41AAAAAASUVORK5CYII= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/N64/N64ControllersSetup.Designer.cs b/BizHawk.Client.EmuHawk/config/N64/N64ControllersSetup.Designer.cs index 56dd3316f3..60d6ac327d 100644 --- a/BizHawk.Client.EmuHawk/config/N64/N64ControllersSetup.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/N64/N64ControllersSetup.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(N64ControllersSetup)); this.OkBtn = new System.Windows.Forms.Button(); this.CancelBtn = new System.Windows.Forms.Button(); this.ControllerSetting4 = new BizHawk.Client.EmuHawk.N64ControllerSettingControl(); @@ -114,7 +113,7 @@ this.Controls.Add(this.CancelBtn); this.Controls.Add(this.OkBtn); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController_MultiSize; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "N64ControllersSetup"; diff --git a/BizHawk.Client.EmuHawk/config/N64/N64ControllersSetup.resx b/BizHawk.Client.EmuHawk/config/N64/N64ControllersSetup.resx index 91f294b89b..29dcb1b3a3 100644 --- a/BizHawk.Client.EmuHawk/config/N64/N64ControllersSetup.resx +++ b/BizHawk.Client.EmuHawk/config/N64/N64ControllersSetup.resx @@ -117,508 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAwAMDAQAAAABABoBgAAxgAAACAgEAAAAAQA6AIAAC4HAAAYGBAAAAAEAOgBAAAWCgAAEBAQAAAA - BAAoAQAA/gsAADAwAAAAAAgAqA4AACYNAAAgIAAAAAAIAKgIAADOGwAAGBgAAAAACADIBgAAdiQAABAQ - AAAAAAgAaAUAAD4rAAAwMAAAAAAgAKglAACmMAAAICAAAAAAIACoEAAATlYAABgYAAAAACAAiAkAAPZm - AAAQEAAAAAAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAQAAAAEAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAHR3AAAAAAAAAAAAAAAAAAAAAAAAAAAAdHdEcAAAAAAAAAAAAAAAAA - AAAAAAAAAHd0d3QAAAAAAAAAAAAAAAAAAAAAAAAAAEd8d3UAAAAAAAAAAAAAAAAAAAAAAAAAB3yHfHZw - AAAAAAAAAAAAAAAAAAAAAAAAd3fIyHVwAAAAAAAAAAAAAAAAAAAAAAAAfHh3jIxwAAAAAAAAAAAAAAAA - AAAAAAAHd8jIyHdgAAAAAAAAAAAAAAAAAAAAAAAHd4yHfIdAAAAAAAAAAAAAAAAAAAAAAAAHyMjIyMhQ - AAAAAAAAAAAAAAAAAAAAAAB3d3eMh4dgAAAAAAAAAAAAAAAAAAAAAAB8jIyIfIdQAAAAAAAAAAAAAAAA - AAAAAAB3h4jIiMh3AAAAAAAAAAAAAAAAAAAAAAB8jIeHeIjHAAAAAAAAAAAAAAAAAAAAAAeIiHh4eMiE - AAAAAAAAAAAAB0dHcAAAAAd8h4eIiIiHcAAAAAAAAAB0d3d3RwAAAAeIeIiIiIh3RwAAAAAAAHR3d8h3 - dAAAAAfIh4iIiHiIx0cAAAAAdHh3eIeHhwAAAAeHiIiIiIiId3R3dHR0eHd4h4eHhAAAAAd4eIiIiIiH - x3d2d3eId4iIiIiIhwAAAAd4eIiI+IiIh3d3eHh3iIiIiIeHwAAAAAfIjHeIiIiIyIeHh4iIiIiIiIiI - cAAAAAeIQ0R3h3iIiMiIiIiIiIiIiIiEAAAAAAfIR3d3d0iIiIh4iIeIiIiIiHhAAAAAAAB4d3d3SHiI - h4fTiIi3iIiIeIwAAAAAAAB3h4d3eIeIiHiJiIuIiIh4jHAAAAAAAAAHyId3h3h4iIh4iIiIiIiHeAAA - AAAAAAAAB8iMiMjIiIiIh4h3aMjHAAAAAAAAAAAAAAdYyIeIiIiMjId6d4eAAAAAAAAAAAAAAAAHdsjH - eIeH6MiId3AAAAAAAAAAAAAAAIiIh4V8jIh4eIfHcAAAAAAAAAAAAACIiIh3AAAHd3h3fHcAAAAAAAAA - AAAAAAiIjHgAAAAAAHx8eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAA - AAd0dAAAAAAAAAAAAAAAAAB3x3cAAAAAAAAAAAAAAAAAd3fHcAAAAAAAAAAAAAAAB3yMh3AAAAAAAAAA - AAAAAAfIeMdwAAAAAAAAAAAAAAAHjIyHQAAAAAAAAAAAAAAAfId4yHAAAAAAAAAAAAAAAHjIyIdQAAAA - AAAAAAAAAAB3iId4YAAAAAAAAAdwAAAAjIiIiIUAAAAAAHd3dAAAB4iIiHh8cAAAAHd3x4dwAAd4iIiI - h3Z3d3R3yIh4cAAHh4iIiIfHd3d4iIiIh3AAB3jHiIiIiHeHiIiIiIwAAAh3dXh4iMiIiIiIiIhwAAAA - yGd0d4iIeIi4iIiMAAAAAIeHd4iIh32IiIiIcAAAAAAAd4jIyIiIiHeHyAAAAAAAAAB3h4iIh8h3dwAA - AAAAAAAIh8fIh4eIaAAAAAAAAACIiHAAB8jIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////////////////////n////g////wP///8B///+Af///gH///4B///8Af///AH///wB//n8AP/A+AB - /AHgAAAB4AAAAeAAAAPgAAAH8AAAD/AAAB/8AAA//wAA//4AA//weA////////////////////////// - //8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRwAAAAAAAAAAAAB3dAAAAAAAAAAAAA - d8dwAAAAAAAAAAAAfId3AAAAAAAAAAAHeMjHAAAAAAAAAAAHyHh3AAAAAAAAAAAHh3eEAAAAAAAAAAAI - yIiHAAAAAHd2cAAIiIiIQAAAd3d4UACHiIiId3d3eHiIcACHh4iIyHeHiIiIcAAIR3d4iIiIiIiMAAAH - d3eIh3iIiIhwAAAAeMh4iIiHiMAAAAAAAHfIiMh4aAAAAAAAiIgHyIfIAAAAAAAIgAAAAIAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD8f/8A+H//APB/ - /wDwP/8A4D//AOA//wDgP/8A4D/BAOAfAQDAAAEAwAABAOAAAwDgAAcA8AAfAPwAPwDwgP8A5/f/AP// - /wD///8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAd1AAAAAAAAB8cAAAAAAAB4eAAAAAAAAHyMgAAAAAAAiIhwAAAHcACI - iHcAd3hwAIz4jIeIiIAAd3eIiIiIAACHeIiIiHAAAACMeMh4AAAAiAAIgAAAAAAAAAAAAAAAAAAAAAAA - AAD//wAA//8AAP//AADj/wAA4/8AAMP/AADB/wAAwfkAAMDBAADAAQAAwAMAAMAHAADwDwAAzn8AAP// - AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAA9OzsAZD8/AGg8 - PABtPj4AQkNDAEZIRwBWQkIAV0REAF5AQABbRkYAVklJAFxPTwBTU1MAXFJSAF5ZWQBkQEAAYUREAGZF - RQBqQkEAYEtLAGNPTwBwQUEAfUZGAHJKSgB2SUkAfU9PAGBRUQBgVFQAZlZWAGZYWABqWVkAclZWAHpU - VAB9W1oAbmJiAGtoaABtaWkAcWdnAHdnZwB8Y2MAe2pqAHJxcQB+dHQAd3l5AHl6egCGT08AiU9PAIFP - UACGU1MAjVFRAIlWVgCMV1cAg1xbAIxaWQCQUlIAlVJSAJFXVgCXVVUAmVVVAJZaWQCSXV0AlV9eAJpZ - WgCeW1sAml5eAKBZWgCgXFwAql9fAIRmZQCIZWQAhWtrAI5ragCTYmEAnGBhAJ9kYwCaZmYAk25uAJ1s - awCFdHQAiXd3AIt+fgCWd3cAmHR0AJV5eQCbfHwAo2JhAKZhYQChZWUApGVkAKplZACsZGQAqmhnAKZr - agCnbGsAqmloAKlubQCsbW0AtGZnALhsbACxb3AAv29wAKVxcACrc3IAr35+ALN0cwC5c3MAvXBxALR4 - dgC1fHsAunt6AMNtbgDGb3AAw3FyAMZwcQDGdXUAyHR1AMp3eADBeXkAxnt7AMB/fgDLensANLBSAEWf - TgBBtFwAPMdnADHkdgDciiIAvoF/AISrdwDln0sA35lhAN2XfADgmmEA8LdlAO61cAArWPIALWT+AEh5 - +gDOf4AAfoCAAHiA1ABZv9wAZrnUAGK+2ABxnv4Ad6P/ADPX/QBw0OcAW+D7AIKEgwCPgoIAjI2NAJuC - ggCUiIgAmYqKAJGSkgCjhIQAqoKCAKKLiwC+hIMAsoqKALaSgQCum5sAsZubALqqlQCdgr4Ar6ytALGh - oAC6pKQAwoSDAMyBggDGiIYAyYiHAMWMigDMjIoA0ISFANKHiADUjIwA2Y6NAMCUjQDIk44A0JCPANaP - kADHlZQAzpSSAMScmwDUkpIA2ZSVANWYlgDampcA2ZeYANWcnADam5sA4p2cAMChjwDeoJ4A5aCFAOaj - jQDlpJoA2p6hAMOkowDOoaEAy62tANegoADdoqEA2aGpANGsrwDdq6kAwbG4ANGysQDdtLQA2ri3AOGk - owDjqKYA66ylAOGnqADjq6oA6a2rAOOwrwDssK4A5K+wAOaztADttLIA57i2AO24tgDmurgA6rq6APC1 - swDyuLYA9Ly5APi+uwD1wL0A+cC9AKKMwACkk8QAqprMALSayACptsEAlaDkAOy/wACRxtQAgOv9AJnr - 9wDEwsoA5sbGAOzCwgDuyMcA7MzMAPPEwgDxy8oA9dPTAPja2gAAAAAAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAoIJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAACYXODs4BCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - KTNDQ0M7OAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALllbYmJZQBcAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYYWNwcHBwWy8mAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFLanBwcHBwYz0eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAABpqcHBwcHBwZVkUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl11w - cHBwcHBwcGcSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIXdwcHBwcHBwcGkSAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPXBwcHBwcHBwd2wYAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAACXbnBwdXB5dXl0eW4hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAid3R5eXl5eXl5q6wzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9eXV5 - i7CxsbGxsblLKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABndYuwsbm8uby5vMFnHgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJt3q7G3vMHB1cLBwdWuEgAAAAAAAAAAAAAAAAAA - AAAAAAAeEhMSCiUAAAAAAAAAAEexsbm/1dXZ2dnZ1da5ZgwAAAAAAAAAAAAAAAAAAAAjEjNZaW5qXRMl - AAAAAAAAADW5s7/V2N7i4uLi3dzZrQQPAAAAAAAAAAAAAAAAHxhZbm5uaWltd6ASAAAAAAAAAEmzvMLZ - 3uP29/fw4uTkuUAWCy0AAAAAAAAAAB4YYXd3gG13vbm5vb8zAAAAAAAAAE6xwdXd4/b6+/r38OTl1Vlc - OAMIFAweFBQSM2mtrYB3vdXT0NXExNU1AAAAAAAAAE65wtXe8Pr7/Pz79+fn1WphZ25pXV1mbHetrXd3 - tdXT4vXw49nZ3NYgAAAAAAAAAEu3wdje9vv7/Pz79+fn34B3d2xtoHeud66uudXT4vD39/Dj49zk5G0A - AAAAAAAAAD2xwcwoH0/L/Pukyenp5K27u7m5uczM0Nve4vb3+vr56OPl5eXl1igAAAAAAAAAADWxwQgB - BQYNmveZK/Dp6cG/wcTV2eP3+vr6+/r6+ejm5ufn5+nkIgAAAAAAAAAAAJmruR4sjC2WLFCdDd3p6dXW - 1tXI3vn67pCO9Ojp6efo5+fm59wiAAAAAAAAAAAAAABLsZ0FmC0qKgHMRcjp6dzc1Y2KiO3RlfKTj+np - 5ubm5eXk1SIAAAAAAAAAAAAAAACdab/Lp5aWnEfV1cHm6ebk6pGSiabZ8fOU0uXl5eTk3NyuRQAAAAAA - AAAAAAAAAAAAn0ux0KFTaMHBv7nC6efp3Ovv7OTm3OPl3Nzc3NfW1U6fAAAAAAAAAAAAAAAAAAAAAABF - Wa25t7yxs7Gw5+fn5Obk18XG3NyBfHvD1cSgNQAAAAAAAAAAAAAAAAAAAAAAAAAAAFUzarGwsHl5sefn - 39zEgoZ/hL19fnqirj2jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATj09ZXV0cLzn3NXChYeDub+1pbQ9 - VQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0rXj+rpInTBDcHCz5NW/ucG5u7GAM1QAAAAAAAAAAAAAAAAA - AAAAAAAAAADLytDi9tOemQAAAAAAUy9EecLEsa1uPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj11Mme - VakAAAAAAAAAAAAATS84M0akAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE - AAAAAAAAAAAAAAABAAAAAQAAAAAAAFFNTQBRUlIAU1RUAGJHRwBiT08Aa0lIAGJTUwBrVlYAYllZAGZc - XABpWloAb1xbAHNTUwB7V1YAc1hXAHFbWwBkZWUAaWFhAG5kZABpamkAcGFhAHlubgB2cHAAf3V1AH55 - eQB8fX0AgUpKAI1PTwCLWFcAhlhYAI9ZWQCKXFsAm1ZWAJJZWQCWWVgAmlpbAJtcWwCiXFwAl2BfAIBg - YACAZ2YAgG9vAI9oaACWZWQAmGBhAJ5kZACcaWoAmm9vAIV0dACNcHAAiXZ2AIB8fACac3IAm3V0AJ51 - dQCZfHwAnHx8AKNmZgCnZmYAqmJiAK5jYwCvb24AtWVmALBtbgC5bW0AvmxtAKx+fQCxcnIAtHBwALZz - dACydXQAtnd2ALlwcAC5dnYAt3p5ALh5eAC8fHsAun18ALx+fQDGb3AAxnBxAMdzdADAd3YAyHJzAMlz - dADJdXYAynd4AMd/fwDMe3wAzXx9AHunbwBhvHIAYsN4ANuLOwC2hn4A4Zt5APC3ZABte9sAX47+AHWM - 5QAl0foAY+P8AIeDgwCFhoYAioSEAJOIiACWi4sAmpKRAKGCgQCmhYUAqYGBAKuDhACniooApYyMAKiO - jQCyhYMAvoWEALeNjQCrj5AAr5eXALSVlAC9lJMAmbCEAK6RugDBgYAAwoSCAMWDhADChoQAxYeFAM6A - gQDFiIYAxoqIAMqIiQDMi4oAy4yKAMiPjQDPj44A0ISFANKJigDUi4wA04+NANWNjgDKkY8A0JCOANud - iQDWj5AAzJSTAM2XlgDGm5oA1pGSANOUkgDVl5EA1pOUANiVlgDYmJUA2ZeYANKenADbmpsA3pmYANuc - mgDbn5wA1aacAN6gngDqqZoA3Z+gAMyjowDCra0AxqysAMqpqQDboaAA3qKiAN6logDbp6UA3aWkANer - qgDWsbMA0rW0ANe0tADfs7IA4aSiAOGlpQDkp6UA46imAOWopgDsraIA6qimAOGoqADhrqwA6a2rAOqv - rADpsK4A7LGuAOGzswDlsbEA7bKxAO+1sgDotrYA5rm3AO+4twDot7sA6bq5AOu9uwDrv70A8bazAPG2 - tADxuLUA9Lm2APC9uwD2vboA9L+9APi+uwD4v7wA8sC+APXAvgD5wL0AkILJAKqXzACsu8cAqr/LALLV - 3QDawMIA48XFAOvDwQDswMAA7cTDAO/ExQDgxsgA8cbEAPTGxADwyskA9MvJAPLNzQD21dYA+NjZAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAMEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHCEcBQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAayU9PSYbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQlBSQiJpAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAM0pSUlJQPRcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnUlJSUlJGFQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAFJSUlJSUkoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzUlJSWVJZfxAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5XWYqKioqGDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoqMkpqa - mqAsAAAAAAAAAAAAAAAAAABoNAAAAAAAAACMjJyuvLy2toYHAAAAAAAAAAAAABcOIDouBgAAAAAAc4yc - tsHKysPAriIKAAAAAAAAABYgRk1LTX+DEAAAAABukqXB4ejo4dHPQCIEChcXEwggTXV/k66unKMpAAAA - AG6Srsro6ero0dN/Rk1NRk2Dg4STrsbh4cHAt2sAAAAAbpKuOXPe6ajW15KGg4OGk528yuHo5eHPz882 - AAAAAAB4jCkDAxSoMabXt5yjt8ro3ePo5dbT09HTdAAAAAAAAABGcBFoGgFwdtfDwHxi2dpmZcrX09HP - z0MAAAAAAAAAAHh/qWwaOa6cz9PNZGPYsdzbzc3DwLk2AAAAAAAAAAAAAAAvhpKakoyg19HNyKS5wHtb - orZ/cwAAAAAAAAAAAAAAAAAANkaKWVm5zb1gYV6cXVxfNgAAAAAAAAAAAAAAAAAAALGvlTIuP1K5tqCR - l4xfLwAAAAAAAAAAAAAAAAAAsbPBenkAAAAAcCVYjE0scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////+f///+D////A////wH - ///4B///+Af///gH///wB///8Af///AH/+fwA/8D4AH8AeAAAAHgAAAB4AAAA+AAAAfwAAAP8AAAH/wA - AD//AAD//gAD//B4D////////////////////////////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAAWlJSAHBJSQB1SEgAe1dXAHdYWAB5WlkAel1dAGBiYgB1bGwAfWtrAHh2 - dgB9fn4Ag01NAIRXVwCIV1cAhV9eAItbWgCgX14ApV1dAJhgXwCNYGAAnWtqAJhtbQCCdnYAh3x8AI15 - eACeensAqGBgAKhoZwCga2oArGpqALNqagCzb28AtG1tALltbQCxb3AApnVzAKlzcwCqdHMApnp6AKd+ - fgCpensAq3x7ALZ3dgC8dHQAvH59AMZvcADGcHEAxXN0AMhycwDJdncAynh5AMx5egDNfn8Ajo1wAOek - VgDGgH8A4p53AEZ2+gB8u4AAd8PaAIuEhACOh4cAjo6OAJ+DggCejo4Ao4SEAKSIiACsi4sAqo2MAK6P - jgC+gYAAvoaGAL+KiACskJAAtJeXALWenQC5np4At6iOAKmyjgC9nroAwYSDAMaGhADOhoYAxomHAMiK - iQDJjYwA0oeIANOOjwDUjY0A2ZiPANaPkADGkZEAx5eXAMySkADGnZwA1ZOSANeTlADWl5YA2JSVANGZ - mADan50A3J6dAOCcmwDVoJ8A7K2fAMOtrQDXo6IA3aCgAN+kpADVq6oA3ay3AMu0tADPtrYA3L+/AOCi - oQDhpqUA5KelAOinpgDlq6gA46usAOOvrQDqrqwA7LGuAOayswDjtrQA5re1AOqysQDts7EA57y6AO+8 - ugDrvL0A8LOwAPC1sgDwtrQA87q3APS6twD2vboA8b69APi/vAD2wb4A+cC9AJmTzwDHqMMAu8PMAIHf - 8QDByNAA7cLCAO3FwwDvxsQA5cjIAOzOzgDwxcQA9cbEAPPP0AD10tIAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - BQMJAAAAAAAAAAAAAAAAAAAAAAAAAAAPHBMNAAAAAAAAAAAAAAAAAAAAAAAAABojLy8TAAAAAAAAAAAA - AAAAAAAAAAAAAB0wMDAiPgAAAAAAAAAAAAAAAAAAAAAAQjAwMDAtGAAAAAAAAAAAAAAAAAAAAAAAFzIy - NTU5CgAAAAAAAAAAAAAAAAAAAAAAIjZYWFxcBwAAAAAAAAAAAAAAAAAAAAAANlxtdW11JQAAAAAAAAAA - PgcRDgkAAAAAXG1/lISAZgMAAAAAABkVLC5SVhcAAABNY3WWnJuLfB8UBAcQHkhWaX91dSsAAABNY2BM - mJeCiVJSVl9laX+WloSJgEIAAAAAXAEIC0tGjnR0dJaRk5qNjIyJQwAAAAAAJkNADBtdjIaPO1GSPYuJ - hnVEAAAAAAAAAClISWRcd4xwkGp8UE90VwAAAAAAAAAAAAAAKSQ1NYZ7OjhbPDdGAAAAAAAAAAAAAHNv - YGsAKyJoXFYmRwAAAAAAAAAAAAAAcnIAAAAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// - /wD///8A////APx//wD4f/8A8H//APA//wDgP/8A4D//AOA//wDgP8EA4B8BAMAAAQDAAAEA4AADAOAA - BwDwAB8A/AA/APCA/wDn9/8A////AP///wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAABjZGQAdmRjAHtpaQB/eHgAgU9PAKBaWgCFbm0AlWtqAKptbgCwZ2cAsGhoAKxw - cACteHkAvnJyAMZvcADGcHEAy3l5AMx9fgCFmXQAwIB/ANeUfQDhoX8AlIqJAJWMjACYiIgAoIaGAK2K - igCxh4cAvoGAALKKigC4iYgAuJWVAL2cnACss50AuqKhAL+mpgDLgoIAxImHAMeNjADLkI8AxpWTANCS - kQDYlZUA1J6dANqZmgDdnp4A1J+oAMaiogDOr68AzLKyANi5uADhpaIA4qypAOWtqADrrqsA4bKwAOay - sgDtuLYA57++AOy4uADxtLIA8be0APa9ugDswL4A9sG+ALCcxwC5ncIA06zBALnH0QC2ytQA7sPDAPLS - 0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAZBgUAAAAAAAAAAAAAAAAACw8KAAAAAAAAAAAAAAAAGhAQDgAAAAAAAAAAAAAAAAkRESUYAAAA - AAAAAAAAAAAlKy4uBwAAAAAAAAcDAAAAKzlHPCYCAAAYCB0oKgAAAC0wSDs0FB0nLDlAOiwAAAANAQQb - Pi9DRkVBPzUAAAAAJB4cKz5EQjMiNSkAAAAAAAAAHwwRNxYVEyQAAAAAAAAxMgAAACEgAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA4/8AAOP/AADD/wAAwf8AAMH5 - AADAwQAAwAEAAMADAADABwAA8A8AAM5/AAD//wAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAkAAAAJAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAUAAAAOAEBAVUAAABUAAAANQAAABAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkFBSUvGRl5TCkpwlYuLtxDJCTQFw0NmQAA - AEkAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAwMKE8rK6V6RET2klJR/5ZS - U/+OT0//ZDc38B0QEJoAAAAyAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDAwYVzAwoopP - T/ygXVz/oFtb/55ZWf+bWFf/k1NT/1UvL9wGAwNcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AARNKipxhk5O+adkY/+uZWX/tWdo/7VmZ/+qYWH/nltb/3hERPcfERGCAAAAFgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADEZGS1zQ0LXqGdm/7ptbf/Fb3D/x3Bx/8hwcf/BbW7/q2Vl/4hPT/82HR2gAAAAIAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAB1gxMYyYXl3/vXFx/8Zwcf/HcHH/x3Bx/8dwcf/HcHH/uG1t/5NY - V/9EJia2AAAAKQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPB8fNH1MS+K4cnH/x3Fy/8dwcf/HcHH/x3Bx/8dw - cf/HcHH/wHBx/51gX/9PLCzGAAAAMwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAMAAAAAAAAAAAAAAAAAAAAALhAQFIZXVs/RjIz/1Y2O/9qYmP/eoaL/46qr/+aysv/ot7f/6rm5/+m4 - uf/otbX/5q+v/+uvrf/jqab/wYeF/28/P/QhEhKvAAAAXwAAACgAAAANAAAABQAAAAMAAAACAAAAAwAA - AAUAAAAKAAAAFQAAADAdDg9oSSkptHZHRu2dYmL+t3Z1/758e/+6enn/tnh3/7d5eP+8fn3/w4SD/7Z6 - ef9eODfbBgICTgAAAAgAAAAAAAAAAAAAAAAAAAAAPhwcJJVjYuPXkZH/2JOU/92fn//iqqr/57O0/+u8 - vP/uwsL/78XG/+/Exf/twMD/67i4/+60sv/wtrP/zZKQ/5taWv9xQED2MRsaxAgEBIcAAABaAAAAQQAA - ADcAAAA2AAAAOwAAAEUEAgJZHA4OfUcnJ7l5SkntqGxr/8CAfv/DgoH/vH59/7p+ff/DiIb/zZGP/9GT - kf/UlJP/1peV/9eZl/+GVlbuGQsLVwAAAAcAAAAAAAAAAAAAAAAAAAAARiIiLZ9rauvZk5P/2peY/+Ck - pP/lsLD/6ru7/+/Fxf/yzMz/9NDQ//PPz//xycr/7sDA//K5tv/1u7j/36Kg/6dmZf+mZWX/j1ZW/WM6 - OutDJSXQNBwcvDAaGrQ0HBy1PiIivUwsLMtkPDzfh1VU9a1xcP/EhIP/xIWE/7+Cgf/Ch4b/zZST/9mk - ov/grq3/4a6t/96lo//eoJ7/36Kg/+Cjof+IWVjnGwwMQwAAAAIAAAAAAAAAAAAAAAAAAAAARyQkL6Br - auzZk5P/25qb/+GnqP/ntLT/7cDA//LLy//209T/+NjY//fX1//00ND/8cbG//W9u//4vrz/46ak/7d0 - c/+vb27/s3Jy/7d2df+ucXD/pWpp/6Npaf+nbWz/sHVz/7p9fP/EhYT/yImI/8WIhv/DiIb/ypGP/9eg - n//hr63/57q5/+rCwP/rwsD/6bq4/+evrf/nq6n/6q6r/9qgnv9wRkbDBwAAHgAAAAAAAAAAAAAAAAAA - AAAAAAAASCQkLZ1nZuvYkpP/25uc/+Opqv/qtrf/7cHB//TOzv/52Nj/+tzc//na2v/xz9D/8MfH//fA - vv/6wb7/6a6r/8OBgP/DgoD/vX58/7h7ev+8fn3/woOC/8aHhv/HiYj/xoqJ/8aLif/Ijoz/zZST/9eg - nv/hrav/6Lm3/+zCwf/uyMf/78nH/+/Dwf/uvLr/7ba0/+60sf/vtLL/8ri1/7J+fflMKSltAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAQyEhI5JcXOPWj5D/3Juc/8qVlf+BZmb/bl5e/4l4eP/AqKj/8tPT//LO - zv+5p6b/w6qq//fBv//7wr//8LWy/86Ojf/Ojoz/0ZGP/9GSkP/OkY//zpOR/9GamP/VoJ//2qel/+Gv - rf/nt7X/6727/+3Dwf/wycf/8czL//LLyf/yxsT/8cC+//G7uf/yubf/87m3//S7uP/4vrv/1J6c/3JH - RrAdCgsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANRcXEYJNTcvPiIn/15aW/2VNTf85Ojr/Q0VF/0JF - RP9dXFz/n5GR/+S/v/+bh4f/hXp6/+25uP/7wr//9bu4/9qcmv/Zmpj/252b/96gnf/ipKH/5q+s/+u+ - vP/vycf/8srI/+3Hxv/wysj/9c7M//TNy//0ysj/9MbE//TBv//1vrz/9r26//e9u//4vrv/+L+8//vB - vv/hqqf/g1ZVzDwcHC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW4+Ppq/env/05OT/2ZX - V/9rbm7/fX9//3l6ev99f3//cHJy/5F9ff+ff3//XFhY/9eop//8wr//+L+8/+Wppv/ipaP/5qil/96i - pP/Kmaz/1qi1//LGxP/tyMf/qb3J/23E3P9kw9//vMTN//jDwP/3wb//+MC9//i/vf/5v73/+b+8//i/ - vP/3vrv/+L68/92mo/+IWlnRRSMjOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcv - L0mbX1/y15GS/6GAgP9XV1b/iYuL/4CBgf98fX3/cnR0/1dPT/++j4//km9w/9Sfnv/6wL3/+cC9/+6z - sP/ssK3/0Z+u/4OH1P9YffD/QGPs/7KYyv/Ct7z/Ytrz/3Ts//8s2f//cbvU//m+u//4v7z/+L67//e9 - uv/1vLn/9Lq3//O5tv/zuLX/0puZ/4RVVctGIyM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADIXFwdrPDySq2ts/diZmf/ApKT/sKur/4CBgP95enr/iYiI/49zdP/do6P/36Ch/96e - nv/zuLX/+sK///W7uP/1ubT/qZC//2qY+/9tnf//MGT6/56FxP/esK//nMbS/57n8/9+z+T/ybG3//a6 - t//zubb/8re0//C1s//utLH/7rKw/+qvrP++iIb9dklJtkMgISoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHIyMSazw8kZ5hYvXNjI3/2aSk/7OMjP+bd3f/sIKC/9KV - lv/cnJz/2peY/9aRkf/koqL/+sG+//nAvf/5v7z/4amw/6qZx/+aouP/qpvP/+mxtv/2urj/6rGv/+S6 - u//ptrX/466n/+Ovqf/ssK7/6q6s/+isqv/oq6n/2J2b/6JubfFoPT2NOxoaFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBoaCFowMFd7SEjAomZm9sWC - gv/XkZL/25SV/9iSk//Wj5D/1IyN/9KHiP/UiIj/8bOx//rCv//3vbv/9ru4//O3s//xuLX/7q6e/+ej - hf/npIn/7bCp/+Otp/+KsX3/ULdm/1WjWv+7oYz/5KWk/9uenP+4gH79glJRzVYuLlQgCAkGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAA8HBwQVy4uS3FBQaCPV1fjsG5v/cmAgf/ShYb/0YKD/85+f//LeXr/2I2M//e8uf/1vLn/7rOx/+2y - sP/lpJX/5qFY/+6xXP/djS3/35h9/86gl/9SwW7/Nd90/0WxXP+vlH//wYSE/49cW+VlOTmBQR4eHAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGk7OhqIWFd8oG5u8J5qav+eX2D/tmts/8Z0df/KdHX/yXJz/92T - k//3vLn/7LGu/+Snpf/dm5L/4Z1q/+61dP/fmmX/15WM/9eYlv/Bm43/r6uR/6uNgP+WYWDtbkBAnUwn - JzQVAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiFJSBnhC - QgpqNDQJWSUlB08dHQdfKisKfENDFJJWViinbGtRvYOCjtOcm8/pt7X157y6/7eOjfhxRUW7aTk5m4RK - StehWlr6uGdo/8Zwcf/dkpH/8bSx/+OnpP/YmZj/1ZWT/9ealP/Vl5X/0JCP/8eIhv+zdnb/lFtc6nA/ - QKRSKio/JQwNBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADTn6AB2qioDMuUlCHBhYU8voCAWcCBgXTEhoaLzZGQqdeensngrKvn47Sz/NOop/+yiIfyi2Bgs2k+ - PlZXKysPAAAAAUYlJRxcMTFYcj4+pYpMTeWmXF3+xnl5/9+Zl//dnJr/z46M/8KCgf+vc3L/ll9e831L - S8hlOTl/TigoMy0REQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABzQUIDnmprDriGhifHlpZMzp6eeNCgoZ7On5+2yJqaybuPj9WnfHzVj2RkunVJ - SYNbLy8/PRQUCgAAAAAAAAAAAAAAAAAAAAAAAAAAKRUVBU0pKSphNDRtd0BAsotNTd2ZW1vrkVlY4HtJ - Sb5lOTmCUysrQTsbGxEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCwsA2Y4OA5xQkImdkhIRHhKSll0R0dibUBAWWI2 - NkNUKCgoOhISDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhkZB0km - Jh5LJiYsRSEhITATFAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD/+H////8AAP/gH////wAA/8Af//// - AAD/gA////8AAP+AD////wAA/wAP////AAD/AA////8AAP4AB////wAA/gAH////AAD8AAf///8AAPwA - B////wAA/AAH////AAD8AAf///8AAPgAB////wAA+AAH//4HAAD4AAP/8AEAAPgAAf/AAQAA8AAA/wAA - AADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAEAAPAAAAAAAQAA8AAAAAADAADwAAAAAAcAAPAA - AAAADwAA+AAAAAAfAAD4AAAAAD8AAPwAAAAAfwAA/gAAAAD/AAD/gAAAA/8AAP/gAAAH/wAAgAAAAB// - AAAAAAAAf/8AAAAD4AP//wAAgB/8H///AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAYAAAAZAAAAGQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAARCQkYOh8fb0ooKK80HByiCQUFTAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAIhERFmA2Np2ITUz3lVNT/4dLS/5IKCi9AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAANjODiBllhY+61kZP+vY2P/pV5e/3xHRvEhEhJfAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAASSgoN41VVeS6bW3/xW9w/8dwcf+9bG3/klZW/jogIIEAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1RkWcs2xs/8dxcv/HcHH/x3Bx/8Zwcf+iYWH/SSkpmAAA - AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUC0tMZtgX+fGcnP/x3Bx/8dwcf/HcHH/x3Fy/61q - av9UMTGqAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxRER1tm9v/8hxcv/HcHH/x3Bx/8dw - cf/HcnP/tnRz/185OboAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAACIxXV7TEdHT/yHJz/8l1 - dv/Kd3j/ynd4/8p4eP/Bf37/bURDywAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNKysjo2Zm4Mt4 - ef/NfH3/z4GC/9GFhf/RhYb/0YWF/82Mi/9+UVHeCAICOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAACwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGc+ - Pkm1c3P30IGC/9OJiv/XkZL/2ZaW/9mWl//YlJX/2JmY/5hnZfMeEBBrAAAABwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA0FAgItHhAQWzAbG4IqFxeHDQcHWwAAABkAAAAAAAAAAAAA - AAAAAAAAek1MdMN/f//VjI3/2piZ/9+io//hqKn/4qmp/+Clpf/jpqT/wImH/04xMLwAAAA6AAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABEbDg5GRygokW5CQs+MVlbxnGJh/JdfXvxnPz7hHA8PbgAA - AAwAAAAAAAAAAAAAAACMW1qbz4qK/9qXl//gpqb/5rKz/+q6u//rvLz/6La2/+qxr//epKL/j1lZ+DUc - HLACAQFPAAAAHQAAAA8AAAAPAAAAEwAAACIbDg5MVDExnYZUU+SpbWz+uXl4/7x+fP/AgoD/xoeF/72A - f/9fOzu1AAAAHAAAAAAAAAAAAAAABJhkZK/VkZH/3Z+g/+axsf/twMD/8svL//LNzf/vxcX/8Lq4/+6z - sf+1dHP/j1VU+144N9g7IiKqMhwclDcfH5RGKSmiYTw7v4tZWOiydXT+woOC/8aKiP/Ol5X/2aWj/9ui - of/cnpz/2pyb/35TUrgAAAAVAAAAAAAAAAAAAAAFmmVkstaTk//hpaX/7Lm6//TLy//419f/+NnZ//TP - z//1wb//9Lq3/8aGhP+1dHP/s3Rz/6xwb/+pb27+rnNy/7Z7ev/BhIL/yY2L/8+WlP/apqT/5be2/+vB - v//rvrz/6bKw/+uvrf/Um5n/bUVEgAAAAAMAAAAAAAAAAAAAAAOTXV2q1ZGR/9CYmP+dfX7/o4yM/9e8 - vP/z0tL/zLOz/+u8u//5v7z/1peV/8uLif/Ki4r/yoyL/86Ukv/TnJv/2qSi/+Gtq//nuLb/7cPB//DJ - x//xxsT/8b+9//G6t//zubf/77az/6d1dM89Hx8lAAAAAAAAAAAAAAAAAAAAAIJOTojNiIn/jGlp/01O - Tv9UVlb/dnNz/7uhof+Pfn7/xJ+e//zCv//lqKb/3J2b/+Chnv/hpaT/7Ly5/+vHxv/MxMn/0MjN//LK - yf/1x8X/9sLA//a/vP/3vrv/+L+8//S7uP+5hoXhYTo5RwAAAAAAAAAAAAAAAAAAAAAAAAAAaTs7RrVz - dPKmfn7/cXJx/4SGhv97fX3/b2Zm/516ev+7kJD/+sG+//C2s//lqqr/rpbA/3aB2/+ql83/tMHK/2jc - 9P9OzOz/2r3B//q/vP/3vrv/9ry6//a8uf/ss7D/tYGA32c+Pk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAvEhIHg01Njbp9fvrCn5//nI+P/4R7ev+fgID/2Jyd/9ybnP/ytrT/+b+8/+ewtf+Mld3/ZI36/5eI - zv/Ttrn/sNLc/6/Czv/stLT/8re0/++0sf/tsq//2qCe/6Rxb8phODg+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABCIB8MeUZGbqRpata8gYH8x4mJ/9eTk//YkpP/04qL/+Cbmv/5wL3/9726/+Sw - t//Zrrn/56qY/+2smf/lr6n/nLWJ/4Gtdf/Pppn/3qGf/7yEg/KJWViYTyoqIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQh0dGXJAQGOXXl7NtnR1/8V7fP/MfH3/znt8/+il - o//0urj/7LCu/+Whg//rq13/35VX/9Kek/9yvXz/ZbNv/6iCdfqYY2O/aj4+TCUJCgcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACcamsBjFRVB4FERAh9PT0JjU1ND6VnZx+/hINF0JqZiNOjoty0iIf2hFBQw5lX - V8+wY2P4xXR0/+aioP/oq6j/2pqT/92fif/Vlor/yYqJ/7N8efiVZmPGdERFYkEfHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALiFhgXFkJEdx5CQSMqSknbNlZWbz5uaws2cnOXBlJPnqH18r4dc - XFFULy8OSCUlFm07O0+FSUmeoV1d3sF9fPrGhoX/snZ295xkZNiFUlKbbD4+T0UdHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc0JDA5FgYRKdbm46onR0Zp9ycnuWampzhFlZVmY6 - OikvDAwHAAAAAAAAAAAAAAAAAAAAAB0ODgRULCwhbjo7UXhERGVrPDxHTCYmGxAAAQMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//////////////////////D////gf///wH///4A///+AP///AD///wA///8AP//+AD - ///gA//D4AH+AeAA+ADgAAAAwAAAAMAAAADAAAAB4AAAA+AAAAfgAAAP8AAAH/wAAD8AAAD/AAAD/wB4 - D//H////////////////////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABMAAAAtAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgIO1cwMM1qOjrsHhAQmwAA - ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAATCgogfUhI6ahgYP6lXV3+f0hI9wIBAT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGBgFPLy6kuW1t/sZv - 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 - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/N64/N64VideoPluginconfig.Designer.cs b/BizHawk.Client.EmuHawk/config/N64/N64VideoPluginconfig.Designer.cs index 8d880c206b..5621523597 100644 --- a/BizHawk.Client.EmuHawk/config/N64/N64VideoPluginconfig.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/N64/N64VideoPluginconfig.Designer.cs @@ -4626,7 +4626,7 @@ this.Controls.Add(this.SaveButton); this.Controls.Add(this.N64plugintabcontrol); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.monitor_MultiSize; this.Name = "N64VideoPluginconfig"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Plugin Settings"; diff --git a/BizHawk.Client.EmuHawk/config/N64/N64VideoPluginconfig.resx b/BizHawk.Client.EmuHawk/config/N64/N64VideoPluginconfig.resx index 915289106f..c3fabd500b 100644 --- a/BizHawk.Client.EmuHawk/config/N64/N64VideoPluginconfig.resx +++ b/BizHawk.Client.EmuHawk/config/N64/N64VideoPluginconfig.resx @@ -136,1137 +136,4 @@ If the given value is to high to be supported by your graphic card, the value wi 36 - - - - AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABABILAAASCwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJmZmQWqqqoSu7u7Hr64uCu/u7s8t7S0Tqqf - n2CPiIp0eXV1em1ra3ppZGR1bWdnXnNzc0WIiIgthISEG5mZmQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAjS0tIR3d3dHs3NzS7V1dU92NjYTtjV1WLW1NR31tbWidbT - 053V0tKx0tLSwtLNzdHPzMzhzMfH7snGxvfCvr7/rqur/5eTk/+Dfn//c29v/25qav9zcHD/fHp6+42M - jO+dnJzepKSkyKioqLKioqKWmJiYfI+Pj2KQkJBHioqKMoCAgBxiYmINAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADDw8Mixby8OcbDw0jKyMhcz8/PcNTU1IPd1taW29vbqt3d3b3d3d3M3d3d3N3d - 3ere3t703d7e/eDg4P/g39//393d/9/d3f/f3d3/39zc/93b2//c29r/29fX/9nV1f/W0tP/0s/P/8XB - wf+uq6r/lZGR/397e/9xbm7/bmtr/3Vycv+DgYH/lJKS/6Sjo/+sra3/ra2t/6eoqP+fn5//mpqa/5mZ - mf+ZmZn/lpaW85aWluSTk5POlZWVupmZmaCUlJSFj4+Pa46Ojk+Li4s3ZmZmCgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqG8LAwOXPy8v/0M7O/9XS - 0//Z1tb/3Nvb/+Hh4P/l5eX/6Ojo/+rq6v/r6+v/7Ozs/+zs7P/r6+v/6urq/+fn5//i4eH/3dvb/9fV - 1f/Py8v/xMLC/7y4uP+xra7/pqGj/5yXl/+SjI7/hX+A/3dycv9uZ2n/Z2Ji/2VeYP9mYWL/bGho/3Zy - c/+Df4H/kZCQ/5uamv+enp7/nZ2d/5mZmf+Xl5f/l5mZ/5mZmf+ZmZn/mZmZ/5mZmf+ZmZn/mZmZ/5mZ - mf+ZmZn/mZmZ/5mZmf+UlJTWjIyMNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADBvr5SzsvK/9DMzf/Rz8//1NHR/9bU1P/V1NT/1NLT/9HP0P/Mysr/xMLD/7y6 - uv+0sbL/rKio/6Sfn/+blpf/k4+P/4yHiP+Ff4H/fnl6/3t1dv94cnP/dXBx/3Rub/90bm//dG5v/3Rv - b/92cXL/eXN0/3t1dv98d3j/fnh5/395ev9/eXr/f3l6/396e/+Benv/g3x9/4aAgf+Ig4T/i4aG/42I - if+QjI3/ko+Q/5SRkv+WlJT/mZWW/5mXl/+amZn/mpmZ/5uamv+bmpr/mpub/5qamv+VlZXfY2NjEgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALKmpiuloKKymZKSvpiS - lMmUkpLUkYyN34+Ki+uNh4jyioWG+IqEhf6LhYf/i4WG/4uFhv+Lhof/jIeI/4+Iif+Qiov/kouN/5ON - j/+VjpD/lpGS/5eRkv+YkpP/mJOU/5qTlP+ak5T/mpSV/5qUlf+alJX/mpSU/5qUlP+ak5T/mpOU/5qT - lP+ak5T/mJOU/5iSk/+YkpP/l5GT/5eRkv+Wj5H/lo+Q/5WOkP+VjY//lI2P/5OMjv+Ti43/kouN/5KK - i/+Riov/kYqL/5CKiv+Pior/lpWV/5qamv+QkJBqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARmZmYKh4eHEYB2dhqGgIAmh4KHMZmI - jDyOg4dIi4KFVouDg2WNhIZ0ioKCgYR9gI+EfH6ehH1+rId8fbuAeHjFgHZ50X52d9x8dnfofHR2+X12 - d/97dHX/e3N0/3pyc/94cXL/eHBx/3dvcP92bm//dW1v/3Rrbf9zam3/cmlr/3Joa/9waGr/cGdp/29m - aP9uZWf/bmRn/21jZv9sY2X/bGJl/2thZP9qYWP/amBi/2lfYv9oX2H/aF9h/2ZdX/9uZmn/lJSU/5WV - lbUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAACIAAACFVEVQ9TRkYoYVdZiWVcXvxoX2H/aWBi/2lgYv9qYWP/amJk/2tj - Zf9sY2X/bWRm/21lZ/9uZmj/cGdp/3Boav9xamv/c2ps/3Nsbf91bm//dm9w/3dwcf94cXL/eXN0/3p0 - df98dXf/fXd4/354ef+Benr/gnt8/4N8ff+TkZH/lpaW4GZmZgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAjouLVqunqfuuq6v/r6yt/7Gur/+zsLL/tbO0/7e1tf+6trf/u7i6/727vP+/vb3/wb+//8PB - wv/Ew8P/x8XF/8jIyP/Kycr/y8vL/87Mzv/Pz8//0dHR/9PT0//V1dT/1tbW/9fX2f/Z2tr/39/f/8PD - xP+RkZHyenp6GQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6u3tn+3w8P/t8PD/7fDw/+3w - 8P/t8PD/7fDw/+3v8P/s7+//7O/v/+zt7f/r7O3/6uzs/+rs7P/p6+v/6erq/+fq6v/m6ej/5efn/+Tm - 5v/i5eX/4eTk/+Hi4v/f4OH/3eDf/9zd3f/d4OD/xcjI/5OTk/Z7e3sfAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACwq6s6sLCw/bKysv+wr6//rq2u/62srP+rqan/qaio/6empv+mpaX/paOk/6Oh - of+hoKD/oJ+f/5+dnv+enJz/nZub/5uamv+al5f/mZaW/5eVlf+WlJT/lZOT/5SSkv+TkZH/k5CR/5GP - j/+Uk5P/lpaW4GZmZgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZmZhSEgIDvh4SE/4eE - hP+HhIT/h4SE/4eEhP+HhIT/h4SE/4eEhP+HhIT/h4SE/4eEhP+HhIT/h4SE/4eEhP+IhIT/iISE/4iF - hf+IhYX/iIWF/4iFhf+IhYX/iIWF/4iFhf+IhYX/h4SE/5KRkf+VlZWpAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAARkZGC4aFheOKh4f/ioeH/4qHh/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qH - h/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qH - h/+KiIj/lpaW/5GRkWEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0bGwhh4SE9oqH - h/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qH - h/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qHh/+Kh4f/iYaG/46Li/+Xl5f2gICAIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIB8fEiKh4f/ioeH/4qHh/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qH - h/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qH - h/+Jhob/kpGR/5aWlsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgoCAcoqH - h/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qH - h/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qHh/+VlZX/lZWVfwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFhISdioeH/4qHh/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qH - h/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qHh/+Kh4f/ioeH/4qH - h/+Khof/joqK/5mZmf+Pj487AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIeC - g8SLh4j/i4eI/4uHiP+Lh4j/i4eI/4yHiP+Mh4j/jIeI/4yHiP+Mh4j/jIiI/4yIiP+MiIj/jIiI/4yI - iP+MiIj/jIiI/4yIif+MiIn/jIiJ/4yIif+MiIn/jIiJ/4uHiP+SkJD/mZmZ4WZmZgoAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVUMjIWG5I+Jiv+PiYr/j4mK/4+Jiv+PiYr/j4qK/4+K - iv+Pior/j4qK/4+Kiv+Pior/j4qL/4+Ki/+Piov/j4qL/5CKi/+Qiov/kIqL/5CKi/+Qiov/kIqL/5CK - i/+Qiov/kIqK/5WUlf+ZmZmlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIB5 - eSiOiYr7kYyN/5GMjv+RjI7/kYyO/5GMjv+RjI7/kYyO/5KMjv+SjI7/koyO/5KNjv+SjY//ko2P/5KN - j/+TjY//k4+P/5OOkP+TjpD/lI6Q/5SOkP+UkJD/lJCR/5SQkf+VkZL/nJyc/4uLi08AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAg7OzsNWlpaEUZGRhZSSkofV1FRKWZmVzJfW1s7ZmZmQV5b - W0lfWVlWZmZmZI6OjnFVVVUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIWJRZeSk/+WkpP/lpKT/5aSk/+WkpP/lpKS/5aR - kv+WkZL/lpGS/5WRkv+UkJH/k46Q/5ONj/+SjY7/kYyO/5GMjf+Pior/jomJ/4uHh/+Khob/ioaG/4mE - hf+HgYP/hX+B/4R/gP+DgYH+b2trmGJeXohnZGKXaGRkpGhlZLBrZ2e6aGRkv2lmZshoZmbSaWZm3Gpm - ZuRqZmbra2dn72tmZvRqZmb6bmpq/29ra/9taWn/aGRk/3x5ef/CwsL/19fX/319fTEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABDMzMwpEREQPKysrEjExMRVAQEAgR0dHK1VVVTZVVVU/WVVVQlRQ - TUZwbGygg36A/397e/99enn/fXp6/3x4eP96dnb/d3Rz/3Zycv91cXH/dXFx/3NwcP9ybm//cW5t/3Bt - bP9wbWz/cGxs/29sa/9vbGv/bmtq/21qaf9uamr/bmpq/25qav9taWn/bWlp/2xoaP9uamr/b2tr/25q - a/9uamr/bmpq/25pav9taWn/bWlp/2xoaP9saGj/a2dn/2pmZv9qZmb/aWVl/2hkZP9nZGT/ZmJi/2lm - Zv+SkZH+2dnZ/+/v7//i4uL/hISEUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABBcXFws8PDwRHBwcEjMzMxQwMDAgOjo6LEBAQDhEQEBAQkJCQkNA - QEhIRkZYSkVFaEpISHVMSEh/TEpKgExKSolQUFCZT01NqFBPT7VVUFC9Uk9PvlRQUMhVU1PUVlNT31hV - VehZVVXtWldX7ltXV/VcWVj7X11c/2BdXf9hXl7/YV5e/2BdXf9gXVz/YV5d/2FdXf9hXl3/YV5d/2Fe - Xf9hXl3/YV5d/2FeXf9hXl3/YF1c/2FdXf9gXVz/YF1c/2BdXP9fXFv/X1tb/15cW/9eW1r/Xlta/15b - Wv9dWlr/XVlZ/1xZWf9cWVn/W1hY/1tYWP9cWVn/XFlZ/1xZWf9cWVn/XFpa/11aWv9dW1v/X1xd/2Be - Xv9hX1//YmFh/2RiYv9lY2T/Z2Vl/2hmZv9samr/rays/ujo6P/q6ur/5+fn/+bm5v+ampp3AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFxcXCzMzMxQwMDAgPTc3LkE9PTtCQkJCQkJCQkFB - QUdFQkJZRkZGakZERnhIREaASERGgEdFRYlHRkaaSEZIq0hHSLhJRki9R0dHvkdGRshIRUfVSUdH4UlH - R+tIRkbtSEZG7klGR/VIRkb8S0lJ/0tJSf9LSUn/S0hJ/0pISP9KSEj/SkhI/0pHSP9KSEj/SkdH/0pH - SP9JR0f/SkdH/0lHR/9KSEj/SkhI/0tJSf9LSkn/S0pK/0xKSv9NS0v/TUtL/09MTf9QTk7/UlBQ/1RS - Uf9VU1P/V1VV/1hWVv9aWFf/XVta/19eXf9iYGD/ZGNj/2ZlZf9paGj/bGpq/25tbf9ycXD/dXR0/3h3 - d/97enr/gH5+/4OCgv+GhYX/iYiI/4yLjP+Qj4//k5OT/5eWlv+ampr/np2e/6Ggof+lpKX/pqan/6mp - qf+srK3/rq6v/7Cwsf+0tLX/trW3/7i4uv+6urv/u7u8/7y7vf+9vb7/vr2//7++wf/BwcL/v7/B/7y8 - vfvr6+v/5+fn/+bm5v/m5ub/6+vr/6ampp0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgIQUZD - Q6FEREThRkJC7kRBQvVEP0H9RkJE/0VCQ/9EQUL/Q0FC/0NAQf9DQEH/QkBB/0JAQf9CQEH/QkBB/0JA - Qf9CQEH/QkBB/0NBQf9EQkP/RkRF/0dERf9IRkf/SkhI/0pJSf9LS0v/TkxM/1FQUP9UUlL/V1VV/1lZ - Wf9dXFz/YF9f/2NiYv9mZWb/amlp/29vb/9zcnL/d3Z2/3x7e/+Bf4D/hYSE/4mIif+Ojo7/lJOT/5eX - l/+dnJz/o6Gh/6enpv+trK3/sLCw/7W0tP+4uLj/vby9/8LCwf/HxcX/ysrK/8/Pz//R0dH/1NTT/9bV - 1f/Z2dn/29ra/93c3P/g4N//4uHh/+Hh4f/h4OD/4ODg/9/f3//f39//393d/93d3f/d3d3/29ra/9nX - 1//W1dX/1NTT/9HQ0P/Qz8//zszN/8zKy//JyMj/x8XF/8TCw//Bvr//v728/7y7u/+7uLj/uLa2/7a0 - tP+0sbL/sa+v/7Ctrf+urKz/ramq/6moqP+joaH+sLCw8+jo6P/n5+f/5+fn/+fn5//t7e3/srKywQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAF5c3MofX19Zl5cXshUU1P/WFZX/1pZWf9dXF3/YWBh/2VkZf9paGn/bm1t/3Jx - cf92dXb/e3t7/4CAgP+FhIX/ioqK/5CQkP+WlZX/nJuc/6CgoP+np6f/rKys/7Kysv+2trb/urq6/7++ - vv/Dw8P/yMjI/83Nzf/Q0ND/09PT/9XV1f/X19f/2tra/93d3f/g4OD/5OTk/+Xl5f/l5eT/5uXl/+bl - 5f/m5uX/5+bm/+jn5//q6Of/6Ofn/+fm5v/m4+X/5eTk/+Ti4f/i4eH/4eDf/+Hf3//f3Nz/3dvb/9rZ - 1//Z1tb/1tTU/9TR0f/S0ND/0M/O/87Ny//Mysn/ysjI/8jFxf/Fw8P/xMHB/8K/vv/Bvb3/vry7/726 - uv+7uLf/ure2/7e1tf+2tLP/tbGy/7Ovr/+zr67/sa6t/7CtrP+vrKz/rauq/62pqv+sqaj/rKem/6um - pv+ppqX/qaWl/6ikpP+npKP/p6Kj/6ajov+loaD/AAAA/6Shn/+koKD/pKCf/6Ofn/+hn57/oJ6e/56c - m/+lo6Py4uPj/ejo6P/n5+f/5+fn/+zs7P/ExMTgVVVVCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcXFxK6KfoOmtrK3/t7a2/7y8 - vP++vr7/w8LC/8XExP/Hx8X/yMjI/8rKyf/Ly8v/zs7O/9DQ0P/T09P/1dTU/9XV1P/W1dX/19bV/9fW - 1v/X1tb/2dfX/9rZ1//b2df/2tnX/9rX1//Z19b/19bV/9fV1P/W1dT/1tTT/9XS0//V0tH/0tHQ/9HQ - z//Qzs3/z8zN/87Lyv/Mysn/y8rJ/8vJyP/Kxsf/ycXF/8fEw//Fw8P/xcLC/8TBwP/DwcD/w8HA/8K+ - vv/Cvr3/wb69/7+8vP+/vLv/vry7/767u/++urr/vbq6/724t/+7uLf/u7e3/7q3tv+6trb/uLa1/7i1 - tP+3tbT/uLS0/7e1tP+3tLP/trSz/7azsv+1sbL/tbGw/7SxsP+0sK//s7Cv/7Gvrv+zr6//sa6u/7Gu - rf+wra3/r62s/6+trf+vraz/r62s/66srP+urKz/raus/6ysq/+tq6z/rKur/6ysrP+sq6z/q6us/6ur - q/+pqav/qaur/6ipq/+oqav/qKmr/6akpP+hn57/oJ6d/6CdnfXa2tr76urq/+jo6P/o6Oj/7Ozs/9LS - 0vdwcHAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACEhIQbqKWl3a2pqv+ppqb/qKal/6elpP+mpKP/pqOj/6ajov+mo6P/pqSj/6ak - pP+npKT/qKWk/6impf+rp6b/rKio/62pqv+vrKv/sK2s/7Gvrv+0sK//tbGy/7azs/+4tbT/u7a2/7y4 - t/++urn/vru7/8G8vP/Cvb3/wr69/8PBwP/DwcD/w8HA/8PBwP/DwcD/w8HA/8PBwP/DwcD/w8HA/8O/ - wP/Dv8D/wr++/8K/vv/Dvr//w7++/8K/vv/Cv77/wr6+/8K+vf/Bvr3/wb29/8G9vP+/vr3/wb29/7+9 - vP+/vb3/v728/7+9vf++vb3/vr28/769vf++vL3/vr29/76+vf++vb3/vb69/729vf+8vb3/vb29/7y9 - vf+8vb3/u7y9/7u8vP+4urz/t7q6/7a3uP+1tbb/tLS0/7SztP+ysrL/r66t/6ypqv+rpqX/qKGi/6eg - nv+mnpz/pJyZ/5+Ukf+cjYr/mImE/5eEf/+VgXz/lX55/5J6c/+Mcmv/iWxk/4VmXf+BYFb/kIeF/6Sj - o/+hnp7/m5mY99LS0vjs7Oz/6Ojo/+jo6P/r6+v/4ODg/4KCgj8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFVVVQOZmJiynZqZ/52a - mf+dmpr/nZqa/52amv+dmpr/npub/5+dnP+gnp7/oaCf/6WhoP+mo6L/p6Sk/6mmpf+rqKf/rauq/6+s - q/+xrq3/s7Cw/7Wxsv+3tLT/uLW2/7u4t/+8urr/vry7/8G9vP/Cvr7/w7/A/8TCwf/Fw8P/x8TE/8fF - xf/Ix8X/yMfH/8jIx//IyMj/ycjJ/8rJyv/Kysr/ysrK/8rKy//Jysv/ycrK/8rLy//Ky8v/ycvL/8jK - yv/Iysr/x8nJ/8XIyP/Excb/w8TE/8HCwv/BwcH/vb29/7u4uP+4trX/trOy/7SurP+xqqr/r6al/6qg - nf+nmZf/o5SQ/6GPjP+fi4f/nYaC/5eAe/+TeHP/jnFs/4trZf+KZ2D/iWRc/4VeV/+AWFD/fFJI/3dL - Qv91Rz3/dUQ6/3RCOP9xPjT/bTgv/2s1Kf9pMSb/aC8j/2gtIf9oLCD/Zigd/2QnG/9jJBn/YiQY/2Ij - F/9iIhf/YiIW/2IiFv9iIhX/YiEV/1waEP9cSEL/pqeo/6Genv+ZmZn6x8fH9e3t7f/q6ur/6urq/+vr - 6//n5+f/k5OTYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJiWloaenJv/npyb/56cm/+fnZz/n56d/6Cenv+hn5//o6Gg/6Wj - o/+mpqX/qain/6urq/+tra3/rq6v/7Cwsf+ztLT/tba3/7e4uP+6u7z/u72+/73Av/++wcL/wMLD/8DC - w//BwsL/wcLD/8LCw//CwsP/wsLC/76+vv+8urr/ura1/7ezsf+2r63/tK2r/7Gopv+toaD/p5iX/6OT - j/+hjYr/n4mF/5uEgf+Xfnn/k3Zy/4xuaP+JZ2L/h2Jc/4RgWf+AWlL/fFNM/3lMRf90RT//c0I5/3E/ - Nv9uOzP/ajYu/2cyKf9lLiX/ZCoi/2MoIP9iJx7/YCUb/18iGv9dIBj/XR4W/10dFf9dHBX/XRwV/1wb - FP9dGxP/XBoT/1waE/9cGxP/XRsT/10cE/9dHRP/Xh4V/18eFf9fHxX/Xx8V/2AfFv9hIBb/YSEX/2Ii - F/9jIxj/YyMY/2MjGP9kJBn/ZCQZ/2UlGf9lJhr/ZSYa/2UmGv9lJxr/ZSca/2YoGv9mKBv/ZSMX/1E3 - L/+goaP/o5+f/5qVlf28u7v07e3t/+rq6v/q6ur/6urq/+3t7f+goKCJAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl5SUWJ6c - m/+enJv/np2d/5qbm/+Xl5b/l5WU/5iUkv+blJP/mJGP/5SNjP+SiIb/j4OB/5GBff+Sf3v/lX96/5J7 - df+Lc27/h2xm/4VnYP+FZFv/hWFY/4dfVv+BWVH/elFI/3ZKQP90RTz/dEE4/3Q/Nf9yPTT/bTcv/2gx - KP9mLiX/ZCoh/2EnHv9hJR3/YCQb/14hGv9cHhf/WxwW/1oaFP9aGRP/WhkT/1oYE/9aFxL/WRcS/1kX - Ev9aFhL/WhcS/1oXEv9aGBL/WxgS/1sZE/9bGhP/XBoT/1waE/9cGxT/XRwV/10dFf9eHhb/Xh4W/14f - Fv9eHxf/Xx8X/2AfF/9gIBj/YCEY/2EhGf9hIRn/YiIZ/2IiGf9iIhn/YiIZ/2IjGf9iIxr/YyMa/2Mj - Gv9jIxr/YyQa/2MkGv9jJBr/ZCUa/2QlGv9kJRr/ZCUa/2QlG/9lJhv/ZSYb/2UnG/9lJxv/ZScb/2Yo - Gv9mKBv/Zigb/2YoG/9nKBv/Zigb/2YoG/9oJxr/Ui0k/5aWl/+koaD/m5iY/rCur/Ps7Oz/6+vr/+vr - 6//r6+v/8PDw/7GxsbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPioowm5mY/KCiof95XFX/Xy0i/14tI/9dKSD/Xice/2Uq - Hv9mKBz/ZSYb/2MjGf9iIRf/YR8W/2IfFP9lHxX/ZyAV/2YeFf9lHhT/ZR0T/2UcE/9lHBL/ZRsS/2Uc - Ev9lHBP/YxwT/2McE/9jHBP/YxwU/2McFP9jHRT/Yh4W/2IeFv9iHhf/YR4X/18eFv9eHhb/Xh4W/18f - F/9fHxf/Xx8X/18fF/9fHxf/Xx8X/18fF/9fHxf/Xx8Y/18fF/9fHxf/XyAY/18gGP9fHxf/XyAX/2Ag - GP9gIBj/YCAY/2AgGP9gIBj/YCAY/2AgGP9gIRn/YCEZ/2AhGf9hIRn/YSEZ/2EhGf9hIRn/YiIZ/2Ii - Gf9iIhn/YiIZ/2IjGf9jIxr/ZCMa/2QjGv9kIxr/ZCQa/2QkGv9kJBr/ZCUa/2QlGv9lJhv/ZSYb/2Um - G/9lJhv/ZSYb/2YnG/9mJxv/Zigb/2YoG/9nKBv/Zygb/2coG/9nKBv/Zygb/2coG/9oKRv/aCkb/2sp - Gv9QJhv/iIiI/6ajo/+fnJv/qKam9Obm5v7s7Oz/6+vr/+vr6//x8fH/wMDA0AAAAAIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBg - YBCbmprlo6Wm/21PSP9ZFg7/Xh0T/14dFP9eHRP/YiAV/2UhFv9nIRb/ZyIX/2cjGP9nIhf/ZyIX/2Yi - F/9nIxj/aCMY/2okGf9qJBn/aiQZ/2okGf9pIxj/aSMY/2okGf9pIxj/aCIY/2ciGP9mIhj/ZiEY/2ci - Gf9nIRn/ZiEZ/2UhGf9lIRn/ZSEZ/2IgGP9gHxf/YCAY/2AgF/9fHxf/Xx8X/18fF/9gIBj/YCAY/2Ag - GP9gIBj/YCAY/2AgGP9gIBj/YCAY/2AgGP9gIBj/YCAY/2AgGP9hIRj/YCAY/2AgGP9hIRn/YSEZ/2Eh - Gf9hIRn/YSEZ/2EhGP9iIhn/YiIY/2IiGf9iIhn/YiIZ/2MjGv9kIxr/ZCMa/2QjGv9kJBr/ZCQa/2Uk - G/9lJRr/ZSUa/2UmG/9lJhv/ZSYb/2YmG/9mJxv/Zicb/2YnG/9mKBv/Zygb/2coG/9oKRv/aCkc/2gp - HP9oKRz/aCkc/2gqG/9oKhv/aCob/2gqG/9oKhv/aysc/1UkFv96dnX/qKam/5+dnf+gnp714ODg++3t - 7f/s7Oz/7Ozs//Hx8f/Pz8/tXl5eEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJuYl8KlpKX/d2Vg/1gaEf9gIBb/XyAW/18g - Fv9gIBb/ZiMX/2cjGP9oJBj/aCQY/2ckGP9oJBj/aCQY/2cjGP9nIxj/ZyMY/2gjGP9pJBj/aiUZ/2sl - GP9qJBj/aiQY/2okGP9qJBn/aiQY/2kjGf9oIxn/ZyIZ/2giGf9pIxn/ZyIZ/2ciGf9nIhn/ZyIZ/2Uh - Gf9jIBj/YSAY/18fF/9fIBj/YCAY/2AgGP9gIBj/YSAY/2EgGP9hIRj/YSEY/2EhGP9hIRj/YSEY/2Eh - GP9hIRj/YSEY/2EhGP9hIRj/YiIZ/2EiGf9iIhn/YiIZ/2IiGf9iIhn/YiIZ/2IiGf9iIhn/YyMa/2Mj - Gv9jIxr/ZCMa/2QkGv9lJBr/ZSQa/2UlGv9lJhr/ZiYb/2YmG/9mJhv/Zicb/2cnG/9nJxv/Zigb/2Yo - G/9nKBv/Zygb/2gpG/9nKRz/aCkc/2gpHP9oKRz/aCoc/2gqG/9pKxz/aSsc/2krHP9pKxz/aSsc/2kr - HP9rLBz/WiIV/21jYP+pqKj/oZ6d/5yamffW1tb58PDw/+zs7P/t7e3/8PDw/93d3f19fX0vAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAm5iYl6Sho/+GfHv/Vx4U/2AhFv9fIRb/XyEW/18hFv9kIxf/aCUY/2glGP9pJRj/aSYY/2gl - GP9oJRj/aCUY/2gkGP9oJBj/ZyQY/2cjGP9oIxj/aSQZ/2olGP9rJBj/aiQY/2skGP9rJRj/ayUY/2sl - GP9qJBn/aiQZ/2kkGf9qJBn/aSQZ/2gjGf9nIxn/aCMZ/2cjGf9lIRn/YCAX/2AgF/9iIBj/YyEY/2Mh - GP9jIRj/YyEY/2MhGP9jIRj/ZCEZ/2MiGf9jIRn/YyIZ/2MiGf9iIhn/YiIZ/2EiGf9iIhn/YiIZ/2Ii - Gf9iIhr/YyMa/2MjGv9jIxr/YiIZ/2MjGv9jIxr/ZCMa/2QkGv9lJBr/ZSUa/2UlGv9lJhr/ZiYb/2cm - G/9mJxv/Zycb/2coG/9oKBv/aCgb/2goG/9nKBv/aCkc/2gpHP9oKRz/aSod/2kqHf9pKhz/aSsc/2kr - HP9pLBz/aiwc/2osHP9qLBz/aiwc/2stHP9rLB3/ay0c/2stHP9jJRb/YFFL/6enqP+hnp3/mZaZ+szM - y/bx8fH/7e3t/+3t7f/v7+//6Ojo/4iIiE8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZmZlpoZ+f/5OQkP9aKBz/YSAU/2Ei - Fv9hIhb/YCIW/2EiFv9oJRj/aSYY/2knGP9pJxj/aScY/2kmGP9pJhj/aCYY/2gmGP9oJRj/aCUY/2gl - GP9nJBj/aCQY/2olGP9rJRj/ayUY/2slGP9rJRj/bSYZ/2wlGP9sJRn/ayUZ/2slGf9rJRn/ayUZ/2ol - Gf9pJBr/aiUa/2slGv9oIxn/YyEY/2MhGP9jIhj/ZCIY/2QhGf9kIRn/ZCMZ/2QjGf9lIhn/ZSIZ/2Uj - Gf9lIhn/ZSIZ/2QjGf9kIxn/ZCMZ/2MjGf9jIxn/YyMZ/2MjGf9jIxn/ZCQZ/2QkGf9jIxn/YyMY/2Qk - Gf9kJRn/ZSUa/2UmG/9mJhv/ZiYb/2cnG/9nJxv/aCcb/2goG/9oKBv/aSgb/2kpHP9pKRz/aiod/2oq - Hf9pKxz/aSsc/2orHP9qLBz/aiwc/2osHP9rLRz/aywd/2stHf9rLh3/ay0d/2suHf9rLh3/bC4d/2wt - Hf9sLh3/bC4d/2kpGP9ZQjn/o6Sm/6Genv+YlpX9wL6+9fLy8v/t7e3/7+/v//Dw8P/w8PD/paWldwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAJiUlD6hnp3/nZ2e/2E2K/9iHhP/YyMW/2MjFv9jIhb/YiEW/2YkF/9rJhj/aiYY/2sn - GP9sJxn/bCcZ/2wmGP9rJhj/ayYY/2smGP9rJhj/aiYY/2olGP9qJRj/aSUY/2smGP9rJhj/ayYY/2wm - GP9tJhj/bicZ/24mGf9uJhn/biYZ/20mGf9tJhn/bSYZ/20mGv9sJhr/bCYa/2wmGv9sJhr/ZyMZ/2Qj - GP9lIxn/ZiMZ/2YjGf9mIxn/ZyQZ/2ckGf9nJBn/ZyQZ/2YkGf9mJBn/ZiQZ/2YkGf9mJBn/ZiQZ/2Uk - Gf9lJBn/ZSQZ/2YlGf9lJRn/ZiUa/2UlGf9kJBn/ZCQZ/2UlGv9mJhr/Zicb/2cnG/9nKBv/aCgb/2go - G/9pKRz/aSkc/2kpHP9qKh3/aiod/2oqHP9rKxz/aysc/2ssHP9rLRz/ay0d/2wtHf9sLR7/bC0e/2wt - Hv9sLR3/bC4d/2wvHf9tLh7/bC4d/20vHf9tLx7/bS8e/20vHv9tLx7/bi0b/1Y3LP+bnJ7/o6Cf/5uY - mP61tLP08fHx/+/v7//v7+//7+/v//T09P+qqqqcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhISEG5yZmfCjpKX/a0o//2Ie - Ev9kIxb/ZCMW/2QjFv9kIxb/ZCMW/2snGP9tJxn/bSgZ/20oGf9uKBn/bigZ/20oGf9tJxn/bScZ/20n - Gf9tJhj/bCYY/2wmGf9sJhj/bCYY/20nGf9sJhn/bScZ/20nGf9uJxn/byga/3AoGf9wKBn/bygZ/3Ao - Gv9vKBr/byga/24nGv9uJxr/bica/28oG/9vKBv/ayYa/2ckGf9oJBn/aSQa/2klGv9pJRr/aiYa/2om - Gv9qJhr/aSUa/2klGv9oJRr/aCUa/2clGf9nJRn/ZyUZ/2clGf9nJRn/ZyUa/2clGv9oJhr/aCYa/2Yl - Gf9nJRn/aCYa/2gmGv9oJxv/aScb/2koG/9pKBv/aSkb/2oqHP9qKhz/aioc/2srHf9sKx3/aysc/2ws - Hf9sLB3/bS0e/20tHv9sLh7/bS4e/20vHv9tLx7/bS8e/20vHv9tMB7/bTAe/24wHv9tMB7/bjAe/24w - Hv9uMB7/bjAe/20xHv9vMR3/VjAh/5GRkf+lo6L/n5ub/6qpqPTr6+v+8fHx//Dw8P/w8PD/9vb2/7u7 - u8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABVVVUDnJqa0Kamp/90Xlj/Xh0R/2YmF/9mJRf/ZSQX/2UkF/9kIxb/aCYY/24q - Gf9uKhn/byoZ/28qGf9vKhr/byoa/28qGv9vKhr/bika/24pGv9uKBn/bigZ/24oGf9uKBn/bikZ/28p - Gv9vKRr/byka/28pGv9vKRr/byka/3EqGv9yKhr/cioa/3MqGv9zKhv/cioa/3IrG/9xKhv/cCob/3Aq - G/9xKxz/cCoc/2wmGv9qJhr/ayYa/2wmGv9sJxr/ayYa/2smGv9rJhr/aiYa/2omGv9qJhr/aiYa/2km - Gv9pJhn/aCYa/2gmGv9oJxr/aSca/2knGv9pJxv/aCca/2gmGv9oJhr/aSca/2knG/9qKBv/aygc/2sp - G/9rKhz/ayoc/2srHP9sKx3/bCwd/2wtHf9tLR7/bS0e/24tHv9uLR7/bi4e/24vHv9uMB7/bjAe/24w - Hv9uMB7/bjAe/24wHv9vMR//bzEf/28xH/9vMR//bzEf/24yH/9tMh//bTIf/3AzH/9ZKxv/g4GA/6el - pf+fnZz/oqGh9uXn5vzy8vL/8fHx//Hx8f/29vb/zc3N31VVVQkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcm5mopqWl/4F2 - cv9aHhL/ZSQW/2gnF/9oJxf/aCYX/2cmF/9nJhf/byoZ/3ArGv9wLBr/cSwa/3EsGv9xLBr/cSwa/3Er - Gv9wKxr/cSsa/3ArGv9wKhr/cCoa/3AqGv9wKhr/cSsa/3ErGv9xKxr/cSsa/3ErGv9xKxr/cSsa/3Mq - Gv9zKxr/cysa/3QrG/91Kxr/dSwb/3UtHP91LRz/dCwc/3QtHP9zLR3/dC4d/3IrHP9uKBv/bica/28o - G/9vKBv/bygb/24oG/9uKBr/bSga/20nGv9sJxr/ayca/2snGv9qJxn/aycZ/2snGv9rKBr/bCga/2so - Gv9rKBr/aCYZ/2knGv9qJxr/aiga/2spG/9rKRv/bCoc/2wrHP9tLBz/biwc/20tHP9tLR3/bS0d/24u - Hv9uLh7/by8e/28vHv9vLx7/bzAf/28xH/9vMR//bzEf/28xH/9wMh//cDIf/3AyH/9wMh//cDIf/3Az - H/9vMx//bjQf/24zH/9vNB//cTQf/18rGf94cW3/qKen/6Genf+dm5r43Nzc+fX19f/x8fH/8fHx//X1 - 9f/Z2dn2c3NzHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJuZmXqko6L/kIqJ/1slF/9kIxT/ZSQW/2knGP9qJxj/aScX/2gm - F/9sKBj/ci0a/3IsGv9yLRr/cy0b/3MtG/9zLRv/cywb/3MsG/9zLBv/cywa/3IrGv9yKxr/cisa/3Es - Gv9yKxr/cy0b/3MtG/9zLBv/cywb/3MsG/9zLRv/cy0b/3UtG/91LRv/dS0b/3YuG/92Lhz/dS4c/3cv - HP94MB3/eDAd/3gwHf93MB7/eDAe/3gwHv9zLBz/cCob/3ErG/9xKxv/cSsb/3AqG/9vKhv/bykb/24p - Gv9uKBr/bSga/2woGv9sKBr/bCka/2wpGv9tKRv/bSob/20qG/9rKBr/ayca/2woGv9sKRr/bCob/20r - G/9sLBz/bSwc/24tHP9vLR3/by0d/28tHf9vLh7/by8e/28wH/9vMB//cDEf/3ExH/9xMR//cDIf/3Ay - H/9wMh//cTMf/3EzH/9xMx//cTMf/3E0H/9xNB//cDUf/280H/9wNB//bzQf/3A1H/9xNR//ZSwY/2lc - V/+pqKj/oZ6e/5qZmfrS0tL39vb2//Ly8v/y8vL/9fX1/+rq6v+IiIg+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmJiVTaOg - oP+bm5z/YDEk/2YhE/9mJBb/ZiQW/2snF/9tKRj/aygX/2snF/9yLRr/dC4a/3QvG/91Lxv/dTAb/3Uw - G/91MBz/dS8c/3UvHP90Lhz/dC4b/3QuG/90Lhv/cy4b/3MtG/90Lhv/djAc/3YwHP92Lxz/di8c/3Yw - HP92MBz/djAc/3cwHP94MBz/eTAc/3gwHf93MB7/dzAe/3gxHv95Mh7/ejIe/3szH/98Mx//fTQf/301 - IP96Mh7/dC0c/3MsHP9zLBz/cywc/3IrG/9xLBv/cSsb/3AqGv9vKhr/byka/28pGv9vKhr/byoa/28q - G/9vKxv/cCwb/24qG/9rKBn/bCka/20qG/9tKhv/bisb/28sHP9vLRz/by0d/28uHf9wLx3/cC8d/3Ew - Hv9xMB//cTEf/3AyH/9xMh//cTMf/3IzH/9yMx//cjMf/3E0H/9yNR//cjUf/3I1H/9yNR//cjUf/3E1 - H/9wNh//cTYf/3A2H/9wNh//cDYf/3E2H/9sLxr/Y09F/6WmqP+hnp7/mJaW/cTExPb39/f/8vLy//Ly - 8v/09PT/8fHx/5iYmGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQiYknoJyb+KSlpv9oQzf/ZiES/2gmFv9nJhb/ZyUW/2so - F/9vKxj/bSkX/3ArGP93MBv/dzAb/3cxG/93MRz/dzEc/3cxHP94MRz/eDEc/3gwHP93MBz/dzAc/3cw - HP93MBz/dzAc/3YwHP93MBz/ejId/3oxHf96Mh3/ejId/3oyHf95Mh3/eTId/3ozHf97Mh3/ezMd/3o0 - H/96NB//ezUf/3s1H/97NR//fDYf/382IP+ANiD/gTcg/4M5Iv+CNyH/ezIe/3YvHP91Lhz/dC0c/3Qt - G/9zLBv/cisa/3EsGv9xKxr/cCsa/3ArGv9wKxr/cSsa/3ErG/9xLBv/cSwb/20oGf9uKRr/bioa/24q - G/9vKxv/bywb/3AsHP9xLR3/cS4d/3EvHf9xMB3/cTEd/3IxHv9zMh7/cjIe/3EzH/9yMx//czQg/3M0 - IP9zNCD/cjUf/3I1H/9zNSD/czYg/3Q2IP9zNiD/cTcg/3I3IP9yNyD/cjcg/3E3IP9yNyD/cjcg/3E0 - HP9aQTT/oKGj/6Ofnv+bmJj+uLe39Pb29//09PT/9PT0//T09P/39/f/pKSkiQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJlm - Zgqgm5vdp6ip/3VaT/9mIRH/aycX/2onFv9pJxb/aSYW/20pF/9xLBn/cCsY/3YwG/97Mhz/ezIc/3s0 - Hf97Mx3/ezQd/3w0Hv97Mx3/ezMd/3szHf97Mx3/ezId/3syHf97Mh3/ejId/3oyHf97Mx3/fTYe/301 - Hv99NR7/fTUe/301Hv99NR7/fTYf/302H/9/OB//fTcg/384IP9/OCD/fzgg/4A5If+AOSH/gTgh/4M5 - If+DOiL/hDsi/4Y8I/+IPiP/hTsi/381IP96Mh3/eTAc/3YuG/91LRv/dC0a/3MsGv9yLBr/cisa/3Ir - Gv9yKxr/cisa/3IsGv9zLBv/byoZ/20pGf9vKhr/cCsa/3EsG/9wLBv/cC0b/3EuG/9yLxz/cy8c/3Mw - Hf9yMR3/czEd/3MyHv90Mh//czMf/3IzH/9zNCD/czQg/3Q1IP9zNiD/dDcg/3Q3IP90NyD/dDcg/3Q3 - IP9yNyH/czch/3M4IP9zOCD/cjgg/3I4IP9zOCD/dDce/1w4KP+Wlpj/pKGg/56bm/+urKz28vLy/vX1 - 9f/19fX/9fX1//r6+v+5ubmvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ+bm7ioqKn/gXFr/2YiEv9tKRf/bSgX/2wo - F/9sKBf/aycX/24qF/9yLRn/dC4a/300Hf99NR3/fTYe/302Hv9/Nx7/fzce/382Hv9/Nx7/fzYe/382 - Hv99Nh7/fTUe/301Hv99NR7/fTUe/3w1Hv9/Nx//gTkg/4A3H/+BNx//gTgg/4E4IP+BOCD/gTkg/4E6 - If+BOiH/gjsi/4I7Iv+CPCL/gzwi/4M8Iv+DPCL/hD0j/4U+I/+GPiP/hz4j/4g/I/+KQST/ikEk/4Y8 - Iv+CNh//gDUe/3syHf94MBv/di0a/3QtGv90LRr/dC0a/3QsGv90LRr/dC0a/3QtGv9zLBr/bigY/28q - Gf9wKxr/cSwa/3EsGv9yLRv/ci4c/3MvHP9yMBz/czEd/3QyHv90Mh7/dDIe/3QzHv91Mx//dTQf/3Q1 - IP90NSD/dDUg/3U2IP90NyD/dDcg/3U4IP91OCD/dDgg/3M4IP9zOCD/czkg/3M5IP9zOSD/czkg/3M5 - IP92OR//WjIf/4uKiv+mpKT/n52c/6Sjo/fr6+v89/f3//X19f/19fX/+/v7/8bGxs8AAAACAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAnpqai6impv+Oh4T/ZikX/28qF/9uKhf/bioX/20pF/9tKRf/bCcX/28rGP91Lxr/fDQc/4M4 - Hv+BNx7/gTce/4E4H/+BOB//gTgf/4E5H/+BOB//gTgf/4E4H/+BNx//gTcf/4E4H/+ANx//gDge/4A3 - H/+DOiD/hDwh/4Q7IP+DOyD/hDsh/4Q7If+EPCH/gz4j/4Q/I/+FPyP/hkAj/4Y/I/+GQCT/h0Ek/4dB - JP+HQSX/iEIl/4lDJf+JQyX/ikIl/4xCJf+MQyb/j0Ul/4xAI/+FOiD/gzcf/4M2H/+ANR3/fDIc/3kw - G/92Lhr/di0Z/3YuGv92Lhr/di4a/3YuGv9wKhj/bykY/3AqGf9xKxn/cisa/3ItGv9zLhv/dC4c/3Qw - HP90MRz/dDId/3UyHf91Mh7/dDMe/3U0H/92NR//dTYf/3U3H/91NiD/dTcf/3U3IP91OCD/dTgg/3Y5 - IP91OSD/dDog/3Q6IP90OiD/dDog/3Q6IP90OiD/czog/3Q7IP9hMhv/fnp3/6impv+hnp3/npyc+OLi - 4vr5+fn/9vb2//b29v/7+/v/2NjY7F5eXhMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACdmJhepqSk/5qZmf9nMiD/cSsW/3As - F/9wLBf/bysX/28rF/9vKhf/bSkX/3IsGP96Mhv/hTsf/4U6H/+EOh//hDof/4Q7IP+EOyD/hDwg/4U7 - IP+FOyD/hTsg/4U7IP+FOyD/hDog/4Q6H/+EOiD/gzof/4Q5H/+HPyL/hz8h/4c/If+HPyH/hz8i/4hA - I/+HQST/h0Il/4hDJv+JQyb/iUMl/4lDJv+KRCb/i0Qm/4tEJv+LRSb/i0Um/4xGJ/+MRif/jkcn/49G - J/+QRyb/kkgm/5JHJv+KPiH/hDce/4Q4Hv+ENx7/gzce/4E1Hf99Mxz/ezEb/3kwGv94Lxr/eTAa/3Qr - Gf9vKRj/cCsY/3ArGP9xLBn/ciwa/3MtGv9zLhr/dC8b/3UwHP91Mhz/dDIc/3UyHf91Mx3/dTUe/3Y2 - Hv92Nh7/dTcf/3U3H/91OB//dTgg/3U4IP91OCD/djkg/3U6IP90OiD/dDog/3Q6IP91OyH/dTsh/3M7 - IP9yPCD/dD0h/2UyGf9yaGP/qaeo/6Genv+bmZj71dXV+Pr7+//29vb/9/f3//r6+v/l5eX9goKCLwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAJOTkzSioJ/9o6Wn/2tBMf9yKhT/ci0Y/3EsGP9xLBf/cCwX/3AsF/9wLBf/bysX/3Mt - GP+COB7/ikAh/4g9IP+HPiD/hz8h/4g/If+IPyL/iEAi/4g/Iv+IPyL/iD8i/4g/Iv+IPyH/hz8h/4c+ - If+HPiH/hz0h/4c9If+JQyT/iUMj/4lCI/+KQiP/i0Ik/4pEJf+KRSb/i0Yn/4tHKP+MRyf/jEcn/45I - J/+OSCf/jkgo/49JKP+PSij/kEoo/5BKKf+RSij/kUso/5JLKP+SSif/k0on/5VLJ/+RRiT/hzsf/4Q3 - Hf+EOB7/hDcd/4Q3Hv+DNx7/gjYd/4A1Hf99Mxz/eTAa/3ApF/9wKRf/cCsY/3EsGf9yLBn/cy0Z/3Mu - Gf90Lxv/dDAb/3UxG/91Mhz/dTIc/3YzHf92NB3/dTYe/3Y2Hv91Nx7/dTgf/3Y5H/92OR//djog/3Y6 - IP92OiD/djoh/3U7If91OyH/dTsh/3U7If90PCH/czwh/3M8If90PSH/bTYb/2hYT/+nqKn/oZ+f/5iX - lv3Kysr3/Pz8//f39//39/f/+vr6//Ly8v+Ojo5PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeXl5E6Ofnumqq63/dFVH/3Ip - FP90Lxn/dC4Y/3QuGP9zLRj/cy0Y/3ItGP9yLBf/cSsX/3gwGv+JQCH/jUMj/4tBIf+JQSH/ikIi/4pC - I/+KQiP/ikIj/4pCI/+KQiP/ikIj/4pCI/+KQiP/ikIj/4pCI/+KQSP/iUEi/4pCI/+MRyX/jEYl/4xG - Jf+ORiX/jEcm/45JJ/+PSij/jksq/49MKv+QTCn/kUsp/5FMKv+STCr/kk0q/5JNK/+STSv/k04r/5RO - K/+UTyr/k04q/5ROKf+UTCn/lE0n/5dOKP+XTCf/j0Eh/4c5Hv+GOR7/hTke/4U4Hv+FOB7/hTke/4U5 - Hv+EOR7/fDMc/3YuGf9zLBj/cisX/3EsF/9xLBn/cy4Z/3QvGf90MBr/dDEb/3YyG/91Mhz/djQd/3Y1 - Hf91NR3/djYe/3Y3Hv92OB//djkf/3Y5H/92OiD/djsg/3c7If92OyH/dTwh/3U8If92PSH/dT0h/3Q+ - If90PiH/dT8h/3Q+If9yORz/Y0w9/6Slpv+jn5//m5mY/ry7u/b7+/v/9/f3//n5+f/5+fn/+fn5/6am - pnYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABo6Cfx6ytrv+Aa2P/cSoU/3cxGv93MBr/djEa/3UwGf91MBn/dC8Z/3Qu - GP9zLRj/ciwX/4E4Hf+PRST/kEYk/4xDI/+LQiP/jUMj/45EI/+ORCP/jEQj/45EI/+MRCP/jkQk/4xE - JP+MQyT/jEMj/4xDI/+MQyP/jEMj/4xEJP+QSif/kEkm/5FKJ/+QSyj/kEwp/5FOK/+RTyv/kVEs/5JR - Lf+UUCv/k08r/5RQLP+UUSz/lFEt/5RSLf+VUi3/llIt/5dSLf+WUiz/llEr/5ZQKv+WTyn/lk8o/5dP - KP+bUSj/lUkl/4s9H/+HOR3/iDoe/4c6Hv+GOR7/hjke/4U6Hv+EOR7/gTcd/4A3Hf99NRz/eTEb/3Uv - Gv9zLhn/cy4Z/3QvGf91MRr/djIb/3YyG/91Mxz/djQd/3Y1Hf92Nh3/dzcf/3Y4H/92OR//dzof/3Y7 - H/93PCD/dzwg/3c8IP91PSH/dj0h/3Y9If91PiH/dT8h/3U/If91PyH/dT8h/3U9H/9fQi//nJ2f/6Oh - oP+enJv/sbCw9vf39/76+vr/+fn5//n5+f/+/v7/srKynAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgoJ+crKus/46C - fv9vLhf/eTIa/3gyGv93MRr/dzEa/3YxGv92MRn/djAZ/3UvGf90Lhj/djAZ/4tBIf+SSSX/k0kl/49G - JP+PRiT/kEcl/5BHJf+QRyX/kEcl/5BHJf+QRyX/kEcl/5BGJf+QRyX/j0Yl/5BGJf+PRiX/j0Uk/5BI - Jv+UTin/k00n/5JOKf+TTyv/k1Es/5RTLv+UVS//lVYw/5VWL/+WVC7/llQu/5dVL/+XVS//l1Uv/5dW - L/+ZVy//mVYv/5lWLv+aVS3/mVQs/5lSKv+ZUir/l1Ep/5hRKP+cUyn/m1Io/5JFI/+JOx7/iTwe/4k8 - Hv+IOx7/iDse/4g7Hv+DNx3/gjcd/4I4Hf+DOh7/gzof/4A5Hv97Nh7/dzIb/3UxGv90MRr/dTIb/3Yz - G/92NRz/djUd/3Y2Hf92Nx3/dzge/3Y5H/92OR//dzsf/3c8IP93PCD/dj0h/3Y9If93PSH/dz4h/3U/ - If91QCH/dkAh/3ZAIf91QCH/dkAg/187Jf+TkpP/paOj/5+dnf+mpaT38PDw/fv7+//6+vr/+vr6//// - ///Dw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCenm6rqKj/m5eW/3A2H/97Mxr/ejQb/3kzGv96Mxr/eTIa/3kx - Gv94MRn/dzAZ/3gwGf91LRj/gDcc/5NJJf+VSyb/lU0n/5JJJf+RSSX/kkol/5NKJv+TSib/kkom/5JK - Jv+SSib/kkom/5JKJv+SSib/kkom/5FJJv+RSSb/kUgl/5NNJ/+WUir/lFAq/5VSK/+WVC3/llcv/5dZ - Mf+XWjL/mFsz/5lbMv+ZWTD/mlkw/5pZMP+aWTD/mlow/5taMP+bWzD/m1ow/5xZL/+bWC3/mlYs/5pV - K/+aVCr/mlMp/5tSKP+cVCn/nlYq/5hOJv+MPyD/ijwe/4o9H/+KPR//ij4f/4c6Hv+EOB3/gzke/4Q6 - Hv+EOx7/hDwf/4Q9IP+EPSD/gjwg/3w6H/94Nh3/dzMb/3UzG/91NBz/djYd/3Y3Hf93OB7/djkf/3c6 - H/93Ox//dzwg/3c9IP93PSH/dz4h/3c+If93PyH/dkAh/3ZAIf92QCH/dkEh/3RCIf93QyH/Yjke/4aE - g/+opqb/oZ6e/6Cdnfjo6Oj7/v7+//r6+v/6+vr//////9XV1d9VVVUJAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoJycQ6mn - pv+kpaf/dEMu/340Gf98Nhv/fDUb/3w1G/98NBv/ezQa/3ozGv96Mhn/eTEZ/3gwGf93MBj/jEEh/5dN - J/+XTij/mlEq/5VMJ/+UTCf/lU0n/5ZNJ/+VTSf/lU0n/5VNJ/+VTSf/lEwn/5VNJ/+UTCf/lEwn/5RM - J/+UTCf/lEwn/5ZQKv+XVi3/l1Qs/5lXLf+ZWTD/mVwy/5peNP+bXzX/nGA3/5xgNv+cXjP/nV4z/5xe - M/+dXjP/nV4z/55eM/+eXjP/nV0x/55cMP+dWi7/nFks/5xYLP+cViv/nFUq/51TKf+cVCn/n1Yq/59W - Kv+TRyP/iz4f/4w9H/+MPyD/ij4f/4Y6Hf+GOh7/hTse/4U8Hv+GPR//hj0f/4U+IP+FPiD/hUAh/4RB - If+DPyH/fzwg/3k5Hv93Nh3/dTcc/3c4Hf92Oh3/djoe/3c7H/93PSD/eD4g/3c+IP92PyD/d0Ag/3dA - If92QCH/dkAh/3dBIv92QiL/dUIh/3dDIv9nORz/fXZw/6inqP+hn57/nJqZ+9za2vn/////+/v7//v7 - +///////4eHh9nh4eCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZmZkepqSj86ytsP95VEL/fjQX/4A5HP9/OBz/fzcb/303 - G/99Nhv/fDUb/3s0G/98Mxv/ezMb/3owGf+BNRz/l0wn/5pPKP+cUiv/nVMr/5hPKP+YTyn/mE8q/5hQ - Kf+YUCn/mlAq/5hQKf+YUCn/mE8p/5dPKf+XTyn/l08o/5dPKP+XTyj/lEwn/5ZRKv+bWy//m1ku/5tc - MP+cXzP/nWI2/55jN/+eZDj/nmU4/59lOP+eYzb/n2M2/59jNf+fYzX/n2I1/59iNf+fYTT/n2Ay/59f - MP+fXC//nlst/55bLP+eWSz/nlcr/51WKv+dVSn/n1cq/6NZK/+bUSf/kEIh/40+IP+PQCD/iT4f/4g8 - H/+IPR//hz0f/4c+H/+HPh//hz8g/4ZAIP+HQCD/hUEh/4ZBIf+HQyL/hkQj/4NDI/99PyH/eTsf/3Y6 - Hf92Oh3/dzse/3c9H/94PiD/dz4g/3c/IP94QCH/d0Ah/3dAIf93QSL/d0Ei/3ZDIv92QyL/d0Mi/206 - HP9wY1v/qair/6Ofn/+al5f9zc3N9//////7+/v/+/v7//7+/v/x8fH/ioqKPwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZm - ZgWlpKTVr7K0/4BoXP98Mxf/gjoc/4E5HP+BORz/gTkc/4A4HP+ANxz/gDYb/4A2G/+ANRv/fjQb/3wy - Gv+NQSH/nFIp/5tSKf+eViz/oFYs/5tRKf+bUir/m1Mr/5tTK/+bUyv/mlMq/5pTKv+aUyr/mlMq/5tT - K/+bUir/m1Iq/5pTKv+XUCn/lEsm/5pWLf+dXzH/nV4x/55hNP+fZTf/oGg5/6JoO/+iaTv/o2o8/6Nq - O/+jaDn/o2g5/6NoOf+jZzn/o2Y3/6JlNv+hZDX/oWIz/6FhMf+hXzD/oF4v/6BdLv+fWy3/n1ks/59Y - K/+fWCr/n1Yq/6NaK/+hWCv/lUok/5BBIP+NQSD/iT8g/4o/IP+KPyD/iD8g/4lAIP+JQCH/iEIh/4hC - If+IQiH/h0Mi/4dDIv+HQyL/iEUj/4hGI/+GRiT/gkQj/3xAIv94PSD/dzwf/3g9H/94PyD/dz8g/3hA - If94QCH/d0Ei/3dCIv93QyL/dkMi/3dDIv93QyL/cj4d/2tXSf+lpqj/o6Cf/5uZmf7Av7/2//////v7 - +//8/Pz//v7+//r6+v+ioqJjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKikoq2wsLH/jH54/3k1Gf+FPB7/hDse/4M6 - Hv+DOh7/gzkd/4Q3Hf+DNxz/gjYc/4I1HP+BNhz/gDUb/4I3Hf+aTij/nVUr/51VK/+jWi//oVku/5xU - K/+cViv/nFYs/5xWK/+cViv/nVYr/51WK/+cVSv/nFUr/5xVK/+cVSv/nFUr/5tTK/+XTyn/l04o/51b - MP+gZDT/n2M0/6JoOP+kazv/pWw9/6VtPv+lbj7/pnA//6ZuPv+lbDz/pWw8/6VsO/+lazr/pWs6/6Ro - N/+kZzb/pGU0/6RjM/+jYTH/o2Aw/6FeL/+hXC3/oFst/6BaLP+gWSv/oFkr/6NaK/+lXCz/nFIo/5JF - Iv+MQCD/jEEh/4xBIf+KQiH/ikIh/4tCIf+JQyH/iUMi/4pDIv+IRCL/iEUj/4hFI/+IRSP/iEUj/4hG - I/+IRyT/iEcl/4ZIJf+BRST/ekAh/3g/IP93QCD/eEEg/3hBIf93QiH/eEIi/3dDIv93QyL/d0Mi/3dD - Iv92Qh//Yko4/6Khpf+joKD/npub/7Oysvf8/Pz+/v7+//z8/P/8/Pz//////6urq4kAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAApaGjgLCur/+alJH/eDsg/4g9H/+FPR//hjwe/4Y7Hv+GOh7/hjoe/4Q5Hf+EOB3/hDgd/4M3 - HP+CNxz/gDYb/49DIv+gVyz/n1ks/6FZLv+nYjL/o14w/55YLP+fWi3/n1ot/59ZLf+fWi7/n1kt/59Z - Lf+fWS3/n1gt/59YLf+fWS7/nFUs/5lSKv+ZUir/mFEq/6BgMv+kaDf/pGk3/6VtO/+mcD7/p3E//6hy - QP+oc0H/qHRB/6hyP/+nbz3/p28+/6duPv+nbjz/pm07/6ZqOP+laDb/pWY0/6VlM/+lYzL/pGEw/6Nf - L/+jXi7/oV0t/6FcLf+gWy3/oVos/6NaK/+lXy3/oVss/5RKJf+MQCH/jUMi/4xDIv+MQyL/jUQj/4tE - I/+LRCP/i0Qj/4pFI/+JRiP/ikYj/4lGI/+KRyT/ikck/4hHJP+IRyT/iUgk/4lKJf+ISyb/hEkl/31F - I/95QSH/d0Eg/3dCIf94QiL/d0Mi/3dDIv94RCP/eEQj/3hEIf9jRCz/mZmb/6Wjo/+gnZ3/qain9/T0 - 9P3+/v7//Pz8//z8/P//////v7+/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACjo6BTr62s/6Wlpf95RCv/iT0e/4g/ - IP+JPiD/iD4g/4g9H/+HPR//hzwf/4Y8Hv+FOx7/hToe/4Q5Hv+EOB3/hTkd/5tSKP+hXC//oVsu/6Zh - Mv+raTf/pGAx/6BcLv+gXS//oF4v/6BdL/+gXS//oF0v/6BdL/+gXS//oFwv/6BdL/+dVy3/nFQs/5xU - LP+bVCv/m1Qr/6NjNf+mbDn/p247/6pzQP+rdEH/q3ZC/6t3Q/+rd0T/q3dE/6t2Qv+qc0D/qnNA/6hz - P/+ocj7/p287/6dsOf+majf/pmg1/6ZmNP+mZDL/pWIw/6RhMP+jXy//o14u/6NdLf+jXS3/o1wt/6Nc - LP+lXi3/pWEu/5xWK/+PRSP/jUQi/5BGJP+PRiT/jkYj/45GI/+ORiT/i0ck/4tHJP+LRyT/i0gk/4tI - Jf+LSCX/iUgl/4lIJf+KSSX/iEol/4hKJf+JSyb/ikwm/4dLJ/+BSCX/ekQi/3dDIv93QyL/d0Qj/3hE - I/94RCP/ekYj/2I+I/+PjI3/pqWk/6Gfnv+in6D56+vr+//////+/v7//v7+///////Nzc3QAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAJqamiurqan6rrCz/35UPv+JPRz/iUIh/4pBIf+KQCH/ikAh/4k/IP+IPiD/iD4g/4c9 - H/+HPR//hzwf/4c7Hv+GOR7/j0Mj/6NcL/+jXjH/pWAy/6lpN/+tbzz/o2Iy/6FfMP+jYDH/o2Ax/6Ng - Mf+jYDH/oWAw/6NgMf+hXzD/oWAx/55aLv+dWC3/nVgt/51XLP+dViz/nVUs/6VnN/+qcj3/q3Q//613 - Qv+seUT/rXlF/656Rv+uekb/rnpG/614Q/+sdkH/q3ZB/6t1Qf+qcz//qHE8/6huOv+oazj/p2o1/6do - NP+nZjL/pmQx/6ViMP+kYTD/pGAv/6RfLv+jXi3/o14t/6NeLf+kXi3/qWcz/6NhMv+TTCb/j0Yi/5BI - JP+PSCT/kEgk/49IJP+OSST/jkkl/45JJf+MSiX/jEol/4xKJf+LSiX/ikol/4tKJf+JSyb/iUsm/4lL - Jv+JSyb/iUwm/4pNJv+ITSf/g0sm/3tGJP93QyP/d0Qj/3lFJP96RyT/aT0g/4N9e/+pp6f/o5+f/52a - mvvf3975//////7+/v/+/v7//////97e3u1jY2MSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdnZ2DaqqquGztbj/hGhX/4c8 - HP+KQiL/i0Ii/4xCIv+LQSH/i0Eh/4pBIf+KQCH/ikAg/4o/IP+KPyD/ij4g/4k9H/+JPB//nFMr/6Vh - M/+lYTP/qWc3/65yPv+udD7/pGIz/6RhMv+kYjP/pGIz/6RiM/+lYjP/pGIz/6RiM/+kYjP/nlwv/55b - Lv+eWy7/nlou/55aLv+eWC7/nlgu/6ZqOv+sdkD/rXhC/697Rf+wfEb/r31H/699SP+vfUj/r31I/656 - Rf+ueEP/rnhC/6x2Qf+rdUD/qnI9/6lvOv+obTj/qGs2/6hpNf+nZzP/p2Uy/6ZkMf+lYjD/pWEw/6Rg - L/+kYC7/pF8t/6RfLf+lYi//qWg0/6dnNP+aViz/kEck/5BJJP+RSiX/kEol/49KJf+QSyX/j0sm/49M - Jv+PTCb/j0wm/41MJv+NTCb/jUwm/4tMJv+KTCb/ikwm/4pMJv+ITSb/iE0m/4hOJv+KTyb/iU8n/4VN - J/99RyX/eEUk/3hGJP9sPR7/eW9m/6moqf+joKD/m5iX/dHR0fj//////v7+//7+/v//////6+vr/YKC - gi8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAq6qqvba2uP+OfXP/hT0d/4xEI/+MQyP/jUQj/41DIv+NQiL/jEEi/4xB - If+LQSH/ikAh/4tAIf+LPyH/iz8g/4k8H/+TRiX/pV0x/6VkNf+oaDf/rHA9/7B8Rf+udkD/pGMz/6Vk - NP+lZDT/pWM0/6ZkNf+lYzT/pWM0/6RjNP+gXTH/n1ww/59cL/+fXC//n1wv/59cL/+eWy7/nlou/6ds - Ov+ueUP/sHtG/7J+R/+wgEj/sIBJ/7KASv+wfkn/sH5J/697Rv+ueUT/rnhD/6x3Qf+sdT//q3E9/6lv - Ov+objn/qGs2/6hpNf+nZzT/p2Uy/6ZkMf+mYzH/pWIw/6RhMP+kYDD/o18u/6NfLv+nZTL/qWc0/6hq - Nv+eXjH/kkwn/5FJJf+QSyb/kUwm/5FMJv+QTCb/kE0m/5BNJv+PTSb/jk0m/45NJv+OTSb/i00m/4tN - Jv+LTSb/i00m/4lOJv+JTib/iU4m/4lOJv+JTib/i08n/4pPJ/+FTif/f0om/3JBHv9vYFP/qKir/6Og - oP+cmpr+wsHB9//////////////////////6+vr/lJSUTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsp6eRtrW2/5eR - jf+BQCH/kEYj/45FI/+ORSP/j0Uj/49DI/+NQyP/jUIj/4xBI/+LQSP/i0Ei/4xAIv+MPyH/iz8h/4w/ - If+eUy3/pmQ1/6hpOP+sbzz/r3pE/7WESv+tcz7/pWM1/6ZmNv+lZjb/pmY2/6ZlNv+mZTX/pWQ1/6Be - Mf+gXjH/oF0x/59dMf+gXTD/oF0w/6BdMP+fXC//n1sv/6luPP+vfEX/sH5H/7KBSf+zgUv/s4FL/7KA - Sv+ygEr/soBJ/698Rv+ueUT/rnhC/613Qf+sdT//q3E8/6lvO/+obTj/qGs2/6dpNf+nZzT/p2U0/6Zk - M/+mZDL/pWIy/6RhMf+jYDD/o18w/6ViMf+mZjT/pmY0/6hpNv+kZTX/llMr/5BKJv+STCf/kk0n/5FO - J/+RTif/kE4n/49OJ/+PTif/j04n/45OJ/+NTif/jU4n/41OJ/+LTSf/ik4n/4lOJ/+JTif/ik8n/4pP - Jv+JTif/iU8n/4pPJ/+KUCj/hEsj/25VQv+kpaf/pKGg/56cnP+2tbT3/////v////////////////7+ - /v+pqal2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqqqmO1s7P/pKSk/35GKv+RRiP/j0Yk/49GJf+PRST/kEUk/5BE - JP+PRCT/j0Mk/41DJP+NQiP/jEIj/41CI/+NQSP/jEAi/5ZKKP+kXjP/qWo5/6xuPP+wekT/tINL/7aG - Tf+rbTv/pmU2/6ZnN/+mZzf/pmc3/6ZnN/+lZTb/oV8y/6FgMv+hXzL/oV4y/6FfMv+gXjH/oF4x/6Be - Mf+fXTD/oF0w/6pwPv+wfkf/soFJ/7OCS/+0g0z/tINM/7OBS/+zgUv/soBK/698R/+uekT/rnlC/6x3 - Qf+sdD//q3E8/6lvO/+obTj/qGs3/6dpNv+nZzX/pmY0/6ZlNP+mZDP/pWMy/6RiMf+jYTD/o2Ew/6Zl - NP+mZjT/pmY0/6doNf+laDb/m1ow/5JNKP+STif/kk8o/5JPKP+RTyj/kE8o/5BPKP+QTyj/jk8o/45P - KP+OTyj/jk8o/41PKP+LTyj/ik8n/4pPJ/+KTyf/ik8n/4pPJ/+KTyf/iU8n/4lPJ/+NTyX/cU81/52e - of+lo6P/oJ6e/6uqqvj4+Pj9/////////////////////7m5uZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqObSx - sv+vsrT/flI6/5FEIv+QRyb/kEcm/49HJf+QRyb/kUcm/5BGJv+QRSX/kEUl/5BFJf+PRCX/j0Ql/5BD - JP+QQiT/kkYm/51VLv+nZzj/rHA+/694Q/+1g0v/t4hQ/7eGTf+najr/p2g5/6dpOf+naTn/p2k5/6Vm - OP+jYjX/o2M1/6FhNf+hYTT/oWA0/6FgM/+hYDP/oV8y/6FfMv+gXjH/oV4y/6txP/+ygUn/s4NK/7SE - Tf+1hU7/tIRN/7ODTP+zgkz/s4FK/698Rv+uekT/rXhC/6x2QP+sdD7/qnI8/6lxO/+obTn/p2s3/6dp - N/+naDb/p2Y1/6ZlNP+mZTT/pWMy/6RiMf+kYTD/pGQz/6VmNf+lZzX/pWc1/6VnNf+maTf/n2I0/5RS - K/+STij/klAp/5FQKf+SUCn/kVAp/49QKf+PUCn/j1Ap/49QKf+OUCj/jVEo/4tRKP+LUCj/i1Ao/4tQ - KP+LUCj/i1Ao/4pQKP+JUCj/ilAo/45QJ/9zSSv/lpWV/6akpP+jn5//o6Ki+e7u7vv///////////// - ////////xsbGwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQkJAXsK2s7Le6vP+DY1D/jEMh/5FJJ/+RSSf/kUkn/5FJ - J/+SSSf/k0gn/5JHJ/+SRyf/kUYn/5FGJv+RRib/kEUm/5FEJf+RRib/mk8r/6NfNP+scD//r3hE/7WC - Sv+5iFD/vI5V/7WCSf+najn/qGw7/6hrOv+obDv/pmc5/6NjN/+kZDf/o2M2/6NjNv+jYjb/oWI1/6Fh - Nf+hYDX/oWA0/6FgNP+hXzP/oWAz/6x0Qf+zg0r/tIRN/7WFTv+2hk//tYVO/7SDTf+0g03/s4JK/7B9 - Rv+vekP/rnlC/613Qf+sdD//q3E9/6lvO/+obTn/p2s3/6dqN/+maDb/pmc1/6ZmNP+lZTP/pGQz/6Ni - Mv+jYzP/pWc2/6VnNv+lZzb/pWc2/6VnNv+kaDb/omY2/5dYLv+RUCn/klEq/5JRKv+RUir/kVIq/5BR - Kv+QUSr/j1Eq/45RKv+NUSr/jVEq/41RKf+NUCr/jVAp/4tQKP+LUCj/ilAp/4tQKP+KUCj/jlEo/3dH - Jf+Lh4b/qKan/6ShoP+dm5z74eHh+v/////////////////////Y2NjgVVVVCQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAK0r6/Mu7y+/414bP+JQyH/kUoo/5JKKP+TSij/kkso/5JKKP+TSij/lEko/5NJKP+TSCj/kkco/5JH - KP+RRyf/kUcn/5FGJ/+YTiv/nlYw/6lsPf+vekX/tH9K/7mIUf+8jVT/wJNZ/695RP+mazr/qG08/6hu - Pf+lZzr/pGQ4/6RlOf+kZDj/pGQ4/6RkOP+kZDf/o2M3/6NiNv+jYjb/oWI2/6FhNf+hYTT/oWE1/6x1 - Qv+0hUz/tYVO/7eIUP+3h1D/toVP/7WETv+0hE3/s4JK/7B9Rv+ue0P/rXlC/613Qf+sdT//rHM9/6px - PP+objn/p2w4/6dqN/+naDb/pmc2/6ZmNf+lZTT/pGQ0/6RjM/+kZTb/pGc3/6RnNv+kaDb/pGg2/6Ro - Nv+kaDb/o2g3/5teMv+TUiv/k1Iq/5JTLP+SUiv/kVIr/5BTK/+PUyv/j1Ir/49SK/+PUSv/jlIr/45R - K/+NUSv/jVEr/41RK/+NUSv/i1Eq/41RKf+OUin/f0gj/4Z7df+pqKn/pKGi/5yamP3T09P4//////// - /////////////+Tk5PZ4eHggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALCsrKK8vL3/mY6I/4ZEJP+TSyj/kksp/5NL - Kf+USyn/k0sp/5NLKv+USyr/lUoq/5RKKv+USir/lEoq/5NJKf+TSSn/kkgo/5dOK/+cUy3/pWM4/694 - RP+0f0v/uYlR/7yOV//Ak1r/wJNZ/6txQP+obj3/qnA//6VoO/+lZzr/pWc6/6VmOv+lZjn/pGU5/6Rl - Of+kZTn/pGU5/6NkOP+hYzf/oWM3/6NiNv+hYjX/oWE1/612Q/+1hk7/tohQ/7eLUf+3iFD/t4ZQ/7aE - T/+1hE3/s4FJ/698Rv+vekP/rnlC/613Qf+tdT//q3M9/6pxPP+obTv/p2w5/6drOP+maTf/pmg3/6Vn - Nv+kZjX/o2U0/6NlNP+kaDj/pGg4/6RoN/+kaDf/pGg3/6NoN/+kaDb/o2k3/51kNf+UVi7/klIs/5NU - Lf+SUyz/kVMs/5BTLP+QUyz/kFMs/5BTLP+PUyv/jlIr/45SK/+OUiv/jlIr/41RK/+OUiv/jlIr/45S - K/+FSiP/emtg/6mprP+koaL/nZua/sXFxPf/////////////////////9fX1/4qKij8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAArqurdLu6uv+mo6H/hEks/5RMKf+STSv/kkwq/5RNKv+UTSv/lEwr/5VMK/+WTCv/l0wr/5ZM - K/+WSyv/lksr/5VLK/+VSir/l04r/51WL/+gWzP/rXJC/7N+Sv+3h1H/vI9X/76SW//DmmD/uopT/6hu - Pv+qcEH/pWk9/6VpPP+laTz/pGg7/6RoO/+lZzr/pWc6/6RmOf+kZjn/pGY5/6RlOf+jZDj/o2Q4/6Nk - OP+hYzb/oWM2/613RP+3iFD/t4tR/7mMUv+3i1H/t4hQ/7aGT/+0hEz/sIBI/698Rf+ve0T/rnpD/614 - Qf+tdT//q3M9/6pwPP+obTv/p2w6/6drOf+majj/pmk3/6VnNv+kZzb/pGY1/6RpOP+lajr/pWo5/6Rp - OP+kaTj/o2g3/6RpOP+jaDf/pGk4/59nOP+WWzL/klQt/5JVLv+SVS3/klQt/5JVLv+RVC3/kFQt/5BU - Lf+PUyz/j1Ms/5BULP+QUyz/j1Ms/49TLP+PUyv/j1Ms/4tOJv95YlD/pqeq/6Shov+gnZ3/uLa29/// - //7////////////////8/Pz/oqKiYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACuqqpIuri3/7CztP+DVDn/lEwo/5RO - K/+TTiv/lE4r/5ZOK/+WTSz/lk0s/5ZNLP+XTi3/mE4t/5dNLP+XTSz/l00s/5dNLP+XTiz/n1Yx/6BY - M/+naD3/snxI/7eGUP+8jlf/vpVb/8GXXv/EnGL/s31J/6twQP+naz7/pmo9/6ZqPf+maj3/pWo9/6Vq - PP+laTz/pWg7/6VoO/+kaDv/pGg7/6RnOv+jZjn/o2Y5/6NlOP+jZTj/oWM3/613RP+3i1H/uo1T/7qN - U/+3i1H/t4hQ/7aGTv+zgkr/r3xH/698Rf+wfEX/r3pD/654Qv+tdT//q3M9/6pwPP+pbjv/qG07/6ds - Ov+nazn/pmo4/6RoN/+kZzb/pGg2/6VqO/+lajr/pGo6/6RpOf+kaTn/pGk5/6NpOP+jaTj/omk4/6Bp - Of+ZYDX/k1Yu/5NVLv+TVi7/klYu/5FWLv+RVS7/kVUu/5FVLv+RVC3/kVUu/5BULf+QVC3/j1Qt/49V - Lf+OVS3/j1Ip/3JVP/+io6b/paOi/6Gfn/+sq6r4+fn5/f////////////////////+vr6+JAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAKigoCO3tLT1ury//4NiTP+STCf/lE8r/5VPLP+VTy3/lU8t/5dPLv+XTy7/l1Au/5dQ - Lv+ZUC7/mlAu/5pQLv+ZTy7/mE8u/5hOLv+eVjL/oFs0/6ViOf+tdET/toVP/7yNV/++k1z/wZde/8Sc - Y//Bll3/q3ND/6dtP/+obT//qG0//6dtP/+nbD//pmw+/6ZrPf+maj3/pmo9/6ZpPP+laTz/pGk8/6Ro - O/+kZzr/pGc6/6RnOf+jZjn/oWQ4/6x2RP+5jFL/u45U/7qNVP+5jFL/t4hQ/7WETP+wgEj/rntG/698 - Rv+wfEX/sHtE/655Qv+tdj//q3M+/6pwPf+pbzv/qW47/6htO/+nazn/pmo4/6VpOP+kaDb/pWs6/6Vr - PP+kajz/pGo7/6RqO/+jaTr/omk5/6JpOf+iaTj/omk4/6JqOf+cZDf/lFkx/5NXL/+TVy//k1cv/5NX - L/+TVy//klcu/5FWLv+QVy7/kFcu/49XLv+PVi7/j1Yu/49WLv+RViz/eFM1/5qbnf+npaX/o6Cg/6Sj - o/nv7+/8/////////////////////7+/v7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASUlJB7ezs9nBwsT/i3Nl/49J - Jv+UUS7/lVEu/5ZRLv+WUS7/llIu/5dRL/+ZUS//mlEw/5lRL/+aUTD/mlEw/5tQMP+bUDD/m1Av/55W - Mv+hXTX/pmM6/6lqQP+0gU3/vI1W/8CTXP/Bll7/wplg/8agZP+1hFD/p20//6hvQf+obkL/qG5B/6ht - QP+nbED/p21A/6dsP/+nbD//p2s+/6ZqPf+maz3/pWo9/6VqPf+laTz/pWg8/6VoO/+kZzr/o2U4/6x1 - RP+6jlP/u5BW/7qOVP+5jFP/t4hQ/7ODS/+wfUf/rnpF/698Rf+wfUb/sHtD/655Qv+tdkD/rHQ//6py - Pf+qcDz/qW47/6htO/+nbDr/pms6/6VqOf+lazn/pW09/6VtPf+kbDz/pGs8/6NrPP+iajv/omo6/6Jq - Ov+iajn/omk5/6BqOf+dZzn/ll0z/5RXMP+UWDD/lFkw/5JZMP+SWTD/kVgv/5FYL/+RWC//kVgv/5FY - L/+RVy7/kFcu/5NYL/96Ti3/k5GP/6impv+lo6L/oZ2d++Li4vr/////////////////////0NDQ0AAA - AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAtrOzssLCxP+XioH/iUgn/5VSLv+UUi//llIv/5dSMP+XUzD/mVMw/5pS - Mf+bUjH/m1Mx/5tTMf+bUzH/nFMx/51SMf+cUTH/nlYz/6NeN/+mZTz/p2g+/652SP+7ilX/vpNc/8KX - YP/DmWH/xJ5j/8OaYv+rdUb/qG9D/6pvQ/+ocEP/qm9C/6puQv+nbkL/p21C/6dtQf+nbUD/p2w//6ds - P/+mbD//pmw+/6ZrPv+maj3/pmo9/6ZqPf+laTz/pGY6/6x0Q/+7j1X/vJFY/7uPVf+5ilL/toZO/7KC - Sv+vfEf/rXlE/698Rv+wfUb/sHtD/655Qv+tdkH/rXQ//6tzPv+qcj3/qW88/6luO/+obTv/p2w6/6Vq - Of+lbj3/pnA//6VuPv+kbT3/pG09/6NsPP+iazv/oms7/6JrO/+gajr/oGo6/59qOf+eaTr/mGA2/5Va - Mf+TWzL/k1oy/5NaMf+TWjH/k1ox/5NZMP+SWTD/kVkw/5FZMP+RWTD/klow/4JQK/+LhH//qaip/6Wj - o/+cm5r909PT+f/////////////////////g4ODtY2NjEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2srKFwsHB/6Wf - nP+FTC3/l1Mv/5ZTMP+WUzH/mVMx/5lUMf+ZVDH/mVQx/5tUMv+cUzL/nFMy/5xTM/+cVTP/nFUz/5xT - M/+eWDX/pF85/6dmPf+oa0H/qm5D/7aEUv++klz/wZdf/8OZYf/Em2P/x6Fn/7mKV/+ob0P/q3FF/6tx - RP+rcUT/q3BD/6tvQ/+qb0P/qG9D/6hvQv+obkL/qG5B/6dtQP+nbUD/pm1A/6ZsP/+naz7/pms+/6Zr - Pf+maz3/pWc7/6xzQ/+8kFf/vZJZ/7uOVf+3iFD/tIRM/7KASP+vfEf/rXhE/698Rf+yfkb/sHtD/654 - Qv+tdkH/rXVA/6x0P/+rcz7/qnI9/6hvPP+nbTz/pmw6/6ZtO/+ncUD/pXBA/6VuP/+kbj7/o2w+/6Jt - Pf+iaz3/oms8/6BrPP+gazv/n2o6/59qOv+eazv/mWM4/5VcMv+VWzL/lVwy/5NcMv+TWzL/k1sy/5Jb - Mv+RWzH/kVox/5JbMv+TWzL/h1Iq/4R3bf+rq6v/paOj/56cm/7GxsX4/////////////////////+3t - 7f2FhYUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALSxsVjBvr7/s7Oz/4RTN/+ZUy//l1Qx/5dVMf+XVTH/mlUy/5pV - Mv+aVjP/nFc0/5xXNP+dVjT/nlU1/55WNf+eVjX/nlY1/59YNv+kYTv/qGc+/6ttQv+rb0T/sHlM/72Q - W//Bl1//w5lg/8ScZP/Gn2b/w5pi/696S/+qc0X/q3VG/6t0Rv+rdEb/q3NE/6pzRP+qcUT/qnFD/6hy - Q/+ocEP/qm9C/6hvQv+nbUH/p21B/6dtQP+nbUD/p2w//6dsPv+mbD7/pWg8/6txQ/+8j1f/vpVa/7qN - U/+3h0//tINL/7CASP+ve0b/rXhE/696RP+wfUX/sHpE/694Qv+td0H/rXVA/6x0P/+rcz7/q3E+/6hx - Pf+nbjz/pm07/6dxP/+mckL/pnFB/6VwQP+kbj//o28//6NtPv+ibT3/om09/6BrPf+gazz/n2o8/55p - O/+eaTv/m2Y6/5ZeNf+UXDP/lFw0/5RcNP+UXDT/lFw0/5NbM/+TXDP/k1wz/5NcM/+PViz/f2xc/6qp - rf+lo6P/oJ6e/7m4uPj/////////////////////+vr6/5mZmVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqKioL7u6 - uvy9wML/hmFJ/5ZRLf+XVTH/mVUy/5lWM/+aVzT/mlc0/5xXNf+cVzX/nFg1/51YNf+eVzX/n1c1/6BX - Nv+gWDb/oFg3/6ViPP+paUH/q25D/6xyRv+udkn/uYdW/8GYYP/CmWH/xpxl/8afZ//EnGP/vI9a/6t1 - R/+rd0j/q3ZI/6t2R/+rdkf/q3VG/6t0Rf+qdEX/qnRF/6pzRP+qcUP/qnFD/6pwQ/+ob0P/qG5C/6hu - Qf+obkH/qG1A/6dsP/+nbD//pmo9/6pwQv+7jlb/vpVa/7mKUv+2hk7/s4JK/7B+SP+ve0b/rXhD/655 - Q/+wfEb/sHtF/695Q/+td0H/rXZB/611QP+tdED/q3M//6pwPv+obzz/p28+/6hzQv+nckL/pnFC/6Zx - Qf+lcEH/o28//6JvP/+ibj7/om4+/6BuPv+gbT3/n2s9/55rPP+eazz/m2g7/5ZgN/+VXTX/lV41/5Ve - Nf+VXTX/lF01/5NeNf+TXjX/k141/5JbMP97Ykz/paap/6Wko/+hoKD/rays+Pn5+f3///////////// - ///+/v7/qampdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPj48QvLq65cTHyf+OcmH/k08r/5dWM/+ZVzT/mlc0/5pX - NP+aWDX/m1g1/51ZNf+dWjb/nlo2/55bNv+fWzf/n1s3/6BaOP+hWjj/pmM9/6lqQv+scUb/rXRI/693 - Sv+zflD/vpNe/8KZYf/GnWf/xp9o/8OaYv/CmWD/s39Q/612Sf+teEn/rXhJ/6x3SP+sdkj/rHZH/6x1 - Rv+rdUb/q3VG/6t0Rf+qc0T/q3RE/6pzQ/+ockP/qHJD/6hwQ/+ocEL/qm5B/6puQf+qbkH/p2s+/6pv - QP+5jFT/vpNZ/7mJUf+1hU3/s4JK/7B9R/+ve0b/rXdD/653Q/+wfEb/snxG/7B5Q/+ueEL/rXdB/652 - Qf+tdUH/rHNA/6twP/+ocT3/qnNB/6p0RP+oc0P/p3ND/6VyQv+lckL/pHFB/6NwQP+jcED/om8//6Bv - P/+gbj7/n209/55sPP+ebDz/nGs8/5hiOf+WXjX/lWA2/5VgNv+VYDb/lGA2/5VgNf+VYDb/mF8z/31c - Qf+fn6L/p6Wl/6Shov+lo6P67+/v/P/////+/v7//v7+//////+0tLSdAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAC7ubnCyMjK/5eHfP+QTiz/mlc0/5lXNP+aWDX/m1k1/5xaNv+cWjb/nVs3/55bOP+fWzj/oFw5/6Bc - Of+hXTr/oV06/6FdOv+mZD7/qWtD/61ySf+udUr/sHhL/7N+T/+6ilj/wpli/8agaP/Gn2j/wppi/8GY - X/+9kFv/rnlK/695Sv+ueUr/rnlK/654Sv+td0n/rXdI/613SP+td0j/rHZH/6x1Rv+sdUX/rHVF/6t0 - RP+qc0T/qnND/6pzQ/+qcUP/qnBC/6hwQ/+ocUH/qG5A/6puQf+2h1H/vZFY/7mIUP+1hEz/s4JK/7B9 - R/+ve0b/rndD/612Qv+ve0X/snxG/7B6RP+ueEL/rnhC/613Qf+sdUH/q3RB/6pzQP+oc0D/q3ZE/6t1 - RP+odEP/pnND/6ZzQ/+mc0L/pXJC/6RxQf+jckD/onFA/6JxQf+gb0D/oG8//59uPv+ebT3/nWw+/5lm - O/+WYTf/lmE3/5hiOP+WYTf/lWE3/5ViOP+YYjb/f1k5/5qZmf+npqb/paOj/6KeoPvk4+P7//////7+ - /v/+/v7//////8XFxcEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALu4uJfJyMn/pJ2Y/4pPL/+bWDX/mlk1/5pa - Nv+bWjb/nVs3/51bOP+dXDn/nVw5/59dOf+gXTr/oV46/6FeOv+jXzv/o186/6ZkP/+rbEX/rnNK/7B2 - TP+yek3/tH9R/7eGVf/Ak2D/xp9o/8agaf/DnGT/wZhf/8KYX/+1hFL/r3pL/7B7TP+vekv/r3pK/695 - Sv+veUr/rnhJ/654Sf+ueEj/rXdI/612R/+tdkb/rXZG/6x1Rf+sdUX/rHVF/6t0RP+rc0T/q3NE/6px - Q/+qc0P/qnBB/6hvQf+0g0//vI9W/7eIT/+1hEz/s4JK/7B9SP+ve0b/rnhE/611Qv+ueUT/sn1H/7B7 - Rf+veUP/rnhC/613Qv+sdUL/rHVB/6t0QP+rdkP/q3dG/6p2Rf+odUT/qHVE/6d0Q/+mc0P/pXND/6Rz - Qv+kc0L/o3JC/6NxQv+icUL/onBB/6BvQP+fbkD/nm5A/5tqPf+YYzn/mGI4/5ZjOf+WYzn/lmM5/5pl - Of+GWzX/kI6K/6moqf+mpKT/nZub/NPT0/n//////v7+//7+/v//////19fX4FVVVQkAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAu7u7acfFxf+ysLD/hVU3/5taNf+aWjb/m1o3/5xbOP+cWzn/nVw5/55dOf+fXTr/n146/6Be - O/+hXzv/o2A8/6NgPP+kYDz/p2VA/6ttRv+udUz/sHdN/7N7T/+1f1L/t4ZW/7uLWv/AlGL/xp9o/8Se - Z//CmWH/wZdf/72RW/+ye03/s3tN/7J7Tf+we0z/sHtL/7J6S/+wekv/r3lK/695Sf+veUn/r3hJ/694 - SP+ud0f/rXZG/612Rv+tdkb/rXZG/611Rf+sdET/rHRE/6x0RP+rc0P/q3ND/6hvQv+yfkz/u45T/7eH - T/+1hEz/s4FK/7J+SP+ve0b/rnhE/6x1Qv+td0T/snxG/7J8Rv+wekX/r3lD/653Q/+ud0P/rHVC/6x1 - Qf+seEb/q3dH/6t3Rv+rd0b/qHVE/6h1RP+ndUT/pnVD/6V0Q/+lc0P/pXND/6RyQ/+kckP/onFC/6Bw - Qv+gb0H/n29B/5xsQP+YZTr/mGQ6/5hkOv+ZZTr/mmY6/4xdM/+MhHz/qamr/6akpP+enJz+x8bG+P// - ///+/v7//v7+///////j4+P2eHh4IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1tbU+xcTD/76/wv+FX0b/mlkz/5pb - N/+bXDn/nFw5/51cOf+eXTr/n147/59eO/+gXzv/oV88/6FgPf+jYT7/o2E+/6RhPv+mZkH/rG5H/693 - Tf+yeU//tH1R/7aCVP+5h1f/uolZ/7mIWP/DmmX/xp1o/8OaZP/Bl1//wpdg/7aFVP+zfE3/sn1O/7J9 - Tv+wfE3/sHtM/7B7S/+we0v/r3pK/696Sv+vekr/r3lK/695Sf+veEj/rndH/653R/+ud0f/rnZG/651 - Rf+tdUX/rXVF/611Rf+tdUX/rHRE/6pwQv+wekn/uopS/7eIT/+1g0z/s4FK/7J9R/+wfEb/rnlE/612 - RP+tdUP/sHtG/7J9R/+we0X/sHlE/694RP+ud0P/rXZC/614RP+teUj/rHhH/6x4R/+rd0b/qndF/6h3 - Rf+od0X/p3ZE/6Z1RP+mdUT/pnRF/6VzRP+jc0T/onJD/6JyQ/+gcUL/n3FC/51vQf+aaT3/mWU7/5lm - O/+aZzz/k2A2/4R2av+rq6z/pqSk/6Gfn/+6ubn4//////7+/v/+/v7///////T09P+Kioo/AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAKqqqhvBv7/wyMnM/4ttW/+XVzL/ml05/5pdOf+cXTr/nl46/55eO/+fXzz/n2A9/6Bg - Pf+iYT7/o2E//6NiP/+kYz//pWI//6dnQ/+sb0n/sHhO/7J7UP+0flH/toNV/7qIV/+6iFn/toRV/7yO - Xf/Em2b/xJxn/8KYYv/ClWD/vZBd/7J+T/+zfk//sn5P/7J9T/+yfU3/sn1N/7J9Tf+wfEz/r3tL/697 - S/+vekr/r3pK/695Sf+ueUn/rnlJ/694SP+veEj/rndH/653R/+vd0b/r3dG/652Rf+tdUX/rXVF/6tx - Q/+veUj/t4dQ/7eHUP+1g0z/soBJ/7J+SP+wfEf/r3lG/653Rf+sdUP/r3lF/7J9R/+yfEf/sHpG/7B5 - Rf+ueUT/rnhD/656R/+uekn/rXlI/615SP+seEf/q3lH/6p4Rv+od0X/qHdG/6h2Rv+odUb/pnVG/6V1 - Rv+kdEX/pHNF/6NzRP+ickP/onJD/59xQ/+baz//mmc9/5toPv+ZZDn/hW9b/6eoqv+mpKT/pKGi/66t - rfj39/f+/v7+//z8/P/+/v7/+vr6/6Ojo2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVVVVA8DAwNDNztD/lYJ1/5JU - Mf+bXTr/nF46/5xeO/+cXzz/nl89/6BgPf+gYT7/omE//6NiP/+jYj//pGRA/6RkQf+lZEH/p2hE/6xw - Sv+veVD/s3xS/7R/Uv+2hFX/u4lZ/7qHWf+3hlb/t4dY/76SYf/Em2b/xJpm/8KVYv/ClWH/toVV/7N/ - UP+0f1D/tIBR/7N/UP+zfk7/s35O/7N9Tv+yfU3/sH1M/7B8S/+we0v/sHtL/696Sv+vekr/r3pK/696 - Sf+veUn/r3hI/654SP+veEf/r3hH/693Rv+udkb/rnZG/610Rf+udkb/toRP/7eHUP+1g0z/s4FK/7N+ - SP+wfEf/r3lG/653Rf+tdUP/rnVD/7B8R/+yfUf/sHxH/697Rv+vekX/rnpG/7B8S/+ve0r/rntK/617 - Sf+se0j/q3lH/6t5R/+qeEf/qnhI/6p3SP+nd0j/pndH/6Z2R/+ldUb/pXVG/6V1Rv+kdEX/pHRE/6Jz - RP+dbUH/nGk//51pPP+CZ07/o6Sm/6alpP+lo6P/pqWk+u7u7vz//////Pz8//z8/P//////q6uriQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAwr+/p87Oz/+kmZL/jVMy/5teOv+bXjv/nF48/55fPf+eYT7/n2E+/6Bh - Pv+iYj//pGRA/6RkQf+lZUP/pmZC/6ZmQ/+naUX/rHFL/7B6UP+zfVL/tIBU/7eEVv+7iVv/uYZY/7mG - V/+3h1j/uYha/8KXZP/Gm2b/w5lk/8OXYv+9j1z/tIBS/7WCUv+1gFH/tIBR/7V/UP+1gFD/tH5P/7N+ - T/+zfk3/sn5N/7N9Tf+zfEz/snxM/7B7S/+we0v/sHtL/7B7S/+wekr/r3lJ/695SP+veUj/r3lI/654 - SP+ud0f/r3dH/651Rv+udkb/tYJN/7mHUP+1g0z/tIFK/7N+SP+yfEj/sHpH/694Rv+udkT/rXRD/694 - Rf+zfkj/sn1H/7B8R/+ve0b/sH1J/7J+TP+wfUv/rnxL/658Sv+te0n/rXtJ/6x6Sf+seUn/q3lK/6h4 - Sf+oeEn/qHhJ/6d3SP+nd0j/p3ZI/6Z2R/+mdkf/pXVG/6R0Rf+fcET/n20//4hmRv+enZ//qKan/6ak - pP+in6D84+Pj+//////8/Pz//Pz8//////++vr6xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+vrx6zsvN/7Ou - rP+JVzn/nF46/5tePP+cYD3/nWE+/59hPv+fYj//oGNA/6BkQf+iZEL/pGVD/6VmRP+mZ0T/pmdE/6hq - Rv+sdEz/sntR/7J9VP+1gFX/t4ZX/7qJWv+3hVj/uYdY/7qJWv+5h1j/vItc/8OZZf/EmmX/w5hk/8KX - Yv+3hlb/toNT/7aDU/+1glL/toJS/7aAUf+1gFD/tH9Q/7R/T/+0f07/tH5O/7N9Tf+zfUz/sn1M/7J8 - TP+yfEz/snxM/7J7S/+ye0v/sntK/7B6Sf+wekn/sHpJ/695Sf+veEj/r3hI/693R/+vdkf/tH5L/7eG - T/+1hE3/tIFK/7R+Sf+yfEn/sHtI/7B5Rv+ud0X/rXVE/651RP+yekf/s35I/7J9R/+wfEf/s39M/7J/ - Tf+wfkz/sH5M/699S/+vfUv/rnxK/657S/+tekr/q3pK/6t6Sv+rekr/qnlJ/6p5Sf+oeEn/qHhJ/6h4 - Sf+nd0n/pndH/6R2R/+kdEX/i2Q//5eUk/+pqKj/pqWk/56dnPzU1NT5//////z8/P/8/Pz//////8zM - zNEAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMC5uU3Mysr/v7/C/4lgRf+cXjn/m189/5xhPf+dYT7/nmI//59j - QP+iZEL/o2RC/6NlQ/+kZkP/pWdE/6VoRP+maEX/p2tG/6x0Tf+wfFL/s39U/7WCVv+5hlj/uolb/7aE - WP+6h1n/uolb/7qJWv+5hlf/vY5f/8SaZf/EmmX/w5lk/72QXf+3g1T/t4RU/7eEU/+3hFP/t4NT/7aC - Uv+1gFH/tYBQ/7V/T/+1f0//tX9P/7R/Tv+0fk3/tH1M/7N9TP+zfUz/s3xM/7N8TP+zfEv/snxL/7J8 - S/+ye0r/sHpK/7B6Sv+vekn/r3lJ/694SP+vd0f/snxK/7eFT/+2hE3/tIFL/7R+Sv+zfUr/sHtI/7B6 - R/+veEb/rnVF/65yRP+wd0b/s31I/7N+SP+zf0r/tIJO/7SCTv+zgU3/sn9M/7J/TP+wfkz/sH1M/658 - TP+se0v/rHtL/6x7S/+se0v/q3pK/6t6Sv+rekr/q3pK/6l6Sv+nekn/pnlJ/6h5Sf+YbUH/k4yG/6mp - q/+npaX/n52d/sfHx/n/////+/v7//v7+///////3d3d7V5eXhMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7GxJ8fF - xfjKzc//jGxY/5ldOP+bYT3/nWE+/55iP/+eY0D/n2RB/6BlQ/+iZkP/o2dE/6RnRP+maEX/pmlG/6dp - Rv+oa0j/rXVO/7B9U/+zf1X/tINY/7mIWv+6iFv/t4RY/7qHWv+6iVv/u4pb/7qJWf+5hlj/wJJi/8Sa - Zv/EmmX/wphj/7qHVv+5hFX/uYRV/7eFVP+2hFT/t4RT/7aDUv+1g1L/tYJR/7aAUP+1gFD/tIBP/7SA - Tv+1f07/tX9O/7V/Tv+0fk3/tH1M/7R9TP+zfUz/s31M/7J8TP+ye0v/sntL/7J7S/+we0v/sHpK/7B6 - Sv+veUj/sHtK/7aETv+2hU7/tIFN/7R+S/+zfUr/sntI/7J6R/+weUb/rndF/650Rf+udET/sHpH/7N/ - Sf+0g07/tYNP/7WDT/+0gk7/s4FN/7OBTf+yf0z/r4BM/659Tf+ufU3/rn1M/659TP+tfEz/rXxM/618 - TP+se0v/q3tL/6p8S/+pe0r/qn1K/55yQv+NgXb/q6ms/6elpf+joKD/urm5+fz8/P/7+/v/+/v7//// - ///q6ur9hYWFMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZmZkKxsXF3dDT1f+Tfm//lFo2/5tiPf+cYz//nWNA/55j - Qf+fZEL/oGZD/6JnRP+iZ0T/o2hF/6RpRv+lakf/pmpH/6htSf+td0//sH1V/7OAVv+1hFn/uYhb/7eG - Wv+2hFj/uYdc/7qKXP+7ilv/u4pb/7qHWP+6h1r/wpVk/8abZv/Gm2b/vY9c/7mFVf+3hlb/t4ZV/7eG - Vf+3hVX/toRT/7aEU/+2hFP/toNS/7aDUv+1g1H/tIJQ/7WAT/+1gE//tYBP/7V/Tv+1fk3/tX5N/7R+ - TP+0fkz/tH5M/7R9TP+zfEz/s3xM/7N8TP+zfEz/s3xM/7J7Sv+wekr/sHpK/7WCTv+3hE//tYJO/7R/ - TP+zfUr/snxJ/7J7SP+weUf/r3dG/691Rf+uckT/r3ZF/7N9Sv+3hVH/t4VQ/7WDT/+1g0//tIJO/7OC - Tv+ygk3/sIFO/6+ATv+vfk7/r35O/69+Tv+ufU3/r31N/659Tf+sfU3/rH1M/6t/Tf+rfUz/p3hG/49+ - av+oqa3/p6Wl/6Sjov+wrq/59/f3/vz8/P/7+/v//Pz8//b29v+ZmZlQAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADGxsa31NTW/5+Ti/+PWDX/nGI+/5tjP/+cZEH/nmVC/59mQv+gZkP/o2dE/6NoRf+kaEX/pWlH/6Zq - R/+ma0j/qG1J/6x3UP+wflb/soFW/7WEWf+5iV3/toVa/7aEWf+5iFz/uopd/7uLXP+7ilz/u4lb/7qG - Wf+8iV3/w5hl/8abZ//DmGT/u4hY/7qHV/+5h1b/uYZW/7mGVv+5hlX/t4VU/7eFVP+2hFP/t4RS/7aD - Uv+1g1H/tYNR/7WCUP+1glD/tYJQ/7V/Tv+1f07/tYBO/7R/Tf+0f03/tX5N/7V+Tf+0fUz/tH1N/7R9 - TP+0fUz/s3xM/7J7S/+ye0v/snpL/7V/Tf+3hE//tYNO/7V/TP+1f0z/s31K/7J7SP+yeUf/sHhH/693 - Rv+udUX/rXRE/7B6Sv+2g1H/uYdS/7eFUf+1hFD/tIRQ/7ODT/+ygk//soFQ/7KBUP+ygVD/soFQ/7CA - T/+wgE//r4FP/62BT/+tgE7/rYBO/62ATv+tfUr/jXdd/6anqv+npaX/pqSk/6impvru7u79/Pz8//r6 - +v/7+/v/+/v7/6qqqngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMbExIvU0tT/r6mm/4lYOf+dYz7/nGNA/5xk - Qf+eZkL/nmZD/59mQ/+iaET/o2lG/6RpRv+makf/pmtI/6drSP+obkr/rHhR/7B/Vv+zglj/tYVa/7mJ - Xf+1g1n/toVa/7mJXP+7i17/vIte/7yLXf+7il3/u4hb/7qFWf++jF//xJpm/8acaP++kF7/u4hY/7qI - WP+6h1b/uodW/7uIV/+6h1b/uYZV/7mFVP+5hVP/uYRS/7eEU/+3hFL/toNR/7aDUf+2g1H/tYBP/7WA - T/+1gk//tIBO/7SATv+0f07/tX5O/7V/Tv+1fk3/tX5O/7V+Tf+1fUz/tH1M/7R9TP+zfEz/s3pM/7R+ - Tf+3hE//toNO/7aATf+1fkv/s31K/7N8Sf+zekn/snlI/7B4Rv+udkX/rnVF/652R/+ye0z/toVS/7eH - U/+2hlH/tYVR/7SFUf+0g1H/tINS/7SCUv+zg1L/s4JR/7KBUP+wglH/sINQ/6+CUP+vglD/roFP/7KC - Tf+WeFf/oaGk/6empv+npaX/o6Ki++Li4vv+/v7/+vr6//r6+v/+/v7/tLS0nQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAw8DAXdLQ0P++vr7/h11B/51jPv+cY0D/nWVC/51lQv+eZkP/n2hE/6BpRf+iaUb/ompG/6Rs - R/+lbUn/pm1J/6dvS/+teFH/sX9X/7SCWP+1hlv/t4hd/7SCWP+3hlr/uYld/7uLXv+8i1//vIte/7uL - Xf+8iVz/u4da/7qFWf/AkWH/x5xo/8OYZf+8iln/vIpZ/7yJWP+8iVj/u4hX/7uIV/+6h1b/uodW/7qG - Vf+6hlT/uYVU/7eEU/+5hVP/t4RS/7eEUv+3g1H/t4NR/7aDUP+2glD/tYJP/7WAT/+1gE//tYBP/7WA - T/+1gE//tX9P/7V/Tf+1f03/tX5N/7V9Tv+1fU3/tHxM/7R9Tf+3g0//toRP/7aCTf+1f0z/tH5L/7N9 - Sv+ze0r/snpJ/7J5R/+vd0b/r3hH/651R/+udUj/snxO/7aFU/+3iFT/t4ZT/7aGUv+1hVP/tYRT/7WE - U/+1hFP/tINS/7OEUv+yhFL/soRS/7KEUv+wg1H/tIVQ/5h1T/+dnJv/qKio/6impv+fnZ381NTU+v// - ///6+vr/+vr6///////ExMTCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6uro0zszM/c3M0P+KaFH/m2A7/5xk - Qf+dZUL/nWVC/55mQ/+faET/oGhF/6JpRf+iakb/pGxI/6VtSf+mbUr/p29L/6x5Uv+xf1f/soJZ/7SG - W/+1hlv/s4JY/7aFWv+5iV3/u4te/7uNX/+8i1//vIte/7uKXv+8iFz/u4da/7uGWf/ClGT/xpxo/8CQ - X/+9jVr/vYta/72KWP+8iVj/vIhX/7yJWP+8iFf/vIdW/7uHVf+6hlX/uoZV/7qFVP+6hlT/uYVT/7mE - Uv+5hFL/t4RR/7eEUP+3hFH/toNQ/7aCUf+2glD/toJR/7aCUP+2glD/tYBP/7WATv+1gE7/tX9P/7Z+ - T/+2fk7/tX1O/7V9Tf+3gk//t4RP/7aCTv+2gE3/tX9M/7N9S/+0fEv/s3pJ/7J5SP+yeUj/snlJ/7B3 - Sf+uc0f/r3VJ/7N9T/+3hlX/uYhV/7eHVP+3hlT/toVV/7aFVP+1hVT/tIVU/7SGVP+zhVP/s4VT/7OF - U/+1hlP/pHxO/5eUkP+rqav/qKam/6Genv7IyMj5/v7+//n5+f/6+vr//v7+/9PT0+FmZmYKAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAKGhoRPNzMzp1NbY/5F6aP+WXDj/m2RB/5xkQf+dZUL/nmdD/59nRP+gaEX/omlF/6Nr - R/+ka0j/pGxJ/6ZtSv+nb0v/q3lS/69/V/+xgln/tIZb/7SEWf+zgFj/toVa/7eJXP+7i17/u4tf/7yL - X/+8i17/u4te/7yJXP+8iFv/u4ZZ/7uHW//EmWf/w5dk/8CPXf++jlv/vY1a/72LWf+8ilj/vIpY/7yK - WP+8iVj/vIhX/7uHVv+7h1X/u4dV/7uHVP+7h1T/uoVT/7qFU/+5hVP/uYVS/7eEUf+5hFL/t4NR/7mE - Uf+3g1H/t4NR/7eDUf+3g1D/toJQ/7aCT/+1glD/toBQ/7V/T/+2f0//t39P/7Z+T/+2gFD/t4VQ/7aD - Tv+2gk7/tX9N/7R+TP+0fEv/tHxK/7N6Sf+ze0n/s3pK/7J4Sv+wd0n/r3NH/692Sv+zfVD/t4ZV/7qJ - V/+6iFf/uYdW/7eHVv+1iFX/tYdV/7WHVf+1h1X/tYdV/7aIVf+qfk3/l42D/6urrP+npqb/o6Gh/7q6 - uvn7+/v/+fn5//n5+f/8/Pz/39/f93R0dCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcvIyMbZ2tv/no6E/5FZ - N/+bZED/m2RB/51lQv+eZkP/n2dE/6BoRf+iakb/o2tH/6RrSP+kbEn/pW1K/6ZwS/+reVP/roBX/7GC - Wf+0hlv/soBY/7KAV/+1hVr/t4hc/7qKXv+7i1//vI1f/7yLX/+8i17/u4pd/7yIW/+8iFv/uoZZ/7yK - XP/EmGb/wpFg/8GQXv/Aj1z/vo5a/72NWv+8i1n/vY1Z/7yLWf+9ilj/vIlX/7uJV/+7iVb/u4hV/7uH - VP+7h1T/u4ZU/7uGVP+6hlP/uoZT/7mFU/+5hFL/uYRS/7mEU/+5hFL/uYRS/7mEUv+3g1H/t4NR/7eD - Uv+2g1H/toJR/7aCUf+2gFD/toBP/7Z+T/+3f0//uYVR/7eET/+2gk7/toBN/7V+Tf+0fUz/tHxL/7V8 - Sv+0fEv/s3pL/7N5S/+yeEr/sHdK/691SP+vdkr/s3xP/7eFVf+7ilj/uYpX/7eJV/+3iVf/t4lX/7eJ - V/+2iFb/t4lW/7SFUP+Vhnb/qqmt/6impv+mpKT/sa6v+fT09P76+vr/+fn5//v7+//w8PD/h4eHQAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAy8fJnNrZ2v+tpaD/jFg5/5xkQP+bZEH/nWVC/55mQ/+fZ0T/n2hE/6Bp - Rv+jakf/o2tI/6RsSf+kbUr/pnBL/6p5U/+tflf/sYJY/7OEW/+vflf/soBX/7SEWv+3iFz/uope/7uL - X/+7jV//vYtf/7yLXv+7il3/vIlc/7yIW/+7h1r/uoVY/76MXv/Ck2L/wpBg/8GQXv/Aj1z/vo5b/76M - Wv+9jVr/vo1a/72NWf+8i1j/vIpY/7yJV/+7ilb/vIpW/7yJVf+8iFb/u4dV/7uHVP+7h1T/u4dU/7uF - VP+6hVT/uoVU/7qFVP+6hVT/uoVT/7qFUv+6hVL/uYRT/7mEU/+5hFL/t4NS/7eDUv+2g1H/t4FR/7eA - UP+3f1D/uYNR/7mFUP+3g0//t4BO/7Z/Tf+1fk3/tH1L/7V9S/+1fUz/tHtM/7N6S/+zeUv/snlL/7J4 - Sv+wdEj/r3VJ/7N7Tv+2hFX/uYpY/7qNWP+6jFj/uYpX/7mKV/+5ilf/uYhT/5mDa/+nqKz/qKam/6el - pf+ppqf67e3t/fr6+v/5+fn/+vr6//X19f+dnZ1lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMxcVu19bX/727 - u/+IW0D/nGNA/5tkQv+cZUL/nGZC/51nRP+fZ0T/oGlF/6BqRv+ia0f/pGxJ/6RsSf+mcEv/qnlT/619 - V/+vgVj/soJZ/658Vf+xgVf/s4Na/7aGXP+5iV3/uYxe/7uLX/+8i1//u4te/7uKXf+7iVz/vIhb/7uI - Wv+7h1n/vIdY/72KXP/BkGD/w5Jg/8GRXv/Aj1z/wI9b/8CMWv++jFr/vo1a/72NWf+9i1n/vYtZ/72L - WP+9ilf/vIpX/7yJV/+8iFf/u4hW/7uIVf+7iFX/u4dV/7uHVv+7hlT/u4ZU/7uGVf+7hlX/u4ZU/7uG - U/+6hVT/uoVU/7qFU/+6hVP/uYRT/7mEU/+5hFL/t4NS/7eBUf+3f1D/uYNS/7mGUf+3hE//t4JO/7eA - Tv+1f03/tX9M/7V+TP+1fk3/tHxM/7N7TP+zekv/snpL/7J5S/+yeEr/sHZJ/691Sf+yeU3/tYJT/7qK - WP+7jlr/vI5a/7uNWf+9jVf/mn9h/6SlqP+op6f/qKam/6Ojo/vg4uL8+/v7//f39//39/f/+/v7/6qq - qooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMbCwkPW1NT/ysvO/4dkTP+bYD7/m2NC/5xkQv+cZUP/nWZE/51n - RP+faUX/oGpG/6JrR/+ja0j/pGxJ/6VxS/+peVL/rH1W/6+BWP+vf1f/rXtU/69/Vv+zg1n/tYVb/7eI - XP+5il3/uYxe/7uLXv+7i17/u4pd/7qJW/+7iFv/u4da/7uHWf+8h1n/u4VW/7uEV//DkmD/wpJf/8KR - Xv/Bj1v/wI5a/8COWv++jlr/vo5a/76NWv++jVr/votY/76LWP++ilj/vYlY/72KWP+8iVf/vIlX/7uJ - V/+7iFf/vIdX/7yIVv+7iFb/u4dX/7uGVv+7hlX/vIdU/7uGVf+7hlX/u4ZU/7uGVf+6hVT/uoVT/7qF - U/+5hFP/uYRT/7eDUv+3gVH/uYFS/7qGUv+5hVH/uYNP/7eATv+3gE7/tn9N/7Z/Tf+1fk3/tX1O/7R8 - Tf+ze0z/s3tM/7N6S/+zeUv/snlL/7J2Sv+wdEn/sHhL/7V/Uv+6iVj/vI9b/8GQW/+jglv/oaCh/6uo - qP+opqb/oZ6f/dPU0/r8/Pz/9/f3//f39//8/Pz/urq6sQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu7u7HtLP - z/PW2dv/jHBf/5ZcO/+aYkH/m2NC/5xkQ/+cZkT/nWdE/55nRf+faUb/oGtG/6JrR/+ka0j/pW9L/6l5 - Uv+sfFb/roBX/619Vf+se1T/rn5W/7GCWP+0hVr/todc/7mJXP+5il3/uote/7uKXv+7il3/uolc/7qI - W/+7iFr/vIdZ/7yHWP+8iFn/tnpP/7uEV//Dk2H/wpJg/8KRXv/Cj1v/wY9b/8CPW//Ajlr/wI5a/8CO - Wv++jln/vo1Z/76NWf++i1j/vopY/72KWP+9ilj/vYpY/7yJWP+8iFf/vIhX/7yIV/+8iFf/vIhX/7yI - Vv+8iFb/vIdW/7yIV/+8h1b/vIdW/7yHVf+7hlX/u4ZU/7qFVP+6hVT/uoVT/7mEU/+3g1L/t4NS/7qF - U/+6hlL/uYNQ/7mBT/+3gE7/t4JO/7eATv+2fk3/tX1O/7Z+T/+1fU7/tHxN/7R7TP+ze0z/tHpL/7N5 - S/+yeEr/snZK/7B3Sv+zfE//vIdX/6eBV/+empn/q6mr/6inp/+ioaD+yMjI+fv8/P/39/f/9/f3//z8 - /P/IyMjRAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZmZkF0NDQ1Nzd4P+XhHn/kVg3/5piQf+bY0L/m2NC/5xl - Q/+dZkT/nmZF/59oRf+gaUb/ompH/6JrR/+kb0r/p3hS/6p8VP+tflf/q3pT/6t6U/+tfVb/sYFX/7SE - Wv+1h1v/t4hc/7eJXP+6il3/uopd/7qKXP+6iVv/uohb/7uIWv+8h1n/u4dY/7yIWf+6gVT/s3RL/7yH - WP/Dk2D/wpNe/8KRXf/CkFz/wZBb/8CPW//Ajlr/wI5a/8COWv/Ajln/wIxZ/8CMWf/AjFn/vYtY/72L - WP+9ilj/vYlY/72KV/+9iVj/vIlY/72JWP+9iVj/vYlX/7yJWP+8iFf/vYlX/7yIV/+8iFf/vIhW/7yH - Vv+8h1b/vIdV/7uGVf+7hlX/uoVU/7qFU/+6hVT/uYRT/7qEU/+6hlP/uoRR/7mDUP+5gU//uYNP/7eC - T/+3f0//t39Q/7Z+T/+2fk//tX1O/7V9Tv+0fE3/s3tM/7R7TP+0ekz/tHlL/7J3Sv+0dkr/p3BH/5yS - i/+rq63/qKen/6Wjo/+6urr5+fn5//b29v/29vb/+vr6/9jY2O5eXl4TAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADQzc2t393f/6edlv+JVTf/mmJB/5piQf+bY0L/m2NC/5xlRP+dZkX/nmdF/59nRv+iaUb/ompG/6Nw - Sv+nd1H/qXpT/6t8Vf+pd1H/qnpT/6x8Vf+vf1b/soNZ/7SFWv+2h1v/tohb/7mJXP+6iVz/uopc/7qI - W/+6iFr/uYhZ/7yHWf+7hlj/u4ZY/7yHV/+1eEz/tHZL/72HWP/Ek2D/w5Je/8ORXf/CkVz/wY9b/8GP - W//Bj1v/wI9a/8CPWf/Ajln/wYxa/8CMWf++jVj/vo1Z/72LWf+9ilj/vYpY/72KWP+9ilj/vYpY/72K - V/+9iVf/vYlY/72JWP+9iVj/vYlY/72JWP+9iVj/vIlX/72IV/+9iFb/vIhW/7yHVv+7hlX/u4ZV/7qF - Vf+6hVT/uoVU/7qEVP+7hlT/uoZS/7mEUf+6g1D/uoRQ/7mDT/+5gFD/uYBR/7mAUf+3f1D/tn5P/7Z+ - T/+1fU7/tX1N/7V8Tf+1fE3/tXtM/7V7Tf+tckX/lod7/6ysrv+pp6f/p6Wl/7Gwr/ny8vL+9/f3//b2 - 9v/6+vr/5eXl/YKCgjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM3Ly4Dc3Nz/urWz/4ZWOv+aYED/mWFB/5pi - Qf+bY0L/nGRD/51lRP+dZkX/n2dF/6BnRv+gaEb/o25K/6Z3UP+peVP/qnpT/6d2UP+peFL/q3tU/659 - Vf+xgVf/soRZ/7SGWf+2h1r/t4hb/7eIW/+5iVv/uohb/7mIWv+3h1n/u4ZY/7uGWP+6hVf/vIdX/7d9 - UP+0dUr/tXZL/72GV//Ek1//w5Je/8KSXf/CkVz/wY9b/8GPW//Bj1r/wY9a/8GOWv/Bjlr/wIxZ/76N - Wf/Ajlj/vo1Y/76LWP++i1j/votY/76LWP+9ilj/votX/76KWP++ilf/vopX/76KWP+9ilj/vopY/72J - WP+9iVj/vYlY/72JV/+9iFf/vYhX/72IV/+8h1b/u4ZV/7uGVf+7hlX/uoVU/7qFVP+7hlX/u4dU/7qF - Uv+6hVD/uoVR/7qDUP+6gVH/uoFS/7mAUf+5gFH/t39Q/7d/UP+2fk//tn5P/7Z+T/+1fU7/tn1O/7R4 - R/+bhHD/qqyv/6mnp/+opqb/qqmp++rq6v35+fn/9vb2//f39//x8fH/jo6OUQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAysrKUtrZ2f/Jycr/hV5E/5lePP+YYED/mWFB/5piQf+bY0L/nGRD/51lRP+eZkX/nmdG/59o - Rv+ibkr/pXZP/6d4Uf+neFH/pnRP/6d3Uf+qeVL/rHxU/6+AVf+xglf/s4RY/7WGWf+2h1r/t4da/7eI - Wv+5iFr/uYdZ/7eHWf+5hlj/uoVY/7qFV/+7h1f/uoJU/7V2S/+1dkv/tXZL/72GV//Dk1//wpJd/8OR - Xf/DkVz/wpBc/8KPW//Bj1r/wo9b/8GPWv/Bjlr/wI5Z/8COWf/Ajln/wIxZ/8CMWf/AjFn/votY/76L - WP++i1f/votX/76LV/++i1f/votX/76LWP++i1j/votX/76LWP+9ilj/vYpY/76JV/++iVf/volX/72I - V/+9iFb/vIdW/7yHVv+8h1b/u4ZV/7uGVf+7hlX/vIhV/7uGU/+6hlH/u4ZR/7qEUf+7glL/uoFS/7qB - Uv+6gVL/uYBR/7mAUf+5gFH/t39Q/7Z+T/+2fk//uHxL/5l7Yf+nqa3/qaen/6inp/+jo6P839/f/Pn5 - +f/19fX/9fX1//b29v+mpqZ5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEvr4r1tPT+tbZ2/+Kalb/lVs5/5hf - P/+YYED/mWFB/5piQf+bY0L/nGRD/51lQ/+dZUX/nmZF/6BtSf+jdE3/pndQ/6R0Tv+lck7/pXVQ/6l4 - Uf+relP/rX5V/6+BVv+yglj/s4RY/7WGWf+2h1n/toda/7mHWf+2hlj/t4ZY/7mGV/+6hFf/uYRW/7qF - Vv+7hlb/tXhM/7R2S/+1dkv/tXVK/7yFVv/Dk17/wpJe/8ORXf/DkVz/w49b/8KPW//Cj1v/wo9b/8GP - Wv/Ajln/wI5Z/8CMWf/AjFn/wIxZ/8CMWf/AjFn/wIxZ/8CMWP/AjFj/votX/76LV//AjFj/wIxX/76L - V/++i1f/votX/76LWP+9ilf/vopY/76JWP++iVf/volX/72IV/+9iFf/vYhX/72IV/+8h1b/vIdW/7yH - Vf+7hlX/vIhW/7yIVP+7iFL/u4ZR/7uEUf+7hFP/u4JT/7uBU/+6gVL/uoFS/7mAUf+5gFH/uYBR/7mA - Uf+6f07/pH1a/6Wlp/+pqKf/qaen/6KgoP3S09P6+fn6//X19f/19fX/+fn5/7Kysp4AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAKqqqgzT0tLh3+Di/5R9bv+ITSz/kVc2/5RaOP+WXDr/mF08/5tgPv+cY0D/nWRC/51k - Q/+fZkT/oG1I/6NzTP+ldU7/o3JL/6RyTP+ldE7/p3dP/6p5Uf+sfFP/rn5V/6+BVv+yg1b/s4RW/7SF - WP+1hlj/toZY/7aGWP+3hlf/toVW/7eEVv+5hFX/uYRV/7uGVv+2fE//tHVK/7V2S/+2dkv/tnVL/7uC - Vf/Dkl7/w5Ne/8OSXf/DkFz/w5Bc/8KPW//Dj1v/wY9a/8GPWv/Bj1r/wI5Z/8CMWf/AjFn/wIxZ/8CM - Wf/AjFn/wIxY/8CMWP/AjFj/wIxY/8CMWP/AjFj/votX/76LV/++i1f/wItY/76LV/++i1j/vopY/76K - V/++ilj/volX/76JVv++iVf/vYhX/72IV/+8h1f/vIdW/7yHVv+8h1b/vIdW/72JVv+9ilT/u4dS/7qF - Uv+8hFP/vINU/7uEVP+7glP/uoFS/7uBU/+6gVL/uoFS/7yBUP+leFH/oZ+d/6urq/+pqKj/o6Ki/sfG - xvr5+fn/9fX1//X19f/6+vr/xMTEwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANLS0rzd3d3/v7u5/5eE - ev+ZgXL/lXlm/4ttWf+OalP/jWVL/4deQ/+NXUH/j10//45aOv+VYz//nGtD/5xpQ/+eaEP/omxF/6Rw - SP+ldEr/qnhO/6x8Uf+ufVL/sH9U/7KCVv+zg1b/tIRX/7WFV/+2hVf/toVW/7aFVv+2hFb/toNV/7eD - Vf+3g1X/uoVW/7mBUv+zdEr/tXZL/7V2S/+2dkv/tXVK/7qAUv/DkVz/xJNe/8ORXP/DkVz/w5Bc/8OQ - XP/CkFv/wY9a/8GPWv/Bjlr/wY5a/8GOWv/AjFn/wIxZ/8CMWf/AjFj/wIxY/8CMWP/AjFj/wIxY/8CM - WP/AjFj/wIxY/8CMWP++i1f/wIxY/8CLWP++i1j/votX/76KV//Ailf/volX/76JV/++iVj/vohX/72I - V/+9iFf/vYhX/7yHVv+8h1b/vIdW/72IVv+9ilX/vIhT/7uGUv+7hVT/vIVV/7yDVP+7hFT/u4RT/7uC - U/+6gVL/vIJS/697T/+fmJL/q6ut/6moqP+mpaX/u7q6+ff39//19fX/9fX1//n5+f/R0dHhZmZmCgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA0tDQktrZ1//d3d3/4uTm/+Dh4//b3eD/2tvd/9XW2P/Nzs//yMfI/8O/ - vv+4s7H/samk/6+imf+llov/n41//5+Idf+XfWj/k3Vf/5l3W/+WclT/lnBO/551T/+fc0z/oXNL/6h4 - Tf+re03/rnxO/7SAUP+1gFH/tYJR/7eDU/+3hFT/uYNT/7mBVP+7hVX/uoVU/7N3Sv+0dUr/tXZL/7Z2 - S/+2eEv/tXVK/7p9T//CjVv/xJNe/8SRXf/EkV3/w5Fc/8KQW//CkFv/wo9b/8GOWv/Bjlr/wY5a/8GO - Wv/Bjlr/wIxZ/8CMWP/AjFj/wIxY/8CMWP/AjFj/wIxY/8CMWP/AjFj/wIxY/8CMWP/AjFj/wIxY/8CL - WP/Ailj/wIpX/8CKV//Ailf/wIpX/8CKV/++iVf/volX/72IVv+9iFb/vYhX/72IVv+8h1b/vIdW/7yH - Vv++i1b/vIhU/7uGU/+7hlT/vIZV/7yFVf+8g1T/vINU/7uCU/+8g1T/s3xM/52Rhv+srK7/qaio/6em - pv+xsbH67+/v/vX19f/09PT/9/f3/9vb2/d0dHQhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADPz89a29nZ/9va - 2v/b2tr/29ra/9va2v/c2tr/3Nvb/93c3P/f3d3/393f/+Hg4P/g4OH/4ODi/+Dg4v/g4OL/3N3g/9fa - 3P/W19v/0NDS/8jIyf/FxMP/v7u5/7Svq/+0qqP/r6SY/6WWiP+nlIH/p494/5yDav+hgmP/pYFf/6B5 - VP+keFL/q3tQ/6h3Sv+ue0v/r3NG/61tQf+xb0P/tXJF/7Z0Rv+3dEb/t3VH/7t7TP/Ci1j/x5Ne/8eT - Xv/Ekl3/wpFb/8OQW//Cj1v/wo9a/8GOWv/Bjlr/wY5a/8GOWv/Bjln/wIxY/8CMWP/AjFj/wIxY/8CM - WP/AjFj/wIxY/8CMWP/AjFj/wIxY/8CMWP/Bi1j/wItY/8CLWP/Ai1f/wYtY/8CKV//Ailf/wIpX/8CK - V/++iVb/volW/76JVv+9iFb/vYhW/72IVv+9iFb/vIdX/72IVf++i1b/vYpU/7uHU/+7hlT/vIZV/72F - Vf+9hVX/vYVU/7yDVP+6f07/n4t5/6usr/+pqKj/qKen/6qqqvvp6en99fX1//T09P/29vb/6+vr/5mZ - mUEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqqqgbQ0NBc1NLSgdbT05fW09Ot1tXVw9bU1NbX1tbm2NfX9NnY - 2P7b2dn/29nZ/9rZ2f/a2dn/2tnZ/9rX1//a19f/2dfZ/9rZ2f/a19n/2tra/9va2v/b2tv/3Nvc/9vc - 3f/a2tz/2trc/9fZ3P/U1dj/0dPW/8/Q1P/IyMr/wsLC/8K+vf+4tbH/saqk/7Sonv+tnZD/oo5//6iN - eP+khG3/nXpg/6Z7XP+ld1P/onBK/6t0S/+zf1L/t4dV/72LVv/BjFb/wItU/8KOVf/EjVb/w41W/8ON - V//Ej1j/w49Z/8KNWP/CjVj/wo1Z/8GMWP/BjFj/wIxY/8GMWP/BjFj/wYxY/8GLWP/BjFj/wYtY/8GL - WP/Bi1j/wYtY/8GLWP/Bi1j/wIpX/8CKV//Bilj/wIpX/8CKV//Ailf/volW/76JVv++iVb/vYhV/72I - Vv+9iFb/vYhW/72JVv+9ilX/vYpV/72IVP+8h1T/vYZV/72FVf+9hVX/vYVV/72BUP+fhGz/qquu/6mo - qP+pqKj/paWl+9/f3/z39/f/9PT0//X19f/x8fH/oKCgZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAmZmZBcPDwxG5ubkhxsbGMdDMzEbQ0NBc0NDQc9PT04zW09Oh1NPTuNbS - 0s3V09Pe1tTU7tbT0/rX1tb/19bW/9fV1f/W1dX/1dXV/9XU1P/V0tP/1NLT/9TS0//U0dH/09PT/9XS - 0//U0tT/1NLT/9TU1f/V1Nb/09TW/9PS1v/R1Nf/z9HV/8rN0P/Jy8//x8jK/76/wf+8urv/u7a0/7Cp - pf+wqKD/s6ea/6mci/+pl4L/r5h9/6iNcP+pi2j/sY1n/6yGXf+vhVn/tohY/7WGVP+3hVH/vYhS/72I - Uf++h1H/wopT/8OKVP/CilT/w4tV/8SMV//Di1f/wotX/8KLWP/Ci1j/wYtY/8GLV//Ailf/wIpX/8GL - WP/Ailf/wIpX/8CKV//Ailf/volW/76JVv++iVb/volW/76JVv++iVb/vYhW/76KV/++ilX/vopV/76K - Vf+9iFT/vYZV/72GVf++hVX/v4VS/6SCYf+mqKr/qaio/6moqP+ioqL90tLS+/f39//y8vL/8vLy//b2 - 9v+np6eLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIuLiwvMzMwZzMzMKMzMzDzNyclR0tLSZtHN - z3/QzMyX0M3NrdHNzcPPzs7Vz87O5s/OzvTQz8/+0tDQ/9LQ0P/Rz8//0c/P/9DOzv/Qzs7/z8zN/87M - zf/Oy8v/zMrK/8zKyv/Mysr/zMvL/8zKy//Ly8z/zcvM/83Lzv/Jysz/ycnM/8jJzP/Excr/wcPG/8HC - xf+9vL//trW3/7e0s/+0r6z/rKWf/6+lmf+un5H/pZSC/6uVfv+sk3f/pYhp/62KZv+xiWL/rINZ/7SF - WP+3h1b/tYNS/7uGUv++iFP/vYZR/7+IUv/DilP/w4pU/8KKVP/Di1X/w4tW/8GKVv/Bilb/wYpX/76J - Vv++iVb/volW/76JVv+9iFX/vYhW/8CLV/+9iVT/vYlU/76KVf+9iVX/vodV/76GVf/Bh1P/p31Y/6Wj - o/+rqan/q6io/6Siov7Gxsb69vb2//Ly8v/y8vL/9/f3/729vbMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJmZmQWqqqoSt7e3IMHB - wTHGxsZHyMXFXMzMzHPMysqLzMjJoczKyrjMzMzNy8nK3snHx+3JyMj6zMrK/8vKyv/Lycn/ysnJ/8rI - yP/JyMj/ycbH/8jHx//HxcX/x8TE/8XExP/Ew8P/xMLC/8TDw//Fw8P/w8PD/8PCw//Ew8X/wsLE/8HB - xP/BwsT/wMHE/7u9wP+5u77/uLq8/7O0tf+vrq7/s6+s/6ymov+nn5f/rqGV/6eYiP+jkH3/rZV7/6mN - cP+miGf/sYxn/66GX/+ug1j/t4dY/7aFVf+3hFH/vYdS/76HUf++hlH/v4dR/8GIUv/BiFL/wIhT/8OM - Vf/AilP/volT/8CLVf/AilX/vohU/8GIVP+ygVT/pJ+c/6ysrP+rqan/p6am/7y8vPr19fX/8vLy//Ly - 8v/39/f/x8fH0nh4eBEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACLi4sLo6OjGbm5uSi/u7s8wMDAUcTExGfFxcV/xsTEl8bDxK3ExMTCxMLC1cLBwebCwcH0w8LC/sTD - w//EwsL/w8LC/8LBwf/CwcH/wb+//8G+vv+/vr7/v729/769vf+9vLz/vLy8/7y7u/+8urr/vLu7/7u7 - u/+7urv/u7q8/7u6vP+4urz/uLi8/7e4vP+2trv/srS4/7Kztv+wsrT/q6us/6unp/+sp6T/pZ6Z/6ac - kv+qnZD/opKB/6aQev+sk3j/pYhq/6qHZf+xi2T/rYRa/7OHWP+3h1b/tYRR/7mFUP+9iFH/voZQ/7Z9 - Sv+imI7/rK2u/6upqf+op6f/s7Gx+u/v7/709PT/8vLy//f39//W1tbvgICAKgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACZmZkFqqqqEq+vryCzs7Myvba2Rr+6uly8vLxzv729i767u6K+vr64vrm5zbu6 - ut67ubntu7q6+b28vP+8u7v/vLq6/7u6uv+7uLj/uri4/7q3t/+4t7f/t7a2/7e2tv+3tbX/trW1/7a0 - tP+1tLT/tbOz/7SztP+0s7P/tLGz/7Oxs/+0tLX/srO1/7Cytf+wsrT/r7K1/66vtP+rrbD/rK2w/6mp - rP+lpKT/qKWj/6ehnf+gmJH/p5yP/6eYif+gjnv/qpB3/62lnv+rq6z/q6mp/6moqP+rq6v76Ojo/fT0 - 9P/y8vL/9fX1/+Pj4/2amppOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdHR0C6OZmRmzrKwou7u7PLezs1G3tbVnube3f7i2 - tpe3tLStt7S0wri1tda1tLTmtLOz9LSzs/62tbX/tbS0/7W0tP+0s7P/s7Oz/7Oxsv+zsLD/srCw/7Gv - r/+wr6//sK+v/7Curv+vrq7/r62t/66trf+ura3/rq2t/66trv+tra7/rqyt/62ur/+trbD/rK2w/6us - r/+rrbD/q6ur/6upqf+rqan/q6mp/6Wlpfze3t789fX1//Hx8f/19fX/8fHx/5mZmXYAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZmZmBaqqqhKqqqohraioMrCs - rEexr69csa+vc7KwsIuwsLCisLCwuLSvr8yxr6/erqys7a6trPqxr6//sK+u/7Curv+vra3/rq2t/66t - rf+urKz/rq2s/66srP+trKv/rayr/6yrq/+sq6v/rKur/6ypqv+sqar/rKmq/6ypqv+sqar/pKKi/dLS - 0vv39/f/9/f3/+jo6P+ysrK5b29vNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaqq - qgyZmZkZoqKiKaqqqjyqqqpRrKmpaKupqYCsq6uXraqqrqyrq8KsqqrWq6qq5qqpqfSrqqr+rKur/6yr - q/+sq6v/rKmq/6ypqv+sqar/rKmq/6ypqv+npaX/ysrK/+3t7f+4uLi/eXl5SgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAGZmZgWGhoYTqqqqIa+vrzOppaVHqampXKmnp3SrpaeLq6eno6mpqbipqKjNqaan36up - qeympKTThISEUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAXR0dAuqiooYm5ubKaCgoDuopaVSq6ioZJSUlEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////+AAH////////////////wAAAAAP/////////////AAAAAAAAB///////// - ///gAAAAAAAAP///////////4AAAAAAAAB///////////+AAAAAAAAAf///////////+AAAAAAAAH/// - ////////////AAAAAA////////////////gAAAAP///////////////8AAAAD////////////////AAA - AA////////////////wAAAAf///////////////8AAAAH////////////////AAAAB////////////// - //wAAAA////////////////8AAAAP////////////////AAAAD////////////////wAAAA///////// - ///////4AAAAf///////////////+AAAAH8AAf////////////gAAAAAAAH//////////8AAAAAAAAAB - ///////gAAAAAAAAAAAAAf///gAAAAAAAAAAAAAAAAH///gAAAAAAAAAAAAAAAAB//+AAAAAAAAAAAAA - AAAAAP//gAAAAAAAAAAAAAAAAAD//4AAAAAAAAAAAAAAAAAA//+AAAAAAAAAAAAAAAAAAP//wAAAAAAA - AAAAAAAAAAD//8AAAAAAAAAAAAAAAAAA///AAAAAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAB//+AA - AAAAAAAAAAAAAAAAf//gAAAAAAAAAAAAAAAAAH//4AAAAAAAAAAAAAAAAAB//+AAAAAAAAAAAAAAAAAA - f//gAAAAAAAAAAAAAAAAAH//4AAAAAAAAAAAAAAAAAA///AAAAAAAAAAAAAAAAAAP//wAAAAAAAAAAAA - AAAAAD//8AAAAAAAAAAAAAAAAAA///AAAAAAAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAD//+AAAAAAA - AAAAAAAAAAAf//gAAAAAAAAAAAAAAAAAH//4AAAAAAAAAAAAAAAAAB//+AAAAAAAAAAAAAAAAAAf//gA - AAAAAAAAAAAAAAAAH//4AAAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAA - D//8AAAAAAAAAAAAAAAAAA///AAAAAAAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAD//+AAAAAAAAAAAA - AAAAAA///gAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//+AAAAAAAAAAAAAAAAAAf//gAAAAAA - AAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAAH//8A - AAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAD//+AAAAAAAAAAAAAAAAA - A///gAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAD//+AAAAAAAAAAAAAAAAAA///gAAAAAAAAAAA - AAAAAAH//8AAAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAAH//8AAAAAA - AAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAf//4AAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAA///g - AAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAD//+AAAAAAAAAAAAAAAAAA///gAAAAAAAAAAAAAAAA - AP//8AAAAAAAAAAAAAAAAAD///AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAA - AAAAAAB///AAAAAAAAAAAAAAAAAAf//4AAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAB///gAAAAA - AAAAAAAAAAAAf//4AAAAAAAAAAAAAAAAAD//+AAAAAAAAAAAAAAAAAA///gAAAAAAAAAAAAAAAAAP//8 - AAAAAAAAAAAAAAAAAD///AAAAAAAAAAAAAAAAAA///wAAAAAAAAAAAAAAAAAP//8AAAAAAAAAAAAAAAA - AB///AAAAAAAAAAAAAAAAAAf//4AAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAB///gAAAAAAAAAA - AAAAAAAf//4AAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAB///wAAAAAAAAAAAAAAAAAP//8AAAAA - AAAAAAAAAAAAD///AAAAAAAAAAAAAAAAAA///wAAAAAAAAAAAAAAAAAP///8AAAAAAAAAAAAAAAAD/// - //+AAAAAAAAAAAAAAA///////+AAAAAAAAAAAAAH/////////AAAAAAAAAAAB///////////AAAAAAAA - AAf////////////gAAAAAAAH//////////////gAAAAAB////////////////gAAAB////////////// - ////wAB///////////////////8A//////////////////////////////////////////////////// - //////////////////////////////////8= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/NES/NesControllerSettings.Designer.cs b/BizHawk.Client.EmuHawk/config/NES/NesControllerSettings.Designer.cs index 698fd994b4..a50f431478 100644 --- a/BizHawk.Client.EmuHawk/config/NES/NesControllerSettings.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/NES/NesControllerSettings.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NesControllerSettings)); this.CancelBtn = new System.Windows.Forms.Button(); this.OkBtn = new System.Windows.Forms.Button(); this.checkBoxFamicom = new System.Windows.Forms.CheckBox(); @@ -145,7 +144,7 @@ this.Controls.Add(this.checkBoxFamicom); this.Controls.Add(this.CancelBtn); this.Controls.Add(this.OkBtn); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController_MultiSize; this.Name = "NesControllerSettings"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "NES Controller Settings"; diff --git a/BizHawk.Client.EmuHawk/config/NES/NesControllerSettings.resx b/BizHawk.Client.EmuHawk/config/NES/NesControllerSettings.resx index 91f294b89b..29dcb1b3a3 100644 --- a/BizHawk.Client.EmuHawk/config/NES/NesControllerSettings.resx +++ b/BizHawk.Client.EmuHawk/config/NES/NesControllerSettings.resx @@ -117,508 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAwAMDAQAAAABABoBgAAxgAAACAgEAAAAAQA6AIAAC4HAAAYGBAAAAAEAOgBAAAWCgAAEBAQAAAA - BAAoAQAA/gsAADAwAAAAAAgAqA4AACYNAAAgIAAAAAAIAKgIAADOGwAAGBgAAAAACADIBgAAdiQAABAQ - AAAAAAgAaAUAAD4rAAAwMAAAAAAgAKglAACmMAAAICAAAAAAIACoEAAATlYAABgYAAAAACAAiAkAAPZm - AAAQEAAAAAAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAQAAAAEAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAHR3AAAAAAAAAAAAAAAAAAAAAAAAAAAAdHdEcAAAAAAAAAAAAAAAAA - AAAAAAAAAHd0d3QAAAAAAAAAAAAAAAAAAAAAAAAAAEd8d3UAAAAAAAAAAAAAAAAAAAAAAAAAB3yHfHZw - AAAAAAAAAAAAAAAAAAAAAAAAd3fIyHVwAAAAAAAAAAAAAAAAAAAAAAAAfHh3jIxwAAAAAAAAAAAAAAAA - AAAAAAAHd8jIyHdgAAAAAAAAAAAAAAAAAAAAAAAHd4yHfIdAAAAAAAAAAAAAAAAAAAAAAAAHyMjIyMhQ - AAAAAAAAAAAAAAAAAAAAAAB3d3eMh4dgAAAAAAAAAAAAAAAAAAAAAAB8jIyIfIdQAAAAAAAAAAAAAAAA - AAAAAAB3h4jIiMh3AAAAAAAAAAAAAAAAAAAAAAB8jIeHeIjHAAAAAAAAAAAAAAAAAAAAAAeIiHh4eMiE - AAAAAAAAAAAAB0dHcAAAAAd8h4eIiIiHcAAAAAAAAAB0d3d3RwAAAAeIeIiIiIh3RwAAAAAAAHR3d8h3 - dAAAAAfIh4iIiHiIx0cAAAAAdHh3eIeHhwAAAAeHiIiIiIiId3R3dHR0eHd4h4eHhAAAAAd4eIiIiIiH - x3d2d3eId4iIiIiIhwAAAAd4eIiI+IiIh3d3eHh3iIiIiIeHwAAAAAfIjHeIiIiIyIeHh4iIiIiIiIiI - cAAAAAeIQ0R3h3iIiMiIiIiIiIiIiIiEAAAAAAfIR3d3d0iIiIh4iIeIiIiIiHhAAAAAAAB4d3d3SHiI - h4fTiIi3iIiIeIwAAAAAAAB3h4d3eIeIiHiJiIuIiIh4jHAAAAAAAAAHyId3h3h4iIh4iIiIiIiHeAAA - AAAAAAAAB8iMiMjIiIiIh4h3aMjHAAAAAAAAAAAAAAdYyIeIiIiMjId6d4eAAAAAAAAAAAAAAAAHdsjH - eIeH6MiId3AAAAAAAAAAAAAAAIiIh4V8jIh4eIfHcAAAAAAAAAAAAACIiIh3AAAHd3h3fHcAAAAAAAAA - AAAAAAiIjHgAAAAAAHx8eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAA - AAd0dAAAAAAAAAAAAAAAAAB3x3cAAAAAAAAAAAAAAAAAd3fHcAAAAAAAAAAAAAAAB3yMh3AAAAAAAAAA - AAAAAAfIeMdwAAAAAAAAAAAAAAAHjIyHQAAAAAAAAAAAAAAAfId4yHAAAAAAAAAAAAAAAHjIyIdQAAAA - AAAAAAAAAAB3iId4YAAAAAAAAAdwAAAAjIiIiIUAAAAAAHd3dAAAB4iIiHh8cAAAAHd3x4dwAAd4iIiI - h3Z3d3R3yIh4cAAHh4iIiIfHd3d4iIiIh3AAB3jHiIiIiHeHiIiIiIwAAAh3dXh4iMiIiIiIiIhwAAAA - yGd0d4iIeIi4iIiMAAAAAIeHd4iIh32IiIiIcAAAAAAAd4jIyIiIiHeHyAAAAAAAAAB3h4iIh8h3dwAA - AAAAAAAIh8fIh4eIaAAAAAAAAACIiHAAB8jIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////////////////////n////g////wP///8B///+Af///gH///4B///8Af///AH///wB//n8AP/A+AB - /AHgAAAB4AAAAeAAAAPgAAAH8AAAD/AAAB/8AAA//wAA//4AA//weA////////////////////////// - //8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRwAAAAAAAAAAAAB3dAAAAAAAAAAAAA - d8dwAAAAAAAAAAAAfId3AAAAAAAAAAAHeMjHAAAAAAAAAAAHyHh3AAAAAAAAAAAHh3eEAAAAAAAAAAAI - yIiHAAAAAHd2cAAIiIiIQAAAd3d4UACHiIiId3d3eHiIcACHh4iIyHeHiIiIcAAIR3d4iIiIiIiMAAAH - d3eIh3iIiIhwAAAAeMh4iIiHiMAAAAAAAHfIiMh4aAAAAAAAiIgHyIfIAAAAAAAIgAAAAIAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD8f/8A+H//APB/ - /wDwP/8A4D//AOA//wDgP/8A4D/BAOAfAQDAAAEAwAABAOAAAwDgAAcA8AAfAPwAPwDwgP8A5/f/AP// - /wD///8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAd1AAAAAAAAB8cAAAAAAAB4eAAAAAAAAHyMgAAAAAAAiIhwAAAHcACI - iHcAd3hwAIz4jIeIiIAAd3eIiIiIAACHeIiIiHAAAACMeMh4AAAAiAAIgAAAAAAAAAAAAAAAAAAAAAAA - AAD//wAA//8AAP//AADj/wAA4/8AAMP/AADB/wAAwfkAAMDBAADAAQAAwAMAAMAHAADwDwAAzn8AAP// - AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAA9OzsAZD8/AGg8 - PABtPj4AQkNDAEZIRwBWQkIAV0REAF5AQABbRkYAVklJAFxPTwBTU1MAXFJSAF5ZWQBkQEAAYUREAGZF - RQBqQkEAYEtLAGNPTwBwQUEAfUZGAHJKSgB2SUkAfU9PAGBRUQBgVFQAZlZWAGZYWABqWVkAclZWAHpU - VAB9W1oAbmJiAGtoaABtaWkAcWdnAHdnZwB8Y2MAe2pqAHJxcQB+dHQAd3l5AHl6egCGT08AiU9PAIFP - UACGU1MAjVFRAIlWVgCMV1cAg1xbAIxaWQCQUlIAlVJSAJFXVgCXVVUAmVVVAJZaWQCSXV0AlV9eAJpZ - WgCeW1sAml5eAKBZWgCgXFwAql9fAIRmZQCIZWQAhWtrAI5ragCTYmEAnGBhAJ9kYwCaZmYAk25uAJ1s - awCFdHQAiXd3AIt+fgCWd3cAmHR0AJV5eQCbfHwAo2JhAKZhYQChZWUApGVkAKplZACsZGQAqmhnAKZr - agCnbGsAqmloAKlubQCsbW0AtGZnALhsbACxb3AAv29wAKVxcACrc3IAr35+ALN0cwC5c3MAvXBxALR4 - dgC1fHsAunt6AMNtbgDGb3AAw3FyAMZwcQDGdXUAyHR1AMp3eADBeXkAxnt7AMB/fgDLensANLBSAEWf - TgBBtFwAPMdnADHkdgDciiIAvoF/AISrdwDln0sA35lhAN2XfADgmmEA8LdlAO61cAArWPIALWT+AEh5 - +gDOf4AAfoCAAHiA1ABZv9wAZrnUAGK+2ABxnv4Ad6P/ADPX/QBw0OcAW+D7AIKEgwCPgoIAjI2NAJuC - ggCUiIgAmYqKAJGSkgCjhIQAqoKCAKKLiwC+hIMAsoqKALaSgQCum5sAsZubALqqlQCdgr4Ar6ytALGh - oAC6pKQAwoSDAMyBggDGiIYAyYiHAMWMigDMjIoA0ISFANKHiADUjIwA2Y6NAMCUjQDIk44A0JCPANaP - kADHlZQAzpSSAMScmwDUkpIA2ZSVANWYlgDampcA2ZeYANWcnADam5sA4p2cAMChjwDeoJ4A5aCFAOaj - jQDlpJoA2p6hAMOkowDOoaEAy62tANegoADdoqEA2aGpANGsrwDdq6kAwbG4ANGysQDdtLQA2ri3AOGk - owDjqKYA66ylAOGnqADjq6oA6a2rAOOwrwDssK4A5K+wAOaztADttLIA57i2AO24tgDmurgA6rq6APC1 - swDyuLYA9Ly5APi+uwD1wL0A+cC9AKKMwACkk8QAqprMALSayACptsEAlaDkAOy/wACRxtQAgOv9AJnr - 9wDEwsoA5sbGAOzCwgDuyMcA7MzMAPPEwgDxy8oA9dPTAPja2gAAAAAAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAADLytDi9tOemQAAAAAAUy9EecLEsa1uPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj11Mme - VakAAAAAAAAAAAAATS84M0akAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE - AAAAAAAAAAAAAAABAAAAAQAAAAAAAFFNTQBRUlIAU1RUAGJHRwBiT08Aa0lIAGJTUwBrVlYAYllZAGZc - XABpWloAb1xbAHNTUwB7V1YAc1hXAHFbWwBkZWUAaWFhAG5kZABpamkAcGFhAHlubgB2cHAAf3V1AH55 - eQB8fX0AgUpKAI1PTwCLWFcAhlhYAI9ZWQCKXFsAm1ZWAJJZWQCWWVgAmlpbAJtcWwCiXFwAl2BfAIBg - YACAZ2YAgG9vAI9oaACWZWQAmGBhAJ5kZACcaWoAmm9vAIV0dACNcHAAiXZ2AIB8fACac3IAm3V0AJ51 - dQCZfHwAnHx8AKNmZgCnZmYAqmJiAK5jYwCvb24AtWVmALBtbgC5bW0AvmxtAKx+fQCxcnIAtHBwALZz - dACydXQAtnd2ALlwcAC5dnYAt3p5ALh5eAC8fHsAun18ALx+fQDGb3AAxnBxAMdzdADAd3YAyHJzAMlz - dADJdXYAynd4AMd/fwDMe3wAzXx9AHunbwBhvHIAYsN4ANuLOwC2hn4A4Zt5APC3ZABte9sAX47+AHWM - 5QAl0foAY+P8AIeDgwCFhoYAioSEAJOIiACWi4sAmpKRAKGCgQCmhYUAqYGBAKuDhACniooApYyMAKiO - jQCyhYMAvoWEALeNjQCrj5AAr5eXALSVlAC9lJMAmbCEAK6RugDBgYAAwoSCAMWDhADChoQAxYeFAM6A - gQDFiIYAxoqIAMqIiQDMi4oAy4yKAMiPjQDPj44A0ISFANKJigDUi4wA04+NANWNjgDKkY8A0JCOANud - iQDWj5AAzJSTAM2XlgDGm5oA1pGSANOUkgDVl5EA1pOUANiVlgDYmJUA2ZeYANKenADbmpsA3pmYANuc - mgDbn5wA1aacAN6gngDqqZoA3Z+gAMyjowDCra0AxqysAMqpqQDboaAA3qKiAN6logDbp6UA3aWkANer - qgDWsbMA0rW0ANe0tADfs7IA4aSiAOGlpQDkp6UA46imAOWopgDsraIA6qimAOGoqADhrqwA6a2rAOqv - rADpsK4A7LGuAOGzswDlsbEA7bKxAO+1sgDotrYA5rm3AO+4twDot7sA6bq5AOu9uwDrv70A8bazAPG2 - tADxuLUA9Lm2APC9uwD2vboA9L+9APi+uwD4v7wA8sC+APXAvgD5wL0AkILJAKqXzACsu8cAqr/LALLV - 3QDawMIA48XFAOvDwQDswMAA7cTDAO/ExQDgxsgA8cbEAPTGxADwyskA9MvJAPLNzQD21dYA+NjZAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAMEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHCEcBQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAayU9PSYbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQlBSQiJpAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAM0pSUlJQPRcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnUlJSUlJGFQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAFJSUlJSUkoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzUlJSWVJZfxAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5XWYqKioqGDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoqMkpqa - mqAsAAAAAAAAAAAAAAAAAABoNAAAAAAAAACMjJyuvLy2toYHAAAAAAAAAAAAABcOIDouBgAAAAAAc4yc - tsHKysPAriIKAAAAAAAAABYgRk1LTX+DEAAAAABukqXB4ejo4dHPQCIEChcXEwggTXV/k66unKMpAAAA - AG6Srsro6ero0dN/Rk1NRk2Dg4STrsbh4cHAt2sAAAAAbpKuOXPe6ajW15KGg4OGk528yuHo5eHPz882 - AAAAAAB4jCkDAxSoMabXt5yjt8ro3ePo5dbT09HTdAAAAAAAAABGcBFoGgFwdtfDwHxi2dpmZcrX09HP - z0MAAAAAAAAAAHh/qWwaOa6cz9PNZGPYsdzbzc3DwLk2AAAAAAAAAAAAAAAvhpKakoyg19HNyKS5wHtb - orZ/cwAAAAAAAAAAAAAAAAAANkaKWVm5zb1gYV6cXVxfNgAAAAAAAAAAAAAAAAAAALGvlTIuP1K5tqCR - l4xfLwAAAAAAAAAAAAAAAAAAsbPBenkAAAAAcCVYjE0scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////+f///+D////A////wH - ///4B///+Af///gH///wB///8Af///AH/+fwA/8D4AH8AeAAAAHgAAAB4AAAA+AAAAfwAAAP8AAAH/wA - AD//AAD//gAD//B4D////////////////////////////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAAWlJSAHBJSQB1SEgAe1dXAHdYWAB5WlkAel1dAGBiYgB1bGwAfWtrAHh2 - dgB9fn4Ag01NAIRXVwCIV1cAhV9eAItbWgCgX14ApV1dAJhgXwCNYGAAnWtqAJhtbQCCdnYAh3x8AI15 - eACeensAqGBgAKhoZwCga2oArGpqALNqagCzb28AtG1tALltbQCxb3AApnVzAKlzcwCqdHMApnp6AKd+ - fgCpensAq3x7ALZ3dgC8dHQAvH59AMZvcADGcHEAxXN0AMhycwDJdncAynh5AMx5egDNfn8Ajo1wAOek - VgDGgH8A4p53AEZ2+gB8u4AAd8PaAIuEhACOh4cAjo6OAJ+DggCejo4Ao4SEAKSIiACsi4sAqo2MAK6P - jgC+gYAAvoaGAL+KiACskJAAtJeXALWenQC5np4At6iOAKmyjgC9nroAwYSDAMaGhADOhoYAxomHAMiK - iQDJjYwA0oeIANOOjwDUjY0A2ZiPANaPkADGkZEAx5eXAMySkADGnZwA1ZOSANeTlADWl5YA2JSVANGZ - mADan50A3J6dAOCcmwDVoJ8A7K2fAMOtrQDXo6IA3aCgAN+kpADVq6oA3ay3AMu0tADPtrYA3L+/AOCi - oQDhpqUA5KelAOinpgDlq6gA46usAOOvrQDqrqwA7LGuAOayswDjtrQA5re1AOqysQDts7EA57y6AO+8 - ugDrvL0A8LOwAPC1sgDwtrQA87q3APS6twD2vboA8b69APi/vAD2wb4A+cC9AJmTzwDHqMMAu8PMAIHf - 8QDByNAA7cLCAO3FwwDvxsQA5cjIAOzOzgDwxcQA9cbEAPPP0AD10tIAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - BQMJAAAAAAAAAAAAAAAAAAAAAAAAAAAPHBMNAAAAAAAAAAAAAAAAAAAAAAAAABojLy8TAAAAAAAAAAAA - AAAAAAAAAAAAAB0wMDAiPgAAAAAAAAAAAAAAAAAAAAAAQjAwMDAtGAAAAAAAAAAAAAAAAAAAAAAAFzIy - NTU5CgAAAAAAAAAAAAAAAAAAAAAAIjZYWFxcBwAAAAAAAAAAAAAAAAAAAAAANlxtdW11JQAAAAAAAAAA - PgcRDgkAAAAAXG1/lISAZgMAAAAAABkVLC5SVhcAAABNY3WWnJuLfB8UBAcQHkhWaX91dSsAAABNY2BM - mJeCiVJSVl9laX+WloSJgEIAAAAAXAEIC0tGjnR0dJaRk5qNjIyJQwAAAAAAJkNADBtdjIaPO1GSPYuJ - hnVEAAAAAAAAAClISWRcd4xwkGp8UE90VwAAAAAAAAAAAAAAKSQ1NYZ7OjhbPDdGAAAAAAAAAAAAAHNv - YGsAKyJoXFYmRwAAAAAAAAAAAAAAcnIAAAAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// - /wD///8A////APx//wD4f/8A8H//APA//wDgP/8A4D//AOA//wDgP8EA4B8BAMAAAQDAAAEA4AADAOAA - BwDwAB8A/AA/APCA/wDn9/8A////AP///wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAABjZGQAdmRjAHtpaQB/eHgAgU9PAKBaWgCFbm0AlWtqAKptbgCwZ2cAsGhoAKxw - cACteHkAvnJyAMZvcADGcHEAy3l5AMx9fgCFmXQAwIB/ANeUfQDhoX8AlIqJAJWMjACYiIgAoIaGAK2K - igCxh4cAvoGAALKKigC4iYgAuJWVAL2cnACss50AuqKhAL+mpgDLgoIAxImHAMeNjADLkI8AxpWTANCS - kQDYlZUA1J6dANqZmgDdnp4A1J+oAMaiogDOr68AzLKyANi5uADhpaIA4qypAOWtqADrrqsA4bKwAOay - sgDtuLYA57++AOy4uADxtLIA8be0APa9ugDswL4A9sG+ALCcxwC5ncIA06zBALnH0QC2ytQA7sPDAPLS - 0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAZBgUAAAAAAAAAAAAAAAAACw8KAAAAAAAAAAAAAAAAGhAQDgAAAAAAAAAAAAAAAAkRESUYAAAA - AAAAAAAAAAAlKy4uBwAAAAAAAAcDAAAAKzlHPCYCAAAYCB0oKgAAAC0wSDs0FB0nLDlAOiwAAAANAQQb - Pi9DRkVBPzUAAAAAJB4cKz5EQjMiNSkAAAAAAAAAHwwRNxYVEyQAAAAAAAAxMgAAACEgAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA4/8AAOP/AADD/wAAwf8AAMH5 - AADAwQAAwAEAAMADAADABwAA8A8AAM5/AAD//wAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAkAAAAJAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAUAAAAOAEBAVUAAABUAAAANQAAABAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkFBSUvGRl5TCkpwlYuLtxDJCTQFw0NmQAA - AEkAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAwMKE8rK6V6RET2klJR/5ZS - U/+OT0//ZDc38B0QEJoAAAAyAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDAwYVzAwoopP - T/ygXVz/oFtb/55ZWf+bWFf/k1NT/1UvL9wGAwNcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AARNKipxhk5O+adkY/+uZWX/tWdo/7VmZ/+qYWH/nltb/3hERPcfERGCAAAAFgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADEZGS1zQ0LXqGdm/7ptbf/Fb3D/x3Bx/8hwcf/BbW7/q2Vl/4hPT/82HR2gAAAAIAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAB1gxMYyYXl3/vXFx/8Zwcf/HcHH/x3Bx/8dwcf/HcHH/uG1t/5NY - V/9EJia2AAAAKQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPB8fNH1MS+K4cnH/x3Fy/8dwcf/HcHH/x3Bx/8dw - cf/HcHH/wHBx/51gX/9PLCzGAAAAMwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAMAAAAAAAAAAAAAAAAAAAAALhAQFIZXVs/RjIz/1Y2O/9qYmP/eoaL/46qr/+aysv/ot7f/6rm5/+m4 - uf/otbX/5q+v/+uvrf/jqab/wYeF/28/P/QhEhKvAAAAXwAAACgAAAANAAAABQAAAAMAAAACAAAAAwAA - AAUAAAAKAAAAFQAAADAdDg9oSSkptHZHRu2dYmL+t3Z1/758e/+6enn/tnh3/7d5eP+8fn3/w4SD/7Z6 - ef9eODfbBgICTgAAAAgAAAAAAAAAAAAAAAAAAAAAPhwcJJVjYuPXkZH/2JOU/92fn//iqqr/57O0/+u8 - vP/uwsL/78XG/+/Exf/twMD/67i4/+60sv/wtrP/zZKQ/5taWv9xQED2MRsaxAgEBIcAAABaAAAAQQAA - ADcAAAA2AAAAOwAAAEUEAgJZHA4OfUcnJ7l5SkntqGxr/8CAfv/DgoH/vH59/7p+ff/DiIb/zZGP/9GT - kf/UlJP/1peV/9eZl/+GVlbuGQsLVwAAAAcAAAAAAAAAAAAAAAAAAAAARiIiLZ9rauvZk5P/2peY/+Ck - pP/lsLD/6ru7/+/Fxf/yzMz/9NDQ//PPz//xycr/7sDA//K5tv/1u7j/36Kg/6dmZf+mZWX/j1ZW/WM6 - OutDJSXQNBwcvDAaGrQ0HBy1PiIivUwsLMtkPDzfh1VU9a1xcP/EhIP/xIWE/7+Cgf/Ch4b/zZST/9mk - ov/grq3/4a6t/96lo//eoJ7/36Kg/+Cjof+IWVjnGwwMQwAAAAIAAAAAAAAAAAAAAAAAAAAARyQkL6Br - auzZk5P/25qb/+GnqP/ntLT/7cDA//LLy//209T/+NjY//fX1//00ND/8cbG//W9u//4vrz/46ak/7d0 - c/+vb27/s3Jy/7d2df+ucXD/pWpp/6Npaf+nbWz/sHVz/7p9fP/EhYT/yImI/8WIhv/DiIb/ypGP/9eg - n//hr63/57q5/+rCwP/rwsD/6bq4/+evrf/nq6n/6q6r/9qgnv9wRkbDBwAAHgAAAAAAAAAAAAAAAAAA - AAAAAAAASCQkLZ1nZuvYkpP/25uc/+Opqv/qtrf/7cHB//TOzv/52Nj/+tzc//na2v/xz9D/8MfH//fA - vv/6wb7/6a6r/8OBgP/DgoD/vX58/7h7ev+8fn3/woOC/8aHhv/HiYj/xoqJ/8aLif/Ijoz/zZST/9eg - nv/hrav/6Lm3/+zCwf/uyMf/78nH/+/Dwf/uvLr/7ba0/+60sf/vtLL/8ri1/7J+fflMKSltAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAQyEhI5JcXOPWj5D/3Juc/8qVlf+BZmb/bl5e/4l4eP/AqKj/8tPT//LO - zv+5p6b/w6qq//fBv//7wr//8LWy/86Ojf/Ojoz/0ZGP/9GSkP/OkY//zpOR/9GamP/VoJ//2qel/+Gv - rf/nt7X/6727/+3Dwf/wycf/8czL//LLyf/yxsT/8cC+//G7uf/yubf/87m3//S7uP/4vrv/1J6c/3JH - RrAdCgsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANRcXEYJNTcvPiIn/15aW/2VNTf85Ojr/Q0VF/0JF - RP9dXFz/n5GR/+S/v/+bh4f/hXp6/+25uP/7wr//9bu4/9qcmv/Zmpj/252b/96gnf/ipKH/5q+s/+u+ - vP/vycf/8srI/+3Hxv/wysj/9c7M//TNy//0ysj/9MbE//TBv//1vrz/9r26//e9u//4vrv/+L+8//vB - vv/hqqf/g1ZVzDwcHC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW4+Ppq/env/05OT/2ZX - V/9rbm7/fX9//3l6ev99f3//cHJy/5F9ff+ff3//XFhY/9eop//8wr//+L+8/+Wppv/ipaP/5qil/96i - pP/Kmaz/1qi1//LGxP/tyMf/qb3J/23E3P9kw9//vMTN//jDwP/3wb//+MC9//i/vf/5v73/+b+8//i/ - vP/3vrv/+L68/92mo/+IWlnRRSMjOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcv - L0mbX1/y15GS/6GAgP9XV1b/iYuL/4CBgf98fX3/cnR0/1dPT/++j4//km9w/9Sfnv/6wL3/+cC9/+6z - sP/ssK3/0Z+u/4OH1P9YffD/QGPs/7KYyv/Ct7z/Ytrz/3Ts//8s2f//cbvU//m+u//4v7z/+L67//e9 - uv/1vLn/9Lq3//O5tv/zuLX/0puZ/4RVVctGIyM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADIXFwdrPDySq2ts/diZmf/ApKT/sKur/4CBgP95enr/iYiI/49zdP/do6P/36Ch/96e - nv/zuLX/+sK///W7uP/1ubT/qZC//2qY+/9tnf//MGT6/56FxP/esK//nMbS/57n8/9+z+T/ybG3//a6 - t//zubb/8re0//C1s//utLH/7rKw/+qvrP++iIb9dklJtkMgISoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHIyMSazw8kZ5hYvXNjI3/2aSk/7OMjP+bd3f/sIKC/9KV - lv/cnJz/2peY/9aRkf/koqL/+sG+//nAvf/5v7z/4amw/6qZx/+aouP/qpvP/+mxtv/2urj/6rGv/+S6 - u//ptrX/466n/+Ovqf/ssK7/6q6s/+isqv/oq6n/2J2b/6JubfFoPT2NOxoaFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBoaCFowMFd7SEjAomZm9sWC - gv/XkZL/25SV/9iSk//Wj5D/1IyN/9KHiP/UiIj/8bOx//rCv//3vbv/9ru4//O3s//xuLX/7q6e/+ej - hf/npIn/7bCp/+Otp/+KsX3/ULdm/1WjWv+7oYz/5KWk/9uenP+4gH79glJRzVYuLlQgCAkGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAA8HBwQVy4uS3FBQaCPV1fjsG5v/cmAgf/ShYb/0YKD/85+f//LeXr/2I2M//e8uf/1vLn/7rOx/+2y - sP/lpJX/5qFY/+6xXP/djS3/35h9/86gl/9SwW7/Nd90/0WxXP+vlH//wYSE/49cW+VlOTmBQR4eHAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGk7OhqIWFd8oG5u8J5qav+eX2D/tmts/8Z0df/KdHX/yXJz/92T - k//3vLn/7LGu/+Snpf/dm5L/4Z1q/+61dP/fmmX/15WM/9eYlv/Bm43/r6uR/6uNgP+WYWDtbkBAnUwn - JzQVAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiFJSBnhC - QgpqNDQJWSUlB08dHQdfKisKfENDFJJWViinbGtRvYOCjtOcm8/pt7X157y6/7eOjfhxRUW7aTk5m4RK - StehWlr6uGdo/8Zwcf/dkpH/8bSx/+OnpP/YmZj/1ZWT/9ealP/Vl5X/0JCP/8eIhv+zdnb/lFtc6nA/ - QKRSKio/JQwNBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADTn6AB2qioDMuUlCHBhYU8voCAWcCBgXTEhoaLzZGQqdeensngrKvn47Sz/NOop/+yiIfyi2Bgs2k+ - PlZXKysPAAAAAUYlJRxcMTFYcj4+pYpMTeWmXF3+xnl5/9+Zl//dnJr/z46M/8KCgf+vc3L/ll9e831L - S8hlOTl/TigoMy0REQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABzQUIDnmprDriGhifHlpZMzp6eeNCgoZ7On5+2yJqaybuPj9WnfHzVj2RkunVJ - SYNbLy8/PRQUCgAAAAAAAAAAAAAAAAAAAAAAAAAAKRUVBU0pKSphNDRtd0BAsotNTd2ZW1vrkVlY4HtJ - Sb5lOTmCUysrQTsbGxEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCwsA2Y4OA5xQkImdkhIRHhKSll0R0dibUBAWWI2 - NkNUKCgoOhISDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhkZB0km - Jh5LJiYsRSEhITATFAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD/+H////8AAP/gH////wAA/8Af//// - AAD/gA////8AAP+AD////wAA/wAP////AAD/AA////8AAP4AB////wAA/gAH////AAD8AAf///8AAPwA - B////wAA/AAH////AAD8AAf///8AAPgAB////wAA+AAH//4HAAD4AAP/8AEAAPgAAf/AAQAA8AAA/wAA - AADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAEAAPAAAAAAAQAA8AAAAAADAADwAAAAAAcAAPAA - AAAADwAA+AAAAAAfAAD4AAAAAD8AAPwAAAAAfwAA/gAAAAD/AAD/gAAAA/8AAP/gAAAH/wAAgAAAAB// - AAAAAAAAf/8AAAAD4AP//wAAgB/8H///AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAYAAAAZAAAAGQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAARCQkYOh8fb0ooKK80HByiCQUFTAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAIhERFmA2Np2ITUz3lVNT/4dLS/5IKCi9AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAANjODiBllhY+61kZP+vY2P/pV5e/3xHRvEhEhJfAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAASSgoN41VVeS6bW3/xW9w/8dwcf+9bG3/klZW/jogIIEAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1RkWcs2xs/8dxcv/HcHH/x3Bx/8Zwcf+iYWH/SSkpmAAA - AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUC0tMZtgX+fGcnP/x3Bx/8dwcf/HcHH/x3Fy/61q - av9UMTGqAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxRER1tm9v/8hxcv/HcHH/x3Bx/8dw - cf/HcnP/tnRz/185OboAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAACIxXV7TEdHT/yHJz/8l1 - dv/Kd3j/ynd4/8p4eP/Bf37/bURDywAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNKysjo2Zm4Mt4 - ef/NfH3/z4GC/9GFhf/RhYb/0YWF/82Mi/9+UVHeCAICOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAACwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGc+ - Pkm1c3P30IGC/9OJiv/XkZL/2ZaW/9mWl//YlJX/2JmY/5hnZfMeEBBrAAAABwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA0FAgItHhAQWzAbG4IqFxeHDQcHWwAAABkAAAAAAAAAAAAA - AAAAAAAAek1MdMN/f//VjI3/2piZ/9+io//hqKn/4qmp/+Clpf/jpqT/wImH/04xMLwAAAA6AAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABEbDg5GRygokW5CQs+MVlbxnGJh/JdfXvxnPz7hHA8PbgAA - AAwAAAAAAAAAAAAAAACMW1qbz4qK/9qXl//gpqb/5rKz/+q6u//rvLz/6La2/+qxr//epKL/j1lZ+DUc - HLACAQFPAAAAHQAAAA8AAAAPAAAAEwAAACIbDg5MVDExnYZUU+SpbWz+uXl4/7x+fP/AgoD/xoeF/72A - f/9fOzu1AAAAHAAAAAAAAAAAAAAABJhkZK/VkZH/3Z+g/+axsf/twMD/8svL//LNzf/vxcX/8Lq4/+6z - sf+1dHP/j1VU+144N9g7IiKqMhwclDcfH5RGKSmiYTw7v4tZWOiydXT+woOC/8aKiP/Ol5X/2aWj/9ui - of/cnpz/2pyb/35TUrgAAAAVAAAAAAAAAAAAAAAFmmVkstaTk//hpaX/7Lm6//TLy//419f/+NnZ//TP - z//1wb//9Lq3/8aGhP+1dHP/s3Rz/6xwb/+pb27+rnNy/7Z7ev/BhIL/yY2L/8+WlP/apqT/5be2/+vB - v//rvrz/6bKw/+uvrf/Um5n/bUVEgAAAAAMAAAAAAAAAAAAAAAOTXV2q1ZGR/9CYmP+dfX7/o4yM/9e8 - vP/z0tL/zLOz/+u8u//5v7z/1peV/8uLif/Ki4r/yoyL/86Ukv/TnJv/2qSi/+Gtq//nuLb/7cPB//DJ - x//xxsT/8b+9//G6t//zubf/77az/6d1dM89Hx8lAAAAAAAAAAAAAAAAAAAAAIJOTojNiIn/jGlp/01O - Tv9UVlb/dnNz/7uhof+Pfn7/xJ+e//zCv//lqKb/3J2b/+Chnv/hpaT/7Ly5/+vHxv/MxMn/0MjN//LK - yf/1x8X/9sLA//a/vP/3vrv/+L+8//S7uP+5hoXhYTo5RwAAAAAAAAAAAAAAAAAAAAAAAAAAaTs7RrVz - dPKmfn7/cXJx/4SGhv97fX3/b2Zm/516ev+7kJD/+sG+//C2s//lqqr/rpbA/3aB2/+ql83/tMHK/2jc - 9P9OzOz/2r3B//q/vP/3vrv/9ry6//a8uf/ss7D/tYGA32c+Pk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAvEhIHg01Njbp9fvrCn5//nI+P/4R7ev+fgID/2Jyd/9ybnP/ytrT/+b+8/+ewtf+Mld3/ZI36/5eI - zv/Ttrn/sNLc/6/Czv/stLT/8re0/++0sf/tsq//2qCe/6Rxb8phODg+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABCIB8MeUZGbqRpata8gYH8x4mJ/9eTk//YkpP/04qL/+Cbmv/5wL3/9726/+Sw - t//Zrrn/56qY/+2smf/lr6n/nLWJ/4Gtdf/Pppn/3qGf/7yEg/KJWViYTyoqIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQh0dGXJAQGOXXl7NtnR1/8V7fP/MfH3/znt8/+il - o//0urj/7LCu/+Whg//rq13/35VX/9Kek/9yvXz/ZbNv/6iCdfqYY2O/aj4+TCUJCgcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACcamsBjFRVB4FERAh9PT0JjU1ND6VnZx+/hINF0JqZiNOjoty0iIf2hFBQw5lX - V8+wY2P4xXR0/+aioP/oq6j/2pqT/92fif/Vlor/yYqJ/7N8efiVZmPGdERFYkEfHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALiFhgXFkJEdx5CQSMqSknbNlZWbz5uaws2cnOXBlJPnqH18r4dc - XFFULy8OSCUlFm07O0+FSUmeoV1d3sF9fPrGhoX/snZ295xkZNiFUlKbbD4+T0UdHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc0JDA5FgYRKdbm46onR0Zp9ycnuWampzhFlZVmY6 - OikvDAwHAAAAAAAAAAAAAAAAAAAAAB0ODgRULCwhbjo7UXhERGVrPDxHTCYmGxAAAQMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//////////////////////D////gf///wH///4A///+AP///AD///wA///8AP//+AD - ///gA//D4AH+AeAA+ADgAAAAwAAAAMAAAADAAAAB4AAAA+AAAAfgAAAP8AAAH/wAAD8AAAD/AAAD/wB4 - D//H////////////////////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABMAAAAtAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgIO1cwMM1qOjrsHhAQmwAA - ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAATCgogfUhI6ahgYP6lXV3+f0hI9wIBAT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGBgFPLy6kuW1t/sZv - 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 - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/NES/QuickNesConfig.Designer.cs b/BizHawk.Client.EmuHawk/config/NES/QuickNesConfig.Designer.cs index c1a541a28e..e159d235a0 100644 --- a/BizHawk.Client.EmuHawk/config/NES/QuickNesConfig.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/NES/QuickNesConfig.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(QuickNesConfig)); this.propertyGrid1 = new System.Windows.Forms.PropertyGrid(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.pictureBox1 = new System.Windows.Forms.PictureBox(); @@ -141,7 +140,7 @@ this.Controls.Add(this.buttonOK); this.Controls.Add(this.groupBox1); this.Controls.Add(this.propertyGrid1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.QuickNes_MultiSize; this.MinimumSize = new System.Drawing.Size(390, 285); this.Name = "QuickNesConfig"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; diff --git a/BizHawk.Client.EmuHawk/config/NES/QuickNesConfig.resx b/BizHawk.Client.EmuHawk/config/NES/QuickNesConfig.resx index 6951226048..29dcb1b3a3 100644 --- a/BizHawk.Client.EmuHawk/config/NES/QuickNesConfig.resx +++ b/BizHawk.Client.EmuHawk/config/NES/QuickNesConfig.resx @@ -117,161 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - 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 - l/8wVp7/Mlac/zRXm/82WJr/O12e/0JmqP9Ga7D/Rm21/0Jqtf87Y6//N12o/zRaoP81WJzvOVydzz5e - no8/X58wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK1OfQClV - ob8rVaD/LVaf/zJXnv85W5z/Q2Kf/09tqP9Uc6//VHW0/1Bztv9KbrX/Qmix/ztgqf80WJ//LlGS/yxN - jM8yVJNwP1+fMD9fnxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAvX7QwMGCyjy1bqM8qU5vvL1OX/zpbmv9HZaH/VXKt/1l4s/9UdbT/TG+y/0Nnrv88YqnvOFylzzJV - mr8qTIq/J0eDjyVKhDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAC9frxAvX7QwKE+YcCJGiM8oSov/NVaW/0Bgn/9IaKj/SWqr/0Flqf85X6b/Mlih/y1U - ns8yVp9wM1ebQCtLi0AlSoQwH09/EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfP39AHT19vyVFhf8zU5T/PF2f/0Jjpf9AY6f/OF2k/zBX - oP8pUZr/JU2YvydPl0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/wP///8D///8AD///AA///AAA//wAAP/wAAAD8AAAA/AAAADwAAAA8AAAAPAAAAD8AAAD/AA - AA/wAAA/8AAAP/DAP//wwD//8MA///DAP//wAA//8AAP//wAAP/8AAD//AAA//wAAP/8AAD//AAA//wA - A//8AAP//wA///8AP/8oAAAAIAAAAEAAAAABAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wIC - Bf8CBAX/BAUG/wMFCf8FCA7/BgoT/wkNEv8IDhj/DRES/wsQGv8QExn/FB0c/xYiE/8YIRT/FiUd/xsm - Hv8KEyX/ChQq/w4ZKv8UHCP/EBss/w4ZMv8SHTL/Ex84/xcgI/8aIyf/Gioj/xklKv8aKS7/FiQ0/xkl - Mv8cLDL/EyI6/xslOf8WKT//HCw7/x0zNf8bMDv/Ii4v/ykzJf8uOiL/JjMt/yg0Kv8iKjP/ISo7/yQ1 - Nf8sOTf/IjA6/yg1Pv8gPDj/Kzw8/zBDKP8oQjP/Kkk1/zZKM/8zUzf/OVM2/xQlQ/8YJUL/FSlF/xot - Q/8TJUj/FSlM/xorS/8cMEL/HDNJ/xUrU/8aLlL/FCta/xYtWf8YL1n/HDNU/xoyW/8hL0T/IjRF/yg5 - Q/8hNkj/IzpL/ys/Sf8wPkr/ITRU/yQ8Uv8rOlb/IDVa/yM6Wv8oOlv/GTRh/x04Yf8XNGr/GDRq/xk3 - bf8ePHL/ITpj/yk9Zf8jPW3/KT5p/yA+dP8tQEX/K0tC/ypBSP8wRkj/NVdB/zpTR/87XEX/PVpI/y5D - Uv8sQ1z/NUNU/zNBWf8wTV7/OUxe/zlSV/87WVn/P2BY/ytGY/8vSWf/JEFs/ypCbv8zS2L/NU1t/zxX - Zv85U2z/JkFz/ytEc/8iQnz/I0R9/ydGfv8pR33/Kkh8/zBKev85VXX/O1p0/ztZff9AX1r/QFRr/0Jf - av9BX3P/RF54/0Vlbf9DZHD/Q2F8/0doef8fQ4L/IkSF/ydIhP8qSYH/KEmG/y1Mh/8jRor/JUmK/ylK - if8qTIn/LE2J/yhMjf8sTo3/LVCO/zVQh/8zVov/OFSM/zVYjf87X4j/J0yQ/ylOkv8sTpD/KU+V/ydP - mP8rUJH/LVGR/y5Ukv8pUJT/LlOU/yhRmv8sUpn/LlSa/ylSnP8sU5z/LVWc/zNUkv83VpL/MFOU/zJU - lf81Vpb/NVqV/zpYlP8xVZj/NVea/zBXnP83WZv/NlyY/zFYn/80Wpz/OVqb/zxcmf84W5z/O1yd/z1e - nv8+Y4v/PWKS/zxjnf8sVqH/LVmn/y1aqP8tXKv/L16u/zBXpv8yWaH/NVqh/zVcpf85XqH/OV6l/zJb - rf84Xqj/MF+x/zResP8/YaL/OWGn/zxgpv83YKz/OWCp/zxiqP87Y67/PGOt/z1lrv8wYLH/N2Gw/0Rj - hP9FaIT/SGuD/0NljP9Gaor/SWuL/0FmlP9FaZP/SWyQ/0FhoP9EZKH/Q2Sl/0lopv9CZaj/RWer/0Jm - rf9Fa6//SGio/05tqf9Ka6z/Tm6s/1Fxr/9BZ7D/QWiy/0Rrsv9HbLP/SGyw/0xvs/9OcLD/AAAA/wAA - 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 - Lv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZNGH/FShK/w8PAP8rQDb/LUlN/xEo - Q/8eLjH/FBwa/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABctV/8aIwD/CBkH/yA7 - bP8kPGr/HjRd/zJHb/8nOFr/CRIn/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARJU7/GjFK/y5Q - jf81Vpb/MVWZ/y5Vn/85Yq//Q2as/zpWjv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGDdw/y9X - oP8vVJz/KUyQ/z9lqf9GcLr/OWGv/zhepf8+X5//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBg - sv8uVp//QmCb/2SAt/9bfLv/R2uz/zdbo/8nSIT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAHj5+/zpbnP9FZqn/NFqj/yZOmP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8f8AAOB/ - AADAHwAAgAMAAIABAACAAQAAwAMAAMAHAADIfwAAyH8AAMA/AADgDwAA4A8AAOAPAADgHwAA8H8AACgA - AAAQAAAAIAAAAAEACAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AQEC/wICAv8BAgX/BQUH/w8P - AP8DBQr/CBkH/xQcGv8aIwD/IyAA/wkSJ/8NGC//ERsr/xMcK/8OHT//Hi4x/xMiOv8SIT3/EyI+/xUh - PP8gLC7/JS8s/ypTI/8rQDb/PWA5/0FZPf8RKEP/Hi5C/xovR/8TJkv/ESVO/xUoSv8UKE3/GjFK/xMr - Vv8WLFT/Fy1X/xgtUP8eNF3/IDVN/yo9S/80Pkr/JTpT/yc4Wv8lPl//LTla/xk0Yf8bNmj/GDdw/x4+ - fv8kPGr/IDts/yI7c/8tSU3/NEdU/zZMYP8yR2//Mk9t/zZTbv8nSH3/RWBu/0lqaP9KY3T/TGN6/ydI - hP8uTID/LlCN/zpahP8xUYr/OlaO/ylMkP8lTZn/Jk6Y/ytQlf8sU5n/KFGf/y5Vn/8vVJz/Llaf/zVW - lv8zWJX/MVWZ/zBXnf86W5z/Pl+f/yxVov8vV6D/NFqj/zdbo/84XqX/MVqu/z9lqf85Ya//OWKv/zBg - sv87ZrT/S26D/09zj/9QdIb/UXeJ/0Jgm/9McZv/VHmd/0Vmqf9DZqz/R2uz/0Zwuv9bfLv/ZIC3//// - //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/bm5ubgAAAG5ubm5ubm5ubm5u - biFFQhIAAW5ubm5ubm5ubktMVko1FAAGAG5ubm5ublNIPGJnQC4ABAAAAABubm5gUWRhRD8qAAIAAAAA - AG5uW2ZjOy0rFgABAAAAAABubm46Pj04HQ0DAAAAAABubm5uDxcZGiMTDgAAAABubm5ubiQRbgocHgxu - bm5ubm5ubm4wJm43KSgVbm5ubm5ubm5uLyAFGDYbEAhubm5ubm5ubm4lCQc0Myc5LAtubm5ubm5uHyJD - UFJNXmlGbm5ubm5ubjFXTkdca11aVW5ubm5ubm5fT2VtbGpZQW5ubm5ubm5ubjJUaFhJbm5ubm5ubvH/ - AADgfwAAwB8AAIADAACAAQAAgAEAAMADAADABwAAyH8AAMh/AADAPwAA4A8AAOAPAADgDwAA4B8AAPB/ - AAA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/PCE/PCEControllerConfig.Designer.cs b/BizHawk.Client.EmuHawk/config/PCE/PCEControllerConfig.Designer.cs index c78a658baa..e84cdd05b2 100644 --- a/BizHawk.Client.EmuHawk/config/PCE/PCEControllerConfig.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/PCE/PCEControllerConfig.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PCEControllerConfig)); this.CancelBtn = new System.Windows.Forms.Button(); this.OkBtn = new System.Windows.Forms.Button(); this.ControllerPropertyGrid = new System.Windows.Forms.PropertyGrid(); @@ -77,7 +76,7 @@ this.Controls.Add(this.CancelBtn); this.Controls.Add(this.OkBtn); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController_MultiSize; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "PCEControllerConfig"; diff --git a/BizHawk.Client.EmuHawk/config/PCE/PCEControllerConfig.resx b/BizHawk.Client.EmuHawk/config/PCE/PCEControllerConfig.resx index 91f294b89b..29dcb1b3a3 100644 --- a/BizHawk.Client.EmuHawk/config/PCE/PCEControllerConfig.resx +++ b/BizHawk.Client.EmuHawk/config/PCE/PCEControllerConfig.resx @@ -117,508 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAwAMDAQAAAABABoBgAAxgAAACAgEAAAAAQA6AIAAC4HAAAYGBAAAAAEAOgBAAAWCgAAEBAQAAAA - BAAoAQAA/gsAADAwAAAAAAgAqA4AACYNAAAgIAAAAAAIAKgIAADOGwAAGBgAAAAACADIBgAAdiQAABAQ - AAAAAAgAaAUAAD4rAAAwMAAAAAAgAKglAACmMAAAICAAAAAAIACoEAAATlYAABgYAAAAACAAiAkAAPZm - AAAQEAAAAAAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAQAAAAEAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAHR3AAAAAAAAAAAAAAAAAAAAAAAAAAAAdHdEcAAAAAAAAAAAAAAAAA - AAAAAAAAAHd0d3QAAAAAAAAAAAAAAAAAAAAAAAAAAEd8d3UAAAAAAAAAAAAAAAAAAAAAAAAAB3yHfHZw - AAAAAAAAAAAAAAAAAAAAAAAAd3fIyHVwAAAAAAAAAAAAAAAAAAAAAAAAfHh3jIxwAAAAAAAAAAAAAAAA - AAAAAAAHd8jIyHdgAAAAAAAAAAAAAAAAAAAAAAAHd4yHfIdAAAAAAAAAAAAAAAAAAAAAAAAHyMjIyMhQ - AAAAAAAAAAAAAAAAAAAAAAB3d3eMh4dgAAAAAAAAAAAAAAAAAAAAAAB8jIyIfIdQAAAAAAAAAAAAAAAA - AAAAAAB3h4jIiMh3AAAAAAAAAAAAAAAAAAAAAAB8jIeHeIjHAAAAAAAAAAAAAAAAAAAAAAeIiHh4eMiE - AAAAAAAAAAAAB0dHcAAAAAd8h4eIiIiHcAAAAAAAAAB0d3d3RwAAAAeIeIiIiIh3RwAAAAAAAHR3d8h3 - dAAAAAfIh4iIiHiIx0cAAAAAdHh3eIeHhwAAAAeHiIiIiIiId3R3dHR0eHd4h4eHhAAAAAd4eIiIiIiH - x3d2d3eId4iIiIiIhwAAAAd4eIiI+IiIh3d3eHh3iIiIiIeHwAAAAAfIjHeIiIiIyIeHh4iIiIiIiIiI - cAAAAAeIQ0R3h3iIiMiIiIiIiIiIiIiEAAAAAAfIR3d3d0iIiIh4iIeIiIiIiHhAAAAAAAB4d3d3SHiI - h4fTiIi3iIiIeIwAAAAAAAB3h4d3eIeIiHiJiIuIiIh4jHAAAAAAAAAHyId3h3h4iIh4iIiIiIiHeAAA - AAAAAAAAB8iMiMjIiIiIh4h3aMjHAAAAAAAAAAAAAAdYyIeIiIiMjId6d4eAAAAAAAAAAAAAAAAHdsjH - eIeH6MiId3AAAAAAAAAAAAAAAIiIh4V8jIh4eIfHcAAAAAAAAAAAAACIiIh3AAAHd3h3fHcAAAAAAAAA - AAAAAAiIjHgAAAAAAHx8eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAA - AAd0dAAAAAAAAAAAAAAAAAB3x3cAAAAAAAAAAAAAAAAAd3fHcAAAAAAAAAAAAAAAB3yMh3AAAAAAAAAA - AAAAAAfIeMdwAAAAAAAAAAAAAAAHjIyHQAAAAAAAAAAAAAAAfId4yHAAAAAAAAAAAAAAAHjIyIdQAAAA - AAAAAAAAAAB3iId4YAAAAAAAAAdwAAAAjIiIiIUAAAAAAHd3dAAAB4iIiHh8cAAAAHd3x4dwAAd4iIiI - h3Z3d3R3yIh4cAAHh4iIiIfHd3d4iIiIh3AAB3jHiIiIiHeHiIiIiIwAAAh3dXh4iMiIiIiIiIhwAAAA - yGd0d4iIeIi4iIiMAAAAAIeHd4iIh32IiIiIcAAAAAAAd4jIyIiIiHeHyAAAAAAAAAB3h4iIh8h3dwAA - AAAAAAAIh8fIh4eIaAAAAAAAAACIiHAAB8jIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////////////////////n////g////wP///8B///+Af///gH///4B///8Af///AH///wB//n8AP/A+AB - /AHgAAAB4AAAAeAAAAPgAAAH8AAAD/AAAB/8AAA//wAA//4AA//weA////////////////////////// - //8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRwAAAAAAAAAAAAB3dAAAAAAAAAAAAA - d8dwAAAAAAAAAAAAfId3AAAAAAAAAAAHeMjHAAAAAAAAAAAHyHh3AAAAAAAAAAAHh3eEAAAAAAAAAAAI - yIiHAAAAAHd2cAAIiIiIQAAAd3d4UACHiIiId3d3eHiIcACHh4iIyHeHiIiIcAAIR3d4iIiIiIiMAAAH - d3eIh3iIiIhwAAAAeMh4iIiHiMAAAAAAAHfIiMh4aAAAAAAAiIgHyIfIAAAAAAAIgAAAAIAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD8f/8A+H//APB/ - /wDwP/8A4D//AOA//wDgP/8A4D/BAOAfAQDAAAEAwAABAOAAAwDgAAcA8AAfAPwAPwDwgP8A5/f/AP// - /wD///8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAd1AAAAAAAAB8cAAAAAAAB4eAAAAAAAAHyMgAAAAAAAiIhwAAAHcACI - iHcAd3hwAIz4jIeIiIAAd3eIiIiIAACHeIiIiHAAAACMeMh4AAAAiAAIgAAAAAAAAAAAAAAAAAAAAAAA - AAD//wAA//8AAP//AADj/wAA4/8AAMP/AADB/wAAwfkAAMDBAADAAQAAwAMAAMAHAADwDwAAzn8AAP// - AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAA9OzsAZD8/AGg8 - PABtPj4AQkNDAEZIRwBWQkIAV0REAF5AQABbRkYAVklJAFxPTwBTU1MAXFJSAF5ZWQBkQEAAYUREAGZF - RQBqQkEAYEtLAGNPTwBwQUEAfUZGAHJKSgB2SUkAfU9PAGBRUQBgVFQAZlZWAGZYWABqWVkAclZWAHpU - VAB9W1oAbmJiAGtoaABtaWkAcWdnAHdnZwB8Y2MAe2pqAHJxcQB+dHQAd3l5AHl6egCGT08AiU9PAIFP - UACGU1MAjVFRAIlWVgCMV1cAg1xbAIxaWQCQUlIAlVJSAJFXVgCXVVUAmVVVAJZaWQCSXV0AlV9eAJpZ - WgCeW1sAml5eAKBZWgCgXFwAql9fAIRmZQCIZWQAhWtrAI5ragCTYmEAnGBhAJ9kYwCaZmYAk25uAJ1s - awCFdHQAiXd3AIt+fgCWd3cAmHR0AJV5eQCbfHwAo2JhAKZhYQChZWUApGVkAKplZACsZGQAqmhnAKZr - agCnbGsAqmloAKlubQCsbW0AtGZnALhsbACxb3AAv29wAKVxcACrc3IAr35+ALN0cwC5c3MAvXBxALR4 - dgC1fHsAunt6AMNtbgDGb3AAw3FyAMZwcQDGdXUAyHR1AMp3eADBeXkAxnt7AMB/fgDLensANLBSAEWf - TgBBtFwAPMdnADHkdgDciiIAvoF/AISrdwDln0sA35lhAN2XfADgmmEA8LdlAO61cAArWPIALWT+AEh5 - +gDOf4AAfoCAAHiA1ABZv9wAZrnUAGK+2ABxnv4Ad6P/ADPX/QBw0OcAW+D7AIKEgwCPgoIAjI2NAJuC - ggCUiIgAmYqKAJGSkgCjhIQAqoKCAKKLiwC+hIMAsoqKALaSgQCum5sAsZubALqqlQCdgr4Ar6ytALGh - oAC6pKQAwoSDAMyBggDGiIYAyYiHAMWMigDMjIoA0ISFANKHiADUjIwA2Y6NAMCUjQDIk44A0JCPANaP - kADHlZQAzpSSAMScmwDUkpIA2ZSVANWYlgDampcA2ZeYANWcnADam5sA4p2cAMChjwDeoJ4A5aCFAOaj - jQDlpJoA2p6hAMOkowDOoaEAy62tANegoADdoqEA2aGpANGsrwDdq6kAwbG4ANGysQDdtLQA2ri3AOGk - owDjqKYA66ylAOGnqADjq6oA6a2rAOOwrwDssK4A5K+wAOaztADttLIA57i2AO24tgDmurgA6rq6APC1 - swDyuLYA9Ly5APi+uwD1wL0A+cC9AKKMwACkk8QAqprMALSayACptsEAlaDkAOy/wACRxtQAgOv9AJnr - 9wDEwsoA5sbGAOzCwgDuyMcA7MzMAPPEwgDxy8oA9dPTAPja2gAAAAAAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAADLytDi9tOemQAAAAAAUy9EecLEsa1uPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj11Mme - VakAAAAAAAAAAAAATS84M0akAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE - AAAAAAAAAAAAAAABAAAAAQAAAAAAAFFNTQBRUlIAU1RUAGJHRwBiT08Aa0lIAGJTUwBrVlYAYllZAGZc - XABpWloAb1xbAHNTUwB7V1YAc1hXAHFbWwBkZWUAaWFhAG5kZABpamkAcGFhAHlubgB2cHAAf3V1AH55 - eQB8fX0AgUpKAI1PTwCLWFcAhlhYAI9ZWQCKXFsAm1ZWAJJZWQCWWVgAmlpbAJtcWwCiXFwAl2BfAIBg - YACAZ2YAgG9vAI9oaACWZWQAmGBhAJ5kZACcaWoAmm9vAIV0dACNcHAAiXZ2AIB8fACac3IAm3V0AJ51 - dQCZfHwAnHx8AKNmZgCnZmYAqmJiAK5jYwCvb24AtWVmALBtbgC5bW0AvmxtAKx+fQCxcnIAtHBwALZz - dACydXQAtnd2ALlwcAC5dnYAt3p5ALh5eAC8fHsAun18ALx+fQDGb3AAxnBxAMdzdADAd3YAyHJzAMlz - dADJdXYAynd4AMd/fwDMe3wAzXx9AHunbwBhvHIAYsN4ANuLOwC2hn4A4Zt5APC3ZABte9sAX47+AHWM - 5QAl0foAY+P8AIeDgwCFhoYAioSEAJOIiACWi4sAmpKRAKGCgQCmhYUAqYGBAKuDhACniooApYyMAKiO - jQCyhYMAvoWEALeNjQCrj5AAr5eXALSVlAC9lJMAmbCEAK6RugDBgYAAwoSCAMWDhADChoQAxYeFAM6A - gQDFiIYAxoqIAMqIiQDMi4oAy4yKAMiPjQDPj44A0ISFANKJigDUi4wA04+NANWNjgDKkY8A0JCOANud - iQDWj5AAzJSTAM2XlgDGm5oA1pGSANOUkgDVl5EA1pOUANiVlgDYmJUA2ZeYANKenADbmpsA3pmYANuc - mgDbn5wA1aacAN6gngDqqZoA3Z+gAMyjowDCra0AxqysAMqpqQDboaAA3qKiAN6logDbp6UA3aWkANer - qgDWsbMA0rW0ANe0tADfs7IA4aSiAOGlpQDkp6UA46imAOWopgDsraIA6qimAOGoqADhrqwA6a2rAOqv - rADpsK4A7LGuAOGzswDlsbEA7bKxAO+1sgDotrYA5rm3AO+4twDot7sA6bq5AOu9uwDrv70A8bazAPG2 - tADxuLUA9Lm2APC9uwD2vboA9L+9APi+uwD4v7wA8sC+APXAvgD5wL0AkILJAKqXzACsu8cAqr/LALLV - 3QDawMIA48XFAOvDwQDswMAA7cTDAO/ExQDgxsgA8cbEAPTGxADwyskA9MvJAPLNzQD21dYA+NjZAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAMEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHCEcBQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAayU9PSYbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQlBSQiJpAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAM0pSUlJQPRcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnUlJSUlJGFQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAFJSUlJSUkoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzUlJSWVJZfxAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5XWYqKioqGDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoqMkpqa - mqAsAAAAAAAAAAAAAAAAAABoNAAAAAAAAACMjJyuvLy2toYHAAAAAAAAAAAAABcOIDouBgAAAAAAc4yc - tsHKysPAriIKAAAAAAAAABYgRk1LTX+DEAAAAABukqXB4ejo4dHPQCIEChcXEwggTXV/k66unKMpAAAA - AG6Srsro6ero0dN/Rk1NRk2Dg4STrsbh4cHAt2sAAAAAbpKuOXPe6ajW15KGg4OGk528yuHo5eHPz882 - AAAAAAB4jCkDAxSoMabXt5yjt8ro3ePo5dbT09HTdAAAAAAAAABGcBFoGgFwdtfDwHxi2dpmZcrX09HP - z0MAAAAAAAAAAHh/qWwaOa6cz9PNZGPYsdzbzc3DwLk2AAAAAAAAAAAAAAAvhpKakoyg19HNyKS5wHtb - orZ/cwAAAAAAAAAAAAAAAAAANkaKWVm5zb1gYV6cXVxfNgAAAAAAAAAAAAAAAAAAALGvlTIuP1K5tqCR - l4xfLwAAAAAAAAAAAAAAAAAAsbPBenkAAAAAcCVYjE0scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////+f///+D////A////wH - ///4B///+Af///gH///wB///8Af///AH/+fwA/8D4AH8AeAAAAHgAAAB4AAAA+AAAAfwAAAP8AAAH/wA - AD//AAD//gAD//B4D////////////////////////////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAAWlJSAHBJSQB1SEgAe1dXAHdYWAB5WlkAel1dAGBiYgB1bGwAfWtrAHh2 - dgB9fn4Ag01NAIRXVwCIV1cAhV9eAItbWgCgX14ApV1dAJhgXwCNYGAAnWtqAJhtbQCCdnYAh3x8AI15 - eACeensAqGBgAKhoZwCga2oArGpqALNqagCzb28AtG1tALltbQCxb3AApnVzAKlzcwCqdHMApnp6AKd+ - fgCpensAq3x7ALZ3dgC8dHQAvH59AMZvcADGcHEAxXN0AMhycwDJdncAynh5AMx5egDNfn8Ajo1wAOek - VgDGgH8A4p53AEZ2+gB8u4AAd8PaAIuEhACOh4cAjo6OAJ+DggCejo4Ao4SEAKSIiACsi4sAqo2MAK6P - jgC+gYAAvoaGAL+KiACskJAAtJeXALWenQC5np4At6iOAKmyjgC9nroAwYSDAMaGhADOhoYAxomHAMiK - iQDJjYwA0oeIANOOjwDUjY0A2ZiPANaPkADGkZEAx5eXAMySkADGnZwA1ZOSANeTlADWl5YA2JSVANGZ - mADan50A3J6dAOCcmwDVoJ8A7K2fAMOtrQDXo6IA3aCgAN+kpADVq6oA3ay3AMu0tADPtrYA3L+/AOCi - oQDhpqUA5KelAOinpgDlq6gA46usAOOvrQDqrqwA7LGuAOayswDjtrQA5re1AOqysQDts7EA57y6AO+8 - ugDrvL0A8LOwAPC1sgDwtrQA87q3APS6twD2vboA8b69APi/vAD2wb4A+cC9AJmTzwDHqMMAu8PMAIHf - 8QDByNAA7cLCAO3FwwDvxsQA5cjIAOzOzgDwxcQA9cbEAPPP0AD10tIAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - BQMJAAAAAAAAAAAAAAAAAAAAAAAAAAAPHBMNAAAAAAAAAAAAAAAAAAAAAAAAABojLy8TAAAAAAAAAAAA - AAAAAAAAAAAAAB0wMDAiPgAAAAAAAAAAAAAAAAAAAAAAQjAwMDAtGAAAAAAAAAAAAAAAAAAAAAAAFzIy - NTU5CgAAAAAAAAAAAAAAAAAAAAAAIjZYWFxcBwAAAAAAAAAAAAAAAAAAAAAANlxtdW11JQAAAAAAAAAA - PgcRDgkAAAAAXG1/lISAZgMAAAAAABkVLC5SVhcAAABNY3WWnJuLfB8UBAcQHkhWaX91dSsAAABNY2BM - mJeCiVJSVl9laX+WloSJgEIAAAAAXAEIC0tGjnR0dJaRk5qNjIyJQwAAAAAAJkNADBtdjIaPO1GSPYuJ - hnVEAAAAAAAAAClISWRcd4xwkGp8UE90VwAAAAAAAAAAAAAAKSQ1NYZ7OjhbPDdGAAAAAAAAAAAAAHNv - YGsAKyJoXFYmRwAAAAAAAAAAAAAAcnIAAAAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// - /wD///8A////APx//wD4f/8A8H//APA//wDgP/8A4D//AOA//wDgP8EA4B8BAMAAAQDAAAEA4AADAOAA - BwDwAB8A/AA/APCA/wDn9/8A////AP///wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAABjZGQAdmRjAHtpaQB/eHgAgU9PAKBaWgCFbm0AlWtqAKptbgCwZ2cAsGhoAKxw - cACteHkAvnJyAMZvcADGcHEAy3l5AMx9fgCFmXQAwIB/ANeUfQDhoX8AlIqJAJWMjACYiIgAoIaGAK2K - igCxh4cAvoGAALKKigC4iYgAuJWVAL2cnACss50AuqKhAL+mpgDLgoIAxImHAMeNjADLkI8AxpWTANCS - kQDYlZUA1J6dANqZmgDdnp4A1J+oAMaiogDOr68AzLKyANi5uADhpaIA4qypAOWtqADrrqsA4bKwAOay - sgDtuLYA57++AOy4uADxtLIA8be0APa9ugDswL4A9sG+ALCcxwC5ncIA06zBALnH0QC2ytQA7sPDAPLS - 0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAZBgUAAAAAAAAAAAAAAAAACw8KAAAAAAAAAAAAAAAAGhAQDgAAAAAAAAAAAAAAAAkRESUYAAAA - AAAAAAAAAAAlKy4uBwAAAAAAAAcDAAAAKzlHPCYCAAAYCB0oKgAAAC0wSDs0FB0nLDlAOiwAAAANAQQb - Pi9DRkVBPzUAAAAAJB4cKz5EQjMiNSkAAAAAAAAAHwwRNxYVEyQAAAAAAAAxMgAAACEgAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA4/8AAOP/AADD/wAAwf8AAMH5 - AADAwQAAwAEAAMADAADABwAA8A8AAM5/AAD//wAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAkAAAAJAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAUAAAAOAEBAVUAAABUAAAANQAAABAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkFBSUvGRl5TCkpwlYuLtxDJCTQFw0NmQAA - AEkAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAwMKE8rK6V6RET2klJR/5ZS - U/+OT0//ZDc38B0QEJoAAAAyAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDAwYVzAwoopP - T/ygXVz/oFtb/55ZWf+bWFf/k1NT/1UvL9wGAwNcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AARNKipxhk5O+adkY/+uZWX/tWdo/7VmZ/+qYWH/nltb/3hERPcfERGCAAAAFgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADEZGS1zQ0LXqGdm/7ptbf/Fb3D/x3Bx/8hwcf/BbW7/q2Vl/4hPT/82HR2gAAAAIAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAB1gxMYyYXl3/vXFx/8Zwcf/HcHH/x3Bx/8dwcf/HcHH/uG1t/5NY - V/9EJia2AAAAKQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPB8fNH1MS+K4cnH/x3Fy/8dwcf/HcHH/x3Bx/8dw - cf/HcHH/wHBx/51gX/9PLCzGAAAAMwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXjU1h6NnZv/Fc3T/x3Bx/8dw - cf/HcHH/x3Bx/8dwcf/HcHH/w3Jz/6ZoZ/9ZMzPTAQAAPQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyFxccektK0b12 - dv/HcHH/x3Bx/8dwcf/HcHH/x3Bx/8dwcf/HcHH/xXR0/69wb/9jOjneBwMDSQAAAAUAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABNKSlNlmBf9sh3d//HcHH/x3Bx/8dwcf/HcHH/x3Bx/8dwcf/HcHH/xnd3/7Z4d/9sQUDnDgcHVQAA - AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABkOjqKsXFw/8lyc//HcXL/yHJz/8l0df/JdXb/yXV2/8l1dv/JdHX/ynt7/7+B - f/94SknvFgsLZQAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAACILCxB7TUzDwXd3/8lyc//KdXb/y3h5/8x7fP/NfX7/zX5+/819 - fv/NfH3/zoOC/8iJiP+GVVX3Hg8QegAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEMiIi+SXl3oynp7/8t4ef/NfX7/z4GC/9GE - hf/Sh4j/04iJ/9KIiP/Rhof/04uK/8+RkP+XY2L9KxcXlwAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABwAA - AA0AAAAPAAAACwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFUvL1enbW37zn5+/85/ - gP/Rhob/1IuM/9aPkP/XkpP/2JOU/9iTlP/XkZH/15OT/9eZl/+rdHP/QSUlvAAAADwAAAAFAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACQAA - ABgAAAAvAgEBSwcDA2EFAgJoAAAAWAAAADYAAAARAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGU8 - O4W5eXn/0IKD/9KIif/Wj5D/2ZWW/9ubm//dnp//3qCg/92foP/cnZ3/3Jyc/9+in//CiYf/Zj8/4wYC - AnAAAAAbAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA - AA4AAAAnCQQEUCISEoQ+IiKzVzEx1mU6OuZiOTnmRigo0hgNDZsAAABMAAAAEAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAABnVJSK/HhIP/04eI/9aQkf/amJn/3qCh/+Gmp//jq6v/5Kyt/+OsrP/iqan/4aal/+ap - p//Umpj/nmxr/C8ZGboAAABXAAAAGAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAIAAAAOAQAALRkNDWY+IiKpZDo63YZRUfigZGP/sHBv/7V0c/+xcnH/oWZm/2k+PvEfEBCcAAAAMQAA - AAMAAAAAAAAAAAAAAAAAAAAALhAQFIZXVs/RjIz/1Y2O/9qYmP/eoaL/46qr/+aysv/ot7f/6rm5/+m4 - uf/otbX/5q+v/+uvrf/jqab/wYeF/28/P/QhEhKvAAAAXwAAACgAAAANAAAABQAAAAMAAAACAAAAAwAA - AAUAAAAKAAAAFQAAADAdDg9oSSkptHZHRu2dYmL+t3Z1/758e/+6enn/tnh3/7d5eP+8fn3/w4SD/7Z6 - ef9eODfbBgICTgAAAAgAAAAAAAAAAAAAAAAAAAAAPhwcJJVjYuPXkZH/2JOU/92fn//iqqr/57O0/+u8 - vP/uwsL/78XG/+/Exf/twMD/67i4/+60sv/wtrP/zZKQ/5taWv9xQED2MRsaxAgEBIcAAABaAAAAQQAA - ADcAAAA2AAAAOwAAAEUEAgJZHA4OfUcnJ7l5SkntqGxr/8CAfv/DgoH/vH59/7p+ff/DiIb/zZGP/9GT - kf/UlJP/1peV/9eZl/+GVlbuGQsLVwAAAAcAAAAAAAAAAAAAAAAAAAAARiIiLZ9rauvZk5P/2peY/+Ck - pP/lsLD/6ru7/+/Fxf/yzMz/9NDQ//PPz//xycr/7sDA//K5tv/1u7j/36Kg/6dmZf+mZWX/j1ZW/WM6 - OutDJSXQNBwcvDAaGrQ0HBy1PiIivUwsLMtkPDzfh1VU9a1xcP/EhIP/xIWE/7+Cgf/Ch4b/zZST/9mk - ov/grq3/4a6t/96lo//eoJ7/36Kg/+Cjof+IWVjnGwwMQwAAAAIAAAAAAAAAAAAAAAAAAAAARyQkL6Br - auzZk5P/25qb/+GnqP/ntLT/7cDA//LLy//209T/+NjY//fX1//00ND/8cbG//W9u//4vrz/46ak/7d0 - c/+vb27/s3Jy/7d2df+ucXD/pWpp/6Npaf+nbWz/sHVz/7p9fP/EhYT/yImI/8WIhv/DiIb/ypGP/9eg - n//hr63/57q5/+rCwP/rwsD/6bq4/+evrf/nq6n/6q6r/9qgnv9wRkbDBwAAHgAAAAAAAAAAAAAAAAAA - AAAAAAAASCQkLZ1nZuvYkpP/25uc/+Opqv/qtrf/7cHB//TOzv/52Nj/+tzc//na2v/xz9D/8MfH//fA - vv/6wb7/6a6r/8OBgP/DgoD/vX58/7h7ev+8fn3/woOC/8aHhv/HiYj/xoqJ/8aLif/Ijoz/zZST/9eg - nv/hrav/6Lm3/+zCwf/uyMf/78nH/+/Dwf/uvLr/7ba0/+60sf/vtLL/8ri1/7J+fflMKSltAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAQyEhI5JcXOPWj5D/3Juc/8qVlf+BZmb/bl5e/4l4eP/AqKj/8tPT//LO - zv+5p6b/w6qq//fBv//7wr//8LWy/86Ojf/Ojoz/0ZGP/9GSkP/OkY//zpOR/9GamP/VoJ//2qel/+Gv - rf/nt7X/6727/+3Dwf/wycf/8czL//LLyf/yxsT/8cC+//G7uf/yubf/87m3//S7uP/4vrv/1J6c/3JH - RrAdCgsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANRcXEYJNTcvPiIn/15aW/2VNTf85Ojr/Q0VF/0JF - RP9dXFz/n5GR/+S/v/+bh4f/hXp6/+25uP/7wr//9bu4/9qcmv/Zmpj/252b/96gnf/ipKH/5q+s/+u+ - vP/vycf/8srI/+3Hxv/wysj/9c7M//TNy//0ysj/9MbE//TBv//1vrz/9r26//e9u//4vrv/+L+8//vB - vv/hqqf/g1ZVzDwcHC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW4+Ppq/env/05OT/2ZX - V/9rbm7/fX9//3l6ev99f3//cHJy/5F9ff+ff3//XFhY/9eop//8wr//+L+8/+Wppv/ipaP/5qil/96i - pP/Kmaz/1qi1//LGxP/tyMf/qb3J/23E3P9kw9//vMTN//jDwP/3wb//+MC9//i/vf/5v73/+b+8//i/ - vP/3vrv/+L68/92mo/+IWlnRRSMjOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcv - L0mbX1/y15GS/6GAgP9XV1b/iYuL/4CBgf98fX3/cnR0/1dPT/++j4//km9w/9Sfnv/6wL3/+cC9/+6z - sP/ssK3/0Z+u/4OH1P9YffD/QGPs/7KYyv/Ct7z/Ytrz/3Ts//8s2f//cbvU//m+u//4v7z/+L67//e9 - uv/1vLn/9Lq3//O5tv/zuLX/0puZ/4RVVctGIyM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADIXFwdrPDySq2ts/diZmf/ApKT/sKur/4CBgP95enr/iYiI/49zdP/do6P/36Ch/96e - nv/zuLX/+sK///W7uP/1ubT/qZC//2qY+/9tnf//MGT6/56FxP/esK//nMbS/57n8/9+z+T/ybG3//a6 - t//zubb/8re0//C1s//utLH/7rKw/+qvrP++iIb9dklJtkMgISoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHIyMSazw8kZ5hYvXNjI3/2aSk/7OMjP+bd3f/sIKC/9KV - lv/cnJz/2peY/9aRkf/koqL/+sG+//nAvf/5v7z/4amw/6qZx/+aouP/qpvP/+mxtv/2urj/6rGv/+S6 - u//ptrX/466n/+Ovqf/ssK7/6q6s/+isqv/oq6n/2J2b/6JubfFoPT2NOxoaFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBoaCFowMFd7SEjAomZm9sWC - gv/XkZL/25SV/9iSk//Wj5D/1IyN/9KHiP/UiIj/8bOx//rCv//3vbv/9ru4//O3s//xuLX/7q6e/+ej - hf/npIn/7bCp/+Otp/+KsX3/ULdm/1WjWv+7oYz/5KWk/9uenP+4gH79glJRzVYuLlQgCAkGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAA8HBwQVy4uS3FBQaCPV1fjsG5v/cmAgf/ShYb/0YKD/85+f//LeXr/2I2M//e8uf/1vLn/7rOx/+2y - sP/lpJX/5qFY/+6xXP/djS3/35h9/86gl/9SwW7/Nd90/0WxXP+vlH//wYSE/49cW+VlOTmBQR4eHAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGk7OhqIWFd8oG5u8J5qav+eX2D/tmts/8Z0df/KdHX/yXJz/92T - k//3vLn/7LGu/+Snpf/dm5L/4Z1q/+61dP/fmmX/15WM/9eYlv/Bm43/r6uR/6uNgP+WYWDtbkBAnUwn - JzQVAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiFJSBnhC - QgpqNDQJWSUlB08dHQdfKisKfENDFJJWViinbGtRvYOCjtOcm8/pt7X157y6/7eOjfhxRUW7aTk5m4RK - StehWlr6uGdo/8Zwcf/dkpH/8bSx/+OnpP/YmZj/1ZWT/9ealP/Vl5X/0JCP/8eIhv+zdnb/lFtc6nA/ - QKRSKio/JQwNBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADTn6AB2qioDMuUlCHBhYU8voCAWcCBgXTEhoaLzZGQqdeensngrKvn47Sz/NOop/+yiIfyi2Bgs2k+ - PlZXKysPAAAAAUYlJRxcMTFYcj4+pYpMTeWmXF3+xnl5/9+Zl//dnJr/z46M/8KCgf+vc3L/ll9e831L - S8hlOTl/TigoMy0REQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABzQUIDnmprDriGhifHlpZMzp6eeNCgoZ7On5+2yJqaybuPj9WnfHzVj2RkunVJ - SYNbLy8/PRQUCgAAAAAAAAAAAAAAAAAAAAAAAAAAKRUVBU0pKSphNDRtd0BAsotNTd2ZW1vrkVlY4HtJ - Sb5lOTmCUysrQTsbGxEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCwsA2Y4OA5xQkImdkhIRHhKSll0R0dibUBAWWI2 - NkNUKCgoOhISDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhkZB0km - Jh5LJiYsRSEhITATFAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD/+H////8AAP/gH////wAA/8Af//// - AAD/gA////8AAP+AD////wAA/wAP////AAD/AA////8AAP4AB////wAA/gAH////AAD8AAf///8AAPwA - B////wAA/AAH////AAD8AAf///8AAPgAB////wAA+AAH//4HAAD4AAP/8AEAAPgAAf/AAQAA8AAA/wAA - AADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAEAAPAAAAAAAQAA8AAAAAADAADwAAAAAAcAAPAA - AAAADwAA+AAAAAAfAAD4AAAAAD8AAPwAAAAAfwAA/gAAAAD/AAD/gAAAA/8AAP/gAAAH/wAAgAAAAB// - AAAAAAAAf/8AAAAD4AP//wAAgB/8H///AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAYAAAAZAAAAGQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAARCQkYOh8fb0ooKK80HByiCQUFTAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAIhERFmA2Np2ITUz3lVNT/4dLS/5IKCi9AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAANjODiBllhY+61kZP+vY2P/pV5e/3xHRvEhEhJfAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAASSgoN41VVeS6bW3/xW9w/8dwcf+9bG3/klZW/jogIIEAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1RkWcs2xs/8dxcv/HcHH/x3Bx/8Zwcf+iYWH/SSkpmAAA - AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUC0tMZtgX+fGcnP/x3Bx/8dwcf/HcHH/x3Fy/61q - av9UMTGqAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxRER1tm9v/8hxcv/HcHH/x3Bx/8dw - cf/HcnP/tnRz/185OboAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAACIxXV7TEdHT/yHJz/8l1 - dv/Kd3j/ynd4/8p4eP/Bf37/bURDywAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNKysjo2Zm4Mt4 - ef/NfH3/z4GC/9GFhf/RhYb/0YWF/82Mi/9+UVHeCAICOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAACwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGc+ - Pkm1c3P30IGC/9OJiv/XkZL/2ZaW/9mWl//YlJX/2JmY/5hnZfMeEBBrAAAABwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA0FAgItHhAQWzAbG4IqFxeHDQcHWwAAABkAAAAAAAAAAAAA - AAAAAAAAek1MdMN/f//VjI3/2piZ/9+io//hqKn/4qmp/+Clpf/jpqT/wImH/04xMLwAAAA6AAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABEbDg5GRygokW5CQs+MVlbxnGJh/JdfXvxnPz7hHA8PbgAA - AAwAAAAAAAAAAAAAAACMW1qbz4qK/9qXl//gpqb/5rKz/+q6u//rvLz/6La2/+qxr//epKL/j1lZ+DUc - HLACAQFPAAAAHQAAAA8AAAAPAAAAEwAAACIbDg5MVDExnYZUU+SpbWz+uXl4/7x+fP/AgoD/xoeF/72A - f/9fOzu1AAAAHAAAAAAAAAAAAAAABJhkZK/VkZH/3Z+g/+axsf/twMD/8svL//LNzf/vxcX/8Lq4/+6z - sf+1dHP/j1VU+144N9g7IiKqMhwclDcfH5RGKSmiYTw7v4tZWOiydXT+woOC/8aKiP/Ol5X/2aWj/9ui - of/cnpz/2pyb/35TUrgAAAAVAAAAAAAAAAAAAAAFmmVkstaTk//hpaX/7Lm6//TLy//419f/+NnZ//TP - z//1wb//9Lq3/8aGhP+1dHP/s3Rz/6xwb/+pb27+rnNy/7Z7ev/BhIL/yY2L/8+WlP/apqT/5be2/+vB - v//rvrz/6bKw/+uvrf/Um5n/bUVEgAAAAAMAAAAAAAAAAAAAAAOTXV2q1ZGR/9CYmP+dfX7/o4yM/9e8 - vP/z0tL/zLOz/+u8u//5v7z/1peV/8uLif/Ki4r/yoyL/86Ukv/TnJv/2qSi/+Gtq//nuLb/7cPB//DJ - x//xxsT/8b+9//G6t//zubf/77az/6d1dM89Hx8lAAAAAAAAAAAAAAAAAAAAAIJOTojNiIn/jGlp/01O - Tv9UVlb/dnNz/7uhof+Pfn7/xJ+e//zCv//lqKb/3J2b/+Chnv/hpaT/7Ly5/+vHxv/MxMn/0MjN//LK - yf/1x8X/9sLA//a/vP/3vrv/+L+8//S7uP+5hoXhYTo5RwAAAAAAAAAAAAAAAAAAAAAAAAAAaTs7RrVz - dPKmfn7/cXJx/4SGhv97fX3/b2Zm/516ev+7kJD/+sG+//C2s//lqqr/rpbA/3aB2/+ql83/tMHK/2jc - 9P9OzOz/2r3B//q/vP/3vrv/9ry6//a8uf/ss7D/tYGA32c+Pk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAvEhIHg01Njbp9fvrCn5//nI+P/4R7ev+fgID/2Jyd/9ybnP/ytrT/+b+8/+ewtf+Mld3/ZI36/5eI - zv/Ttrn/sNLc/6/Czv/stLT/8re0/++0sf/tsq//2qCe/6Rxb8phODg+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABCIB8MeUZGbqRpata8gYH8x4mJ/9eTk//YkpP/04qL/+Cbmv/5wL3/9726/+Sw - t//Zrrn/56qY/+2smf/lr6n/nLWJ/4Gtdf/Pppn/3qGf/7yEg/KJWViYTyoqIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQh0dGXJAQGOXXl7NtnR1/8V7fP/MfH3/znt8/+il - o//0urj/7LCu/+Whg//rq13/35VX/9Kek/9yvXz/ZbNv/6iCdfqYY2O/aj4+TCUJCgcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACcamsBjFRVB4FERAh9PT0JjU1ND6VnZx+/hINF0JqZiNOjoty0iIf2hFBQw5lX - V8+wY2P4xXR0/+aioP/oq6j/2pqT/92fif/Vlor/yYqJ/7N8efiVZmPGdERFYkEfHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALiFhgXFkJEdx5CQSMqSknbNlZWbz5uaws2cnOXBlJPnqH18r4dc - XFFULy8OSCUlFm07O0+FSUmeoV1d3sF9fPrGhoX/snZ295xkZNiFUlKbbD4+T0UdHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc0JDA5FgYRKdbm46onR0Zp9ycnuWampzhFlZVmY6 - OikvDAwHAAAAAAAAAAAAAAAAAAAAAB0ODgRULCwhbjo7UXhERGVrPDxHTCYmGxAAAQMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//////////////////////D////gf///wH///4A///+AP///AD///wA///8AP//+AD - ///gA//D4AH+AeAA+ADgAAAAwAAAAMAAAADAAAAB4AAAA+AAAAfgAAAP8AAAH/wAAD8AAAD/AAAD/wB4 - D//H////////////////////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABMAAAAtAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgIO1cwMM1qOjrsHhAQmwAA - ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAATCgogfUhI6ahgYP6lXV3+f0hI9wIBAT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGBgFPLy6kuW1t/sZv - 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 - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/PSX/PSXControllerConfigNew.Designer.cs b/BizHawk.Client.EmuHawk/config/PSX/PSXControllerConfigNew.Designer.cs index cc22a8f3d1..a9b42fbd1e 100644 --- a/BizHawk.Client.EmuHawk/config/PSX/PSXControllerConfigNew.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/PSX/PSXControllerConfigNew.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PSXControllerConfigNew)); this.cbMultitap_1 = new System.Windows.Forms.CheckBox(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.lbl_p_1_4 = new System.Windows.Forms.Label(); @@ -428,7 +427,7 @@ this.Controls.Add(this.btnOK); this.Controls.Add(this.groupBox1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController_MultiSize; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "PSXControllerConfigNew"; diff --git a/BizHawk.Client.EmuHawk/config/PSX/PSXControllerConfigNew.resx b/BizHawk.Client.EmuHawk/config/PSX/PSXControllerConfigNew.resx index 91f294b89b..29dcb1b3a3 100644 --- a/BizHawk.Client.EmuHawk/config/PSX/PSXControllerConfigNew.resx +++ b/BizHawk.Client.EmuHawk/config/PSX/PSXControllerConfigNew.resx @@ -117,508 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAwAMDAQAAAABABoBgAAxgAAACAgEAAAAAQA6AIAAC4HAAAYGBAAAAAEAOgBAAAWCgAAEBAQAAAA - BAAoAQAA/gsAADAwAAAAAAgAqA4AACYNAAAgIAAAAAAIAKgIAADOGwAAGBgAAAAACADIBgAAdiQAABAQ - AAAAAAgAaAUAAD4rAAAwMAAAAAAgAKglAACmMAAAICAAAAAAIACoEAAATlYAABgYAAAAACAAiAkAAPZm - AAAQEAAAAAAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAQAAAAEAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAHR3AAAAAAAAAAAAAAAAAAAAAAAAAAAAdHdEcAAAAAAAAAAAAAAAAA - AAAAAAAAAHd0d3QAAAAAAAAAAAAAAAAAAAAAAAAAAEd8d3UAAAAAAAAAAAAAAAAAAAAAAAAAB3yHfHZw - AAAAAAAAAAAAAAAAAAAAAAAAd3fIyHVwAAAAAAAAAAAAAAAAAAAAAAAAfHh3jIxwAAAAAAAAAAAAAAAA - AAAAAAAHd8jIyHdgAAAAAAAAAAAAAAAAAAAAAAAHd4yHfIdAAAAAAAAAAAAAAAAAAAAAAAAHyMjIyMhQ - AAAAAAAAAAAAAAAAAAAAAAB3d3eMh4dgAAAAAAAAAAAAAAAAAAAAAAB8jIyIfIdQAAAAAAAAAAAAAAAA - AAAAAAB3h4jIiMh3AAAAAAAAAAAAAAAAAAAAAAB8jIeHeIjHAAAAAAAAAAAAAAAAAAAAAAeIiHh4eMiE - AAAAAAAAAAAAB0dHcAAAAAd8h4eIiIiHcAAAAAAAAAB0d3d3RwAAAAeIeIiIiIh3RwAAAAAAAHR3d8h3 - dAAAAAfIh4iIiHiIx0cAAAAAdHh3eIeHhwAAAAeHiIiIiIiId3R3dHR0eHd4h4eHhAAAAAd4eIiIiIiH - x3d2d3eId4iIiIiIhwAAAAd4eIiI+IiIh3d3eHh3iIiIiIeHwAAAAAfIjHeIiIiIyIeHh4iIiIiIiIiI - cAAAAAeIQ0R3h3iIiMiIiIiIiIiIiIiEAAAAAAfIR3d3d0iIiIh4iIeIiIiIiHhAAAAAAAB4d3d3SHiI - h4fTiIi3iIiIeIwAAAAAAAB3h4d3eIeIiHiJiIuIiIh4jHAAAAAAAAAHyId3h3h4iIh4iIiIiIiHeAAA - AAAAAAAAB8iMiMjIiIiIh4h3aMjHAAAAAAAAAAAAAAdYyIeIiIiMjId6d4eAAAAAAAAAAAAAAAAHdsjH - eIeH6MiId3AAAAAAAAAAAAAAAIiIh4V8jIh4eIfHcAAAAAAAAAAAAACIiIh3AAAHd3h3fHcAAAAAAAAA - AAAAAAiIjHgAAAAAAHx8eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAA - AAd0dAAAAAAAAAAAAAAAAAB3x3cAAAAAAAAAAAAAAAAAd3fHcAAAAAAAAAAAAAAAB3yMh3AAAAAAAAAA - AAAAAAfIeMdwAAAAAAAAAAAAAAAHjIyHQAAAAAAAAAAAAAAAfId4yHAAAAAAAAAAAAAAAHjIyIdQAAAA - AAAAAAAAAAB3iId4YAAAAAAAAAdwAAAAjIiIiIUAAAAAAHd3dAAAB4iIiHh8cAAAAHd3x4dwAAd4iIiI - h3Z3d3R3yIh4cAAHh4iIiIfHd3d4iIiIh3AAB3jHiIiIiHeHiIiIiIwAAAh3dXh4iMiIiIiIiIhwAAAA - yGd0d4iIeIi4iIiMAAAAAIeHd4iIh32IiIiIcAAAAAAAd4jIyIiIiHeHyAAAAAAAAAB3h4iIh8h3dwAA - AAAAAAAIh8fIh4eIaAAAAAAAAACIiHAAB8jIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////////////////////n////g////wP///8B///+Af///gH///4B///8Af///AH///wB//n8AP/A+AB - /AHgAAAB4AAAAeAAAAPgAAAH8AAAD/AAAB/8AAA//wAA//4AA//weA////////////////////////// - //8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRwAAAAAAAAAAAAB3dAAAAAAAAAAAAA - d8dwAAAAAAAAAAAAfId3AAAAAAAAAAAHeMjHAAAAAAAAAAAHyHh3AAAAAAAAAAAHh3eEAAAAAAAAAAAI - yIiHAAAAAHd2cAAIiIiIQAAAd3d4UACHiIiId3d3eHiIcACHh4iIyHeHiIiIcAAIR3d4iIiIiIiMAAAH - d3eIh3iIiIhwAAAAeMh4iIiHiMAAAAAAAHfIiMh4aAAAAAAAiIgHyIfIAAAAAAAIgAAAAIAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD8f/8A+H//APB/ - /wDwP/8A4D//AOA//wDgP/8A4D/BAOAfAQDAAAEAwAABAOAAAwDgAAcA8AAfAPwAPwDwgP8A5/f/AP// - /wD///8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAd1AAAAAAAAB8cAAAAAAAB4eAAAAAAAAHyMgAAAAAAAiIhwAAAHcACI - iHcAd3hwAIz4jIeIiIAAd3eIiIiIAACHeIiIiHAAAACMeMh4AAAAiAAIgAAAAAAAAAAAAAAAAAAAAAAA - AAD//wAA//8AAP//AADj/wAA4/8AAMP/AADB/wAAwfkAAMDBAADAAQAAwAMAAMAHAADwDwAAzn8AAP// - AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAA9OzsAZD8/AGg8 - PABtPj4AQkNDAEZIRwBWQkIAV0REAF5AQABbRkYAVklJAFxPTwBTU1MAXFJSAF5ZWQBkQEAAYUREAGZF - RQBqQkEAYEtLAGNPTwBwQUEAfUZGAHJKSgB2SUkAfU9PAGBRUQBgVFQAZlZWAGZYWABqWVkAclZWAHpU - VAB9W1oAbmJiAGtoaABtaWkAcWdnAHdnZwB8Y2MAe2pqAHJxcQB+dHQAd3l5AHl6egCGT08AiU9PAIFP - UACGU1MAjVFRAIlWVgCMV1cAg1xbAIxaWQCQUlIAlVJSAJFXVgCXVVUAmVVVAJZaWQCSXV0AlV9eAJpZ - WgCeW1sAml5eAKBZWgCgXFwAql9fAIRmZQCIZWQAhWtrAI5ragCTYmEAnGBhAJ9kYwCaZmYAk25uAJ1s - awCFdHQAiXd3AIt+fgCWd3cAmHR0AJV5eQCbfHwAo2JhAKZhYQChZWUApGVkAKplZACsZGQAqmhnAKZr - agCnbGsAqmloAKlubQCsbW0AtGZnALhsbACxb3AAv29wAKVxcACrc3IAr35+ALN0cwC5c3MAvXBxALR4 - dgC1fHsAunt6AMNtbgDGb3AAw3FyAMZwcQDGdXUAyHR1AMp3eADBeXkAxnt7AMB/fgDLensANLBSAEWf - TgBBtFwAPMdnADHkdgDciiIAvoF/AISrdwDln0sA35lhAN2XfADgmmEA8LdlAO61cAArWPIALWT+AEh5 - +gDOf4AAfoCAAHiA1ABZv9wAZrnUAGK+2ABxnv4Ad6P/ADPX/QBw0OcAW+D7AIKEgwCPgoIAjI2NAJuC - ggCUiIgAmYqKAJGSkgCjhIQAqoKCAKKLiwC+hIMAsoqKALaSgQCum5sAsZubALqqlQCdgr4Ar6ytALGh - oAC6pKQAwoSDAMyBggDGiIYAyYiHAMWMigDMjIoA0ISFANKHiADUjIwA2Y6NAMCUjQDIk44A0JCPANaP - kADHlZQAzpSSAMScmwDUkpIA2ZSVANWYlgDampcA2ZeYANWcnADam5sA4p2cAMChjwDeoJ4A5aCFAOaj - jQDlpJoA2p6hAMOkowDOoaEAy62tANegoADdoqEA2aGpANGsrwDdq6kAwbG4ANGysQDdtLQA2ri3AOGk - owDjqKYA66ylAOGnqADjq6oA6a2rAOOwrwDssK4A5K+wAOaztADttLIA57i2AO24tgDmurgA6rq6APC1 - swDyuLYA9Ly5APi+uwD1wL0A+cC9AKKMwACkk8QAqprMALSayACptsEAlaDkAOy/wACRxtQAgOv9AJnr - 9wDEwsoA5sbGAOzCwgDuyMcA7MzMAPPEwgDxy8oA9dPTAPja2gAAAAAAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAADLytDi9tOemQAAAAAAUy9EecLEsa1uPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj11Mme - VakAAAAAAAAAAAAATS84M0akAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE - AAAAAAAAAAAAAAABAAAAAQAAAAAAAFFNTQBRUlIAU1RUAGJHRwBiT08Aa0lIAGJTUwBrVlYAYllZAGZc - XABpWloAb1xbAHNTUwB7V1YAc1hXAHFbWwBkZWUAaWFhAG5kZABpamkAcGFhAHlubgB2cHAAf3V1AH55 - eQB8fX0AgUpKAI1PTwCLWFcAhlhYAI9ZWQCKXFsAm1ZWAJJZWQCWWVgAmlpbAJtcWwCiXFwAl2BfAIBg - YACAZ2YAgG9vAI9oaACWZWQAmGBhAJ5kZACcaWoAmm9vAIV0dACNcHAAiXZ2AIB8fACac3IAm3V0AJ51 - dQCZfHwAnHx8AKNmZgCnZmYAqmJiAK5jYwCvb24AtWVmALBtbgC5bW0AvmxtAKx+fQCxcnIAtHBwALZz - dACydXQAtnd2ALlwcAC5dnYAt3p5ALh5eAC8fHsAun18ALx+fQDGb3AAxnBxAMdzdADAd3YAyHJzAMlz - dADJdXYAynd4AMd/fwDMe3wAzXx9AHunbwBhvHIAYsN4ANuLOwC2hn4A4Zt5APC3ZABte9sAX47+AHWM - 5QAl0foAY+P8AIeDgwCFhoYAioSEAJOIiACWi4sAmpKRAKGCgQCmhYUAqYGBAKuDhACniooApYyMAKiO - jQCyhYMAvoWEALeNjQCrj5AAr5eXALSVlAC9lJMAmbCEAK6RugDBgYAAwoSCAMWDhADChoQAxYeFAM6A - gQDFiIYAxoqIAMqIiQDMi4oAy4yKAMiPjQDPj44A0ISFANKJigDUi4wA04+NANWNjgDKkY8A0JCOANud - iQDWj5AAzJSTAM2XlgDGm5oA1pGSANOUkgDVl5EA1pOUANiVlgDYmJUA2ZeYANKenADbmpsA3pmYANuc - mgDbn5wA1aacAN6gngDqqZoA3Z+gAMyjowDCra0AxqysAMqpqQDboaAA3qKiAN6logDbp6UA3aWkANer - qgDWsbMA0rW0ANe0tADfs7IA4aSiAOGlpQDkp6UA46imAOWopgDsraIA6qimAOGoqADhrqwA6a2rAOqv - rADpsK4A7LGuAOGzswDlsbEA7bKxAO+1sgDotrYA5rm3AO+4twDot7sA6bq5AOu9uwDrv70A8bazAPG2 - tADxuLUA9Lm2APC9uwD2vboA9L+9APi+uwD4v7wA8sC+APXAvgD5wL0AkILJAKqXzACsu8cAqr/LALLV - 3QDawMIA48XFAOvDwQDswMAA7cTDAO/ExQDgxsgA8cbEAPTGxADwyskA9MvJAPLNzQD21dYA+NjZAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAMEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHCEcBQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAayU9PSYbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQlBSQiJpAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAM0pSUlJQPRcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnUlJSUlJGFQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAFJSUlJSUkoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzUlJSWVJZfxAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5XWYqKioqGDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoqMkpqa - mqAsAAAAAAAAAAAAAAAAAABoNAAAAAAAAACMjJyuvLy2toYHAAAAAAAAAAAAABcOIDouBgAAAAAAc4yc - tsHKysPAriIKAAAAAAAAABYgRk1LTX+DEAAAAABukqXB4ejo4dHPQCIEChcXEwggTXV/k66unKMpAAAA - AG6Srsro6ero0dN/Rk1NRk2Dg4STrsbh4cHAt2sAAAAAbpKuOXPe6ajW15KGg4OGk528yuHo5eHPz882 - AAAAAAB4jCkDAxSoMabXt5yjt8ro3ePo5dbT09HTdAAAAAAAAABGcBFoGgFwdtfDwHxi2dpmZcrX09HP - z0MAAAAAAAAAAHh/qWwaOa6cz9PNZGPYsdzbzc3DwLk2AAAAAAAAAAAAAAAvhpKakoyg19HNyKS5wHtb - orZ/cwAAAAAAAAAAAAAAAAAANkaKWVm5zb1gYV6cXVxfNgAAAAAAAAAAAAAAAAAAALGvlTIuP1K5tqCR - l4xfLwAAAAAAAAAAAAAAAAAAsbPBenkAAAAAcCVYjE0scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////+f///+D////A////wH - ///4B///+Af///gH///wB///8Af///AH/+fwA/8D4AH8AeAAAAHgAAAB4AAAA+AAAAfwAAAP8AAAH/wA - AD//AAD//gAD//B4D////////////////////////////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAAWlJSAHBJSQB1SEgAe1dXAHdYWAB5WlkAel1dAGBiYgB1bGwAfWtrAHh2 - dgB9fn4Ag01NAIRXVwCIV1cAhV9eAItbWgCgX14ApV1dAJhgXwCNYGAAnWtqAJhtbQCCdnYAh3x8AI15 - eACeensAqGBgAKhoZwCga2oArGpqALNqagCzb28AtG1tALltbQCxb3AApnVzAKlzcwCqdHMApnp6AKd+ - fgCpensAq3x7ALZ3dgC8dHQAvH59AMZvcADGcHEAxXN0AMhycwDJdncAynh5AMx5egDNfn8Ajo1wAOek - VgDGgH8A4p53AEZ2+gB8u4AAd8PaAIuEhACOh4cAjo6OAJ+DggCejo4Ao4SEAKSIiACsi4sAqo2MAK6P - jgC+gYAAvoaGAL+KiACskJAAtJeXALWenQC5np4At6iOAKmyjgC9nroAwYSDAMaGhADOhoYAxomHAMiK - iQDJjYwA0oeIANOOjwDUjY0A2ZiPANaPkADGkZEAx5eXAMySkADGnZwA1ZOSANeTlADWl5YA2JSVANGZ - mADan50A3J6dAOCcmwDVoJ8A7K2fAMOtrQDXo6IA3aCgAN+kpADVq6oA3ay3AMu0tADPtrYA3L+/AOCi - oQDhpqUA5KelAOinpgDlq6gA46usAOOvrQDqrqwA7LGuAOayswDjtrQA5re1AOqysQDts7EA57y6AO+8 - ugDrvL0A8LOwAPC1sgDwtrQA87q3APS6twD2vboA8b69APi/vAD2wb4A+cC9AJmTzwDHqMMAu8PMAIHf - 8QDByNAA7cLCAO3FwwDvxsQA5cjIAOzOzgDwxcQA9cbEAPPP0AD10tIAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - BQMJAAAAAAAAAAAAAAAAAAAAAAAAAAAPHBMNAAAAAAAAAAAAAAAAAAAAAAAAABojLy8TAAAAAAAAAAAA - AAAAAAAAAAAAAB0wMDAiPgAAAAAAAAAAAAAAAAAAAAAAQjAwMDAtGAAAAAAAAAAAAAAAAAAAAAAAFzIy - NTU5CgAAAAAAAAAAAAAAAAAAAAAAIjZYWFxcBwAAAAAAAAAAAAAAAAAAAAAANlxtdW11JQAAAAAAAAAA - PgcRDgkAAAAAXG1/lISAZgMAAAAAABkVLC5SVhcAAABNY3WWnJuLfB8UBAcQHkhWaX91dSsAAABNY2BM - mJeCiVJSVl9laX+WloSJgEIAAAAAXAEIC0tGjnR0dJaRk5qNjIyJQwAAAAAAJkNADBtdjIaPO1GSPYuJ - hnVEAAAAAAAAAClISWRcd4xwkGp8UE90VwAAAAAAAAAAAAAAKSQ1NYZ7OjhbPDdGAAAAAAAAAAAAAHNv - YGsAKyJoXFYmRwAAAAAAAAAAAAAAcnIAAAAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// - /wD///8A////APx//wD4f/8A8H//APA//wDgP/8A4D//AOA//wDgP8EA4B8BAMAAAQDAAAEA4AADAOAA - BwDwAB8A/AA/APCA/wDn9/8A////AP///wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAABjZGQAdmRjAHtpaQB/eHgAgU9PAKBaWgCFbm0AlWtqAKptbgCwZ2cAsGhoAKxw - cACteHkAvnJyAMZvcADGcHEAy3l5AMx9fgCFmXQAwIB/ANeUfQDhoX8AlIqJAJWMjACYiIgAoIaGAK2K - igCxh4cAvoGAALKKigC4iYgAuJWVAL2cnACss50AuqKhAL+mpgDLgoIAxImHAMeNjADLkI8AxpWTANCS - kQDYlZUA1J6dANqZmgDdnp4A1J+oAMaiogDOr68AzLKyANi5uADhpaIA4qypAOWtqADrrqsA4bKwAOay - sgDtuLYA57++AOy4uADxtLIA8be0APa9ugDswL4A9sG+ALCcxwC5ncIA06zBALnH0QC2ytQA7sPDAPLS - 0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAZBgUAAAAAAAAAAAAAAAAACw8KAAAAAAAAAAAAAAAAGhAQDgAAAAAAAAAAAAAAAAkRESUYAAAA - AAAAAAAAAAAlKy4uBwAAAAAAAAcDAAAAKzlHPCYCAAAYCB0oKgAAAC0wSDs0FB0nLDlAOiwAAAANAQQb - Pi9DRkVBPzUAAAAAJB4cKz5EQjMiNSkAAAAAAAAAHwwRNxYVEyQAAAAAAAAxMgAAACEgAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA4/8AAOP/AADD/wAAwf8AAMH5 - AADAwQAAwAEAAMADAADABwAA8A8AAM5/AAD//wAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAkAAAAJAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAUAAAAOAEBAVUAAABUAAAANQAAABAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkFBSUvGRl5TCkpwlYuLtxDJCTQFw0NmQAA - AEkAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAwMKE8rK6V6RET2klJR/5ZS - U/+OT0//ZDc38B0QEJoAAAAyAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDAwYVzAwoopP - T/ygXVz/oFtb/55ZWf+bWFf/k1NT/1UvL9wGAwNcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AARNKipxhk5O+adkY/+uZWX/tWdo/7VmZ/+qYWH/nltb/3hERPcfERGCAAAAFgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADEZGS1zQ0LXqGdm/7ptbf/Fb3D/x3Bx/8hwcf/BbW7/q2Vl/4hPT/82HR2gAAAAIAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAB1gxMYyYXl3/vXFx/8Zwcf/HcHH/x3Bx/8dwcf/HcHH/uG1t/5NY - V/9EJia2AAAAKQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPB8fNH1MS+K4cnH/x3Fy/8dwcf/HcHH/x3Bx/8dw - cf/HcHH/wHBx/51gX/9PLCzGAAAAMwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAMAAAAAAAAAAAAAAAAAAAAALhAQFIZXVs/RjIz/1Y2O/9qYmP/eoaL/46qr/+aysv/ot7f/6rm5/+m4 - uf/otbX/5q+v/+uvrf/jqab/wYeF/28/P/QhEhKvAAAAXwAAACgAAAANAAAABQAAAAMAAAACAAAAAwAA - AAUAAAAKAAAAFQAAADAdDg9oSSkptHZHRu2dYmL+t3Z1/758e/+6enn/tnh3/7d5eP+8fn3/w4SD/7Z6 - ef9eODfbBgICTgAAAAgAAAAAAAAAAAAAAAAAAAAAPhwcJJVjYuPXkZH/2JOU/92fn//iqqr/57O0/+u8 - vP/uwsL/78XG/+/Exf/twMD/67i4/+60sv/wtrP/zZKQ/5taWv9xQED2MRsaxAgEBIcAAABaAAAAQQAA - ADcAAAA2AAAAOwAAAEUEAgJZHA4OfUcnJ7l5SkntqGxr/8CAfv/DgoH/vH59/7p+ff/DiIb/zZGP/9GT - kf/UlJP/1peV/9eZl/+GVlbuGQsLVwAAAAcAAAAAAAAAAAAAAAAAAAAARiIiLZ9rauvZk5P/2peY/+Ck - pP/lsLD/6ru7/+/Fxf/yzMz/9NDQ//PPz//xycr/7sDA//K5tv/1u7j/36Kg/6dmZf+mZWX/j1ZW/WM6 - OutDJSXQNBwcvDAaGrQ0HBy1PiIivUwsLMtkPDzfh1VU9a1xcP/EhIP/xIWE/7+Cgf/Ch4b/zZST/9mk - ov/grq3/4a6t/96lo//eoJ7/36Kg/+Cjof+IWVjnGwwMQwAAAAIAAAAAAAAAAAAAAAAAAAAARyQkL6Br - auzZk5P/25qb/+GnqP/ntLT/7cDA//LLy//209T/+NjY//fX1//00ND/8cbG//W9u//4vrz/46ak/7d0 - c/+vb27/s3Jy/7d2df+ucXD/pWpp/6Npaf+nbWz/sHVz/7p9fP/EhYT/yImI/8WIhv/DiIb/ypGP/9eg - n//hr63/57q5/+rCwP/rwsD/6bq4/+evrf/nq6n/6q6r/9qgnv9wRkbDBwAAHgAAAAAAAAAAAAAAAAAA - AAAAAAAASCQkLZ1nZuvYkpP/25uc/+Opqv/qtrf/7cHB//TOzv/52Nj/+tzc//na2v/xz9D/8MfH//fA - vv/6wb7/6a6r/8OBgP/DgoD/vX58/7h7ev+8fn3/woOC/8aHhv/HiYj/xoqJ/8aLif/Ijoz/zZST/9eg - nv/hrav/6Lm3/+zCwf/uyMf/78nH/+/Dwf/uvLr/7ba0/+60sf/vtLL/8ri1/7J+fflMKSltAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAQyEhI5JcXOPWj5D/3Juc/8qVlf+BZmb/bl5e/4l4eP/AqKj/8tPT//LO - zv+5p6b/w6qq//fBv//7wr//8LWy/86Ojf/Ojoz/0ZGP/9GSkP/OkY//zpOR/9GamP/VoJ//2qel/+Gv - rf/nt7X/6727/+3Dwf/wycf/8czL//LLyf/yxsT/8cC+//G7uf/yubf/87m3//S7uP/4vrv/1J6c/3JH - RrAdCgsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANRcXEYJNTcvPiIn/15aW/2VNTf85Ojr/Q0VF/0JF - RP9dXFz/n5GR/+S/v/+bh4f/hXp6/+25uP/7wr//9bu4/9qcmv/Zmpj/252b/96gnf/ipKH/5q+s/+u+ - vP/vycf/8srI/+3Hxv/wysj/9c7M//TNy//0ysj/9MbE//TBv//1vrz/9r26//e9u//4vrv/+L+8//vB - vv/hqqf/g1ZVzDwcHC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW4+Ppq/env/05OT/2ZX - V/9rbm7/fX9//3l6ev99f3//cHJy/5F9ff+ff3//XFhY/9eop//8wr//+L+8/+Wppv/ipaP/5qil/96i - pP/Kmaz/1qi1//LGxP/tyMf/qb3J/23E3P9kw9//vMTN//jDwP/3wb//+MC9//i/vf/5v73/+b+8//i/ - vP/3vrv/+L68/92mo/+IWlnRRSMjOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcv - L0mbX1/y15GS/6GAgP9XV1b/iYuL/4CBgf98fX3/cnR0/1dPT/++j4//km9w/9Sfnv/6wL3/+cC9/+6z - sP/ssK3/0Z+u/4OH1P9YffD/QGPs/7KYyv/Ct7z/Ytrz/3Ts//8s2f//cbvU//m+u//4v7z/+L67//e9 - uv/1vLn/9Lq3//O5tv/zuLX/0puZ/4RVVctGIyM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADIXFwdrPDySq2ts/diZmf/ApKT/sKur/4CBgP95enr/iYiI/49zdP/do6P/36Ch/96e - nv/zuLX/+sK///W7uP/1ubT/qZC//2qY+/9tnf//MGT6/56FxP/esK//nMbS/57n8/9+z+T/ybG3//a6 - t//zubb/8re0//C1s//utLH/7rKw/+qvrP++iIb9dklJtkMgISoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHIyMSazw8kZ5hYvXNjI3/2aSk/7OMjP+bd3f/sIKC/9KV - lv/cnJz/2peY/9aRkf/koqL/+sG+//nAvf/5v7z/4amw/6qZx/+aouP/qpvP/+mxtv/2urj/6rGv/+S6 - u//ptrX/466n/+Ovqf/ssK7/6q6s/+isqv/oq6n/2J2b/6JubfFoPT2NOxoaFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBoaCFowMFd7SEjAomZm9sWC - gv/XkZL/25SV/9iSk//Wj5D/1IyN/9KHiP/UiIj/8bOx//rCv//3vbv/9ru4//O3s//xuLX/7q6e/+ej - hf/npIn/7bCp/+Otp/+KsX3/ULdm/1WjWv+7oYz/5KWk/9uenP+4gH79glJRzVYuLlQgCAkGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAA8HBwQVy4uS3FBQaCPV1fjsG5v/cmAgf/ShYb/0YKD/85+f//LeXr/2I2M//e8uf/1vLn/7rOx/+2y - sP/lpJX/5qFY/+6xXP/djS3/35h9/86gl/9SwW7/Nd90/0WxXP+vlH//wYSE/49cW+VlOTmBQR4eHAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGk7OhqIWFd8oG5u8J5qav+eX2D/tmts/8Z0df/KdHX/yXJz/92T - k//3vLn/7LGu/+Snpf/dm5L/4Z1q/+61dP/fmmX/15WM/9eYlv/Bm43/r6uR/6uNgP+WYWDtbkBAnUwn - JzQVAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiFJSBnhC - QgpqNDQJWSUlB08dHQdfKisKfENDFJJWViinbGtRvYOCjtOcm8/pt7X157y6/7eOjfhxRUW7aTk5m4RK - StehWlr6uGdo/8Zwcf/dkpH/8bSx/+OnpP/YmZj/1ZWT/9ealP/Vl5X/0JCP/8eIhv+zdnb/lFtc6nA/ - QKRSKio/JQwNBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADTn6AB2qioDMuUlCHBhYU8voCAWcCBgXTEhoaLzZGQqdeensngrKvn47Sz/NOop/+yiIfyi2Bgs2k+ - PlZXKysPAAAAAUYlJRxcMTFYcj4+pYpMTeWmXF3+xnl5/9+Zl//dnJr/z46M/8KCgf+vc3L/ll9e831L - S8hlOTl/TigoMy0REQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABzQUIDnmprDriGhifHlpZMzp6eeNCgoZ7On5+2yJqaybuPj9WnfHzVj2RkunVJ - SYNbLy8/PRQUCgAAAAAAAAAAAAAAAAAAAAAAAAAAKRUVBU0pKSphNDRtd0BAsotNTd2ZW1vrkVlY4HtJ - Sb5lOTmCUysrQTsbGxEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCwsA2Y4OA5xQkImdkhIRHhKSll0R0dibUBAWWI2 - NkNUKCgoOhISDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhkZB0km - Jh5LJiYsRSEhITATFAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD/+H////8AAP/gH////wAA/8Af//// - AAD/gA////8AAP+AD////wAA/wAP////AAD/AA////8AAP4AB////wAA/gAH////AAD8AAf///8AAPwA - B////wAA/AAH////AAD8AAf///8AAPgAB////wAA+AAH//4HAAD4AAP/8AEAAPgAAf/AAQAA8AAA/wAA - AADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAEAAPAAAAAAAQAA8AAAAAADAADwAAAAAAcAAPAA - AAAADwAA+AAAAAAfAAD4AAAAAD8AAPwAAAAAfwAA/gAAAAD/AAD/gAAAA/8AAP/gAAAH/wAAgAAAAB// - AAAAAAAAf/8AAAAD4AP//wAAgB/8H///AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAYAAAAZAAAAGQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAARCQkYOh8fb0ooKK80HByiCQUFTAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAIhERFmA2Np2ITUz3lVNT/4dLS/5IKCi9AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAANjODiBllhY+61kZP+vY2P/pV5e/3xHRvEhEhJfAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAASSgoN41VVeS6bW3/xW9w/8dwcf+9bG3/klZW/jogIIEAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1RkWcs2xs/8dxcv/HcHH/x3Bx/8Zwcf+iYWH/SSkpmAAA - AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUC0tMZtgX+fGcnP/x3Bx/8dwcf/HcHH/x3Fy/61q - av9UMTGqAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxRER1tm9v/8hxcv/HcHH/x3Bx/8dw - cf/HcnP/tnRz/185OboAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAACIxXV7TEdHT/yHJz/8l1 - dv/Kd3j/ynd4/8p4eP/Bf37/bURDywAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNKysjo2Zm4Mt4 - ef/NfH3/z4GC/9GFhf/RhYb/0YWF/82Mi/9+UVHeCAICOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAACwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGc+ - Pkm1c3P30IGC/9OJiv/XkZL/2ZaW/9mWl//YlJX/2JmY/5hnZfMeEBBrAAAABwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA0FAgItHhAQWzAbG4IqFxeHDQcHWwAAABkAAAAAAAAAAAAA - AAAAAAAAek1MdMN/f//VjI3/2piZ/9+io//hqKn/4qmp/+Clpf/jpqT/wImH/04xMLwAAAA6AAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABEbDg5GRygokW5CQs+MVlbxnGJh/JdfXvxnPz7hHA8PbgAA - AAwAAAAAAAAAAAAAAACMW1qbz4qK/9qXl//gpqb/5rKz/+q6u//rvLz/6La2/+qxr//epKL/j1lZ+DUc - HLACAQFPAAAAHQAAAA8AAAAPAAAAEwAAACIbDg5MVDExnYZUU+SpbWz+uXl4/7x+fP/AgoD/xoeF/72A - f/9fOzu1AAAAHAAAAAAAAAAAAAAABJhkZK/VkZH/3Z+g/+axsf/twMD/8svL//LNzf/vxcX/8Lq4/+6z - sf+1dHP/j1VU+144N9g7IiKqMhwclDcfH5RGKSmiYTw7v4tZWOiydXT+woOC/8aKiP/Ol5X/2aWj/9ui - of/cnpz/2pyb/35TUrgAAAAVAAAAAAAAAAAAAAAFmmVkstaTk//hpaX/7Lm6//TLy//419f/+NnZ//TP - z//1wb//9Lq3/8aGhP+1dHP/s3Rz/6xwb/+pb27+rnNy/7Z7ev/BhIL/yY2L/8+WlP/apqT/5be2/+vB - v//rvrz/6bKw/+uvrf/Um5n/bUVEgAAAAAMAAAAAAAAAAAAAAAOTXV2q1ZGR/9CYmP+dfX7/o4yM/9e8 - vP/z0tL/zLOz/+u8u//5v7z/1peV/8uLif/Ki4r/yoyL/86Ukv/TnJv/2qSi/+Gtq//nuLb/7cPB//DJ - x//xxsT/8b+9//G6t//zubf/77az/6d1dM89Hx8lAAAAAAAAAAAAAAAAAAAAAIJOTojNiIn/jGlp/01O - Tv9UVlb/dnNz/7uhof+Pfn7/xJ+e//zCv//lqKb/3J2b/+Chnv/hpaT/7Ly5/+vHxv/MxMn/0MjN//LK - yf/1x8X/9sLA//a/vP/3vrv/+L+8//S7uP+5hoXhYTo5RwAAAAAAAAAAAAAAAAAAAAAAAAAAaTs7RrVz - dPKmfn7/cXJx/4SGhv97fX3/b2Zm/516ev+7kJD/+sG+//C2s//lqqr/rpbA/3aB2/+ql83/tMHK/2jc - 9P9OzOz/2r3B//q/vP/3vrv/9ry6//a8uf/ss7D/tYGA32c+Pk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAvEhIHg01Njbp9fvrCn5//nI+P/4R7ev+fgID/2Jyd/9ybnP/ytrT/+b+8/+ewtf+Mld3/ZI36/5eI - zv/Ttrn/sNLc/6/Czv/stLT/8re0/++0sf/tsq//2qCe/6Rxb8phODg+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABCIB8MeUZGbqRpata8gYH8x4mJ/9eTk//YkpP/04qL/+Cbmv/5wL3/9726/+Sw - t//Zrrn/56qY/+2smf/lr6n/nLWJ/4Gtdf/Pppn/3qGf/7yEg/KJWViYTyoqIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQh0dGXJAQGOXXl7NtnR1/8V7fP/MfH3/znt8/+il - o//0urj/7LCu/+Whg//rq13/35VX/9Kek/9yvXz/ZbNv/6iCdfqYY2O/aj4+TCUJCgcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACcamsBjFRVB4FERAh9PT0JjU1ND6VnZx+/hINF0JqZiNOjoty0iIf2hFBQw5lX - V8+wY2P4xXR0/+aioP/oq6j/2pqT/92fif/Vlor/yYqJ/7N8efiVZmPGdERFYkEfHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALiFhgXFkJEdx5CQSMqSknbNlZWbz5uaws2cnOXBlJPnqH18r4dc - XFFULy8OSCUlFm07O0+FSUmeoV1d3sF9fPrGhoX/snZ295xkZNiFUlKbbD4+T0UdHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc0JDA5FgYRKdbm46onR0Zp9ycnuWampzhFlZVmY6 - OikvDAwHAAAAAAAAAAAAAAAAAAAAAB0ODgRULCwhbjo7UXhERGVrPDxHTCYmGxAAAQMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//////////////////////D////gf///wH///4A///+AP///AD///wA///8AP//+AD - ///gA//D4AH+AeAA+ADgAAAAwAAAAMAAAADAAAAB4AAAA+AAAAfgAAAP8AAAH/wAAD8AAAD/AAAD/wB4 - D//H////////////////////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABMAAAAtAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgIO1cwMM1qOjrsHhAQmwAA - ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAATCgogfUhI6ahgYP6lXV3+f0hI9wIBAT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGBgFPLy6kuW1t/sZv - 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 - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/ProfileConfig.Designer.cs b/BizHawk.Client.EmuHawk/config/ProfileConfig.Designer.cs index e7ba5635f5..91ed759593 100644 --- a/BizHawk.Client.EmuHawk/config/ProfileConfig.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/ProfileConfig.Designer.cs @@ -236,7 +236,7 @@ this.Controls.Add(this.ProfileSelectComboBox); this.Controls.Add(this.CancelBtn); this.Controls.Add(this.OkBtn); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.user_blue; this.MinimumSize = new System.Drawing.Size(315, 280); this.Name = "ProfileConfig"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; diff --git a/BizHawk.Client.EmuHawk/config/ProfileConfig.resx b/BizHawk.Client.EmuHawk/config/ProfileConfig.resx index 267590c5f2..368376830a 100644 --- a/BizHawk.Client.EmuHawk/config/ProfileConfig.resx +++ b/BizHawk.Client.EmuHawk/config/ProfileConfig.resx @@ -128,81 +128,4 @@ Assisted Speedruns but with additional N64 specific settings. Longplays - Stability is the key! - - - - AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABMLAAATCwAAAAAAAAAA - AAC3hVm02LiO/9a2jf/VtIv/1LSK/9Oyif/Ssoj/0bCI/9Cwh//Pr4f/z66G/86uhv/NrIb/zauF/8yr - hf/LqoX/yqqE/8qphP/JqIP/yKeD/8ing//HpoL/x6aC/8algv/GpYH/xaSB/8SjgP/Do4D/xKOC/8Sk - gv/FpYP/jV1Fw7mGWbTVtIT/3L6N/9e3hf/Usn//0bB8/9Gve//PrHn/zqt4/86qd//MqXf/zKh2/8un - df/KpnX/yaV0/8ikc//Io3P/x6Jy/8aicv/FoHH/xaBw/8SfcP/Dnm//w51u/8Kcbv/CnG7/wZtt/8Kc - b//DnnL/yaZ7/8Kedf+NXUbDuoda1NOwef/Pq3L/yaFl/8SbXf/Clln/wJVX/76TVv+9kVX/vI9T/7uO - Uv+5jFH/uIpQ/7eJT/+2h07/tIZN/7OETP+yg0v/sYFK/6+ASf+uf0j/rX5H/6x9R/+re0b/qnpF/6l5 - Rf+peET/qXhE/6t6SP+wg1L/toxe/45eRt+7iFu00q54/9Crcf/Hn2H/w5hY/8CVVf+/klP/vZFS/7yP - Uf+7jVD/uYtO/7iKTf+2iEz/tYZL/7SFSv+zg0n/sYJI/7CAR/+vf0b/rn1F/6x8RP+rekP/qnlC/6l4 - Qf+odkD/p3U//6Z0QP+mcz//p3VA/6x9Sv+yh1j/j19Gw7yKW7TXtoT/2bmE/9Cscv/JoWP/xZpb/8GW - V/+/k1T/vZFS/7yPUf+7jVD/uYtO/7iKTf+2iEz/tYZL/7SFSv+zg0n/sYJI/7CAR/+vf0b/rn1F/6x8 - RP+rekP/qnlC/6l4Qv+odkH/qHdB/6l4RP+tfkr/uI1d/72Vav+PX0fDvYtctNy+kP/hxpX/17aA/8+p - bv/IoWP/xZtc/8KXWf/BlVf/v5RV/76SVf+9kFT/u45S/7qNUf+4i1D/t4lP/7aITv+1hk3/s4VM/7KD - S/+xgkr/sIBJ/65/SP+tfUf/rHxG/6x8Rv+sfEf/rn5K/7SIV//EnnD/xqR7/5BgR8O/jFx4votc/Nm5 - j//p1Kr/4sma/9q8if/TsHr/zKZr/8eeYv/DmVz/wJZY/76TVv+9kFT/u45S/7qNUf+4i1D/t4lP/7aI - Tv+1hk3/s4VM/7OETP+yg0v/soNM/7GDTf+yhVD/tYpW/7uSYf/Fn3H/0rOI/+DIof+9mnn/kWFHkMCN - XQC/jlwqvotbscecb//bu5H/59Gm/+HGl//Yuob/0a52/8qjaf/Fm1//wJVY/72RVP+8jlH/uYtO/7iK - Tf+2iEz/tYZL/7SGS/+0hUv/tIZN/7SHT/+2ilT/uo5a/76WZP/FoHH/z6+C/9m+lf/dxZ//upd2/5Rk - SMWSYkgPwY5dAMCNXQDNo14BvotbOLyJW7zFmW7/2bqQ/+fRp//hxpj/2bqH/9Ctd//Jomn/w5pe/7+T - V/+8j1L/uYtO/7iKTf+3iU3/uIpQ/7qOVf++k13/wZpm/8eicf/NrH3/1beL/93Dmv/exZ//wp99/5dn - SvmWZkmDmWhGBJNiSADCj14AwY5dAL+MXAC+i1wAy6JdAbyJWjW6iFqrwJRo/9W2i//n0Kf/4ceZ/9m6 - if/QrXf/x6Fn/8GWW/+9j1P/uo1R/7yQVf/Al1//x6Ju/9Cufv/XuY3/3sOa/9/Gn//Rso3/to5t/5tq - S+uaaUuHmWlJF6l4QQGVZEkAlGNIAMOQXgDCj14AwI5dAL+MXAC9i1wAvIlbAMmgXAG6iFoquIZZn7eE - WPnTsIf/5s6l/+DGmf/Wt4X/yqVt/8KYXP/AlFn/xJxk/8+tev/avpL/4smh/9GyjP+4kW3/oG9O8Z9u - Ta6dbU1Unm1LC6x8RAGYaEsAl2ZKAJZlSQCVZEkAxJFfAMOQXgDCj14AwI1dAL+MXAC9ilwAvIlbALqH - WgDInlsBuIZZHbaEWJO1glf0z6yD/+HHnP/XuIb/yqVt/8efZ//QrXr/3sOX/8mlfv+mdVH5pXNQqKNy - T06mdE0IsYJIAZ5tTQCca0wAm2pMAJlpSwCYZ0sAl2ZKAJZlSQDGkl8AxJFfAMOQXgDBjl0AwI1dAL6M - XAC9ilsAu4lbALqHWgC4hlkAxpxZAbeFWBS0g1eIzKZ8/+HHm//TsX3/zqt1/9m7jP/UtIv/qXhSwah4 - UBi2iEwBo3JQAKJxTwCgb04An25OAJ1sTQCca0wAmmpMAJloSwCYZ0oAlmZKAMeTYADFkl8AxJFfAMKP - XgDBjl0AwI1dAL6LXAC8ilsAu4hbALmHWgC4hVkAtoRYAMWaWAK1g1e/2buP/9e4hf/SsHz/3cKU/72S - av+relJFqHZSAKZ1UQCkc1AAo3JQAKFwTwCgb04Anm1NAJ1sTQCca0wAmmlMAJloSwCYZ0oAyJRgAMaT - YADFkl8AxJFeAMKPXgDBjl0Av4xcAL6LXAC8iVsAu4haALmHWgC3hVkAxpxZAraEV7/au4//2LmG/9Ox - fP/dwZP/xqB3/6x7U2m7jVABp3ZSAKZ0UQCkc1AAo3FPAKFwTwCgb04Anm1NAJ1sTQCbakwAmmlLAJlo - SwDJlWEAx5RgAMaTYADFkl8Aw5BeAMKPXgDAjV0Av4xcAL2LXAC8iVsAuohaAMmgXAG4hllvzql+/+PK - nv/VtX//0a11/9m7iv/cwJf/rXxU6ax6Ux6pd1IAp3VRAKV0UQCkc1AAonFPAKFwTwCfbk4Anm1NAJxr - TQCbakwAmmlLAMqWYQDIlWEAx5RgAMaTYADEkV8Aw5BeAMKPXgDAjV0Av4xcAL2KWwC8iVsAu4laRbmI - Wfzhx5z/3cCN/9Cscv/LpWr/07B6/+DGmf/OrYT/rHtTvLyPUQGod1IAp3VRAKV0UACkclAAonFPAKBv - TgCfbk4Anm1NAJxrTACbakwAy5diAMqWYQDIlWEAx5RgAMaSXwDEkV8Aw5BeAMGOXQDAjV0AvotcAMGR - XAi8ilvi3b+U/+LHl//Vs3r/y6Rl/8mgYP/Mpmv/2LiF/+bOpP/CmXH/rHpTTal4UwCodlIApnVRAKVz - UACjclAAonBPAKBvTgCfbk4AnWxNAJxrTADMmGIAypdiAMmWYQDIlWAAx5NgAMWSXwDEkV8Awo9eAMGO - XQC/jV0Av4xcYtGrfv/o0KP/27yF/9CrbP/KoV//x55b/8mhYf/RrXX/38OV/9m7lP+tfFSxvZFSAal4 - UgCodlIApnVRAKRzUACjck8AoXBPAKBvTgCebU0AnWxNAM2ZYwDLmGIAypdiAMmWYQDIlGAAxpNgAMWS - XwDEkF4Awo9eANOrYwHAjVy34MSY/+PIlv/Xs3f/zqdk/8mhXf/In1z/yJ9d/82na//Zuof/5s6l/699 - VPSxgFQEqnlTAKl3UgCndlEApnRRAKRzUACjcU8AoXBPAKBuTgCebU0AzZpjAMyZYwDLmGIAypdhAMmV - YQDHlGAAxpNgAMWSXwDDkF4Ax5dgBMGPXfTp0qf/4MKM/9SvcP/OpWH/y6Jd/8mgXP/Jn13/y6Rk/9W0 - ff/lzaH/uoxj/659VCeselQAqnhTAKl3UgCndVEApXRRAKRyUACicU8AoXBPAJ9uTgDOm2MAzZpjAMyZ - YgDLl2IAypZhAMiVYQDHlGAAxpNfAMSRXwDEkl4jyZtr/+nSpf/dvYT/1K5s/8+mYv/No17/y6Jd/8mh - Xf/Lo2P/07F4/+PJnP/Bl23/sH5VQq17VACrelMAqnhTAKh3UgCndVEApXRQAKNyUACicU8AoG9OAM+b - ZADOmmMAzZljAMyYYgDLl2IAyZZhAMiVYQDHlGAAxpJfAMWTXzXOonH/6dGi/928gP/Urmr/0Khi/86l - YP/No17/y6Ne/8ykY//UsXf/4sia/8Wccv+xgFVPrnxVAK17VACreVMAqXhTAKh2UgCmdVEApXNQAKNy - UACicE8A0JxkAM+bZADOmmMAzZljAMyYYgDKl2IAyZZhAMiVYADHk2AAxpRgPNCkdP/p0qP/3r6C/9aw - a//RqmP/0Kdh/86lYP/NpF//zqdk/9Wzef/jypz/xZ1y/7KBVkywflUArnxVAKx7VACreVMAqXhSAKh2 - UgCmdVEApHNQAKNyTwDRnWQA0JxkAM+bZADOmmMAzZljAMuYYgDKl2IAyZZhAMiUYADHlWAmzJ9t/+vV - qP/gwoj/2LRw/9SsZf/RqWL/0Kdh/8+mYv/RqWj/2Lh+/+XNof/Clmr/s4JXNrF/VgCvfVUArnxUAKx6 - VACqeVMAqXdSAKd2UQCmdFEApHNQANGeZQDRnWQA0JxkAM+bYwDNmmMAzJliAMuYYgDKlmEAyZVhAMyc - YwTHlWDx69Wq/+XJlP/buXr/1rFr/9SsZf/RqmP/0all/9SvcP/dvoj/6NKn/7aFWPy2hVcRsoBWALF/ - VgCvfVUArXtUAKx6VACqeFMAqHdSAKd1UQCldFEA0p5lANGdZQDQnWQAz5xkAM6bYwDNmmMAzJliAMuX - YgDKlmEAyJVhAMiVYJbdvY//6tOj/+LEi//buHj/17Ju/9Wvav/VsG7/2rh9/+PImP/ix53/uIVZyMmg - XAGzgVcAsoBWALB+VgCvfVUArXtUAKt6UwCqeFMAqHdSAKd1UQDTn2UA0p5lANGdZQDQnGQAz5tkAM6a - YwDNmWMAzJhiAMuXYgDJlmEAyZdiI8iWYfblyZz/6dKi/+THkP/fv4P/3Lt+/96+gv/ix5L/6tSp/9Gr - gP+5h1lotoRYALWCWACzgVcAsX9WALB+VQCufFUArXtUAKt5UwCpeFIAqHZSANOfZgDTn2UA0p5lANGd - ZQDQnGQAz5tkAM6aYwDNmWMAzJhiAMqXYgDJlmEAyZZgU8iVYfbgwZP/7Ner/+nRof/nzpz/6NCh/+zW - q//WtYn/vIlazb6PXAS4hVkAtoRYALSCWACzgVcAsX9WALB+VQCufFUArHtUAKt5UwCpd1IA1KBmANOf - ZgDSnmUA0p5lANGdZADQnGQAz5tkAM6aYwDNmWMAy5hiAMqXYQDduGwByZZhMseUYL/PonD/2reK/96/ - kv/Ztoj/zKBy/7+MXLa9i1sWuohaALmGWgC3hVkAtoNYALSCVwCygFcAsX9WAK99VQCufFQArHpUAKp5 - UwDUoGYA1KBmANOfZgDSnmUA0Z5lANCdZADQnGQAzptjAM2aYwDMmWIAy5hiAMqWYQDJlWEA3LZrAceV - YTLGkl9+xJFenMOQXn7Bj1071K1lAb2LXAC8iVsAuohaALmGWQC3hVkAtYNYALSCVwCygFYAsX5WAK99 - VQCte1QArHpUAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wDZs2kB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// - /wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAADAAAAB8AAAA/wA - AA//AAB//8AD///wD///8Af//+AH///gA///wAP//8AB//+AAf//gAH//4AB//+AAf//gAH//4AB//+A - Af//wAH//8AD///gA///4Af///gP////f/8= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/RewindConfig.Designer.cs b/BizHawk.Client.EmuHawk/config/RewindConfig.Designer.cs index 0c2c1db224..ae7ac05a34 100644 --- a/BizHawk.Client.EmuHawk/config/RewindConfig.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/RewindConfig.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RewindConfig)); this.OK = new System.Windows.Forms.Button(); this.Cancel = new System.Windows.Forms.Button(); this.SmallLabel1 = new System.Windows.Forms.Label(); @@ -1001,7 +1000,7 @@ this.Controls.Add(this.Cancel); this.Controls.Add(this.OK); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.Previous_MultiSize; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "RewindConfig"; diff --git a/BizHawk.Client.EmuHawk/config/RewindConfig.resx b/BizHawk.Client.EmuHawk/config/RewindConfig.resx index e4f2985df5..65a871b69c 100644 --- a/BizHawk.Client.EmuHawk/config/RewindConfig.resx +++ b/BizHawk.Client.EmuHawk/config/RewindConfig.resx @@ -120,29 +120,4 @@ 17, 17 - - - - AAABAAEAEBAAAAAAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAA - AAD///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////AcvJxP+WSST/////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////AcvJxP+dTij/nU0l/////wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////AcvJxP+gUCr/0nVH/6tUKf+iTyf/mksl/5JH - I/+SRyP/kkcj/5JHI/9+Qib/////Af///wH///8B////AcvJxP+iVjH/4YZY//aPW//phlX/2XtN/8hw - RP+3ZTv/qlsz/6pbM/+qWzP/g0Yn/////wH///8B////Af///wHilW7/+8Ch//+zjP//nm3/9o9b/+mG - Vf/Ze03/yHBE/8hwRP/DbUL/w21C/4tJKf////8B////Af///wH///8B3dHH/+icdv/7wKH//7OL//+z - jf/4qH//7qF6/+GYdP/hmHT/4Zh0/9eIYf+STCv/////Af///wH///8B////Af///wHc08r/6Jx2//u/ - oP/OZzP/55Rs/+aOYv/lh1j/5YdY/+WHWP/lh1j/zHJD/////wH///8B////Af///wH///8B////AdzT - yv/nmnP/0nA+/////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B3NPK/+eac/////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8BAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA - //8AAP//AAD//w== - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/SNES/SNESControllerConfig.Designer.cs b/BizHawk.Client.EmuHawk/config/SNES/SNESControllerConfig.Designer.cs index 67c13a6552..9bf9940384 100644 --- a/BizHawk.Client.EmuHawk/config/SNES/SNESControllerConfig.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/SNES/SNESControllerConfig.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SNESControllerSettings)); this.OkBtn = new System.Windows.Forms.Button(); this.CancelBtn = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); @@ -193,7 +192,7 @@ this.Controls.Add(this.label1); this.Controls.Add(this.CancelBtn); this.Controls.Add(this.OkBtn); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController_MultiSize; this.Name = "SNESControllerSettings"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Controller Settings"; diff --git a/BizHawk.Client.EmuHawk/config/SNES/SNESControllerConfig.resx b/BizHawk.Client.EmuHawk/config/SNES/SNESControllerConfig.resx index ca821b54f8..1af7de150c 100644 --- a/BizHawk.Client.EmuHawk/config/SNES/SNESControllerConfig.resx +++ b/BizHawk.Client.EmuHawk/config/SNES/SNESControllerConfig.resx @@ -117,508 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAwAMDAQAAAABABoBgAAxgAAACAgEAAAAAQA6AIAAC4HAAAYGBAAAAAEAOgBAAAWCgAAEBAQAAAA - BAAoAQAA/gsAADAwAAAAAAgAqA4AACYNAAAgIAAAAAAIAKgIAADOGwAAGBgAAAAACADIBgAAdiQAABAQ - AAAAAAgAaAUAAD4rAAAwMAAAAAAgAKglAACmMAAAICAAAAAAIACoEAAATlYAABgYAAAAACAAiAkAAPZm - AAAQEAAAAAAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAQAAAAEAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAHR3AAAAAAAAAAAAAAAAAAAAAAAAAAAAdHdEcAAAAAAAAAAAAAAAAA - AAAAAAAAAHd0d3QAAAAAAAAAAAAAAAAAAAAAAAAAAEd8d3UAAAAAAAAAAAAAAAAAAAAAAAAAB3yHfHZw - AAAAAAAAAAAAAAAAAAAAAAAAd3fIyHVwAAAAAAAAAAAAAAAAAAAAAAAAfHh3jIxwAAAAAAAAAAAAAAAA - AAAAAAAHd8jIyHdgAAAAAAAAAAAAAAAAAAAAAAAHd4yHfIdAAAAAAAAAAAAAAAAAAAAAAAAHyMjIyMhQ - AAAAAAAAAAAAAAAAAAAAAAB3d3eMh4dgAAAAAAAAAAAAAAAAAAAAAAB8jIyIfIdQAAAAAAAAAAAAAAAA - AAAAAAB3h4jIiMh3AAAAAAAAAAAAAAAAAAAAAAB8jIeHeIjHAAAAAAAAAAAAAAAAAAAAAAeIiHh4eMiE - AAAAAAAAAAAAB0dHcAAAAAd8h4eIiIiHcAAAAAAAAAB0d3d3RwAAAAeIeIiIiIh3RwAAAAAAAHR3d8h3 - dAAAAAfIh4iIiHiIx0cAAAAAdHh3eIeHhwAAAAeHiIiIiIiId3R3dHR0eHd4h4eHhAAAAAd4eIiIiIiH - x3d2d3eId4iIiIiIhwAAAAd4eIiI+IiIh3d3eHh3iIiIiIeHwAAAAAfIjHeIiIiIyIeHh4iIiIiIiIiI - cAAAAAeIQ0R3h3iIiMiIiIiIiIiIiIiEAAAAAAfIR3d3d0iIiIh4iIeIiIiIiHhAAAAAAAB4d3d3SHiI - h4fTiIi3iIiIeIwAAAAAAAB3h4d3eIeIiHiJiIuIiIh4jHAAAAAAAAAHyId3h3h4iIh4iIiIiIiHeAAA - AAAAAAAAB8iMiMjIiIiIh4h3aMjHAAAAAAAAAAAAAAdYyIeIiIiMjId6d4eAAAAAAAAAAAAAAAAHdsjH - eIeH6MiId3AAAAAAAAAAAAAAAIiIh4V8jIh4eIfHcAAAAAAAAAAAAACIiIh3AAAHd3h3fHcAAAAAAAAA - AAAAAAiIjHgAAAAAAHx8eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAA - AAd0dAAAAAAAAAAAAAAAAAB3x3cAAAAAAAAAAAAAAAAAd3fHcAAAAAAAAAAAAAAAB3yMh3AAAAAAAAAA - AAAAAAfIeMdwAAAAAAAAAAAAAAAHjIyHQAAAAAAAAAAAAAAAfId4yHAAAAAAAAAAAAAAAHjIyIdQAAAA - AAAAAAAAAAB3iId4YAAAAAAAAAdwAAAAjIiIiIUAAAAAAHd3dAAAB4iIiHh8cAAAAHd3x4dwAAd4iIiI - h3Z3d3R3yIh4cAAHh4iIiIfHd3d4iIiIh3AAB3jHiIiIiHeHiIiIiIwAAAh3dXh4iMiIiIiIiIhwAAAA - yGd0d4iIeIi4iIiMAAAAAIeHd4iIh32IiIiIcAAAAAAAd4jIyIiIiHeHyAAAAAAAAAB3h4iIh8h3dwAA - AAAAAAAIh8fIh4eIaAAAAAAAAACIiHAAB8jIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////////////////////n////g////wP///8B///+Af///gH///4B///8Af///AH///wB//n8AP/A+AB - /AHgAAAB4AAAAeAAAAPgAAAH8AAAD/AAAB/8AAA//wAA//4AA//weA////////////////////////// - //8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRwAAAAAAAAAAAAB3dAAAAAAAAAAAAA - d8dwAAAAAAAAAAAAfId3AAAAAAAAAAAHeMjHAAAAAAAAAAAHyHh3AAAAAAAAAAAHh3eEAAAAAAAAAAAI - yIiHAAAAAHd2cAAIiIiIQAAAd3d4UACHiIiId3d3eHiIcACHh4iIyHeHiIiIcAAIR3d4iIiIiIiMAAAH - d3eIh3iIiIhwAAAAeMh4iIiHiMAAAAAAAHfIiMh4aAAAAAAAiIgHyIfIAAAAAAAIgAAAAIAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD8f/8A+H//APB/ - /wDwP/8A4D//AOA//wDgP/8A4D/BAOAfAQDAAAEAwAABAOAAAwDgAAcA8AAfAPwAPwDwgP8A5/f/AP// - /wD///8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAd1AAAAAAAAB8cAAAAAAAB4eAAAAAAAAHyMgAAAAAAAiIhwAAAHcACI - iHcAd3hwAIz4jIeIiIAAd3eIiIiIAACHeIiIiHAAAACMeMh4AAAAiAAIgAAAAAAAAAAAAAAAAAAAAAAA - AAD//wAA//8AAP//AADj/wAA4/8AAMP/AADB/wAAwfkAAMDBAADAAQAAwAMAAMAHAADwDwAAzn8AAP// - AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAA9OzsAZD8/AGg8 - PABtPj4AQkNDAEZIRwBWQkIAV0REAF5AQABbRkYAVklJAFxPTwBTU1MAXFJSAF5ZWQBkQEAAYUREAGZF - RQBqQkEAYEtLAGNPTwBwQUEAfUZGAHJKSgB2SUkAfU9PAGBRUQBgVFQAZlZWAGZYWABqWVkAclZWAHpU - VAB9W1oAbmJiAGtoaABtaWkAcWdnAHdnZwB8Y2MAe2pqAHJxcQB+dHQAd3l5AHl6egCGT08AiU9PAIFP - UACGU1MAjVFRAIlWVgCMV1cAg1xbAIxaWQCQUlIAlVJSAJFXVgCXVVUAmVVVAJZaWQCSXV0AlV9eAJpZ - WgCeW1sAml5eAKBZWgCgXFwAql9fAIRmZQCIZWQAhWtrAI5ragCTYmEAnGBhAJ9kYwCaZmYAk25uAJ1s - awCFdHQAiXd3AIt+fgCWd3cAmHR0AJV5eQCbfHwAo2JhAKZhYQChZWUApGVkAKplZACsZGQAqmhnAKZr - agCnbGsAqmloAKlubQCsbW0AtGZnALhsbACxb3AAv29wAKVxcACrc3IAr35+ALN0cwC5c3MAvXBxALR4 - dgC1fHsAunt6AMNtbgDGb3AAw3FyAMZwcQDGdXUAyHR1AMp3eADBeXkAxnt7AMB/fgDLensANLBSAEWf - TgBBtFwAPMdnADHkdgDciiIAvoF/AISrdwDln0sA35lhAN2XfADgmmEA8LdlAO61cAArWPIALWT+AEh5 - +gDOf4AAfoCAAHiA1ABZv9wAZrnUAGK+2ABxnv4Ad6P/ADPX/QBw0OcAW+D7AIKEgwCPgoIAjI2NAJuC - ggCUiIgAmYqKAJGSkgCjhIQAqoKCAKKLiwC+hIMAsoqKALaSgQCum5sAsZubALqqlQCdgr4Ar6ytALGh - oAC6pKQAwoSDAMyBggDGiIYAyYiHAMWMigDMjIoA0ISFANKHiADUjIwA2Y6NAMCUjQDIk44A0JCPANaP - kADHlZQAzpSSAMScmwDUkpIA2ZSVANWYlgDampcA2ZeYANWcnADam5sA4p2cAMChjwDeoJ4A5aCFAOaj - jQDlpJoA2p6hAMOkowDOoaEAy62tANegoADdoqEA2aGpANGsrwDdq6kAwbG4ANGysQDdtLQA2ri3AOGk - owDjqKYA66ylAOGnqADjq6oA6a2rAOOwrwDssK4A5K+wAOaztADttLIA57i2AO24tgDmurgA6rq6APC1 - swDyuLYA9Ly5APi+uwD1wL0A+cC9AKKMwACkk8QAqprMALSayACptsEAlaDkAOy/wACRxtQAgOv9AJnr - 9wDEwsoA5sbGAOzCwgDuyMcA7MzMAPPEwgDxy8oA9dPTAPja2gAAAAAAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAoIJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAACYXODs4BCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - KTNDQ0M7OAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALllbYmJZQBcAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYYWNwcHBwWy8mAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFLanBwcHBwYz0eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAABpqcHBwcHBwZVkUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl11w - cHBwcHBwcGcSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIXdwcHBwcHBwcGkSAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPXBwcHBwcHBwd2wYAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAACXbnBwdXB5dXl0eW4hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAid3R5eXl5eXl5q6wzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9eXV5 - i7CxsbGxsblLKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABndYuwsbm8uby5vMFnHgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJt3q7G3vMHB1cLBwdWuEgAAAAAAAAAAAAAAAAAA - AAAAAAAeEhMSCiUAAAAAAAAAAEexsbm/1dXZ2dnZ1da5ZgwAAAAAAAAAAAAAAAAAAAAjEjNZaW5qXRMl - AAAAAAAAADW5s7/V2N7i4uLi3dzZrQQPAAAAAAAAAAAAAAAAHxhZbm5uaWltd6ASAAAAAAAAAEmzvMLZ - 3uP29/fw4uTkuUAWCy0AAAAAAAAAAB4YYXd3gG13vbm5vb8zAAAAAAAAAE6xwdXd4/b6+/r38OTl1Vlc - OAMIFAweFBQSM2mtrYB3vdXT0NXExNU1AAAAAAAAAE65wtXe8Pr7/Pz79+fn1WphZ25pXV1mbHetrXd3 - tdXT4vXw49nZ3NYgAAAAAAAAAEu3wdje9vv7/Pz79+fn34B3d2xtoHeud66uudXT4vD39/Dj49zk5G0A - AAAAAAAAAD2xwcwoH0/L/Pukyenp5K27u7m5uczM0Nve4vb3+vr56OPl5eXl1igAAAAAAAAAADWxwQgB - BQYNmveZK/Dp6cG/wcTV2eP3+vr6+/r6+ejm5ufn5+nkIgAAAAAAAAAAAJmruR4sjC2WLFCdDd3p6dXW - 1tXI3vn67pCO9Ojp6efo5+fm59wiAAAAAAAAAAAAAABLsZ0FmC0qKgHMRcjp6dzc1Y2KiO3RlfKTj+np - 5ubm5eXk1SIAAAAAAAAAAAAAAACdab/Lp5aWnEfV1cHm6ebk6pGSiabZ8fOU0uXl5eTk3NyuRQAAAAAA - AAAAAAAAAAAAn0ux0KFTaMHBv7nC6efp3Ovv7OTm3OPl3Nzc3NfW1U6fAAAAAAAAAAAAAAAAAAAAAABF - Wa25t7yxs7Gw5+fn5Obk18XG3NyBfHvD1cSgNQAAAAAAAAAAAAAAAAAAAAAAAAAAAFUzarGwsHl5sefn - 39zEgoZ/hL19fnqirj2jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATj09ZXV0cLzn3NXChYeDub+1pbQ9 - VQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0rXj+rpInTBDcHCz5NW/ucG5u7GAM1QAAAAAAAAAAAAAAAAA - AAAAAAAAAADLytDi9tOemQAAAAAAUy9EecLEsa1uPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj11Mme - VakAAAAAAAAAAAAATS84M0akAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE - AAAAAAAAAAAAAAABAAAAAQAAAAAAAFFNTQBRUlIAU1RUAGJHRwBiT08Aa0lIAGJTUwBrVlYAYllZAGZc - XABpWloAb1xbAHNTUwB7V1YAc1hXAHFbWwBkZWUAaWFhAG5kZABpamkAcGFhAHlubgB2cHAAf3V1AH55 - eQB8fX0AgUpKAI1PTwCLWFcAhlhYAI9ZWQCKXFsAm1ZWAJJZWQCWWVgAmlpbAJtcWwCiXFwAl2BfAIBg - YACAZ2YAgG9vAI9oaACWZWQAmGBhAJ5kZACcaWoAmm9vAIV0dACNcHAAiXZ2AIB8fACac3IAm3V0AJ51 - dQCZfHwAnHx8AKNmZgCnZmYAqmJiAK5jYwCvb24AtWVmALBtbgC5bW0AvmxtAKx+fQCxcnIAtHBwALZz - dACydXQAtnd2ALlwcAC5dnYAt3p5ALh5eAC8fHsAun18ALx+fQDGb3AAxnBxAMdzdADAd3YAyHJzAMlz - dADJdXYAynd4AMd/fwDMe3wAzXx9AHunbwBhvHIAYsN4ANuLOwC2hn4A4Zt5APC3ZABte9sAX47+AHWM - 5QAl0foAY+P8AIeDgwCFhoYAioSEAJOIiACWi4sAmpKRAKGCgQCmhYUAqYGBAKuDhACniooApYyMAKiO - jQCyhYMAvoWEALeNjQCrj5AAr5eXALSVlAC9lJMAmbCEAK6RugDBgYAAwoSCAMWDhADChoQAxYeFAM6A - gQDFiIYAxoqIAMqIiQDMi4oAy4yKAMiPjQDPj44A0ISFANKJigDUi4wA04+NANWNjgDKkY8A0JCOANud - iQDWj5AAzJSTAM2XlgDGm5oA1pGSANOUkgDVl5EA1pOUANiVlgDYmJUA2ZeYANKenADbmpsA3pmYANuc - mgDbn5wA1aacAN6gngDqqZoA3Z+gAMyjowDCra0AxqysAMqpqQDboaAA3qKiAN6logDbp6UA3aWkANer - qgDWsbMA0rW0ANe0tADfs7IA4aSiAOGlpQDkp6UA46imAOWopgDsraIA6qimAOGoqADhrqwA6a2rAOqv - rADpsK4A7LGuAOGzswDlsbEA7bKxAO+1sgDotrYA5rm3AO+4twDot7sA6bq5AOu9uwDrv70A8bazAPG2 - tADxuLUA9Lm2APC9uwD2vboA9L+9APi+uwD4v7wA8sC+APXAvgD5wL0AkILJAKqXzACsu8cAqr/LALLV - 3QDawMIA48XFAOvDwQDswMAA7cTDAO/ExQDgxsgA8cbEAPTGxADwyskA9MvJAPLNzQD21dYA+NjZAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAMEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHCEcBQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAayU9PSYbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQlBSQiJpAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAM0pSUlJQPRcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnUlJSUlJGFQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAFJSUlJSUkoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzUlJSWVJZfxAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5XWYqKioqGDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoqMkpqa - mqAsAAAAAAAAAAAAAAAAAABoNAAAAAAAAACMjJyuvLy2toYHAAAAAAAAAAAAABcOIDouBgAAAAAAc4yc - tsHKysPAriIKAAAAAAAAABYgRk1LTX+DEAAAAABukqXB4ejo4dHPQCIEChcXEwggTXV/k66unKMpAAAA - AG6Srsro6ero0dN/Rk1NRk2Dg4STrsbh4cHAt2sAAAAAbpKuOXPe6ajW15KGg4OGk528yuHo5eHPz882 - AAAAAAB4jCkDAxSoMabXt5yjt8ro3ePo5dbT09HTdAAAAAAAAABGcBFoGgFwdtfDwHxi2dpmZcrX09HP - z0MAAAAAAAAAAHh/qWwaOa6cz9PNZGPYsdzbzc3DwLk2AAAAAAAAAAAAAAAvhpKakoyg19HNyKS5wHtb - orZ/cwAAAAAAAAAAAAAAAAAANkaKWVm5zb1gYV6cXVxfNgAAAAAAAAAAAAAAAAAAALGvlTIuP1K5tqCR - l4xfLwAAAAAAAAAAAAAAAAAAsbPBenkAAAAAcCVYjE0scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////+f///+D////A////wH - ///4B///+Af///gH///wB///8Af///AH/+fwA/8D4AH8AeAAAAHgAAAB4AAAA+AAAAfwAAAP8AAAH/wA - AD//AAD//gAD//B4D////////////////////////////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAAWlJSAHBJSQB1SEgAe1dXAHdYWAB5WlkAel1dAGBiYgB1bGwAfWtrAHh2 - dgB9fn4Ag01NAIRXVwCIV1cAhV9eAItbWgCgX14ApV1dAJhgXwCNYGAAnWtqAJhtbQCCdnYAh3x8AI15 - eACeensAqGBgAKhoZwCga2oArGpqALNqagCzb28AtG1tALltbQCxb3AApnVzAKlzcwCqdHMApnp6AKd+ - fgCpensAq3x7ALZ3dgC8dHQAvH59AMZvcADGcHEAxXN0AMhycwDJdncAynh5AMx5egDNfn8Ajo1wAOek - VgDGgH8A4p53AEZ2+gB8u4AAd8PaAIuEhACOh4cAjo6OAJ+DggCejo4Ao4SEAKSIiACsi4sAqo2MAK6P - jgC+gYAAvoaGAL+KiACskJAAtJeXALWenQC5np4At6iOAKmyjgC9nroAwYSDAMaGhADOhoYAxomHAMiK - iQDJjYwA0oeIANOOjwDUjY0A2ZiPANaPkADGkZEAx5eXAMySkADGnZwA1ZOSANeTlADWl5YA2JSVANGZ - mADan50A3J6dAOCcmwDVoJ8A7K2fAMOtrQDXo6IA3aCgAN+kpADVq6oA3ay3AMu0tADPtrYA3L+/AOCi - oQDhpqUA5KelAOinpgDlq6gA46usAOOvrQDqrqwA7LGuAOayswDjtrQA5re1AOqysQDts7EA57y6AO+8 - ugDrvL0A8LOwAPC1sgDwtrQA87q3APS6twD2vboA8b69APi/vAD2wb4A+cC9AJmTzwDHqMMAu8PMAIHf - 8QDByNAA7cLCAO3FwwDvxsQA5cjIAOzOzgDwxcQA9cbEAPPP0AD10tIAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - BQMJAAAAAAAAAAAAAAAAAAAAAAAAAAAPHBMNAAAAAAAAAAAAAAAAAAAAAAAAABojLy8TAAAAAAAAAAAA - AAAAAAAAAAAAAB0wMDAiPgAAAAAAAAAAAAAAAAAAAAAAQjAwMDAtGAAAAAAAAAAAAAAAAAAAAAAAFzIy - NTU5CgAAAAAAAAAAAAAAAAAAAAAAIjZYWFxcBwAAAAAAAAAAAAAAAAAAAAAANlxtdW11JQAAAAAAAAAA - PgcRDgkAAAAAXG1/lISAZgMAAAAAABkVLC5SVhcAAABNY3WWnJuLfB8UBAcQHkhWaX91dSsAAABNY2BM - mJeCiVJSVl9laX+WloSJgEIAAAAAXAEIC0tGjnR0dJaRk5qNjIyJQwAAAAAAJkNADBtdjIaPO1GSPYuJ - hnVEAAAAAAAAAClISWRcd4xwkGp8UE90VwAAAAAAAAAAAAAAKSQ1NYZ7OjhbPDdGAAAAAAAAAAAAAHNv - YGsAKyJoXFYmRwAAAAAAAAAAAAAAcnIAAAAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// - /wD///8A////APx//wD4f/8A8H//APA//wDgP/8A4D//AOA//wDgP8EA4B8BAMAAAQDAAAEA4AADAOAA - BwDwAB8A/AA/APCA/wDn9/8A////AP///wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAABjZGQAdmRjAHtpaQB/eHgAgU9PAKBaWgCFbm0AlWtqAKptbgCwZ2cAsGhoAKxw - cACteHkAvnJyAMZvcADGcHEAy3l5AMx9fgCFmXQAwIB/ANeUfQDhoX8AlIqJAJWMjACYiIgAoIaGAK2K - igCxh4cAvoGAALKKigC4iYgAuJWVAL2cnACss50AuqKhAL+mpgDLgoIAxImHAMeNjADLkI8AxpWTANCS - kQDYlZUA1J6dANqZmgDdnp4A1J+oAMaiogDOr68AzLKyANi5uADhpaIA4qypAOWtqADrrqsA4bKwAOay - sgDtuLYA57++AOy4uADxtLIA8be0APa9ugDswL4A9sG+ALCcxwC5ncIA06zBALnH0QC2ytQA7sPDAPLS - 0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAZBgUAAAAAAAAAAAAAAAAACw8KAAAAAAAAAAAAAAAAGhAQDgAAAAAAAAAAAAAAAAkRESUYAAAA - AAAAAAAAAAAlKy4uBwAAAAAAAAcDAAAAKzlHPCYCAAAYCB0oKgAAAC0wSDs0FB0nLDlAOiwAAAANAQQb - Pi9DRkVBPzUAAAAAJB4cKz5EQjMiNSkAAAAAAAAAHwwRNxYVEyQAAAAAAAAxMgAAACEgAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA4/8AAOP/AADD/wAAwf8AAMH5 - AADAwQAAwAEAAMADAADABwAA8A8AAM5/AAD//wAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAkAAAAJAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAUAAAAOAEBAVUAAABUAAAANQAAABAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkFBSUvGRl5TCkpwlYuLtxDJCTQFw0NmQAA - AEkAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAwMKE8rK6V6RET2klJR/5ZS - U/+OT0//ZDc38B0QEJoAAAAyAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDAwYVzAwoopP - T/ygXVz/oFtb/55ZWf+bWFf/k1NT/1UvL9wGAwNcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AARNKipxhk5O+adkY/+uZWX/tWdo/7VmZ/+qYWH/nltb/3hERPcfERGCAAAAFgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADEZGS1zQ0LXqGdm/7ptbf/Fb3D/x3Bx/8hwcf/BbW7/q2Vl/4hPT/82HR2gAAAAIAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAB1gxMYyYXl3/vXFx/8Zwcf/HcHH/x3Bx/8dwcf/HcHH/uG1t/5NY - V/9EJia2AAAAKQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPB8fNH1MS+K4cnH/x3Fy/8dwcf/HcHH/x3Bx/8dw - cf/HcHH/wHBx/51gX/9PLCzGAAAAMwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAMAAAAAAAAAAAAAAAAAAAAALhAQFIZXVs/RjIz/1Y2O/9qYmP/eoaL/46qr/+aysv/ot7f/6rm5/+m4 - uf/otbX/5q+v/+uvrf/jqab/wYeF/28/P/QhEhKvAAAAXwAAACgAAAANAAAABQAAAAMAAAACAAAAAwAA - AAUAAAAKAAAAFQAAADAdDg9oSSkptHZHRu2dYmL+t3Z1/758e/+6enn/tnh3/7d5eP+8fn3/w4SD/7Z6 - ef9eODfbBgICTgAAAAgAAAAAAAAAAAAAAAAAAAAAPhwcJJVjYuPXkZH/2JOU/92fn//iqqr/57O0/+u8 - vP/uwsL/78XG/+/Exf/twMD/67i4/+60sv/wtrP/zZKQ/5taWv9xQED2MRsaxAgEBIcAAABaAAAAQQAA - ADcAAAA2AAAAOwAAAEUEAgJZHA4OfUcnJ7l5SkntqGxr/8CAfv/DgoH/vH59/7p+ff/DiIb/zZGP/9GT - kf/UlJP/1peV/9eZl/+GVlbuGQsLVwAAAAcAAAAAAAAAAAAAAAAAAAAARiIiLZ9rauvZk5P/2peY/+Ck - pP/lsLD/6ru7/+/Fxf/yzMz/9NDQ//PPz//xycr/7sDA//K5tv/1u7j/36Kg/6dmZf+mZWX/j1ZW/WM6 - OutDJSXQNBwcvDAaGrQ0HBy1PiIivUwsLMtkPDzfh1VU9a1xcP/EhIP/xIWE/7+Cgf/Ch4b/zZST/9mk - ov/grq3/4a6t/96lo//eoJ7/36Kg/+Cjof+IWVjnGwwMQwAAAAIAAAAAAAAAAAAAAAAAAAAARyQkL6Br - auzZk5P/25qb/+GnqP/ntLT/7cDA//LLy//209T/+NjY//fX1//00ND/8cbG//W9u//4vrz/46ak/7d0 - c/+vb27/s3Jy/7d2df+ucXD/pWpp/6Npaf+nbWz/sHVz/7p9fP/EhYT/yImI/8WIhv/DiIb/ypGP/9eg - n//hr63/57q5/+rCwP/rwsD/6bq4/+evrf/nq6n/6q6r/9qgnv9wRkbDBwAAHgAAAAAAAAAAAAAAAAAA - AAAAAAAASCQkLZ1nZuvYkpP/25uc/+Opqv/qtrf/7cHB//TOzv/52Nj/+tzc//na2v/xz9D/8MfH//fA - vv/6wb7/6a6r/8OBgP/DgoD/vX58/7h7ev+8fn3/woOC/8aHhv/HiYj/xoqJ/8aLif/Ijoz/zZST/9eg - nv/hrav/6Lm3/+zCwf/uyMf/78nH/+/Dwf/uvLr/7ba0/+60sf/vtLL/8ri1/7J+fflMKSltAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAQyEhI5JcXOPWj5D/3Juc/8qVlf+BZmb/bl5e/4l4eP/AqKj/8tPT//LO - zv+5p6b/w6qq//fBv//7wr//8LWy/86Ojf/Ojoz/0ZGP/9GSkP/OkY//zpOR/9GamP/VoJ//2qel/+Gv - rf/nt7X/6727/+3Dwf/wycf/8czL//LLyf/yxsT/8cC+//G7uf/yubf/87m3//S7uP/4vrv/1J6c/3JH - RrAdCgsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANRcXEYJNTcvPiIn/15aW/2VNTf85Ojr/Q0VF/0JF - RP9dXFz/n5GR/+S/v/+bh4f/hXp6/+25uP/7wr//9bu4/9qcmv/Zmpj/252b/96gnf/ipKH/5q+s/+u+ - vP/vycf/8srI/+3Hxv/wysj/9c7M//TNy//0ysj/9MbE//TBv//1vrz/9r26//e9u//4vrv/+L+8//vB - vv/hqqf/g1ZVzDwcHC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW4+Ppq/env/05OT/2ZX - V/9rbm7/fX9//3l6ev99f3//cHJy/5F9ff+ff3//XFhY/9eop//8wr//+L+8/+Wppv/ipaP/5qil/96i - pP/Kmaz/1qi1//LGxP/tyMf/qb3J/23E3P9kw9//vMTN//jDwP/3wb//+MC9//i/vf/5v73/+b+8//i/ - vP/3vrv/+L68/92mo/+IWlnRRSMjOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcv - L0mbX1/y15GS/6GAgP9XV1b/iYuL/4CBgf98fX3/cnR0/1dPT/++j4//km9w/9Sfnv/6wL3/+cC9/+6z - sP/ssK3/0Z+u/4OH1P9YffD/QGPs/7KYyv/Ct7z/Ytrz/3Ts//8s2f//cbvU//m+u//4v7z/+L67//e9 - uv/1vLn/9Lq3//O5tv/zuLX/0puZ/4RVVctGIyM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADIXFwdrPDySq2ts/diZmf/ApKT/sKur/4CBgP95enr/iYiI/49zdP/do6P/36Ch/96e - nv/zuLX/+sK///W7uP/1ubT/qZC//2qY+/9tnf//MGT6/56FxP/esK//nMbS/57n8/9+z+T/ybG3//a6 - t//zubb/8re0//C1s//utLH/7rKw/+qvrP++iIb9dklJtkMgISoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHIyMSazw8kZ5hYvXNjI3/2aSk/7OMjP+bd3f/sIKC/9KV - lv/cnJz/2peY/9aRkf/koqL/+sG+//nAvf/5v7z/4amw/6qZx/+aouP/qpvP/+mxtv/2urj/6rGv/+S6 - u//ptrX/466n/+Ovqf/ssK7/6q6s/+isqv/oq6n/2J2b/6JubfFoPT2NOxoaFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBoaCFowMFd7SEjAomZm9sWC - gv/XkZL/25SV/9iSk//Wj5D/1IyN/9KHiP/UiIj/8bOx//rCv//3vbv/9ru4//O3s//xuLX/7q6e/+ej - hf/npIn/7bCp/+Otp/+KsX3/ULdm/1WjWv+7oYz/5KWk/9uenP+4gH79glJRzVYuLlQgCAkGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAA8HBwQVy4uS3FBQaCPV1fjsG5v/cmAgf/ShYb/0YKD/85+f//LeXr/2I2M//e8uf/1vLn/7rOx/+2y - sP/lpJX/5qFY/+6xXP/djS3/35h9/86gl/9SwW7/Nd90/0WxXP+vlH//wYSE/49cW+VlOTmBQR4eHAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGk7OhqIWFd8oG5u8J5qav+eX2D/tmts/8Z0df/KdHX/yXJz/92T - k//3vLn/7LGu/+Snpf/dm5L/4Z1q/+61dP/fmmX/15WM/9eYlv/Bm43/r6uR/6uNgP+WYWDtbkBAnUwn - JzQVAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiFJSBnhC - QgpqNDQJWSUlB08dHQdfKisKfENDFJJWViinbGtRvYOCjtOcm8/pt7X157y6/7eOjfhxRUW7aTk5m4RK - StehWlr6uGdo/8Zwcf/dkpH/8bSx/+OnpP/YmZj/1ZWT/9ealP/Vl5X/0JCP/8eIhv+zdnb/lFtc6nA/ - QKRSKio/JQwNBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADTn6AB2qioDMuUlCHBhYU8voCAWcCBgXTEhoaLzZGQqdeensngrKvn47Sz/NOop/+yiIfyi2Bgs2k+ - PlZXKysPAAAAAUYlJRxcMTFYcj4+pYpMTeWmXF3+xnl5/9+Zl//dnJr/z46M/8KCgf+vc3L/ll9e831L - S8hlOTl/TigoMy0REQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABzQUIDnmprDriGhifHlpZMzp6eeNCgoZ7On5+2yJqaybuPj9WnfHzVj2RkunVJ - SYNbLy8/PRQUCgAAAAAAAAAAAAAAAAAAAAAAAAAAKRUVBU0pKSphNDRtd0BAsotNTd2ZW1vrkVlY4HtJ - Sb5lOTmCUysrQTsbGxEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCwsA2Y4OA5xQkImdkhIRHhKSll0R0dibUBAWWI2 - NkNUKCgoOhISDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhkZB0km - Jh5LJiYsRSEhITATFAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD/+H////8AAP/gH////wAA/8Af//// - AAD/gA////8AAP+AD////wAA/wAP////AAD/AA////8AAP4AB////wAA/gAH////AAD8AAf///8AAPwA - B////wAA/AAH////AAD8AAf///8AAPgAB////wAA+AAH//4HAAD4AAP/8AEAAPgAAf/AAQAA8AAA/wAA - AADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAEAAPAAAAAAAQAA8AAAAAADAADwAAAAAAcAAPAA - AAAADwAA+AAAAAAfAAD4AAAAAD8AAPwAAAAAfwAA/gAAAAD/AAD/gAAAA/8AAP/gAAAH/wAAgAAAAB// - AAAAAAAAf/8AAAAD4AP//wAAgB/8H///AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAYAAAAZAAAAGQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAARCQkYOh8fb0ooKK80HByiCQUFTAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAIhERFmA2Np2ITUz3lVNT/4dLS/5IKCi9AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAANjODiBllhY+61kZP+vY2P/pV5e/3xHRvEhEhJfAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAASSgoN41VVeS6bW3/xW9w/8dwcf+9bG3/klZW/jogIIEAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1RkWcs2xs/8dxcv/HcHH/x3Bx/8Zwcf+iYWH/SSkpmAAA - AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUC0tMZtgX+fGcnP/x3Bx/8dwcf/HcHH/x3Fy/61q - av9UMTGqAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxRER1tm9v/8hxcv/HcHH/x3Bx/8dw - cf/HcnP/tnRz/185OboAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAACIxXV7TEdHT/yHJz/8l1 - dv/Kd3j/ynd4/8p4eP/Bf37/bURDywAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNKysjo2Zm4Mt4 - ef/NfH3/z4GC/9GFhf/RhYb/0YWF/82Mi/9+UVHeCAICOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAACwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGc+ - Pkm1c3P30IGC/9OJiv/XkZL/2ZaW/9mWl//YlJX/2JmY/5hnZfMeEBBrAAAABwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA0FAgItHhAQWzAbG4IqFxeHDQcHWwAAABkAAAAAAAAAAAAA - AAAAAAAAek1MdMN/f//VjI3/2piZ/9+io//hqKn/4qmp/+Clpf/jpqT/wImH/04xMLwAAAA6AAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABEbDg5GRygokW5CQs+MVlbxnGJh/JdfXvxnPz7hHA8PbgAA - AAwAAAAAAAAAAAAAAACMW1qbz4qK/9qXl//gpqb/5rKz/+q6u//rvLz/6La2/+qxr//epKL/j1lZ+DUc - HLACAQFPAAAAHQAAAA8AAAAPAAAAEwAAACIbDg5MVDExnYZUU+SpbWz+uXl4/7x+fP/AgoD/xoeF/72A - f/9fOzu1AAAAHAAAAAAAAAAAAAAABJhkZK/VkZH/3Z+g/+axsf/twMD/8svL//LNzf/vxcX/8Lq4/+6z - sf+1dHP/j1VU+144N9g7IiKqMhwclDcfH5RGKSmiYTw7v4tZWOiydXT+woOC/8aKiP/Ol5X/2aWj/9ui - of/cnpz/2pyb/35TUrgAAAAVAAAAAAAAAAAAAAAFmmVkstaTk//hpaX/7Lm6//TLy//419f/+NnZ//TP - z//1wb//9Lq3/8aGhP+1dHP/s3Rz/6xwb/+pb27+rnNy/7Z7ev/BhIL/yY2L/8+WlP/apqT/5be2/+vB - v//rvrz/6bKw/+uvrf/Um5n/bUVEgAAAAAMAAAAAAAAAAAAAAAOTXV2q1ZGR/9CYmP+dfX7/o4yM/9e8 - vP/z0tL/zLOz/+u8u//5v7z/1peV/8uLif/Ki4r/yoyL/86Ukv/TnJv/2qSi/+Gtq//nuLb/7cPB//DJ - x//xxsT/8b+9//G6t//zubf/77az/6d1dM89Hx8lAAAAAAAAAAAAAAAAAAAAAIJOTojNiIn/jGlp/01O - Tv9UVlb/dnNz/7uhof+Pfn7/xJ+e//zCv//lqKb/3J2b/+Chnv/hpaT/7Ly5/+vHxv/MxMn/0MjN//LK - yf/1x8X/9sLA//a/vP/3vrv/+L+8//S7uP+5hoXhYTo5RwAAAAAAAAAAAAAAAAAAAAAAAAAAaTs7RrVz - dPKmfn7/cXJx/4SGhv97fX3/b2Zm/516ev+7kJD/+sG+//C2s//lqqr/rpbA/3aB2/+ql83/tMHK/2jc - 9P9OzOz/2r3B//q/vP/3vrv/9ry6//a8uf/ss7D/tYGA32c+Pk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAvEhIHg01Njbp9fvrCn5//nI+P/4R7ev+fgID/2Jyd/9ybnP/ytrT/+b+8/+ewtf+Mld3/ZI36/5eI - zv/Ttrn/sNLc/6/Czv/stLT/8re0/++0sf/tsq//2qCe/6Rxb8phODg+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABCIB8MeUZGbqRpata8gYH8x4mJ/9eTk//YkpP/04qL/+Cbmv/5wL3/9726/+Sw - t//Zrrn/56qY/+2smf/lr6n/nLWJ/4Gtdf/Pppn/3qGf/7yEg/KJWViYTyoqIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQh0dGXJAQGOXXl7NtnR1/8V7fP/MfH3/znt8/+il - o//0urj/7LCu/+Whg//rq13/35VX/9Kek/9yvXz/ZbNv/6iCdfqYY2O/aj4+TCUJCgcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACcamsBjFRVB4FERAh9PT0JjU1ND6VnZx+/hINF0JqZiNOjoty0iIf2hFBQw5lX - V8+wY2P4xXR0/+aioP/oq6j/2pqT/92fif/Vlor/yYqJ/7N8efiVZmPGdERFYkEfHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALiFhgXFkJEdx5CQSMqSknbNlZWbz5uaws2cnOXBlJPnqH18r4dc - XFFULy8OSCUlFm07O0+FSUmeoV1d3sF9fPrGhoX/snZ295xkZNiFUlKbbD4+T0UdHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc0JDA5FgYRKdbm46onR0Zp9ycnuWampzhFlZVmY6 - OikvDAwHAAAAAAAAAAAAAAAAAAAAAB0ODgRULCwhbjo7UXhERGVrPDxHTCYmGxAAAQMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//////////////////////D////gf///wH///4A///+AP///AD///wA///8AP//+AD - ///gA//D4AH+AeAA+ADgAAAAwAAAAMAAAADAAAAB4AAAA+AAAAfgAAAP8AAAH/wAAD8AAAD/AAAD/wB4 - D//H////////////////////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABMAAAAtAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgIO1cwMM1qOjrsHhAQmwAA - ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAATCgogfUhI6ahgYP6lXV3+f0hI9wIBAT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGBgFPLy6kuW1t/sZv - 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 - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/TI83/TI83PaletteConfig.Designer.cs b/BizHawk.Client.EmuHawk/config/TI83/TI83PaletteConfig.Designer.cs index bbbf4dbdf1..0f79f80c1f 100644 --- a/BizHawk.Client.EmuHawk/config/TI83/TI83PaletteConfig.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/TI83/TI83PaletteConfig.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TI83PaletteConfig)); this.CancelBtn = new System.Windows.Forms.Button(); this.OkBtn = new System.Windows.Forms.Button(); this.BackgroundPanel = new System.Windows.Forms.Panel(); @@ -122,7 +121,7 @@ this.Controls.Add(this.BackgroundPanel); this.Controls.Add(this.OkBtn); this.Controls.Add(this.CancelBtn); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.calculator_MultiSize; this.Name = "TI83PaletteConfig"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Palette Config"; diff --git a/BizHawk.Client.EmuHawk/config/TI83/TI83PaletteConfig.resx b/BizHawk.Client.EmuHawk/config/TI83/TI83PaletteConfig.resx index cda693680c..29dcb1b3a3 100644 --- a/BizHawk.Client.EmuHawk/config/TI83/TI83PaletteConfig.resx +++ b/BizHawk.Client.EmuHawk/config/TI83/TI83PaletteConfig.resx @@ -117,80 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - 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 - DwDgAA8A4AAPAPAAHwA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumAudioSettings.Designer.cs b/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumAudioSettings.Designer.cs index b093ca49dd..f84713123e 100644 --- a/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumAudioSettings.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumAudioSettings.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ZXSpectrumAudioSettings)); this.OkBtn = new System.Windows.Forms.Button(); this.CancelBtn = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); @@ -180,7 +179,7 @@ this.Controls.Add(this.CancelBtn); this.Controls.Add(this.OkBtn); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController_MultiSize; this.Name = "ZXSpectrumAudioSettings"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Audio Settings"; diff --git a/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumAudioSettings.resx b/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumAudioSettings.resx index ca821b54f8..1af7de150c 100644 --- a/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumAudioSettings.resx +++ b/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumAudioSettings.resx @@ -117,508 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAwAMDAQAAAABABoBgAAxgAAACAgEAAAAAQA6AIAAC4HAAAYGBAAAAAEAOgBAAAWCgAAEBAQAAAA - BAAoAQAA/gsAADAwAAAAAAgAqA4AACYNAAAgIAAAAAAIAKgIAADOGwAAGBgAAAAACADIBgAAdiQAABAQ - AAAAAAgAaAUAAD4rAAAwMAAAAAAgAKglAACmMAAAICAAAAAAIACoEAAATlYAABgYAAAAACAAiAkAAPZm - AAAQEAAAAAAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAQAAAAEAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAHR3AAAAAAAAAAAAAAAAAAAAAAAAAAAAdHdEcAAAAAAAAAAAAAAAAA - AAAAAAAAAHd0d3QAAAAAAAAAAAAAAAAAAAAAAAAAAEd8d3UAAAAAAAAAAAAAAAAAAAAAAAAAB3yHfHZw - AAAAAAAAAAAAAAAAAAAAAAAAd3fIyHVwAAAAAAAAAAAAAAAAAAAAAAAAfHh3jIxwAAAAAAAAAAAAAAAA - AAAAAAAHd8jIyHdgAAAAAAAAAAAAAAAAAAAAAAAHd4yHfIdAAAAAAAAAAAAAAAAAAAAAAAAHyMjIyMhQ - AAAAAAAAAAAAAAAAAAAAAAB3d3eMh4dgAAAAAAAAAAAAAAAAAAAAAAB8jIyIfIdQAAAAAAAAAAAAAAAA - AAAAAAB3h4jIiMh3AAAAAAAAAAAAAAAAAAAAAAB8jIeHeIjHAAAAAAAAAAAAAAAAAAAAAAeIiHh4eMiE - AAAAAAAAAAAAB0dHcAAAAAd8h4eIiIiHcAAAAAAAAAB0d3d3RwAAAAeIeIiIiIh3RwAAAAAAAHR3d8h3 - dAAAAAfIh4iIiHiIx0cAAAAAdHh3eIeHhwAAAAeHiIiIiIiId3R3dHR0eHd4h4eHhAAAAAd4eIiIiIiH - x3d2d3eId4iIiIiIhwAAAAd4eIiI+IiIh3d3eHh3iIiIiIeHwAAAAAfIjHeIiIiIyIeHh4iIiIiIiIiI - cAAAAAeIQ0R3h3iIiMiIiIiIiIiIiIiEAAAAAAfIR3d3d0iIiIh4iIeIiIiIiHhAAAAAAAB4d3d3SHiI - h4fTiIi3iIiIeIwAAAAAAAB3h4d3eIeIiHiJiIuIiIh4jHAAAAAAAAAHyId3h3h4iIh4iIiIiIiHeAAA - AAAAAAAAB8iMiMjIiIiIh4h3aMjHAAAAAAAAAAAAAAdYyIeIiIiMjId6d4eAAAAAAAAAAAAAAAAHdsjH - eIeH6MiId3AAAAAAAAAAAAAAAIiIh4V8jIh4eIfHcAAAAAAAAAAAAACIiIh3AAAHd3h3fHcAAAAAAAAA - AAAAAAiIjHgAAAAAAHx8eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAA - AAd0dAAAAAAAAAAAAAAAAAB3x3cAAAAAAAAAAAAAAAAAd3fHcAAAAAAAAAAAAAAAB3yMh3AAAAAAAAAA - AAAAAAfIeMdwAAAAAAAAAAAAAAAHjIyHQAAAAAAAAAAAAAAAfId4yHAAAAAAAAAAAAAAAHjIyIdQAAAA - AAAAAAAAAAB3iId4YAAAAAAAAAdwAAAAjIiIiIUAAAAAAHd3dAAAB4iIiHh8cAAAAHd3x4dwAAd4iIiI - h3Z3d3R3yIh4cAAHh4iIiIfHd3d4iIiIh3AAB3jHiIiIiHeHiIiIiIwAAAh3dXh4iMiIiIiIiIhwAAAA - yGd0d4iIeIi4iIiMAAAAAIeHd4iIh32IiIiIcAAAAAAAd4jIyIiIiHeHyAAAAAAAAAB3h4iIh8h3dwAA - AAAAAAAIh8fIh4eIaAAAAAAAAACIiHAAB8jIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////////////////////n////g////wP///8B///+Af///gH///4B///8Af///AH///wB//n8AP/A+AB - /AHgAAAB4AAAAeAAAAPgAAAH8AAAD/AAAB/8AAA//wAA//4AA//weA////////////////////////// - //8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRwAAAAAAAAAAAAB3dAAAAAAAAAAAAA - d8dwAAAAAAAAAAAAfId3AAAAAAAAAAAHeMjHAAAAAAAAAAAHyHh3AAAAAAAAAAAHh3eEAAAAAAAAAAAI - yIiHAAAAAHd2cAAIiIiIQAAAd3d4UACHiIiId3d3eHiIcACHh4iIyHeHiIiIcAAIR3d4iIiIiIiMAAAH - d3eIh3iIiIhwAAAAeMh4iIiHiMAAAAAAAHfIiMh4aAAAAAAAiIgHyIfIAAAAAAAIgAAAAIAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD8f/8A+H//APB/ - /wDwP/8A4D//AOA//wDgP/8A4D/BAOAfAQDAAAEAwAABAOAAAwDgAAcA8AAfAPwAPwDwgP8A5/f/AP// - /wD///8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAd1AAAAAAAAB8cAAAAAAAB4eAAAAAAAAHyMgAAAAAAAiIhwAAAHcACI - iHcAd3hwAIz4jIeIiIAAd3eIiIiIAACHeIiIiHAAAACMeMh4AAAAiAAIgAAAAAAAAAAAAAAAAAAAAAAA - AAD//wAA//8AAP//AADj/wAA4/8AAMP/AADB/wAAwfkAAMDBAADAAQAAwAMAAMAHAADwDwAAzn8AAP// - AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAA9OzsAZD8/AGg8 - PABtPj4AQkNDAEZIRwBWQkIAV0REAF5AQABbRkYAVklJAFxPTwBTU1MAXFJSAF5ZWQBkQEAAYUREAGZF - RQBqQkEAYEtLAGNPTwBwQUEAfUZGAHJKSgB2SUkAfU9PAGBRUQBgVFQAZlZWAGZYWABqWVkAclZWAHpU - VAB9W1oAbmJiAGtoaABtaWkAcWdnAHdnZwB8Y2MAe2pqAHJxcQB+dHQAd3l5AHl6egCGT08AiU9PAIFP - UACGU1MAjVFRAIlWVgCMV1cAg1xbAIxaWQCQUlIAlVJSAJFXVgCXVVUAmVVVAJZaWQCSXV0AlV9eAJpZ - WgCeW1sAml5eAKBZWgCgXFwAql9fAIRmZQCIZWQAhWtrAI5ragCTYmEAnGBhAJ9kYwCaZmYAk25uAJ1s - awCFdHQAiXd3AIt+fgCWd3cAmHR0AJV5eQCbfHwAo2JhAKZhYQChZWUApGVkAKplZACsZGQAqmhnAKZr - agCnbGsAqmloAKlubQCsbW0AtGZnALhsbACxb3AAv29wAKVxcACrc3IAr35+ALN0cwC5c3MAvXBxALR4 - dgC1fHsAunt6AMNtbgDGb3AAw3FyAMZwcQDGdXUAyHR1AMp3eADBeXkAxnt7AMB/fgDLensANLBSAEWf - TgBBtFwAPMdnADHkdgDciiIAvoF/AISrdwDln0sA35lhAN2XfADgmmEA8LdlAO61cAArWPIALWT+AEh5 - +gDOf4AAfoCAAHiA1ABZv9wAZrnUAGK+2ABxnv4Ad6P/ADPX/QBw0OcAW+D7AIKEgwCPgoIAjI2NAJuC - ggCUiIgAmYqKAJGSkgCjhIQAqoKCAKKLiwC+hIMAsoqKALaSgQCum5sAsZubALqqlQCdgr4Ar6ytALGh - oAC6pKQAwoSDAMyBggDGiIYAyYiHAMWMigDMjIoA0ISFANKHiADUjIwA2Y6NAMCUjQDIk44A0JCPANaP - kADHlZQAzpSSAMScmwDUkpIA2ZSVANWYlgDampcA2ZeYANWcnADam5sA4p2cAMChjwDeoJ4A5aCFAOaj - jQDlpJoA2p6hAMOkowDOoaEAy62tANegoADdoqEA2aGpANGsrwDdq6kAwbG4ANGysQDdtLQA2ri3AOGk - owDjqKYA66ylAOGnqADjq6oA6a2rAOOwrwDssK4A5K+wAOaztADttLIA57i2AO24tgDmurgA6rq6APC1 - swDyuLYA9Ly5APi+uwD1wL0A+cC9AKKMwACkk8QAqprMALSayACptsEAlaDkAOy/wACRxtQAgOv9AJnr - 9wDEwsoA5sbGAOzCwgDuyMcA7MzMAPPEwgDxy8oA9dPTAPja2gAAAAAAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAADLytDi9tOemQAAAAAAUy9EecLEsa1uPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj11Mme - VakAAAAAAAAAAAAATS84M0akAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE - AAAAAAAAAAAAAAABAAAAAQAAAAAAAFFNTQBRUlIAU1RUAGJHRwBiT08Aa0lIAGJTUwBrVlYAYllZAGZc - XABpWloAb1xbAHNTUwB7V1YAc1hXAHFbWwBkZWUAaWFhAG5kZABpamkAcGFhAHlubgB2cHAAf3V1AH55 - eQB8fX0AgUpKAI1PTwCLWFcAhlhYAI9ZWQCKXFsAm1ZWAJJZWQCWWVgAmlpbAJtcWwCiXFwAl2BfAIBg - YACAZ2YAgG9vAI9oaACWZWQAmGBhAJ5kZACcaWoAmm9vAIV0dACNcHAAiXZ2AIB8fACac3IAm3V0AJ51 - dQCZfHwAnHx8AKNmZgCnZmYAqmJiAK5jYwCvb24AtWVmALBtbgC5bW0AvmxtAKx+fQCxcnIAtHBwALZz - dACydXQAtnd2ALlwcAC5dnYAt3p5ALh5eAC8fHsAun18ALx+fQDGb3AAxnBxAMdzdADAd3YAyHJzAMlz - dADJdXYAynd4AMd/fwDMe3wAzXx9AHunbwBhvHIAYsN4ANuLOwC2hn4A4Zt5APC3ZABte9sAX47+AHWM - 5QAl0foAY+P8AIeDgwCFhoYAioSEAJOIiACWi4sAmpKRAKGCgQCmhYUAqYGBAKuDhACniooApYyMAKiO - jQCyhYMAvoWEALeNjQCrj5AAr5eXALSVlAC9lJMAmbCEAK6RugDBgYAAwoSCAMWDhADChoQAxYeFAM6A - gQDFiIYAxoqIAMqIiQDMi4oAy4yKAMiPjQDPj44A0ISFANKJigDUi4wA04+NANWNjgDKkY8A0JCOANud - iQDWj5AAzJSTAM2XlgDGm5oA1pGSANOUkgDVl5EA1pOUANiVlgDYmJUA2ZeYANKenADbmpsA3pmYANuc - mgDbn5wA1aacAN6gngDqqZoA3Z+gAMyjowDCra0AxqysAMqpqQDboaAA3qKiAN6logDbp6UA3aWkANer - qgDWsbMA0rW0ANe0tADfs7IA4aSiAOGlpQDkp6UA46imAOWopgDsraIA6qimAOGoqADhrqwA6a2rAOqv - rADpsK4A7LGuAOGzswDlsbEA7bKxAO+1sgDotrYA5rm3AO+4twDot7sA6bq5AOu9uwDrv70A8bazAPG2 - tADxuLUA9Lm2APC9uwD2vboA9L+9APi+uwD4v7wA8sC+APXAvgD5wL0AkILJAKqXzACsu8cAqr/LALLV - 3QDawMIA48XFAOvDwQDswMAA7cTDAO/ExQDgxsgA8cbEAPTGxADwyskA9MvJAPLNzQD21dYA+NjZAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAMEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHCEcBQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAayU9PSYbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQlBSQiJpAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAM0pSUlJQPRcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnUlJSUlJGFQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAFJSUlJSUkoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzUlJSWVJZfxAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5XWYqKioqGDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoqMkpqa - mqAsAAAAAAAAAAAAAAAAAABoNAAAAAAAAACMjJyuvLy2toYHAAAAAAAAAAAAABcOIDouBgAAAAAAc4yc - tsHKysPAriIKAAAAAAAAABYgRk1LTX+DEAAAAABukqXB4ejo4dHPQCIEChcXEwggTXV/k66unKMpAAAA - AG6Srsro6ero0dN/Rk1NRk2Dg4STrsbh4cHAt2sAAAAAbpKuOXPe6ajW15KGg4OGk528yuHo5eHPz882 - AAAAAAB4jCkDAxSoMabXt5yjt8ro3ePo5dbT09HTdAAAAAAAAABGcBFoGgFwdtfDwHxi2dpmZcrX09HP - z0MAAAAAAAAAAHh/qWwaOa6cz9PNZGPYsdzbzc3DwLk2AAAAAAAAAAAAAAAvhpKakoyg19HNyKS5wHtb - orZ/cwAAAAAAAAAAAAAAAAAANkaKWVm5zb1gYV6cXVxfNgAAAAAAAAAAAAAAAAAAALGvlTIuP1K5tqCR - l4xfLwAAAAAAAAAAAAAAAAAAsbPBenkAAAAAcCVYjE0scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////+f///+D////A////wH - ///4B///+Af///gH///wB///8Af///AH/+fwA/8D4AH8AeAAAAHgAAAB4AAAA+AAAAfwAAAP8AAAH/wA - AD//AAD//gAD//B4D////////////////////////////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAAWlJSAHBJSQB1SEgAe1dXAHdYWAB5WlkAel1dAGBiYgB1bGwAfWtrAHh2 - dgB9fn4Ag01NAIRXVwCIV1cAhV9eAItbWgCgX14ApV1dAJhgXwCNYGAAnWtqAJhtbQCCdnYAh3x8AI15 - eACeensAqGBgAKhoZwCga2oArGpqALNqagCzb28AtG1tALltbQCxb3AApnVzAKlzcwCqdHMApnp6AKd+ - fgCpensAq3x7ALZ3dgC8dHQAvH59AMZvcADGcHEAxXN0AMhycwDJdncAynh5AMx5egDNfn8Ajo1wAOek - VgDGgH8A4p53AEZ2+gB8u4AAd8PaAIuEhACOh4cAjo6OAJ+DggCejo4Ao4SEAKSIiACsi4sAqo2MAK6P - jgC+gYAAvoaGAL+KiACskJAAtJeXALWenQC5np4At6iOAKmyjgC9nroAwYSDAMaGhADOhoYAxomHAMiK - iQDJjYwA0oeIANOOjwDUjY0A2ZiPANaPkADGkZEAx5eXAMySkADGnZwA1ZOSANeTlADWl5YA2JSVANGZ - mADan50A3J6dAOCcmwDVoJ8A7K2fAMOtrQDXo6IA3aCgAN+kpADVq6oA3ay3AMu0tADPtrYA3L+/AOCi - oQDhpqUA5KelAOinpgDlq6gA46usAOOvrQDqrqwA7LGuAOayswDjtrQA5re1AOqysQDts7EA57y6AO+8 - ugDrvL0A8LOwAPC1sgDwtrQA87q3APS6twD2vboA8b69APi/vAD2wb4A+cC9AJmTzwDHqMMAu8PMAIHf - 8QDByNAA7cLCAO3FwwDvxsQA5cjIAOzOzgDwxcQA9cbEAPPP0AD10tIAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - BQMJAAAAAAAAAAAAAAAAAAAAAAAAAAAPHBMNAAAAAAAAAAAAAAAAAAAAAAAAABojLy8TAAAAAAAAAAAA - AAAAAAAAAAAAAB0wMDAiPgAAAAAAAAAAAAAAAAAAAAAAQjAwMDAtGAAAAAAAAAAAAAAAAAAAAAAAFzIy - NTU5CgAAAAAAAAAAAAAAAAAAAAAAIjZYWFxcBwAAAAAAAAAAAAAAAAAAAAAANlxtdW11JQAAAAAAAAAA - PgcRDgkAAAAAXG1/lISAZgMAAAAAABkVLC5SVhcAAABNY3WWnJuLfB8UBAcQHkhWaX91dSsAAABNY2BM - mJeCiVJSVl9laX+WloSJgEIAAAAAXAEIC0tGjnR0dJaRk5qNjIyJQwAAAAAAJkNADBtdjIaPO1GSPYuJ - hnVEAAAAAAAAAClISWRcd4xwkGp8UE90VwAAAAAAAAAAAAAAKSQ1NYZ7OjhbPDdGAAAAAAAAAAAAAHNv - YGsAKyJoXFYmRwAAAAAAAAAAAAAAcnIAAAAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// - /wD///8A////APx//wD4f/8A8H//APA//wDgP/8A4D//AOA//wDgP8EA4B8BAMAAAQDAAAEA4AADAOAA - BwDwAB8A/AA/APCA/wDn9/8A////AP///wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAABjZGQAdmRjAHtpaQB/eHgAgU9PAKBaWgCFbm0AlWtqAKptbgCwZ2cAsGhoAKxw - cACteHkAvnJyAMZvcADGcHEAy3l5AMx9fgCFmXQAwIB/ANeUfQDhoX8AlIqJAJWMjACYiIgAoIaGAK2K - igCxh4cAvoGAALKKigC4iYgAuJWVAL2cnACss50AuqKhAL+mpgDLgoIAxImHAMeNjADLkI8AxpWTANCS - kQDYlZUA1J6dANqZmgDdnp4A1J+oAMaiogDOr68AzLKyANi5uADhpaIA4qypAOWtqADrrqsA4bKwAOay - sgDtuLYA57++AOy4uADxtLIA8be0APa9ugDswL4A9sG+ALCcxwC5ncIA06zBALnH0QC2ytQA7sPDAPLS - 0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAZBgUAAAAAAAAAAAAAAAAACw8KAAAAAAAAAAAAAAAAGhAQDgAAAAAAAAAAAAAAAAkRESUYAAAA - AAAAAAAAAAAlKy4uBwAAAAAAAAcDAAAAKzlHPCYCAAAYCB0oKgAAAC0wSDs0FB0nLDlAOiwAAAANAQQb - Pi9DRkVBPzUAAAAAJB4cKz5EQjMiNSkAAAAAAAAAHwwRNxYVEyQAAAAAAAAxMgAAACEgAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA4/8AAOP/AADD/wAAwf8AAMH5 - AADAwQAAwAEAAMADAADABwAA8A8AAM5/AAD//wAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAkAAAAJAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAUAAAAOAEBAVUAAABUAAAANQAAABAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkFBSUvGRl5TCkpwlYuLtxDJCTQFw0NmQAA - AEkAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAwMKE8rK6V6RET2klJR/5ZS - U/+OT0//ZDc38B0QEJoAAAAyAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDAwYVzAwoopP - T/ygXVz/oFtb/55ZWf+bWFf/k1NT/1UvL9wGAwNcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AARNKipxhk5O+adkY/+uZWX/tWdo/7VmZ/+qYWH/nltb/3hERPcfERGCAAAAFgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADEZGS1zQ0LXqGdm/7ptbf/Fb3D/x3Bx/8hwcf/BbW7/q2Vl/4hPT/82HR2gAAAAIAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAB1gxMYyYXl3/vXFx/8Zwcf/HcHH/x3Bx/8dwcf/HcHH/uG1t/5NY - V/9EJia2AAAAKQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPB8fNH1MS+K4cnH/x3Fy/8dwcf/HcHH/x3Bx/8dw - cf/HcHH/wHBx/51gX/9PLCzGAAAAMwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAMAAAAAAAAAAAAAAAAAAAAALhAQFIZXVs/RjIz/1Y2O/9qYmP/eoaL/46qr/+aysv/ot7f/6rm5/+m4 - uf/otbX/5q+v/+uvrf/jqab/wYeF/28/P/QhEhKvAAAAXwAAACgAAAANAAAABQAAAAMAAAACAAAAAwAA - AAUAAAAKAAAAFQAAADAdDg9oSSkptHZHRu2dYmL+t3Z1/758e/+6enn/tnh3/7d5eP+8fn3/w4SD/7Z6 - ef9eODfbBgICTgAAAAgAAAAAAAAAAAAAAAAAAAAAPhwcJJVjYuPXkZH/2JOU/92fn//iqqr/57O0/+u8 - vP/uwsL/78XG/+/Exf/twMD/67i4/+60sv/wtrP/zZKQ/5taWv9xQED2MRsaxAgEBIcAAABaAAAAQQAA - ADcAAAA2AAAAOwAAAEUEAgJZHA4OfUcnJ7l5SkntqGxr/8CAfv/DgoH/vH59/7p+ff/DiIb/zZGP/9GT - kf/UlJP/1peV/9eZl/+GVlbuGQsLVwAAAAcAAAAAAAAAAAAAAAAAAAAARiIiLZ9rauvZk5P/2peY/+Ck - pP/lsLD/6ru7/+/Fxf/yzMz/9NDQ//PPz//xycr/7sDA//K5tv/1u7j/36Kg/6dmZf+mZWX/j1ZW/WM6 - OutDJSXQNBwcvDAaGrQ0HBy1PiIivUwsLMtkPDzfh1VU9a1xcP/EhIP/xIWE/7+Cgf/Ch4b/zZST/9mk - ov/grq3/4a6t/96lo//eoJ7/36Kg/+Cjof+IWVjnGwwMQwAAAAIAAAAAAAAAAAAAAAAAAAAARyQkL6Br - auzZk5P/25qb/+GnqP/ntLT/7cDA//LLy//209T/+NjY//fX1//00ND/8cbG//W9u//4vrz/46ak/7d0 - c/+vb27/s3Jy/7d2df+ucXD/pWpp/6Npaf+nbWz/sHVz/7p9fP/EhYT/yImI/8WIhv/DiIb/ypGP/9eg - n//hr63/57q5/+rCwP/rwsD/6bq4/+evrf/nq6n/6q6r/9qgnv9wRkbDBwAAHgAAAAAAAAAAAAAAAAAA - AAAAAAAASCQkLZ1nZuvYkpP/25uc/+Opqv/qtrf/7cHB//TOzv/52Nj/+tzc//na2v/xz9D/8MfH//fA - vv/6wb7/6a6r/8OBgP/DgoD/vX58/7h7ev+8fn3/woOC/8aHhv/HiYj/xoqJ/8aLif/Ijoz/zZST/9eg - nv/hrav/6Lm3/+zCwf/uyMf/78nH/+/Dwf/uvLr/7ba0/+60sf/vtLL/8ri1/7J+fflMKSltAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAQyEhI5JcXOPWj5D/3Juc/8qVlf+BZmb/bl5e/4l4eP/AqKj/8tPT//LO - zv+5p6b/w6qq//fBv//7wr//8LWy/86Ojf/Ojoz/0ZGP/9GSkP/OkY//zpOR/9GamP/VoJ//2qel/+Gv - rf/nt7X/6727/+3Dwf/wycf/8czL//LLyf/yxsT/8cC+//G7uf/yubf/87m3//S7uP/4vrv/1J6c/3JH - RrAdCgsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANRcXEYJNTcvPiIn/15aW/2VNTf85Ojr/Q0VF/0JF - RP9dXFz/n5GR/+S/v/+bh4f/hXp6/+25uP/7wr//9bu4/9qcmv/Zmpj/252b/96gnf/ipKH/5q+s/+u+ - vP/vycf/8srI/+3Hxv/wysj/9c7M//TNy//0ysj/9MbE//TBv//1vrz/9r26//e9u//4vrv/+L+8//vB - vv/hqqf/g1ZVzDwcHC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW4+Ppq/env/05OT/2ZX - V/9rbm7/fX9//3l6ev99f3//cHJy/5F9ff+ff3//XFhY/9eop//8wr//+L+8/+Wppv/ipaP/5qil/96i - pP/Kmaz/1qi1//LGxP/tyMf/qb3J/23E3P9kw9//vMTN//jDwP/3wb//+MC9//i/vf/5v73/+b+8//i/ - vP/3vrv/+L68/92mo/+IWlnRRSMjOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcv - L0mbX1/y15GS/6GAgP9XV1b/iYuL/4CBgf98fX3/cnR0/1dPT/++j4//km9w/9Sfnv/6wL3/+cC9/+6z - sP/ssK3/0Z+u/4OH1P9YffD/QGPs/7KYyv/Ct7z/Ytrz/3Ts//8s2f//cbvU//m+u//4v7z/+L67//e9 - uv/1vLn/9Lq3//O5tv/zuLX/0puZ/4RVVctGIyM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADIXFwdrPDySq2ts/diZmf/ApKT/sKur/4CBgP95enr/iYiI/49zdP/do6P/36Ch/96e - nv/zuLX/+sK///W7uP/1ubT/qZC//2qY+/9tnf//MGT6/56FxP/esK//nMbS/57n8/9+z+T/ybG3//a6 - t//zubb/8re0//C1s//utLH/7rKw/+qvrP++iIb9dklJtkMgISoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHIyMSazw8kZ5hYvXNjI3/2aSk/7OMjP+bd3f/sIKC/9KV - lv/cnJz/2peY/9aRkf/koqL/+sG+//nAvf/5v7z/4amw/6qZx/+aouP/qpvP/+mxtv/2urj/6rGv/+S6 - u//ptrX/466n/+Ovqf/ssK7/6q6s/+isqv/oq6n/2J2b/6JubfFoPT2NOxoaFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBoaCFowMFd7SEjAomZm9sWC - gv/XkZL/25SV/9iSk//Wj5D/1IyN/9KHiP/UiIj/8bOx//rCv//3vbv/9ru4//O3s//xuLX/7q6e/+ej - hf/npIn/7bCp/+Otp/+KsX3/ULdm/1WjWv+7oYz/5KWk/9uenP+4gH79glJRzVYuLlQgCAkGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAA8HBwQVy4uS3FBQaCPV1fjsG5v/cmAgf/ShYb/0YKD/85+f//LeXr/2I2M//e8uf/1vLn/7rOx/+2y - sP/lpJX/5qFY/+6xXP/djS3/35h9/86gl/9SwW7/Nd90/0WxXP+vlH//wYSE/49cW+VlOTmBQR4eHAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGk7OhqIWFd8oG5u8J5qav+eX2D/tmts/8Z0df/KdHX/yXJz/92T - k//3vLn/7LGu/+Snpf/dm5L/4Z1q/+61dP/fmmX/15WM/9eYlv/Bm43/r6uR/6uNgP+WYWDtbkBAnUwn - JzQVAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiFJSBnhC - QgpqNDQJWSUlB08dHQdfKisKfENDFJJWViinbGtRvYOCjtOcm8/pt7X157y6/7eOjfhxRUW7aTk5m4RK - StehWlr6uGdo/8Zwcf/dkpH/8bSx/+OnpP/YmZj/1ZWT/9ealP/Vl5X/0JCP/8eIhv+zdnb/lFtc6nA/ - QKRSKio/JQwNBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADTn6AB2qioDMuUlCHBhYU8voCAWcCBgXTEhoaLzZGQqdeensngrKvn47Sz/NOop/+yiIfyi2Bgs2k+ - PlZXKysPAAAAAUYlJRxcMTFYcj4+pYpMTeWmXF3+xnl5/9+Zl//dnJr/z46M/8KCgf+vc3L/ll9e831L - S8hlOTl/TigoMy0REQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABzQUIDnmprDriGhifHlpZMzp6eeNCgoZ7On5+2yJqaybuPj9WnfHzVj2RkunVJ - SYNbLy8/PRQUCgAAAAAAAAAAAAAAAAAAAAAAAAAAKRUVBU0pKSphNDRtd0BAsotNTd2ZW1vrkVlY4HtJ - Sb5lOTmCUysrQTsbGxEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCwsA2Y4OA5xQkImdkhIRHhKSll0R0dibUBAWWI2 - NkNUKCgoOhISDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhkZB0km - Jh5LJiYsRSEhITATFAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD/+H////8AAP/gH////wAA/8Af//// - AAD/gA////8AAP+AD////wAA/wAP////AAD/AA////8AAP4AB////wAA/gAH////AAD8AAf///8AAPwA - B////wAA/AAH////AAD8AAf///8AAPgAB////wAA+AAH//4HAAD4AAP/8AEAAPgAAf/AAQAA8AAA/wAA - AADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAEAAPAAAAAAAQAA8AAAAAADAADwAAAAAAcAAPAA - AAAADwAA+AAAAAAfAAD4AAAAAD8AAPwAAAAAfwAA/gAAAAD/AAD/gAAAA/8AAP/gAAAH/wAAgAAAAB// - AAAAAAAAf/8AAAAD4AP//wAAgB/8H///AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAYAAAAZAAAAGQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAARCQkYOh8fb0ooKK80HByiCQUFTAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAIhERFmA2Np2ITUz3lVNT/4dLS/5IKCi9AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAANjODiBllhY+61kZP+vY2P/pV5e/3xHRvEhEhJfAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAASSgoN41VVeS6bW3/xW9w/8dwcf+9bG3/klZW/jogIIEAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1RkWcs2xs/8dxcv/HcHH/x3Bx/8Zwcf+iYWH/SSkpmAAA - AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUC0tMZtgX+fGcnP/x3Bx/8dwcf/HcHH/x3Fy/61q - av9UMTGqAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxRER1tm9v/8hxcv/HcHH/x3Bx/8dw - cf/HcnP/tnRz/185OboAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAACIxXV7TEdHT/yHJz/8l1 - dv/Kd3j/ynd4/8p4eP/Bf37/bURDywAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNKysjo2Zm4Mt4 - ef/NfH3/z4GC/9GFhf/RhYb/0YWF/82Mi/9+UVHeCAICOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAACwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGc+ - Pkm1c3P30IGC/9OJiv/XkZL/2ZaW/9mWl//YlJX/2JmY/5hnZfMeEBBrAAAABwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA0FAgItHhAQWzAbG4IqFxeHDQcHWwAAABkAAAAAAAAAAAAA - AAAAAAAAek1MdMN/f//VjI3/2piZ/9+io//hqKn/4qmp/+Clpf/jpqT/wImH/04xMLwAAAA6AAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABEbDg5GRygokW5CQs+MVlbxnGJh/JdfXvxnPz7hHA8PbgAA - AAwAAAAAAAAAAAAAAACMW1qbz4qK/9qXl//gpqb/5rKz/+q6u//rvLz/6La2/+qxr//epKL/j1lZ+DUc - HLACAQFPAAAAHQAAAA8AAAAPAAAAEwAAACIbDg5MVDExnYZUU+SpbWz+uXl4/7x+fP/AgoD/xoeF/72A - f/9fOzu1AAAAHAAAAAAAAAAAAAAABJhkZK/VkZH/3Z+g/+axsf/twMD/8svL//LNzf/vxcX/8Lq4/+6z - sf+1dHP/j1VU+144N9g7IiKqMhwclDcfH5RGKSmiYTw7v4tZWOiydXT+woOC/8aKiP/Ol5X/2aWj/9ui - of/cnpz/2pyb/35TUrgAAAAVAAAAAAAAAAAAAAAFmmVkstaTk//hpaX/7Lm6//TLy//419f/+NnZ//TP - z//1wb//9Lq3/8aGhP+1dHP/s3Rz/6xwb/+pb27+rnNy/7Z7ev/BhIL/yY2L/8+WlP/apqT/5be2/+vB - v//rvrz/6bKw/+uvrf/Um5n/bUVEgAAAAAMAAAAAAAAAAAAAAAOTXV2q1ZGR/9CYmP+dfX7/o4yM/9e8 - vP/z0tL/zLOz/+u8u//5v7z/1peV/8uLif/Ki4r/yoyL/86Ukv/TnJv/2qSi/+Gtq//nuLb/7cPB//DJ - x//xxsT/8b+9//G6t//zubf/77az/6d1dM89Hx8lAAAAAAAAAAAAAAAAAAAAAIJOTojNiIn/jGlp/01O - Tv9UVlb/dnNz/7uhof+Pfn7/xJ+e//zCv//lqKb/3J2b/+Chnv/hpaT/7Ly5/+vHxv/MxMn/0MjN//LK - yf/1x8X/9sLA//a/vP/3vrv/+L+8//S7uP+5hoXhYTo5RwAAAAAAAAAAAAAAAAAAAAAAAAAAaTs7RrVz - dPKmfn7/cXJx/4SGhv97fX3/b2Zm/516ev+7kJD/+sG+//C2s//lqqr/rpbA/3aB2/+ql83/tMHK/2jc - 9P9OzOz/2r3B//q/vP/3vrv/9ry6//a8uf/ss7D/tYGA32c+Pk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAvEhIHg01Njbp9fvrCn5//nI+P/4R7ev+fgID/2Jyd/9ybnP/ytrT/+b+8/+ewtf+Mld3/ZI36/5eI - zv/Ttrn/sNLc/6/Czv/stLT/8re0/++0sf/tsq//2qCe/6Rxb8phODg+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABCIB8MeUZGbqRpata8gYH8x4mJ/9eTk//YkpP/04qL/+Cbmv/5wL3/9726/+Sw - t//Zrrn/56qY/+2smf/lr6n/nLWJ/4Gtdf/Pppn/3qGf/7yEg/KJWViYTyoqIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQh0dGXJAQGOXXl7NtnR1/8V7fP/MfH3/znt8/+il - o//0urj/7LCu/+Whg//rq13/35VX/9Kek/9yvXz/ZbNv/6iCdfqYY2O/aj4+TCUJCgcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACcamsBjFRVB4FERAh9PT0JjU1ND6VnZx+/hINF0JqZiNOjoty0iIf2hFBQw5lX - V8+wY2P4xXR0/+aioP/oq6j/2pqT/92fif/Vlor/yYqJ/7N8efiVZmPGdERFYkEfHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALiFhgXFkJEdx5CQSMqSknbNlZWbz5uaws2cnOXBlJPnqH18r4dc - XFFULy8OSCUlFm07O0+FSUmeoV1d3sF9fPrGhoX/snZ295xkZNiFUlKbbD4+T0UdHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc0JDA5FgYRKdbm46onR0Zp9ycnuWampzhFlZVmY6 - OikvDAwHAAAAAAAAAAAAAAAAAAAAAB0ODgRULCwhbjo7UXhERGVrPDxHTCYmGxAAAQMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//////////////////////D////gf///wH///4A///+AP///AD///wA///8AP//+AD - ///gA//D4AH+AeAA+ADgAAAAwAAAAMAAAADAAAAB4AAAA+AAAAfgAAAP8AAAH/wAAD8AAAD/AAAD/wB4 - D//H////////////////////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABMAAAAtAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgIO1cwMM1qOjrsHhAQmwAA - ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAATCgogfUhI6ahgYP6lXV3+f0hI9wIBAT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGBgFPLy6kuW1t/sZv - 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 - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumCoreEmulationSettings.Designer.cs b/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumCoreEmulationSettings.Designer.cs index d69a5e3254..2180af2b5e 100644 --- a/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumCoreEmulationSettings.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumCoreEmulationSettings.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ZXSpectrumCoreEmulationSettings)); this.OkBtn = new System.Windows.Forms.Button(); this.CancelBtn = new System.Windows.Forms.Button(); this.label4 = new System.Windows.Forms.Label(); @@ -191,7 +190,7 @@ this.Controls.Add(this.CancelBtn); this.Controls.Add(this.OkBtn); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController_MultiSize; this.Name = "ZXSpectrumCoreEmulationSettings"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Core Emulation Settings"; diff --git a/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumCoreEmulationSettings.resx b/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumCoreEmulationSettings.resx index ca821b54f8..1af7de150c 100644 --- a/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumCoreEmulationSettings.resx +++ b/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumCoreEmulationSettings.resx @@ -117,508 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAwAMDAQAAAABABoBgAAxgAAACAgEAAAAAQA6AIAAC4HAAAYGBAAAAAEAOgBAAAWCgAAEBAQAAAA - BAAoAQAA/gsAADAwAAAAAAgAqA4AACYNAAAgIAAAAAAIAKgIAADOGwAAGBgAAAAACADIBgAAdiQAABAQ - AAAAAAgAaAUAAD4rAAAwMAAAAAAgAKglAACmMAAAICAAAAAAIACoEAAATlYAABgYAAAAACAAiAkAAPZm - AAAQEAAAAAAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAQAAAAEAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAHR3AAAAAAAAAAAAAAAAAAAAAAAAAAAAdHdEcAAAAAAAAAAAAAAAAA - AAAAAAAAAHd0d3QAAAAAAAAAAAAAAAAAAAAAAAAAAEd8d3UAAAAAAAAAAAAAAAAAAAAAAAAAB3yHfHZw - AAAAAAAAAAAAAAAAAAAAAAAAd3fIyHVwAAAAAAAAAAAAAAAAAAAAAAAAfHh3jIxwAAAAAAAAAAAAAAAA - AAAAAAAHd8jIyHdgAAAAAAAAAAAAAAAAAAAAAAAHd4yHfIdAAAAAAAAAAAAAAAAAAAAAAAAHyMjIyMhQ - AAAAAAAAAAAAAAAAAAAAAAB3d3eMh4dgAAAAAAAAAAAAAAAAAAAAAAB8jIyIfIdQAAAAAAAAAAAAAAAA - AAAAAAB3h4jIiMh3AAAAAAAAAAAAAAAAAAAAAAB8jIeHeIjHAAAAAAAAAAAAAAAAAAAAAAeIiHh4eMiE - AAAAAAAAAAAAB0dHcAAAAAd8h4eIiIiHcAAAAAAAAAB0d3d3RwAAAAeIeIiIiIh3RwAAAAAAAHR3d8h3 - dAAAAAfIh4iIiHiIx0cAAAAAdHh3eIeHhwAAAAeHiIiIiIiId3R3dHR0eHd4h4eHhAAAAAd4eIiIiIiH - x3d2d3eId4iIiIiIhwAAAAd4eIiI+IiIh3d3eHh3iIiIiIeHwAAAAAfIjHeIiIiIyIeHh4iIiIiIiIiI - cAAAAAeIQ0R3h3iIiMiIiIiIiIiIiIiEAAAAAAfIR3d3d0iIiIh4iIeIiIiIiHhAAAAAAAB4d3d3SHiI - h4fTiIi3iIiIeIwAAAAAAAB3h4d3eIeIiHiJiIuIiIh4jHAAAAAAAAAHyId3h3h4iIh4iIiIiIiHeAAA - AAAAAAAAB8iMiMjIiIiIh4h3aMjHAAAAAAAAAAAAAAdYyIeIiIiMjId6d4eAAAAAAAAAAAAAAAAHdsjH - eIeH6MiId3AAAAAAAAAAAAAAAIiIh4V8jIh4eIfHcAAAAAAAAAAAAACIiIh3AAAHd3h3fHcAAAAAAAAA - AAAAAAiIjHgAAAAAAHx8eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAA - AAd0dAAAAAAAAAAAAAAAAAB3x3cAAAAAAAAAAAAAAAAAd3fHcAAAAAAAAAAAAAAAB3yMh3AAAAAAAAAA - AAAAAAfIeMdwAAAAAAAAAAAAAAAHjIyHQAAAAAAAAAAAAAAAfId4yHAAAAAAAAAAAAAAAHjIyIdQAAAA - AAAAAAAAAAB3iId4YAAAAAAAAAdwAAAAjIiIiIUAAAAAAHd3dAAAB4iIiHh8cAAAAHd3x4dwAAd4iIiI - h3Z3d3R3yIh4cAAHh4iIiIfHd3d4iIiIh3AAB3jHiIiIiHeHiIiIiIwAAAh3dXh4iMiIiIiIiIhwAAAA - yGd0d4iIeIi4iIiMAAAAAIeHd4iIh32IiIiIcAAAAAAAd4jIyIiIiHeHyAAAAAAAAAB3h4iIh8h3dwAA - AAAAAAAIh8fIh4eIaAAAAAAAAACIiHAAB8jIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////////////////////n////g////wP///8B///+Af///gH///4B///8Af///AH///wB//n8AP/A+AB - /AHgAAAB4AAAAeAAAAPgAAAH8AAAD/AAAB/8AAA//wAA//4AA//weA////////////////////////// - //8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRwAAAAAAAAAAAAB3dAAAAAAAAAAAAA - d8dwAAAAAAAAAAAAfId3AAAAAAAAAAAHeMjHAAAAAAAAAAAHyHh3AAAAAAAAAAAHh3eEAAAAAAAAAAAI - yIiHAAAAAHd2cAAIiIiIQAAAd3d4UACHiIiId3d3eHiIcACHh4iIyHeHiIiIcAAIR3d4iIiIiIiMAAAH - d3eIh3iIiIhwAAAAeMh4iIiHiMAAAAAAAHfIiMh4aAAAAAAAiIgHyIfIAAAAAAAIgAAAAIAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD8f/8A+H//APB/ - /wDwP/8A4D//AOA//wDgP/8A4D/BAOAfAQDAAAEAwAABAOAAAwDgAAcA8AAfAPwAPwDwgP8A5/f/AP// - /wD///8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAd1AAAAAAAAB8cAAAAAAAB4eAAAAAAAAHyMgAAAAAAAiIhwAAAHcACI - iHcAd3hwAIz4jIeIiIAAd3eIiIiIAACHeIiIiHAAAACMeMh4AAAAiAAIgAAAAAAAAAAAAAAAAAAAAAAA - AAD//wAA//8AAP//AADj/wAA4/8AAMP/AADB/wAAwfkAAMDBAADAAQAAwAMAAMAHAADwDwAAzn8AAP// - AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAA9OzsAZD8/AGg8 - PABtPj4AQkNDAEZIRwBWQkIAV0REAF5AQABbRkYAVklJAFxPTwBTU1MAXFJSAF5ZWQBkQEAAYUREAGZF - RQBqQkEAYEtLAGNPTwBwQUEAfUZGAHJKSgB2SUkAfU9PAGBRUQBgVFQAZlZWAGZYWABqWVkAclZWAHpU - VAB9W1oAbmJiAGtoaABtaWkAcWdnAHdnZwB8Y2MAe2pqAHJxcQB+dHQAd3l5AHl6egCGT08AiU9PAIFP - UACGU1MAjVFRAIlWVgCMV1cAg1xbAIxaWQCQUlIAlVJSAJFXVgCXVVUAmVVVAJZaWQCSXV0AlV9eAJpZ - WgCeW1sAml5eAKBZWgCgXFwAql9fAIRmZQCIZWQAhWtrAI5ragCTYmEAnGBhAJ9kYwCaZmYAk25uAJ1s - awCFdHQAiXd3AIt+fgCWd3cAmHR0AJV5eQCbfHwAo2JhAKZhYQChZWUApGVkAKplZACsZGQAqmhnAKZr - agCnbGsAqmloAKlubQCsbW0AtGZnALhsbACxb3AAv29wAKVxcACrc3IAr35+ALN0cwC5c3MAvXBxALR4 - dgC1fHsAunt6AMNtbgDGb3AAw3FyAMZwcQDGdXUAyHR1AMp3eADBeXkAxnt7AMB/fgDLensANLBSAEWf - TgBBtFwAPMdnADHkdgDciiIAvoF/AISrdwDln0sA35lhAN2XfADgmmEA8LdlAO61cAArWPIALWT+AEh5 - +gDOf4AAfoCAAHiA1ABZv9wAZrnUAGK+2ABxnv4Ad6P/ADPX/QBw0OcAW+D7AIKEgwCPgoIAjI2NAJuC - ggCUiIgAmYqKAJGSkgCjhIQAqoKCAKKLiwC+hIMAsoqKALaSgQCum5sAsZubALqqlQCdgr4Ar6ytALGh - oAC6pKQAwoSDAMyBggDGiIYAyYiHAMWMigDMjIoA0ISFANKHiADUjIwA2Y6NAMCUjQDIk44A0JCPANaP - kADHlZQAzpSSAMScmwDUkpIA2ZSVANWYlgDampcA2ZeYANWcnADam5sA4p2cAMChjwDeoJ4A5aCFAOaj - jQDlpJoA2p6hAMOkowDOoaEAy62tANegoADdoqEA2aGpANGsrwDdq6kAwbG4ANGysQDdtLQA2ri3AOGk - owDjqKYA66ylAOGnqADjq6oA6a2rAOOwrwDssK4A5K+wAOaztADttLIA57i2AO24tgDmurgA6rq6APC1 - swDyuLYA9Ly5APi+uwD1wL0A+cC9AKKMwACkk8QAqprMALSayACptsEAlaDkAOy/wACRxtQAgOv9AJnr - 9wDEwsoA5sbGAOzCwgDuyMcA7MzMAPPEwgDxy8oA9dPTAPja2gAAAAAAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAADLytDi9tOemQAAAAAAUy9EecLEsa1uPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj11Mme - VakAAAAAAAAAAAAATS84M0akAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE - AAAAAAAAAAAAAAABAAAAAQAAAAAAAFFNTQBRUlIAU1RUAGJHRwBiT08Aa0lIAGJTUwBrVlYAYllZAGZc - XABpWloAb1xbAHNTUwB7V1YAc1hXAHFbWwBkZWUAaWFhAG5kZABpamkAcGFhAHlubgB2cHAAf3V1AH55 - eQB8fX0AgUpKAI1PTwCLWFcAhlhYAI9ZWQCKXFsAm1ZWAJJZWQCWWVgAmlpbAJtcWwCiXFwAl2BfAIBg - YACAZ2YAgG9vAI9oaACWZWQAmGBhAJ5kZACcaWoAmm9vAIV0dACNcHAAiXZ2AIB8fACac3IAm3V0AJ51 - dQCZfHwAnHx8AKNmZgCnZmYAqmJiAK5jYwCvb24AtWVmALBtbgC5bW0AvmxtAKx+fQCxcnIAtHBwALZz - dACydXQAtnd2ALlwcAC5dnYAt3p5ALh5eAC8fHsAun18ALx+fQDGb3AAxnBxAMdzdADAd3YAyHJzAMlz - dADJdXYAynd4AMd/fwDMe3wAzXx9AHunbwBhvHIAYsN4ANuLOwC2hn4A4Zt5APC3ZABte9sAX47+AHWM - 5QAl0foAY+P8AIeDgwCFhoYAioSEAJOIiACWi4sAmpKRAKGCgQCmhYUAqYGBAKuDhACniooApYyMAKiO - jQCyhYMAvoWEALeNjQCrj5AAr5eXALSVlAC9lJMAmbCEAK6RugDBgYAAwoSCAMWDhADChoQAxYeFAM6A - gQDFiIYAxoqIAMqIiQDMi4oAy4yKAMiPjQDPj44A0ISFANKJigDUi4wA04+NANWNjgDKkY8A0JCOANud - iQDWj5AAzJSTAM2XlgDGm5oA1pGSANOUkgDVl5EA1pOUANiVlgDYmJUA2ZeYANKenADbmpsA3pmYANuc - mgDbn5wA1aacAN6gngDqqZoA3Z+gAMyjowDCra0AxqysAMqpqQDboaAA3qKiAN6logDbp6UA3aWkANer - qgDWsbMA0rW0ANe0tADfs7IA4aSiAOGlpQDkp6UA46imAOWopgDsraIA6qimAOGoqADhrqwA6a2rAOqv - rADpsK4A7LGuAOGzswDlsbEA7bKxAO+1sgDotrYA5rm3AO+4twDot7sA6bq5AOu9uwDrv70A8bazAPG2 - tADxuLUA9Lm2APC9uwD2vboA9L+9APi+uwD4v7wA8sC+APXAvgD5wL0AkILJAKqXzACsu8cAqr/LALLV - 3QDawMIA48XFAOvDwQDswMAA7cTDAO/ExQDgxsgA8cbEAPTGxADwyskA9MvJAPLNzQD21dYA+NjZAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAMEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHCEcBQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAayU9PSYbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQlBSQiJpAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAM0pSUlJQPRcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnUlJSUlJGFQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAFJSUlJSUkoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzUlJSWVJZfxAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5XWYqKioqGDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoqMkpqa - mqAsAAAAAAAAAAAAAAAAAABoNAAAAAAAAACMjJyuvLy2toYHAAAAAAAAAAAAABcOIDouBgAAAAAAc4yc - tsHKysPAriIKAAAAAAAAABYgRk1LTX+DEAAAAABukqXB4ejo4dHPQCIEChcXEwggTXV/k66unKMpAAAA - AG6Srsro6ero0dN/Rk1NRk2Dg4STrsbh4cHAt2sAAAAAbpKuOXPe6ajW15KGg4OGk528yuHo5eHPz882 - AAAAAAB4jCkDAxSoMabXt5yjt8ro3ePo5dbT09HTdAAAAAAAAABGcBFoGgFwdtfDwHxi2dpmZcrX09HP - z0MAAAAAAAAAAHh/qWwaOa6cz9PNZGPYsdzbzc3DwLk2AAAAAAAAAAAAAAAvhpKakoyg19HNyKS5wHtb - orZ/cwAAAAAAAAAAAAAAAAAANkaKWVm5zb1gYV6cXVxfNgAAAAAAAAAAAAAAAAAAALGvlTIuP1K5tqCR - l4xfLwAAAAAAAAAAAAAAAAAAsbPBenkAAAAAcCVYjE0scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////+f///+D////A////wH - ///4B///+Af///gH///wB///8Af///AH/+fwA/8D4AH8AeAAAAHgAAAB4AAAA+AAAAfwAAAP8AAAH/wA - AD//AAD//gAD//B4D////////////////////////////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAAWlJSAHBJSQB1SEgAe1dXAHdYWAB5WlkAel1dAGBiYgB1bGwAfWtrAHh2 - dgB9fn4Ag01NAIRXVwCIV1cAhV9eAItbWgCgX14ApV1dAJhgXwCNYGAAnWtqAJhtbQCCdnYAh3x8AI15 - eACeensAqGBgAKhoZwCga2oArGpqALNqagCzb28AtG1tALltbQCxb3AApnVzAKlzcwCqdHMApnp6AKd+ - fgCpensAq3x7ALZ3dgC8dHQAvH59AMZvcADGcHEAxXN0AMhycwDJdncAynh5AMx5egDNfn8Ajo1wAOek - VgDGgH8A4p53AEZ2+gB8u4AAd8PaAIuEhACOh4cAjo6OAJ+DggCejo4Ao4SEAKSIiACsi4sAqo2MAK6P - jgC+gYAAvoaGAL+KiACskJAAtJeXALWenQC5np4At6iOAKmyjgC9nroAwYSDAMaGhADOhoYAxomHAMiK - iQDJjYwA0oeIANOOjwDUjY0A2ZiPANaPkADGkZEAx5eXAMySkADGnZwA1ZOSANeTlADWl5YA2JSVANGZ - mADan50A3J6dAOCcmwDVoJ8A7K2fAMOtrQDXo6IA3aCgAN+kpADVq6oA3ay3AMu0tADPtrYA3L+/AOCi - oQDhpqUA5KelAOinpgDlq6gA46usAOOvrQDqrqwA7LGuAOayswDjtrQA5re1AOqysQDts7EA57y6AO+8 - ugDrvL0A8LOwAPC1sgDwtrQA87q3APS6twD2vboA8b69APi/vAD2wb4A+cC9AJmTzwDHqMMAu8PMAIHf - 8QDByNAA7cLCAO3FwwDvxsQA5cjIAOzOzgDwxcQA9cbEAPPP0AD10tIAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - BQMJAAAAAAAAAAAAAAAAAAAAAAAAAAAPHBMNAAAAAAAAAAAAAAAAAAAAAAAAABojLy8TAAAAAAAAAAAA - AAAAAAAAAAAAAB0wMDAiPgAAAAAAAAAAAAAAAAAAAAAAQjAwMDAtGAAAAAAAAAAAAAAAAAAAAAAAFzIy - NTU5CgAAAAAAAAAAAAAAAAAAAAAAIjZYWFxcBwAAAAAAAAAAAAAAAAAAAAAANlxtdW11JQAAAAAAAAAA - PgcRDgkAAAAAXG1/lISAZgMAAAAAABkVLC5SVhcAAABNY3WWnJuLfB8UBAcQHkhWaX91dSsAAABNY2BM - mJeCiVJSVl9laX+WloSJgEIAAAAAXAEIC0tGjnR0dJaRk5qNjIyJQwAAAAAAJkNADBtdjIaPO1GSPYuJ - hnVEAAAAAAAAAClISWRcd4xwkGp8UE90VwAAAAAAAAAAAAAAKSQ1NYZ7OjhbPDdGAAAAAAAAAAAAAHNv - YGsAKyJoXFYmRwAAAAAAAAAAAAAAcnIAAAAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// - /wD///8A////APx//wD4f/8A8H//APA//wDgP/8A4D//AOA//wDgP8EA4B8BAMAAAQDAAAEA4AADAOAA - BwDwAB8A/AA/APCA/wDn9/8A////AP///wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAABjZGQAdmRjAHtpaQB/eHgAgU9PAKBaWgCFbm0AlWtqAKptbgCwZ2cAsGhoAKxw - cACteHkAvnJyAMZvcADGcHEAy3l5AMx9fgCFmXQAwIB/ANeUfQDhoX8AlIqJAJWMjACYiIgAoIaGAK2K - igCxh4cAvoGAALKKigC4iYgAuJWVAL2cnACss50AuqKhAL+mpgDLgoIAxImHAMeNjADLkI8AxpWTANCS - kQDYlZUA1J6dANqZmgDdnp4A1J+oAMaiogDOr68AzLKyANi5uADhpaIA4qypAOWtqADrrqsA4bKwAOay - sgDtuLYA57++AOy4uADxtLIA8be0APa9ugDswL4A9sG+ALCcxwC5ncIA06zBALnH0QC2ytQA7sPDAPLS - 0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAZBgUAAAAAAAAAAAAAAAAACw8KAAAAAAAAAAAAAAAAGhAQDgAAAAAAAAAAAAAAAAkRESUYAAAA - AAAAAAAAAAAlKy4uBwAAAAAAAAcDAAAAKzlHPCYCAAAYCB0oKgAAAC0wSDs0FB0nLDlAOiwAAAANAQQb - Pi9DRkVBPzUAAAAAJB4cKz5EQjMiNSkAAAAAAAAAHwwRNxYVEyQAAAAAAAAxMgAAACEgAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA4/8AAOP/AADD/wAAwf8AAMH5 - AADAwQAAwAEAAMADAADABwAA8A8AAM5/AAD//wAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAkAAAAJAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAUAAAAOAEBAVUAAABUAAAANQAAABAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkFBSUvGRl5TCkpwlYuLtxDJCTQFw0NmQAA - AEkAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAwMKE8rK6V6RET2klJR/5ZS - U/+OT0//ZDc38B0QEJoAAAAyAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDAwYVzAwoopP - T/ygXVz/oFtb/55ZWf+bWFf/k1NT/1UvL9wGAwNcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AARNKipxhk5O+adkY/+uZWX/tWdo/7VmZ/+qYWH/nltb/3hERPcfERGCAAAAFgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADEZGS1zQ0LXqGdm/7ptbf/Fb3D/x3Bx/8hwcf/BbW7/q2Vl/4hPT/82HR2gAAAAIAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAB1gxMYyYXl3/vXFx/8Zwcf/HcHH/x3Bx/8dwcf/HcHH/uG1t/5NY - V/9EJia2AAAAKQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPB8fNH1MS+K4cnH/x3Fy/8dwcf/HcHH/x3Bx/8dw - cf/HcHH/wHBx/51gX/9PLCzGAAAAMwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAMAAAAAAAAAAAAAAAAAAAAALhAQFIZXVs/RjIz/1Y2O/9qYmP/eoaL/46qr/+aysv/ot7f/6rm5/+m4 - uf/otbX/5q+v/+uvrf/jqab/wYeF/28/P/QhEhKvAAAAXwAAACgAAAANAAAABQAAAAMAAAACAAAAAwAA - AAUAAAAKAAAAFQAAADAdDg9oSSkptHZHRu2dYmL+t3Z1/758e/+6enn/tnh3/7d5eP+8fn3/w4SD/7Z6 - ef9eODfbBgICTgAAAAgAAAAAAAAAAAAAAAAAAAAAPhwcJJVjYuPXkZH/2JOU/92fn//iqqr/57O0/+u8 - vP/uwsL/78XG/+/Exf/twMD/67i4/+60sv/wtrP/zZKQ/5taWv9xQED2MRsaxAgEBIcAAABaAAAAQQAA - ADcAAAA2AAAAOwAAAEUEAgJZHA4OfUcnJ7l5SkntqGxr/8CAfv/DgoH/vH59/7p+ff/DiIb/zZGP/9GT - kf/UlJP/1peV/9eZl/+GVlbuGQsLVwAAAAcAAAAAAAAAAAAAAAAAAAAARiIiLZ9rauvZk5P/2peY/+Ck - pP/lsLD/6ru7/+/Fxf/yzMz/9NDQ//PPz//xycr/7sDA//K5tv/1u7j/36Kg/6dmZf+mZWX/j1ZW/WM6 - OutDJSXQNBwcvDAaGrQ0HBy1PiIivUwsLMtkPDzfh1VU9a1xcP/EhIP/xIWE/7+Cgf/Ch4b/zZST/9mk - ov/grq3/4a6t/96lo//eoJ7/36Kg/+Cjof+IWVjnGwwMQwAAAAIAAAAAAAAAAAAAAAAAAAAARyQkL6Br - auzZk5P/25qb/+GnqP/ntLT/7cDA//LLy//209T/+NjY//fX1//00ND/8cbG//W9u//4vrz/46ak/7d0 - c/+vb27/s3Jy/7d2df+ucXD/pWpp/6Npaf+nbWz/sHVz/7p9fP/EhYT/yImI/8WIhv/DiIb/ypGP/9eg - n//hr63/57q5/+rCwP/rwsD/6bq4/+evrf/nq6n/6q6r/9qgnv9wRkbDBwAAHgAAAAAAAAAAAAAAAAAA - AAAAAAAASCQkLZ1nZuvYkpP/25uc/+Opqv/qtrf/7cHB//TOzv/52Nj/+tzc//na2v/xz9D/8MfH//fA - vv/6wb7/6a6r/8OBgP/DgoD/vX58/7h7ev+8fn3/woOC/8aHhv/HiYj/xoqJ/8aLif/Ijoz/zZST/9eg - nv/hrav/6Lm3/+zCwf/uyMf/78nH/+/Dwf/uvLr/7ba0/+60sf/vtLL/8ri1/7J+fflMKSltAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAQyEhI5JcXOPWj5D/3Juc/8qVlf+BZmb/bl5e/4l4eP/AqKj/8tPT//LO - zv+5p6b/w6qq//fBv//7wr//8LWy/86Ojf/Ojoz/0ZGP/9GSkP/OkY//zpOR/9GamP/VoJ//2qel/+Gv - rf/nt7X/6727/+3Dwf/wycf/8czL//LLyf/yxsT/8cC+//G7uf/yubf/87m3//S7uP/4vrv/1J6c/3JH - RrAdCgsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANRcXEYJNTcvPiIn/15aW/2VNTf85Ojr/Q0VF/0JF - RP9dXFz/n5GR/+S/v/+bh4f/hXp6/+25uP/7wr//9bu4/9qcmv/Zmpj/252b/96gnf/ipKH/5q+s/+u+ - vP/vycf/8srI/+3Hxv/wysj/9c7M//TNy//0ysj/9MbE//TBv//1vrz/9r26//e9u//4vrv/+L+8//vB - vv/hqqf/g1ZVzDwcHC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW4+Ppq/env/05OT/2ZX - V/9rbm7/fX9//3l6ev99f3//cHJy/5F9ff+ff3//XFhY/9eop//8wr//+L+8/+Wppv/ipaP/5qil/96i - pP/Kmaz/1qi1//LGxP/tyMf/qb3J/23E3P9kw9//vMTN//jDwP/3wb//+MC9//i/vf/5v73/+b+8//i/ - vP/3vrv/+L68/92mo/+IWlnRRSMjOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcv - L0mbX1/y15GS/6GAgP9XV1b/iYuL/4CBgf98fX3/cnR0/1dPT/++j4//km9w/9Sfnv/6wL3/+cC9/+6z - sP/ssK3/0Z+u/4OH1P9YffD/QGPs/7KYyv/Ct7z/Ytrz/3Ts//8s2f//cbvU//m+u//4v7z/+L67//e9 - uv/1vLn/9Lq3//O5tv/zuLX/0puZ/4RVVctGIyM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADIXFwdrPDySq2ts/diZmf/ApKT/sKur/4CBgP95enr/iYiI/49zdP/do6P/36Ch/96e - nv/zuLX/+sK///W7uP/1ubT/qZC//2qY+/9tnf//MGT6/56FxP/esK//nMbS/57n8/9+z+T/ybG3//a6 - t//zubb/8re0//C1s//utLH/7rKw/+qvrP++iIb9dklJtkMgISoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHIyMSazw8kZ5hYvXNjI3/2aSk/7OMjP+bd3f/sIKC/9KV - lv/cnJz/2peY/9aRkf/koqL/+sG+//nAvf/5v7z/4amw/6qZx/+aouP/qpvP/+mxtv/2urj/6rGv/+S6 - u//ptrX/466n/+Ovqf/ssK7/6q6s/+isqv/oq6n/2J2b/6JubfFoPT2NOxoaFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBoaCFowMFd7SEjAomZm9sWC - gv/XkZL/25SV/9iSk//Wj5D/1IyN/9KHiP/UiIj/8bOx//rCv//3vbv/9ru4//O3s//xuLX/7q6e/+ej - hf/npIn/7bCp/+Otp/+KsX3/ULdm/1WjWv+7oYz/5KWk/9uenP+4gH79glJRzVYuLlQgCAkGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAA8HBwQVy4uS3FBQaCPV1fjsG5v/cmAgf/ShYb/0YKD/85+f//LeXr/2I2M//e8uf/1vLn/7rOx/+2y - sP/lpJX/5qFY/+6xXP/djS3/35h9/86gl/9SwW7/Nd90/0WxXP+vlH//wYSE/49cW+VlOTmBQR4eHAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGk7OhqIWFd8oG5u8J5qav+eX2D/tmts/8Z0df/KdHX/yXJz/92T - k//3vLn/7LGu/+Snpf/dm5L/4Z1q/+61dP/fmmX/15WM/9eYlv/Bm43/r6uR/6uNgP+WYWDtbkBAnUwn - JzQVAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiFJSBnhC - QgpqNDQJWSUlB08dHQdfKisKfENDFJJWViinbGtRvYOCjtOcm8/pt7X157y6/7eOjfhxRUW7aTk5m4RK - StehWlr6uGdo/8Zwcf/dkpH/8bSx/+OnpP/YmZj/1ZWT/9ealP/Vl5X/0JCP/8eIhv+zdnb/lFtc6nA/ - QKRSKio/JQwNBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADTn6AB2qioDMuUlCHBhYU8voCAWcCBgXTEhoaLzZGQqdeensngrKvn47Sz/NOop/+yiIfyi2Bgs2k+ - PlZXKysPAAAAAUYlJRxcMTFYcj4+pYpMTeWmXF3+xnl5/9+Zl//dnJr/z46M/8KCgf+vc3L/ll9e831L - S8hlOTl/TigoMy0REQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABzQUIDnmprDriGhifHlpZMzp6eeNCgoZ7On5+2yJqaybuPj9WnfHzVj2RkunVJ - SYNbLy8/PRQUCgAAAAAAAAAAAAAAAAAAAAAAAAAAKRUVBU0pKSphNDRtd0BAsotNTd2ZW1vrkVlY4HtJ - Sb5lOTmCUysrQTsbGxEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCwsA2Y4OA5xQkImdkhIRHhKSll0R0dibUBAWWI2 - NkNUKCgoOhISDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhkZB0km - Jh5LJiYsRSEhITATFAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD/+H////8AAP/gH////wAA/8Af//// - AAD/gA////8AAP+AD////wAA/wAP////AAD/AA////8AAP4AB////wAA/gAH////AAD8AAf///8AAPwA - B////wAA/AAH////AAD8AAf///8AAPgAB////wAA+AAH//4HAAD4AAP/8AEAAPgAAf/AAQAA8AAA/wAA - AADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAEAAPAAAAAAAQAA8AAAAAADAADwAAAAAAcAAPAA - AAAADwAA+AAAAAAfAAD4AAAAAD8AAPwAAAAAfwAA/gAAAAD/AAD/gAAAA/8AAP/gAAAH/wAAgAAAAB// - AAAAAAAAf/8AAAAD4AP//wAAgB/8H///AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAYAAAAZAAAAGQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAARCQkYOh8fb0ooKK80HByiCQUFTAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAIhERFmA2Np2ITUz3lVNT/4dLS/5IKCi9AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAANjODiBllhY+61kZP+vY2P/pV5e/3xHRvEhEhJfAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAASSgoN41VVeS6bW3/xW9w/8dwcf+9bG3/klZW/jogIIEAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1RkWcs2xs/8dxcv/HcHH/x3Bx/8Zwcf+iYWH/SSkpmAAA - AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUC0tMZtgX+fGcnP/x3Bx/8dwcf/HcHH/x3Fy/61q - av9UMTGqAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxRER1tm9v/8hxcv/HcHH/x3Bx/8dw - cf/HcnP/tnRz/185OboAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAACIxXV7TEdHT/yHJz/8l1 - dv/Kd3j/ynd4/8p4eP/Bf37/bURDywAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNKysjo2Zm4Mt4 - ef/NfH3/z4GC/9GFhf/RhYb/0YWF/82Mi/9+UVHeCAICOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAACwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGc+ - Pkm1c3P30IGC/9OJiv/XkZL/2ZaW/9mWl//YlJX/2JmY/5hnZfMeEBBrAAAABwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA0FAgItHhAQWzAbG4IqFxeHDQcHWwAAABkAAAAAAAAAAAAA - AAAAAAAAek1MdMN/f//VjI3/2piZ/9+io//hqKn/4qmp/+Clpf/jpqT/wImH/04xMLwAAAA6AAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABEbDg5GRygokW5CQs+MVlbxnGJh/JdfXvxnPz7hHA8PbgAA - AAwAAAAAAAAAAAAAAACMW1qbz4qK/9qXl//gpqb/5rKz/+q6u//rvLz/6La2/+qxr//epKL/j1lZ+DUc - HLACAQFPAAAAHQAAAA8AAAAPAAAAEwAAACIbDg5MVDExnYZUU+SpbWz+uXl4/7x+fP/AgoD/xoeF/72A - f/9fOzu1AAAAHAAAAAAAAAAAAAAABJhkZK/VkZH/3Z+g/+axsf/twMD/8svL//LNzf/vxcX/8Lq4/+6z - sf+1dHP/j1VU+144N9g7IiKqMhwclDcfH5RGKSmiYTw7v4tZWOiydXT+woOC/8aKiP/Ol5X/2aWj/9ui - of/cnpz/2pyb/35TUrgAAAAVAAAAAAAAAAAAAAAFmmVkstaTk//hpaX/7Lm6//TLy//419f/+NnZ//TP - z//1wb//9Lq3/8aGhP+1dHP/s3Rz/6xwb/+pb27+rnNy/7Z7ev/BhIL/yY2L/8+WlP/apqT/5be2/+vB - v//rvrz/6bKw/+uvrf/Um5n/bUVEgAAAAAMAAAAAAAAAAAAAAAOTXV2q1ZGR/9CYmP+dfX7/o4yM/9e8 - vP/z0tL/zLOz/+u8u//5v7z/1peV/8uLif/Ki4r/yoyL/86Ukv/TnJv/2qSi/+Gtq//nuLb/7cPB//DJ - x//xxsT/8b+9//G6t//zubf/77az/6d1dM89Hx8lAAAAAAAAAAAAAAAAAAAAAIJOTojNiIn/jGlp/01O - Tv9UVlb/dnNz/7uhof+Pfn7/xJ+e//zCv//lqKb/3J2b/+Chnv/hpaT/7Ly5/+vHxv/MxMn/0MjN//LK - yf/1x8X/9sLA//a/vP/3vrv/+L+8//S7uP+5hoXhYTo5RwAAAAAAAAAAAAAAAAAAAAAAAAAAaTs7RrVz - dPKmfn7/cXJx/4SGhv97fX3/b2Zm/516ev+7kJD/+sG+//C2s//lqqr/rpbA/3aB2/+ql83/tMHK/2jc - 9P9OzOz/2r3B//q/vP/3vrv/9ry6//a8uf/ss7D/tYGA32c+Pk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAvEhIHg01Njbp9fvrCn5//nI+P/4R7ev+fgID/2Jyd/9ybnP/ytrT/+b+8/+ewtf+Mld3/ZI36/5eI - zv/Ttrn/sNLc/6/Czv/stLT/8re0/++0sf/tsq//2qCe/6Rxb8phODg+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABCIB8MeUZGbqRpata8gYH8x4mJ/9eTk//YkpP/04qL/+Cbmv/5wL3/9726/+Sw - t//Zrrn/56qY/+2smf/lr6n/nLWJ/4Gtdf/Pppn/3qGf/7yEg/KJWViYTyoqIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQh0dGXJAQGOXXl7NtnR1/8V7fP/MfH3/znt8/+il - o//0urj/7LCu/+Whg//rq13/35VX/9Kek/9yvXz/ZbNv/6iCdfqYY2O/aj4+TCUJCgcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACcamsBjFRVB4FERAh9PT0JjU1ND6VnZx+/hINF0JqZiNOjoty0iIf2hFBQw5lX - V8+wY2P4xXR0/+aioP/oq6j/2pqT/92fif/Vlor/yYqJ/7N8efiVZmPGdERFYkEfHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALiFhgXFkJEdx5CQSMqSknbNlZWbz5uaws2cnOXBlJPnqH18r4dc - XFFULy8OSCUlFm07O0+FSUmeoV1d3sF9fPrGhoX/snZ295xkZNiFUlKbbD4+T0UdHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc0JDA5FgYRKdbm46onR0Zp9ycnuWampzhFlZVmY6 - OikvDAwHAAAAAAAAAAAAAAAAAAAAAB0ODgRULCwhbjo7UXhERGVrPDxHTCYmGxAAAQMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//////////////////////D////gf///wH///4A///+AP///AD///wA///8AP//+AD - ///gA//D4AH+AeAA+ADgAAAAwAAAAMAAAADAAAAB4AAAA+AAAAfgAAAP8AAAH/wAAD8AAAD/AAAD/wB4 - D//H////////////////////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABMAAAAtAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgIO1cwMM1qOjrsHhAQmwAA - ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAATCgogfUhI6ahgYP6lXV3+f0hI9wIBAT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGBgFPLy6kuW1t/sZv - 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 - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumJoystickSettings.Designer.cs b/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumJoystickSettings.Designer.cs index ad6d805638..15d3ceeb85 100644 --- a/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumJoystickSettings.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumJoystickSettings.Designer.cs @@ -159,7 +159,7 @@ this.Controls.Add(this.CancelBtn); this.Controls.Add(this.OkBtn); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController_MultiSize; this.Name = "ZXSpectrumJoystickSettings"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Joystick Settings"; diff --git a/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumJoystickSettings.resx b/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumJoystickSettings.resx index c45473925d..8923775242 100644 --- a/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumJoystickSettings.resx +++ b/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumJoystickSettings.resx @@ -121,510 +121,6 @@ ZXHawk is set up to allow 3 different unique joysticks to be attached at one time. This is because the Kempston joystick had to be attached via a Kempton interface plugged into the single expansion port. The Sinclair and Cursor joysticks effectively mapped to different key presses on the keyboard. - - - - - - AAABAAwAMDAQAAAABABoBgAAxgAAACAgEAAAAAQA6AIAAC4HAAAYGBAAAAAEAOgBAAAWCgAAEBAQAAAA - BAAoAQAA/gsAADAwAAAAAAgAqA4AACYNAAAgIAAAAAAIAKgIAADOGwAAGBgAAAAACADIBgAAdiQAABAQ - AAAAAAgAaAUAAD4rAAAwMAAAAAAgAKglAACmMAAAICAAAAAAIACoEAAATlYAABgYAAAAACAAiAkAAPZm - AAAQEAAAAAAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAQAAAAEAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAHR3AAAAAAAAAAAAAAAAAAAAAAAAAAAAdHdEcAAAAAAAAAAAAAAAAA - AAAAAAAAAHd0d3QAAAAAAAAAAAAAAAAAAAAAAAAAAEd8d3UAAAAAAAAAAAAAAAAAAAAAAAAAB3yHfHZw - AAAAAAAAAAAAAAAAAAAAAAAAd3fIyHVwAAAAAAAAAAAAAAAAAAAAAAAAfHh3jIxwAAAAAAAAAAAAAAAA - AAAAAAAHd8jIyHdgAAAAAAAAAAAAAAAAAAAAAAAHd4yHfIdAAAAAAAAAAAAAAAAAAAAAAAAHyMjIyMhQ - AAAAAAAAAAAAAAAAAAAAAAB3d3eMh4dgAAAAAAAAAAAAAAAAAAAAAAB8jIyIfIdQAAAAAAAAAAAAAAAA - AAAAAAB3h4jIiMh3AAAAAAAAAAAAAAAAAAAAAAB8jIeHeIjHAAAAAAAAAAAAAAAAAAAAAAeIiHh4eMiE - AAAAAAAAAAAAB0dHcAAAAAd8h4eIiIiHcAAAAAAAAAB0d3d3RwAAAAeIeIiIiIh3RwAAAAAAAHR3d8h3 - dAAAAAfIh4iIiHiIx0cAAAAAdHh3eIeHhwAAAAeHiIiIiIiId3R3dHR0eHd4h4eHhAAAAAd4eIiIiIiH - x3d2d3eId4iIiIiIhwAAAAd4eIiI+IiIh3d3eHh3iIiIiIeHwAAAAAfIjHeIiIiIyIeHh4iIiIiIiIiI - cAAAAAeIQ0R3h3iIiMiIiIiIiIiIiIiEAAAAAAfIR3d3d0iIiIh4iIeIiIiIiHhAAAAAAAB4d3d3SHiI - h4fTiIi3iIiIeIwAAAAAAAB3h4d3eIeIiHiJiIuIiIh4jHAAAAAAAAAHyId3h3h4iIh4iIiIiIiHeAAA - AAAAAAAAB8iMiMjIiIiIh4h3aMjHAAAAAAAAAAAAAAdYyIeIiIiMjId6d4eAAAAAAAAAAAAAAAAHdsjH - eIeH6MiId3AAAAAAAAAAAAAAAIiIh4V8jIh4eIfHcAAAAAAAAAAAAACIiIh3AAAHd3h3fHcAAAAAAAAA - AAAAAAiIjHgAAAAAAHx8eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAA - AAd0dAAAAAAAAAAAAAAAAAB3x3cAAAAAAAAAAAAAAAAAd3fHcAAAAAAAAAAAAAAAB3yMh3AAAAAAAAAA - AAAAAAfIeMdwAAAAAAAAAAAAAAAHjIyHQAAAAAAAAAAAAAAAfId4yHAAAAAAAAAAAAAAAHjIyIdQAAAA - AAAAAAAAAAB3iId4YAAAAAAAAAdwAAAAjIiIiIUAAAAAAHd3dAAAB4iIiHh8cAAAAHd3x4dwAAd4iIiI - h3Z3d3R3yIh4cAAHh4iIiIfHd3d4iIiIh3AAB3jHiIiIiHeHiIiIiIwAAAh3dXh4iMiIiIiIiIhwAAAA - yGd0d4iIeIi4iIiMAAAAAIeHd4iIh32IiIiIcAAAAAAAd4jIyIiIiHeHyAAAAAAAAAB3h4iIh8h3dwAA - AAAAAAAIh8fIh4eIaAAAAAAAAACIiHAAB8jIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////////////////////n////g////wP///8B///+Af///gH///4B///8Af///AH///wB//n8AP/A+AB - /AHgAAAB4AAAAeAAAAPgAAAH8AAAD/AAAB/8AAA//wAA//4AA//weA////////////////////////// - //8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRwAAAAAAAAAAAAB3dAAAAAAAAAAAAA - d8dwAAAAAAAAAAAAfId3AAAAAAAAAAAHeMjHAAAAAAAAAAAHyHh3AAAAAAAAAAAHh3eEAAAAAAAAAAAI - yIiHAAAAAHd2cAAIiIiIQAAAd3d4UACHiIiId3d3eHiIcACHh4iIyHeHiIiIcAAIR3d4iIiIiIiMAAAH - d3eIh3iIiIhwAAAAeMh4iIiHiMAAAAAAAHfIiMh4aAAAAAAAiIgHyIfIAAAAAAAIgAAAAIAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD8f/8A+H//APB/ - /wDwP/8A4D//AOA//wDgP/8A4D/BAOAfAQDAAAEAwAABAOAAAwDgAAcA8AAfAPwAPwDwgP8A5/f/AP// - /wD///8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAd1AAAAAAAAB8cAAAAAAAB4eAAAAAAAAHyMgAAAAAAAiIhwAAAHcACI - iHcAd3hwAIz4jIeIiIAAd3eIiIiIAACHeIiIiHAAAACMeMh4AAAAiAAIgAAAAAAAAAAAAAAAAAAAAAAA - AAD//wAA//8AAP//AADj/wAA4/8AAMP/AADB/wAAwfkAAMDBAADAAQAAwAMAAMAHAADwDwAAzn8AAP// - AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAA9OzsAZD8/AGg8 - PABtPj4AQkNDAEZIRwBWQkIAV0REAF5AQABbRkYAVklJAFxPTwBTU1MAXFJSAF5ZWQBkQEAAYUREAGZF - RQBqQkEAYEtLAGNPTwBwQUEAfUZGAHJKSgB2SUkAfU9PAGBRUQBgVFQAZlZWAGZYWABqWVkAclZWAHpU - VAB9W1oAbmJiAGtoaABtaWkAcWdnAHdnZwB8Y2MAe2pqAHJxcQB+dHQAd3l5AHl6egCGT08AiU9PAIFP - UACGU1MAjVFRAIlWVgCMV1cAg1xbAIxaWQCQUlIAlVJSAJFXVgCXVVUAmVVVAJZaWQCSXV0AlV9eAJpZ - WgCeW1sAml5eAKBZWgCgXFwAql9fAIRmZQCIZWQAhWtrAI5ragCTYmEAnGBhAJ9kYwCaZmYAk25uAJ1s - awCFdHQAiXd3AIt+fgCWd3cAmHR0AJV5eQCbfHwAo2JhAKZhYQChZWUApGVkAKplZACsZGQAqmhnAKZr - agCnbGsAqmloAKlubQCsbW0AtGZnALhsbACxb3AAv29wAKVxcACrc3IAr35+ALN0cwC5c3MAvXBxALR4 - dgC1fHsAunt6AMNtbgDGb3AAw3FyAMZwcQDGdXUAyHR1AMp3eADBeXkAxnt7AMB/fgDLensANLBSAEWf - TgBBtFwAPMdnADHkdgDciiIAvoF/AISrdwDln0sA35lhAN2XfADgmmEA8LdlAO61cAArWPIALWT+AEh5 - +gDOf4AAfoCAAHiA1ABZv9wAZrnUAGK+2ABxnv4Ad6P/ADPX/QBw0OcAW+D7AIKEgwCPgoIAjI2NAJuC - ggCUiIgAmYqKAJGSkgCjhIQAqoKCAKKLiwC+hIMAsoqKALaSgQCum5sAsZubALqqlQCdgr4Ar6ytALGh - oAC6pKQAwoSDAMyBggDGiIYAyYiHAMWMigDMjIoA0ISFANKHiADUjIwA2Y6NAMCUjQDIk44A0JCPANaP - kADHlZQAzpSSAMScmwDUkpIA2ZSVANWYlgDampcA2ZeYANWcnADam5sA4p2cAMChjwDeoJ4A5aCFAOaj - jQDlpJoA2p6hAMOkowDOoaEAy62tANegoADdoqEA2aGpANGsrwDdq6kAwbG4ANGysQDdtLQA2ri3AOGk - owDjqKYA66ylAOGnqADjq6oA6a2rAOOwrwDssK4A5K+wAOaztADttLIA57i2AO24tgDmurgA6rq6APC1 - swDyuLYA9Ly5APi+uwD1wL0A+cC9AKKMwACkk8QAqprMALSayACptsEAlaDkAOy/wACRxtQAgOv9AJnr - 9wDEwsoA5sbGAOzCwgDuyMcA7MzMAPPEwgDxy8oA9dPTAPja2gAAAAAAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAADLytDi9tOemQAAAAAAUy9EecLEsa1uPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj11Mme - VakAAAAAAAAAAAAATS84M0akAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE - AAAAAAAAAAAAAAABAAAAAQAAAAAAAFFNTQBRUlIAU1RUAGJHRwBiT08Aa0lIAGJTUwBrVlYAYllZAGZc - XABpWloAb1xbAHNTUwB7V1YAc1hXAHFbWwBkZWUAaWFhAG5kZABpamkAcGFhAHlubgB2cHAAf3V1AH55 - eQB8fX0AgUpKAI1PTwCLWFcAhlhYAI9ZWQCKXFsAm1ZWAJJZWQCWWVgAmlpbAJtcWwCiXFwAl2BfAIBg - YACAZ2YAgG9vAI9oaACWZWQAmGBhAJ5kZACcaWoAmm9vAIV0dACNcHAAiXZ2AIB8fACac3IAm3V0AJ51 - dQCZfHwAnHx8AKNmZgCnZmYAqmJiAK5jYwCvb24AtWVmALBtbgC5bW0AvmxtAKx+fQCxcnIAtHBwALZz - dACydXQAtnd2ALlwcAC5dnYAt3p5ALh5eAC8fHsAun18ALx+fQDGb3AAxnBxAMdzdADAd3YAyHJzAMlz - dADJdXYAynd4AMd/fwDMe3wAzXx9AHunbwBhvHIAYsN4ANuLOwC2hn4A4Zt5APC3ZABte9sAX47+AHWM - 5QAl0foAY+P8AIeDgwCFhoYAioSEAJOIiACWi4sAmpKRAKGCgQCmhYUAqYGBAKuDhACniooApYyMAKiO - jQCyhYMAvoWEALeNjQCrj5AAr5eXALSVlAC9lJMAmbCEAK6RugDBgYAAwoSCAMWDhADChoQAxYeFAM6A - gQDFiIYAxoqIAMqIiQDMi4oAy4yKAMiPjQDPj44A0ISFANKJigDUi4wA04+NANWNjgDKkY8A0JCOANud - iQDWj5AAzJSTAM2XlgDGm5oA1pGSANOUkgDVl5EA1pOUANiVlgDYmJUA2ZeYANKenADbmpsA3pmYANuc - mgDbn5wA1aacAN6gngDqqZoA3Z+gAMyjowDCra0AxqysAMqpqQDboaAA3qKiAN6logDbp6UA3aWkANer - qgDWsbMA0rW0ANe0tADfs7IA4aSiAOGlpQDkp6UA46imAOWopgDsraIA6qimAOGoqADhrqwA6a2rAOqv - rADpsK4A7LGuAOGzswDlsbEA7bKxAO+1sgDotrYA5rm3AO+4twDot7sA6bq5AOu9uwDrv70A8bazAPG2 - tADxuLUA9Lm2APC9uwD2vboA9L+9APi+uwD4v7wA8sC+APXAvgD5wL0AkILJAKqXzACsu8cAqr/LALLV - 3QDawMIA48XFAOvDwQDswMAA7cTDAO/ExQDgxsgA8cbEAPTGxADwyskA9MvJAPLNzQD21dYA+NjZAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAMEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHCEcBQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAayU9PSYbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQlBSQiJpAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAM0pSUlJQPRcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnUlJSUlJGFQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAFJSUlJSUkoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzUlJSWVJZfxAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5XWYqKioqGDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoqMkpqa - mqAsAAAAAAAAAAAAAAAAAABoNAAAAAAAAACMjJyuvLy2toYHAAAAAAAAAAAAABcOIDouBgAAAAAAc4yc - tsHKysPAriIKAAAAAAAAABYgRk1LTX+DEAAAAABukqXB4ejo4dHPQCIEChcXEwggTXV/k66unKMpAAAA - AG6Srsro6ero0dN/Rk1NRk2Dg4STrsbh4cHAt2sAAAAAbpKuOXPe6ajW15KGg4OGk528yuHo5eHPz882 - AAAAAAB4jCkDAxSoMabXt5yjt8ro3ePo5dbT09HTdAAAAAAAAABGcBFoGgFwdtfDwHxi2dpmZcrX09HP - z0MAAAAAAAAAAHh/qWwaOa6cz9PNZGPYsdzbzc3DwLk2AAAAAAAAAAAAAAAvhpKakoyg19HNyKS5wHtb - orZ/cwAAAAAAAAAAAAAAAAAANkaKWVm5zb1gYV6cXVxfNgAAAAAAAAAAAAAAAAAAALGvlTIuP1K5tqCR - l4xfLwAAAAAAAAAAAAAAAAAAsbPBenkAAAAAcCVYjE0scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////+f///+D////A////wH - ///4B///+Af///gH///wB///8Af///AH/+fwA/8D4AH8AeAAAAHgAAAB4AAAA+AAAAfwAAAP8AAAH/wA - AD//AAD//gAD//B4D////////////////////////////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAAWlJSAHBJSQB1SEgAe1dXAHdYWAB5WlkAel1dAGBiYgB1bGwAfWtrAHh2 - dgB9fn4Ag01NAIRXVwCIV1cAhV9eAItbWgCgX14ApV1dAJhgXwCNYGAAnWtqAJhtbQCCdnYAh3x8AI15 - eACeensAqGBgAKhoZwCga2oArGpqALNqagCzb28AtG1tALltbQCxb3AApnVzAKlzcwCqdHMApnp6AKd+ - fgCpensAq3x7ALZ3dgC8dHQAvH59AMZvcADGcHEAxXN0AMhycwDJdncAynh5AMx5egDNfn8Ajo1wAOek - VgDGgH8A4p53AEZ2+gB8u4AAd8PaAIuEhACOh4cAjo6OAJ+DggCejo4Ao4SEAKSIiACsi4sAqo2MAK6P - jgC+gYAAvoaGAL+KiACskJAAtJeXALWenQC5np4At6iOAKmyjgC9nroAwYSDAMaGhADOhoYAxomHAMiK - iQDJjYwA0oeIANOOjwDUjY0A2ZiPANaPkADGkZEAx5eXAMySkADGnZwA1ZOSANeTlADWl5YA2JSVANGZ - mADan50A3J6dAOCcmwDVoJ8A7K2fAMOtrQDXo6IA3aCgAN+kpADVq6oA3ay3AMu0tADPtrYA3L+/AOCi - oQDhpqUA5KelAOinpgDlq6gA46usAOOvrQDqrqwA7LGuAOayswDjtrQA5re1AOqysQDts7EA57y6AO+8 - ugDrvL0A8LOwAPC1sgDwtrQA87q3APS6twD2vboA8b69APi/vAD2wb4A+cC9AJmTzwDHqMMAu8PMAIHf - 8QDByNAA7cLCAO3FwwDvxsQA5cjIAOzOzgDwxcQA9cbEAPPP0AD10tIAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - BQMJAAAAAAAAAAAAAAAAAAAAAAAAAAAPHBMNAAAAAAAAAAAAAAAAAAAAAAAAABojLy8TAAAAAAAAAAAA - AAAAAAAAAAAAAB0wMDAiPgAAAAAAAAAAAAAAAAAAAAAAQjAwMDAtGAAAAAAAAAAAAAAAAAAAAAAAFzIy - NTU5CgAAAAAAAAAAAAAAAAAAAAAAIjZYWFxcBwAAAAAAAAAAAAAAAAAAAAAANlxtdW11JQAAAAAAAAAA - PgcRDgkAAAAAXG1/lISAZgMAAAAAABkVLC5SVhcAAABNY3WWnJuLfB8UBAcQHkhWaX91dSsAAABNY2BM - mJeCiVJSVl9laX+WloSJgEIAAAAAXAEIC0tGjnR0dJaRk5qNjIyJQwAAAAAAJkNADBtdjIaPO1GSPYuJ - hnVEAAAAAAAAAClISWRcd4xwkGp8UE90VwAAAAAAAAAAAAAAKSQ1NYZ7OjhbPDdGAAAAAAAAAAAAAHNv - YGsAKyJoXFYmRwAAAAAAAAAAAAAAcnIAAAAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// - /wD///8A////APx//wD4f/8A8H//APA//wDgP/8A4D//AOA//wDgP8EA4B8BAMAAAQDAAAEA4AADAOAA - BwDwAB8A/AA/APCA/wDn9/8A////AP///wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAABjZGQAdmRjAHtpaQB/eHgAgU9PAKBaWgCFbm0AlWtqAKptbgCwZ2cAsGhoAKxw - cACteHkAvnJyAMZvcADGcHEAy3l5AMx9fgCFmXQAwIB/ANeUfQDhoX8AlIqJAJWMjACYiIgAoIaGAK2K - igCxh4cAvoGAALKKigC4iYgAuJWVAL2cnACss50AuqKhAL+mpgDLgoIAxImHAMeNjADLkI8AxpWTANCS - kQDYlZUA1J6dANqZmgDdnp4A1J+oAMaiogDOr68AzLKyANi5uADhpaIA4qypAOWtqADrrqsA4bKwAOay - sgDtuLYA57++AOy4uADxtLIA8be0APa9ugDswL4A9sG+ALCcxwC5ncIA06zBALnH0QC2ytQA7sPDAPLS - 0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAZBgUAAAAAAAAAAAAAAAAACw8KAAAAAAAAAAAAAAAAGhAQDgAAAAAAAAAAAAAAAAkRESUYAAAA - AAAAAAAAAAAlKy4uBwAAAAAAAAcDAAAAKzlHPCYCAAAYCB0oKgAAAC0wSDs0FB0nLDlAOiwAAAANAQQb - Pi9DRkVBPzUAAAAAJB4cKz5EQjMiNSkAAAAAAAAAHwwRNxYVEyQAAAAAAAAxMgAAACEgAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA4/8AAOP/AADD/wAAwf8AAMH5 - AADAwQAAwAEAAMADAADABwAA8A8AAM5/AAD//wAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAkAAAAJAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAUAAAAOAEBAVUAAABUAAAANQAAABAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkFBSUvGRl5TCkpwlYuLtxDJCTQFw0NmQAA - AEkAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAwMKE8rK6V6RET2klJR/5ZS - U/+OT0//ZDc38B0QEJoAAAAyAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDAwYVzAwoopP - T/ygXVz/oFtb/55ZWf+bWFf/k1NT/1UvL9wGAwNcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AARNKipxhk5O+adkY/+uZWX/tWdo/7VmZ/+qYWH/nltb/3hERPcfERGCAAAAFgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADEZGS1zQ0LXqGdm/7ptbf/Fb3D/x3Bx/8hwcf/BbW7/q2Vl/4hPT/82HR2gAAAAIAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAB1gxMYyYXl3/vXFx/8Zwcf/HcHH/x3Bx/8dwcf/HcHH/uG1t/5NY - V/9EJia2AAAAKQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPB8fNH1MS+K4cnH/x3Fy/8dwcf/HcHH/x3Bx/8dw - cf/HcHH/wHBx/51gX/9PLCzGAAAAMwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAMAAAAAAAAAAAAAAAAAAAAALhAQFIZXVs/RjIz/1Y2O/9qYmP/eoaL/46qr/+aysv/ot7f/6rm5/+m4 - uf/otbX/5q+v/+uvrf/jqab/wYeF/28/P/QhEhKvAAAAXwAAACgAAAANAAAABQAAAAMAAAACAAAAAwAA - AAUAAAAKAAAAFQAAADAdDg9oSSkptHZHRu2dYmL+t3Z1/758e/+6enn/tnh3/7d5eP+8fn3/w4SD/7Z6 - ef9eODfbBgICTgAAAAgAAAAAAAAAAAAAAAAAAAAAPhwcJJVjYuPXkZH/2JOU/92fn//iqqr/57O0/+u8 - vP/uwsL/78XG/+/Exf/twMD/67i4/+60sv/wtrP/zZKQ/5taWv9xQED2MRsaxAgEBIcAAABaAAAAQQAA - ADcAAAA2AAAAOwAAAEUEAgJZHA4OfUcnJ7l5SkntqGxr/8CAfv/DgoH/vH59/7p+ff/DiIb/zZGP/9GT - kf/UlJP/1peV/9eZl/+GVlbuGQsLVwAAAAcAAAAAAAAAAAAAAAAAAAAARiIiLZ9rauvZk5P/2peY/+Ck - pP/lsLD/6ru7/+/Fxf/yzMz/9NDQ//PPz//xycr/7sDA//K5tv/1u7j/36Kg/6dmZf+mZWX/j1ZW/WM6 - OutDJSXQNBwcvDAaGrQ0HBy1PiIivUwsLMtkPDzfh1VU9a1xcP/EhIP/xIWE/7+Cgf/Ch4b/zZST/9mk - ov/grq3/4a6t/96lo//eoJ7/36Kg/+Cjof+IWVjnGwwMQwAAAAIAAAAAAAAAAAAAAAAAAAAARyQkL6Br - auzZk5P/25qb/+GnqP/ntLT/7cDA//LLy//209T/+NjY//fX1//00ND/8cbG//W9u//4vrz/46ak/7d0 - c/+vb27/s3Jy/7d2df+ucXD/pWpp/6Npaf+nbWz/sHVz/7p9fP/EhYT/yImI/8WIhv/DiIb/ypGP/9eg - n//hr63/57q5/+rCwP/rwsD/6bq4/+evrf/nq6n/6q6r/9qgnv9wRkbDBwAAHgAAAAAAAAAAAAAAAAAA - AAAAAAAASCQkLZ1nZuvYkpP/25uc/+Opqv/qtrf/7cHB//TOzv/52Nj/+tzc//na2v/xz9D/8MfH//fA - vv/6wb7/6a6r/8OBgP/DgoD/vX58/7h7ev+8fn3/woOC/8aHhv/HiYj/xoqJ/8aLif/Ijoz/zZST/9eg - nv/hrav/6Lm3/+zCwf/uyMf/78nH/+/Dwf/uvLr/7ba0/+60sf/vtLL/8ri1/7J+fflMKSltAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAQyEhI5JcXOPWj5D/3Juc/8qVlf+BZmb/bl5e/4l4eP/AqKj/8tPT//LO - zv+5p6b/w6qq//fBv//7wr//8LWy/86Ojf/Ojoz/0ZGP/9GSkP/OkY//zpOR/9GamP/VoJ//2qel/+Gv - rf/nt7X/6727/+3Dwf/wycf/8czL//LLyf/yxsT/8cC+//G7uf/yubf/87m3//S7uP/4vrv/1J6c/3JH - RrAdCgsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANRcXEYJNTcvPiIn/15aW/2VNTf85Ojr/Q0VF/0JF - RP9dXFz/n5GR/+S/v/+bh4f/hXp6/+25uP/7wr//9bu4/9qcmv/Zmpj/252b/96gnf/ipKH/5q+s/+u+ - vP/vycf/8srI/+3Hxv/wysj/9c7M//TNy//0ysj/9MbE//TBv//1vrz/9r26//e9u//4vrv/+L+8//vB - vv/hqqf/g1ZVzDwcHC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW4+Ppq/env/05OT/2ZX - V/9rbm7/fX9//3l6ev99f3//cHJy/5F9ff+ff3//XFhY/9eop//8wr//+L+8/+Wppv/ipaP/5qil/96i - pP/Kmaz/1qi1//LGxP/tyMf/qb3J/23E3P9kw9//vMTN//jDwP/3wb//+MC9//i/vf/5v73/+b+8//i/ - vP/3vrv/+L68/92mo/+IWlnRRSMjOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcv - L0mbX1/y15GS/6GAgP9XV1b/iYuL/4CBgf98fX3/cnR0/1dPT/++j4//km9w/9Sfnv/6wL3/+cC9/+6z - sP/ssK3/0Z+u/4OH1P9YffD/QGPs/7KYyv/Ct7z/Ytrz/3Ts//8s2f//cbvU//m+u//4v7z/+L67//e9 - uv/1vLn/9Lq3//O5tv/zuLX/0puZ/4RVVctGIyM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADIXFwdrPDySq2ts/diZmf/ApKT/sKur/4CBgP95enr/iYiI/49zdP/do6P/36Ch/96e - nv/zuLX/+sK///W7uP/1ubT/qZC//2qY+/9tnf//MGT6/56FxP/esK//nMbS/57n8/9+z+T/ybG3//a6 - t//zubb/8re0//C1s//utLH/7rKw/+qvrP++iIb9dklJtkMgISoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHIyMSazw8kZ5hYvXNjI3/2aSk/7OMjP+bd3f/sIKC/9KV - lv/cnJz/2peY/9aRkf/koqL/+sG+//nAvf/5v7z/4amw/6qZx/+aouP/qpvP/+mxtv/2urj/6rGv/+S6 - u//ptrX/466n/+Ovqf/ssK7/6q6s/+isqv/oq6n/2J2b/6JubfFoPT2NOxoaFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBoaCFowMFd7SEjAomZm9sWC - gv/XkZL/25SV/9iSk//Wj5D/1IyN/9KHiP/UiIj/8bOx//rCv//3vbv/9ru4//O3s//xuLX/7q6e/+ej - hf/npIn/7bCp/+Otp/+KsX3/ULdm/1WjWv+7oYz/5KWk/9uenP+4gH79glJRzVYuLlQgCAkGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAA8HBwQVy4uS3FBQaCPV1fjsG5v/cmAgf/ShYb/0YKD/85+f//LeXr/2I2M//e8uf/1vLn/7rOx/+2y - sP/lpJX/5qFY/+6xXP/djS3/35h9/86gl/9SwW7/Nd90/0WxXP+vlH//wYSE/49cW+VlOTmBQR4eHAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGk7OhqIWFd8oG5u8J5qav+eX2D/tmts/8Z0df/KdHX/yXJz/92T - k//3vLn/7LGu/+Snpf/dm5L/4Z1q/+61dP/fmmX/15WM/9eYlv/Bm43/r6uR/6uNgP+WYWDtbkBAnUwn - JzQVAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiFJSBnhC - QgpqNDQJWSUlB08dHQdfKisKfENDFJJWViinbGtRvYOCjtOcm8/pt7X157y6/7eOjfhxRUW7aTk5m4RK - StehWlr6uGdo/8Zwcf/dkpH/8bSx/+OnpP/YmZj/1ZWT/9ealP/Vl5X/0JCP/8eIhv+zdnb/lFtc6nA/ - QKRSKio/JQwNBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADTn6AB2qioDMuUlCHBhYU8voCAWcCBgXTEhoaLzZGQqdeensngrKvn47Sz/NOop/+yiIfyi2Bgs2k+ - PlZXKysPAAAAAUYlJRxcMTFYcj4+pYpMTeWmXF3+xnl5/9+Zl//dnJr/z46M/8KCgf+vc3L/ll9e831L - S8hlOTl/TigoMy0REQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABzQUIDnmprDriGhifHlpZMzp6eeNCgoZ7On5+2yJqaybuPj9WnfHzVj2RkunVJ - SYNbLy8/PRQUCgAAAAAAAAAAAAAAAAAAAAAAAAAAKRUVBU0pKSphNDRtd0BAsotNTd2ZW1vrkVlY4HtJ - Sb5lOTmCUysrQTsbGxEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCwsA2Y4OA5xQkImdkhIRHhKSll0R0dibUBAWWI2 - NkNUKCgoOhISDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhkZB0km - Jh5LJiYsRSEhITATFAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD/+H////8AAP/gH////wAA/8Af//// - AAD/gA////8AAP+AD////wAA/wAP////AAD/AA////8AAP4AB////wAA/gAH////AAD8AAf///8AAPwA - B////wAA/AAH////AAD8AAf///8AAPgAB////wAA+AAH//4HAAD4AAP/8AEAAPgAAf/AAQAA8AAA/wAA - AADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAEAAPAAAAAAAQAA8AAAAAADAADwAAAAAAcAAPAA - AAAADwAA+AAAAAAfAAD4AAAAAD8AAPwAAAAAfwAA/gAAAAD/AAD/gAAAA/8AAP/gAAAH/wAAgAAAAB// - AAAAAAAAf/8AAAAD4AP//wAAgB/8H///AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAYAAAAZAAAAGQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAARCQkYOh8fb0ooKK80HByiCQUFTAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAIhERFmA2Np2ITUz3lVNT/4dLS/5IKCi9AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAANjODiBllhY+61kZP+vY2P/pV5e/3xHRvEhEhJfAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAASSgoN41VVeS6bW3/xW9w/8dwcf+9bG3/klZW/jogIIEAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1RkWcs2xs/8dxcv/HcHH/x3Bx/8Zwcf+iYWH/SSkpmAAA - AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUC0tMZtgX+fGcnP/x3Bx/8dwcf/HcHH/x3Fy/61q - av9UMTGqAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxRER1tm9v/8hxcv/HcHH/x3Bx/8dw - cf/HcnP/tnRz/185OboAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAACIxXV7TEdHT/yHJz/8l1 - dv/Kd3j/ynd4/8p4eP/Bf37/bURDywAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNKysjo2Zm4Mt4 - ef/NfH3/z4GC/9GFhf/RhYb/0YWF/82Mi/9+UVHeCAICOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAACwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGc+ - Pkm1c3P30IGC/9OJiv/XkZL/2ZaW/9mWl//YlJX/2JmY/5hnZfMeEBBrAAAABwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA0FAgItHhAQWzAbG4IqFxeHDQcHWwAAABkAAAAAAAAAAAAA - AAAAAAAAek1MdMN/f//VjI3/2piZ/9+io//hqKn/4qmp/+Clpf/jpqT/wImH/04xMLwAAAA6AAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABEbDg5GRygokW5CQs+MVlbxnGJh/JdfXvxnPz7hHA8PbgAA - AAwAAAAAAAAAAAAAAACMW1qbz4qK/9qXl//gpqb/5rKz/+q6u//rvLz/6La2/+qxr//epKL/j1lZ+DUc - HLACAQFPAAAAHQAAAA8AAAAPAAAAEwAAACIbDg5MVDExnYZUU+SpbWz+uXl4/7x+fP/AgoD/xoeF/72A - f/9fOzu1AAAAHAAAAAAAAAAAAAAABJhkZK/VkZH/3Z+g/+axsf/twMD/8svL//LNzf/vxcX/8Lq4/+6z - sf+1dHP/j1VU+144N9g7IiKqMhwclDcfH5RGKSmiYTw7v4tZWOiydXT+woOC/8aKiP/Ol5X/2aWj/9ui - of/cnpz/2pyb/35TUrgAAAAVAAAAAAAAAAAAAAAFmmVkstaTk//hpaX/7Lm6//TLy//419f/+NnZ//TP - z//1wb//9Lq3/8aGhP+1dHP/s3Rz/6xwb/+pb27+rnNy/7Z7ev/BhIL/yY2L/8+WlP/apqT/5be2/+vB - v//rvrz/6bKw/+uvrf/Um5n/bUVEgAAAAAMAAAAAAAAAAAAAAAOTXV2q1ZGR/9CYmP+dfX7/o4yM/9e8 - vP/z0tL/zLOz/+u8u//5v7z/1peV/8uLif/Ki4r/yoyL/86Ukv/TnJv/2qSi/+Gtq//nuLb/7cPB//DJ - x//xxsT/8b+9//G6t//zubf/77az/6d1dM89Hx8lAAAAAAAAAAAAAAAAAAAAAIJOTojNiIn/jGlp/01O - Tv9UVlb/dnNz/7uhof+Pfn7/xJ+e//zCv//lqKb/3J2b/+Chnv/hpaT/7Ly5/+vHxv/MxMn/0MjN//LK - yf/1x8X/9sLA//a/vP/3vrv/+L+8//S7uP+5hoXhYTo5RwAAAAAAAAAAAAAAAAAAAAAAAAAAaTs7RrVz - dPKmfn7/cXJx/4SGhv97fX3/b2Zm/516ev+7kJD/+sG+//C2s//lqqr/rpbA/3aB2/+ql83/tMHK/2jc - 9P9OzOz/2r3B//q/vP/3vrv/9ry6//a8uf/ss7D/tYGA32c+Pk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAvEhIHg01Njbp9fvrCn5//nI+P/4R7ev+fgID/2Jyd/9ybnP/ytrT/+b+8/+ewtf+Mld3/ZI36/5eI - zv/Ttrn/sNLc/6/Czv/stLT/8re0/++0sf/tsq//2qCe/6Rxb8phODg+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABCIB8MeUZGbqRpata8gYH8x4mJ/9eTk//YkpP/04qL/+Cbmv/5wL3/9726/+Sw - t//Zrrn/56qY/+2smf/lr6n/nLWJ/4Gtdf/Pppn/3qGf/7yEg/KJWViYTyoqIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQh0dGXJAQGOXXl7NtnR1/8V7fP/MfH3/znt8/+il - o//0urj/7LCu/+Whg//rq13/35VX/9Kek/9yvXz/ZbNv/6iCdfqYY2O/aj4+TCUJCgcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACcamsBjFRVB4FERAh9PT0JjU1ND6VnZx+/hINF0JqZiNOjoty0iIf2hFBQw5lX - V8+wY2P4xXR0/+aioP/oq6j/2pqT/92fif/Vlor/yYqJ/7N8efiVZmPGdERFYkEfHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALiFhgXFkJEdx5CQSMqSknbNlZWbz5uaws2cnOXBlJPnqH18r4dc - XFFULy8OSCUlFm07O0+FSUmeoV1d3sF9fPrGhoX/snZ295xkZNiFUlKbbD4+T0UdHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc0JDA5FgYRKdbm46onR0Zp9ycnuWampzhFlZVmY6 - OikvDAwHAAAAAAAAAAAAAAAAAAAAAB0ODgRULCwhbjo7UXhERGVrPDxHTCYmGxAAAQMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//////////////////////D////gf///wH///4A///+AP///AD///wA///8AP//+AD - ///gA//D4AH+AeAA+ADgAAAAwAAAAMAAAADAAAAB4AAAA+AAAAfgAAAP8AAAH/wAAD8AAAD/AAAD/wB4 - D//H////////////////////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABMAAAAtAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgIO1cwMM1qOjrsHhAQmwAA - ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAATCgogfUhI6ahgYP6lXV3+f0hI9wIBAT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGBgFPLy6kuW1t/sZv - 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 \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumNonSyncSettings.Designer.cs b/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumNonSyncSettings.Designer.cs index b64b4be6b4..69e091f997 100644 --- a/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumNonSyncSettings.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumNonSyncSettings.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ZXSpectrumNonSyncSettings)); this.OkBtn = new System.Windows.Forms.Button(); this.CancelBtn = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); @@ -149,7 +148,7 @@ this.Controls.Add(this.CancelBtn); this.Controls.Add(this.OkBtn); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController_MultiSize; this.Name = "ZXSpectrumNonSyncSettings"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Other Non-Sync Settings"; diff --git a/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumNonSyncSettings.resx b/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumNonSyncSettings.resx index ca821b54f8..1af7de150c 100644 --- a/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumNonSyncSettings.resx +++ b/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumNonSyncSettings.resx @@ -117,508 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAwAMDAQAAAABABoBgAAxgAAACAgEAAAAAQA6AIAAC4HAAAYGBAAAAAEAOgBAAAWCgAAEBAQAAAA - BAAoAQAA/gsAADAwAAAAAAgAqA4AACYNAAAgIAAAAAAIAKgIAADOGwAAGBgAAAAACADIBgAAdiQAABAQ - AAAAAAgAaAUAAD4rAAAwMAAAAAAgAKglAACmMAAAICAAAAAAIACoEAAATlYAABgYAAAAACAAiAkAAPZm - AAAQEAAAAAAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAQAAAAEAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAHR3AAAAAAAAAAAAAAAAAAAAAAAAAAAAdHdEcAAAAAAAAAAAAAAAAA - AAAAAAAAAHd0d3QAAAAAAAAAAAAAAAAAAAAAAAAAAEd8d3UAAAAAAAAAAAAAAAAAAAAAAAAAB3yHfHZw - AAAAAAAAAAAAAAAAAAAAAAAAd3fIyHVwAAAAAAAAAAAAAAAAAAAAAAAAfHh3jIxwAAAAAAAAAAAAAAAA - AAAAAAAHd8jIyHdgAAAAAAAAAAAAAAAAAAAAAAAHd4yHfIdAAAAAAAAAAAAAAAAAAAAAAAAHyMjIyMhQ - AAAAAAAAAAAAAAAAAAAAAAB3d3eMh4dgAAAAAAAAAAAAAAAAAAAAAAB8jIyIfIdQAAAAAAAAAAAAAAAA - AAAAAAB3h4jIiMh3AAAAAAAAAAAAAAAAAAAAAAB8jIeHeIjHAAAAAAAAAAAAAAAAAAAAAAeIiHh4eMiE - AAAAAAAAAAAAB0dHcAAAAAd8h4eIiIiHcAAAAAAAAAB0d3d3RwAAAAeIeIiIiIh3RwAAAAAAAHR3d8h3 - dAAAAAfIh4iIiHiIx0cAAAAAdHh3eIeHhwAAAAeHiIiIiIiId3R3dHR0eHd4h4eHhAAAAAd4eIiIiIiH - x3d2d3eId4iIiIiIhwAAAAd4eIiI+IiIh3d3eHh3iIiIiIeHwAAAAAfIjHeIiIiIyIeHh4iIiIiIiIiI - cAAAAAeIQ0R3h3iIiMiIiIiIiIiIiIiEAAAAAAfIR3d3d0iIiIh4iIeIiIiIiHhAAAAAAAB4d3d3SHiI - h4fTiIi3iIiIeIwAAAAAAAB3h4d3eIeIiHiJiIuIiIh4jHAAAAAAAAAHyId3h3h4iIh4iIiIiIiHeAAA - AAAAAAAAB8iMiMjIiIiIh4h3aMjHAAAAAAAAAAAAAAdYyIeIiIiMjId6d4eAAAAAAAAAAAAAAAAHdsjH - eIeH6MiId3AAAAAAAAAAAAAAAIiIh4V8jIh4eIfHcAAAAAAAAAAAAACIiIh3AAAHd3h3fHcAAAAAAAAA - AAAAAAiIjHgAAAAAAHx8eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAA - AAd0dAAAAAAAAAAAAAAAAAB3x3cAAAAAAAAAAAAAAAAAd3fHcAAAAAAAAAAAAAAAB3yMh3AAAAAAAAAA - AAAAAAfIeMdwAAAAAAAAAAAAAAAHjIyHQAAAAAAAAAAAAAAAfId4yHAAAAAAAAAAAAAAAHjIyIdQAAAA - AAAAAAAAAAB3iId4YAAAAAAAAAdwAAAAjIiIiIUAAAAAAHd3dAAAB4iIiHh8cAAAAHd3x4dwAAd4iIiI - h3Z3d3R3yIh4cAAHh4iIiIfHd3d4iIiIh3AAB3jHiIiIiHeHiIiIiIwAAAh3dXh4iMiIiIiIiIhwAAAA - yGd0d4iIeIi4iIiMAAAAAIeHd4iIh32IiIiIcAAAAAAAd4jIyIiIiHeHyAAAAAAAAAB3h4iIh8h3dwAA - AAAAAAAIh8fIh4eIaAAAAAAAAACIiHAAB8jIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////////////////////n////g////wP///8B///+Af///gH///4B///8Af///AH///wB//n8AP/A+AB - /AHgAAAB4AAAAeAAAAPgAAAH8AAAD/AAAB/8AAA//wAA//4AA//weA////////////////////////// - //8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRwAAAAAAAAAAAAB3dAAAAAAAAAAAAA - d8dwAAAAAAAAAAAAfId3AAAAAAAAAAAHeMjHAAAAAAAAAAAHyHh3AAAAAAAAAAAHh3eEAAAAAAAAAAAI - yIiHAAAAAHd2cAAIiIiIQAAAd3d4UACHiIiId3d3eHiIcACHh4iIyHeHiIiIcAAIR3d4iIiIiIiMAAAH - d3eIh3iIiIhwAAAAeMh4iIiHiMAAAAAAAHfIiMh4aAAAAAAAiIgHyIfIAAAAAAAIgAAAAIAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD8f/8A+H//APB/ - /wDwP/8A4D//AOA//wDgP/8A4D/BAOAfAQDAAAEAwAABAOAAAwDgAAcA8AAfAPwAPwDwgP8A5/f/AP// - /wD///8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAd1AAAAAAAAB8cAAAAAAAB4eAAAAAAAAHyMgAAAAAAAiIhwAAAHcACI - iHcAd3hwAIz4jIeIiIAAd3eIiIiIAACHeIiIiHAAAACMeMh4AAAAiAAIgAAAAAAAAAAAAAAAAAAAAAAA - AAD//wAA//8AAP//AADj/wAA4/8AAMP/AADB/wAAwfkAAMDBAADAAQAAwAMAAMAHAADwDwAAzn8AAP// - AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAA9OzsAZD8/AGg8 - PABtPj4AQkNDAEZIRwBWQkIAV0REAF5AQABbRkYAVklJAFxPTwBTU1MAXFJSAF5ZWQBkQEAAYUREAGZF - RQBqQkEAYEtLAGNPTwBwQUEAfUZGAHJKSgB2SUkAfU9PAGBRUQBgVFQAZlZWAGZYWABqWVkAclZWAHpU - VAB9W1oAbmJiAGtoaABtaWkAcWdnAHdnZwB8Y2MAe2pqAHJxcQB+dHQAd3l5AHl6egCGT08AiU9PAIFP - UACGU1MAjVFRAIlWVgCMV1cAg1xbAIxaWQCQUlIAlVJSAJFXVgCXVVUAmVVVAJZaWQCSXV0AlV9eAJpZ - WgCeW1sAml5eAKBZWgCgXFwAql9fAIRmZQCIZWQAhWtrAI5ragCTYmEAnGBhAJ9kYwCaZmYAk25uAJ1s - awCFdHQAiXd3AIt+fgCWd3cAmHR0AJV5eQCbfHwAo2JhAKZhYQChZWUApGVkAKplZACsZGQAqmhnAKZr - agCnbGsAqmloAKlubQCsbW0AtGZnALhsbACxb3AAv29wAKVxcACrc3IAr35+ALN0cwC5c3MAvXBxALR4 - dgC1fHsAunt6AMNtbgDGb3AAw3FyAMZwcQDGdXUAyHR1AMp3eADBeXkAxnt7AMB/fgDLensANLBSAEWf - TgBBtFwAPMdnADHkdgDciiIAvoF/AISrdwDln0sA35lhAN2XfADgmmEA8LdlAO61cAArWPIALWT+AEh5 - +gDOf4AAfoCAAHiA1ABZv9wAZrnUAGK+2ABxnv4Ad6P/ADPX/QBw0OcAW+D7AIKEgwCPgoIAjI2NAJuC - ggCUiIgAmYqKAJGSkgCjhIQAqoKCAKKLiwC+hIMAsoqKALaSgQCum5sAsZubALqqlQCdgr4Ar6ytALGh - oAC6pKQAwoSDAMyBggDGiIYAyYiHAMWMigDMjIoA0ISFANKHiADUjIwA2Y6NAMCUjQDIk44A0JCPANaP - kADHlZQAzpSSAMScmwDUkpIA2ZSVANWYlgDampcA2ZeYANWcnADam5sA4p2cAMChjwDeoJ4A5aCFAOaj - jQDlpJoA2p6hAMOkowDOoaEAy62tANegoADdoqEA2aGpANGsrwDdq6kAwbG4ANGysQDdtLQA2ri3AOGk - owDjqKYA66ylAOGnqADjq6oA6a2rAOOwrwDssK4A5K+wAOaztADttLIA57i2AO24tgDmurgA6rq6APC1 - swDyuLYA9Ly5APi+uwD1wL0A+cC9AKKMwACkk8QAqprMALSayACptsEAlaDkAOy/wACRxtQAgOv9AJnr - 9wDEwsoA5sbGAOzCwgDuyMcA7MzMAPPEwgDxy8oA9dPTAPja2gAAAAAAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAADLytDi9tOemQAAAAAAUy9EecLEsa1uPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj11Mme - VakAAAAAAAAAAAAATS84M0akAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE - AAAAAAAAAAAAAAABAAAAAQAAAAAAAFFNTQBRUlIAU1RUAGJHRwBiT08Aa0lIAGJTUwBrVlYAYllZAGZc - XABpWloAb1xbAHNTUwB7V1YAc1hXAHFbWwBkZWUAaWFhAG5kZABpamkAcGFhAHlubgB2cHAAf3V1AH55 - eQB8fX0AgUpKAI1PTwCLWFcAhlhYAI9ZWQCKXFsAm1ZWAJJZWQCWWVgAmlpbAJtcWwCiXFwAl2BfAIBg - YACAZ2YAgG9vAI9oaACWZWQAmGBhAJ5kZACcaWoAmm9vAIV0dACNcHAAiXZ2AIB8fACac3IAm3V0AJ51 - dQCZfHwAnHx8AKNmZgCnZmYAqmJiAK5jYwCvb24AtWVmALBtbgC5bW0AvmxtAKx+fQCxcnIAtHBwALZz - dACydXQAtnd2ALlwcAC5dnYAt3p5ALh5eAC8fHsAun18ALx+fQDGb3AAxnBxAMdzdADAd3YAyHJzAMlz - dADJdXYAynd4AMd/fwDMe3wAzXx9AHunbwBhvHIAYsN4ANuLOwC2hn4A4Zt5APC3ZABte9sAX47+AHWM - 5QAl0foAY+P8AIeDgwCFhoYAioSEAJOIiACWi4sAmpKRAKGCgQCmhYUAqYGBAKuDhACniooApYyMAKiO - jQCyhYMAvoWEALeNjQCrj5AAr5eXALSVlAC9lJMAmbCEAK6RugDBgYAAwoSCAMWDhADChoQAxYeFAM6A - gQDFiIYAxoqIAMqIiQDMi4oAy4yKAMiPjQDPj44A0ISFANKJigDUi4wA04+NANWNjgDKkY8A0JCOANud - iQDWj5AAzJSTAM2XlgDGm5oA1pGSANOUkgDVl5EA1pOUANiVlgDYmJUA2ZeYANKenADbmpsA3pmYANuc - mgDbn5wA1aacAN6gngDqqZoA3Z+gAMyjowDCra0AxqysAMqpqQDboaAA3qKiAN6logDbp6UA3aWkANer - qgDWsbMA0rW0ANe0tADfs7IA4aSiAOGlpQDkp6UA46imAOWopgDsraIA6qimAOGoqADhrqwA6a2rAOqv - rADpsK4A7LGuAOGzswDlsbEA7bKxAO+1sgDotrYA5rm3AO+4twDot7sA6bq5AOu9uwDrv70A8bazAPG2 - tADxuLUA9Lm2APC9uwD2vboA9L+9APi+uwD4v7wA8sC+APXAvgD5wL0AkILJAKqXzACsu8cAqr/LALLV - 3QDawMIA48XFAOvDwQDswMAA7cTDAO/ExQDgxsgA8cbEAPTGxADwyskA9MvJAPLNzQD21dYA+NjZAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAMEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHCEcBQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAayU9PSYbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQlBSQiJpAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAM0pSUlJQPRcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnUlJSUlJGFQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAFJSUlJSUkoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzUlJSWVJZfxAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5XWYqKioqGDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoqMkpqa - mqAsAAAAAAAAAAAAAAAAAABoNAAAAAAAAACMjJyuvLy2toYHAAAAAAAAAAAAABcOIDouBgAAAAAAc4yc - tsHKysPAriIKAAAAAAAAABYgRk1LTX+DEAAAAABukqXB4ejo4dHPQCIEChcXEwggTXV/k66unKMpAAAA - AG6Srsro6ero0dN/Rk1NRk2Dg4STrsbh4cHAt2sAAAAAbpKuOXPe6ajW15KGg4OGk528yuHo5eHPz882 - AAAAAAB4jCkDAxSoMabXt5yjt8ro3ePo5dbT09HTdAAAAAAAAABGcBFoGgFwdtfDwHxi2dpmZcrX09HP - z0MAAAAAAAAAAHh/qWwaOa6cz9PNZGPYsdzbzc3DwLk2AAAAAAAAAAAAAAAvhpKakoyg19HNyKS5wHtb - orZ/cwAAAAAAAAAAAAAAAAAANkaKWVm5zb1gYV6cXVxfNgAAAAAAAAAAAAAAAAAAALGvlTIuP1K5tqCR - l4xfLwAAAAAAAAAAAAAAAAAAsbPBenkAAAAAcCVYjE0scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////+f///+D////A////wH - ///4B///+Af///gH///wB///8Af///AH/+fwA/8D4AH8AeAAAAHgAAAB4AAAA+AAAAfwAAAP8AAAH/wA - AD//AAD//gAD//B4D////////////////////////////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAAWlJSAHBJSQB1SEgAe1dXAHdYWAB5WlkAel1dAGBiYgB1bGwAfWtrAHh2 - dgB9fn4Ag01NAIRXVwCIV1cAhV9eAItbWgCgX14ApV1dAJhgXwCNYGAAnWtqAJhtbQCCdnYAh3x8AI15 - eACeensAqGBgAKhoZwCga2oArGpqALNqagCzb28AtG1tALltbQCxb3AApnVzAKlzcwCqdHMApnp6AKd+ - fgCpensAq3x7ALZ3dgC8dHQAvH59AMZvcADGcHEAxXN0AMhycwDJdncAynh5AMx5egDNfn8Ajo1wAOek - VgDGgH8A4p53AEZ2+gB8u4AAd8PaAIuEhACOh4cAjo6OAJ+DggCejo4Ao4SEAKSIiACsi4sAqo2MAK6P - jgC+gYAAvoaGAL+KiACskJAAtJeXALWenQC5np4At6iOAKmyjgC9nroAwYSDAMaGhADOhoYAxomHAMiK - iQDJjYwA0oeIANOOjwDUjY0A2ZiPANaPkADGkZEAx5eXAMySkADGnZwA1ZOSANeTlADWl5YA2JSVANGZ - mADan50A3J6dAOCcmwDVoJ8A7K2fAMOtrQDXo6IA3aCgAN+kpADVq6oA3ay3AMu0tADPtrYA3L+/AOCi - oQDhpqUA5KelAOinpgDlq6gA46usAOOvrQDqrqwA7LGuAOayswDjtrQA5re1AOqysQDts7EA57y6AO+8 - ugDrvL0A8LOwAPC1sgDwtrQA87q3APS6twD2vboA8b69APi/vAD2wb4A+cC9AJmTzwDHqMMAu8PMAIHf - 8QDByNAA7cLCAO3FwwDvxsQA5cjIAOzOzgDwxcQA9cbEAPPP0AD10tIAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - BQMJAAAAAAAAAAAAAAAAAAAAAAAAAAAPHBMNAAAAAAAAAAAAAAAAAAAAAAAAABojLy8TAAAAAAAAAAAA - AAAAAAAAAAAAAB0wMDAiPgAAAAAAAAAAAAAAAAAAAAAAQjAwMDAtGAAAAAAAAAAAAAAAAAAAAAAAFzIy - NTU5CgAAAAAAAAAAAAAAAAAAAAAAIjZYWFxcBwAAAAAAAAAAAAAAAAAAAAAANlxtdW11JQAAAAAAAAAA - PgcRDgkAAAAAXG1/lISAZgMAAAAAABkVLC5SVhcAAABNY3WWnJuLfB8UBAcQHkhWaX91dSsAAABNY2BM - mJeCiVJSVl9laX+WloSJgEIAAAAAXAEIC0tGjnR0dJaRk5qNjIyJQwAAAAAAJkNADBtdjIaPO1GSPYuJ - hnVEAAAAAAAAAClISWRcd4xwkGp8UE90VwAAAAAAAAAAAAAAKSQ1NYZ7OjhbPDdGAAAAAAAAAAAAAHNv - YGsAKyJoXFYmRwAAAAAAAAAAAAAAcnIAAAAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// - /wD///8A////APx//wD4f/8A8H//APA//wDgP/8A4D//AOA//wDgP8EA4B8BAMAAAQDAAAEA4AADAOAA - BwDwAB8A/AA/APCA/wDn9/8A////AP///wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAABjZGQAdmRjAHtpaQB/eHgAgU9PAKBaWgCFbm0AlWtqAKptbgCwZ2cAsGhoAKxw - cACteHkAvnJyAMZvcADGcHEAy3l5AMx9fgCFmXQAwIB/ANeUfQDhoX8AlIqJAJWMjACYiIgAoIaGAK2K - igCxh4cAvoGAALKKigC4iYgAuJWVAL2cnACss50AuqKhAL+mpgDLgoIAxImHAMeNjADLkI8AxpWTANCS - kQDYlZUA1J6dANqZmgDdnp4A1J+oAMaiogDOr68AzLKyANi5uADhpaIA4qypAOWtqADrrqsA4bKwAOay - sgDtuLYA57++AOy4uADxtLIA8be0APa9ugDswL4A9sG+ALCcxwC5ncIA06zBALnH0QC2ytQA7sPDAPLS - 0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAZBgUAAAAAAAAAAAAAAAAACw8KAAAAAAAAAAAAAAAAGhAQDgAAAAAAAAAAAAAAAAkRESUYAAAA - AAAAAAAAAAAlKy4uBwAAAAAAAAcDAAAAKzlHPCYCAAAYCB0oKgAAAC0wSDs0FB0nLDlAOiwAAAANAQQb - Pi9DRkVBPzUAAAAAJB4cKz5EQjMiNSkAAAAAAAAAHwwRNxYVEyQAAAAAAAAxMgAAACEgAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA4/8AAOP/AADD/wAAwf8AAMH5 - AADAwQAAwAEAAMADAADABwAA8A8AAM5/AAD//wAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAkAAAAJAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAUAAAAOAEBAVUAAABUAAAANQAAABAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkFBSUvGRl5TCkpwlYuLtxDJCTQFw0NmQAA - AEkAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAwMKE8rK6V6RET2klJR/5ZS - U/+OT0//ZDc38B0QEJoAAAAyAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDAwYVzAwoopP - T/ygXVz/oFtb/55ZWf+bWFf/k1NT/1UvL9wGAwNcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AARNKipxhk5O+adkY/+uZWX/tWdo/7VmZ/+qYWH/nltb/3hERPcfERGCAAAAFgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADEZGS1zQ0LXqGdm/7ptbf/Fb3D/x3Bx/8hwcf/BbW7/q2Vl/4hPT/82HR2gAAAAIAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAB1gxMYyYXl3/vXFx/8Zwcf/HcHH/x3Bx/8dwcf/HcHH/uG1t/5NY - V/9EJia2AAAAKQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPB8fNH1MS+K4cnH/x3Fy/8dwcf/HcHH/x3Bx/8dw - cf/HcHH/wHBx/51gX/9PLCzGAAAAMwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAMAAAAAAAAAAAAAAAAAAAAALhAQFIZXVs/RjIz/1Y2O/9qYmP/eoaL/46qr/+aysv/ot7f/6rm5/+m4 - uf/otbX/5q+v/+uvrf/jqab/wYeF/28/P/QhEhKvAAAAXwAAACgAAAANAAAABQAAAAMAAAACAAAAAwAA - AAUAAAAKAAAAFQAAADAdDg9oSSkptHZHRu2dYmL+t3Z1/758e/+6enn/tnh3/7d5eP+8fn3/w4SD/7Z6 - ef9eODfbBgICTgAAAAgAAAAAAAAAAAAAAAAAAAAAPhwcJJVjYuPXkZH/2JOU/92fn//iqqr/57O0/+u8 - vP/uwsL/78XG/+/Exf/twMD/67i4/+60sv/wtrP/zZKQ/5taWv9xQED2MRsaxAgEBIcAAABaAAAAQQAA - ADcAAAA2AAAAOwAAAEUEAgJZHA4OfUcnJ7l5SkntqGxr/8CAfv/DgoH/vH59/7p+ff/DiIb/zZGP/9GT - kf/UlJP/1peV/9eZl/+GVlbuGQsLVwAAAAcAAAAAAAAAAAAAAAAAAAAARiIiLZ9rauvZk5P/2peY/+Ck - pP/lsLD/6ru7/+/Fxf/yzMz/9NDQ//PPz//xycr/7sDA//K5tv/1u7j/36Kg/6dmZf+mZWX/j1ZW/WM6 - OutDJSXQNBwcvDAaGrQ0HBy1PiIivUwsLMtkPDzfh1VU9a1xcP/EhIP/xIWE/7+Cgf/Ch4b/zZST/9mk - ov/grq3/4a6t/96lo//eoJ7/36Kg/+Cjof+IWVjnGwwMQwAAAAIAAAAAAAAAAAAAAAAAAAAARyQkL6Br - auzZk5P/25qb/+GnqP/ntLT/7cDA//LLy//209T/+NjY//fX1//00ND/8cbG//W9u//4vrz/46ak/7d0 - c/+vb27/s3Jy/7d2df+ucXD/pWpp/6Npaf+nbWz/sHVz/7p9fP/EhYT/yImI/8WIhv/DiIb/ypGP/9eg - n//hr63/57q5/+rCwP/rwsD/6bq4/+evrf/nq6n/6q6r/9qgnv9wRkbDBwAAHgAAAAAAAAAAAAAAAAAA - AAAAAAAASCQkLZ1nZuvYkpP/25uc/+Opqv/qtrf/7cHB//TOzv/52Nj/+tzc//na2v/xz9D/8MfH//fA - vv/6wb7/6a6r/8OBgP/DgoD/vX58/7h7ev+8fn3/woOC/8aHhv/HiYj/xoqJ/8aLif/Ijoz/zZST/9eg - nv/hrav/6Lm3/+zCwf/uyMf/78nH/+/Dwf/uvLr/7ba0/+60sf/vtLL/8ri1/7J+fflMKSltAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAQyEhI5JcXOPWj5D/3Juc/8qVlf+BZmb/bl5e/4l4eP/AqKj/8tPT//LO - zv+5p6b/w6qq//fBv//7wr//8LWy/86Ojf/Ojoz/0ZGP/9GSkP/OkY//zpOR/9GamP/VoJ//2qel/+Gv - rf/nt7X/6727/+3Dwf/wycf/8czL//LLyf/yxsT/8cC+//G7uf/yubf/87m3//S7uP/4vrv/1J6c/3JH - RrAdCgsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANRcXEYJNTcvPiIn/15aW/2VNTf85Ojr/Q0VF/0JF - RP9dXFz/n5GR/+S/v/+bh4f/hXp6/+25uP/7wr//9bu4/9qcmv/Zmpj/252b/96gnf/ipKH/5q+s/+u+ - vP/vycf/8srI/+3Hxv/wysj/9c7M//TNy//0ysj/9MbE//TBv//1vrz/9r26//e9u//4vrv/+L+8//vB - vv/hqqf/g1ZVzDwcHC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW4+Ppq/env/05OT/2ZX - V/9rbm7/fX9//3l6ev99f3//cHJy/5F9ff+ff3//XFhY/9eop//8wr//+L+8/+Wppv/ipaP/5qil/96i - pP/Kmaz/1qi1//LGxP/tyMf/qb3J/23E3P9kw9//vMTN//jDwP/3wb//+MC9//i/vf/5v73/+b+8//i/ - vP/3vrv/+L68/92mo/+IWlnRRSMjOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcv - L0mbX1/y15GS/6GAgP9XV1b/iYuL/4CBgf98fX3/cnR0/1dPT/++j4//km9w/9Sfnv/6wL3/+cC9/+6z - sP/ssK3/0Z+u/4OH1P9YffD/QGPs/7KYyv/Ct7z/Ytrz/3Ts//8s2f//cbvU//m+u//4v7z/+L67//e9 - uv/1vLn/9Lq3//O5tv/zuLX/0puZ/4RVVctGIyM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADIXFwdrPDySq2ts/diZmf/ApKT/sKur/4CBgP95enr/iYiI/49zdP/do6P/36Ch/96e - nv/zuLX/+sK///W7uP/1ubT/qZC//2qY+/9tnf//MGT6/56FxP/esK//nMbS/57n8/9+z+T/ybG3//a6 - t//zubb/8re0//C1s//utLH/7rKw/+qvrP++iIb9dklJtkMgISoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHIyMSazw8kZ5hYvXNjI3/2aSk/7OMjP+bd3f/sIKC/9KV - lv/cnJz/2peY/9aRkf/koqL/+sG+//nAvf/5v7z/4amw/6qZx/+aouP/qpvP/+mxtv/2urj/6rGv/+S6 - u//ptrX/466n/+Ovqf/ssK7/6q6s/+isqv/oq6n/2J2b/6JubfFoPT2NOxoaFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBoaCFowMFd7SEjAomZm9sWC - gv/XkZL/25SV/9iSk//Wj5D/1IyN/9KHiP/UiIj/8bOx//rCv//3vbv/9ru4//O3s//xuLX/7q6e/+ej - hf/npIn/7bCp/+Otp/+KsX3/ULdm/1WjWv+7oYz/5KWk/9uenP+4gH79glJRzVYuLlQgCAkGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAA8HBwQVy4uS3FBQaCPV1fjsG5v/cmAgf/ShYb/0YKD/85+f//LeXr/2I2M//e8uf/1vLn/7rOx/+2y - sP/lpJX/5qFY/+6xXP/djS3/35h9/86gl/9SwW7/Nd90/0WxXP+vlH//wYSE/49cW+VlOTmBQR4eHAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGk7OhqIWFd8oG5u8J5qav+eX2D/tmts/8Z0df/KdHX/yXJz/92T - k//3vLn/7LGu/+Snpf/dm5L/4Z1q/+61dP/fmmX/15WM/9eYlv/Bm43/r6uR/6uNgP+WYWDtbkBAnUwn - JzQVAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiFJSBnhC - QgpqNDQJWSUlB08dHQdfKisKfENDFJJWViinbGtRvYOCjtOcm8/pt7X157y6/7eOjfhxRUW7aTk5m4RK - StehWlr6uGdo/8Zwcf/dkpH/8bSx/+OnpP/YmZj/1ZWT/9ealP/Vl5X/0JCP/8eIhv+zdnb/lFtc6nA/ - QKRSKio/JQwNBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADTn6AB2qioDMuUlCHBhYU8voCAWcCBgXTEhoaLzZGQqdeensngrKvn47Sz/NOop/+yiIfyi2Bgs2k+ - PlZXKysPAAAAAUYlJRxcMTFYcj4+pYpMTeWmXF3+xnl5/9+Zl//dnJr/z46M/8KCgf+vc3L/ll9e831L - S8hlOTl/TigoMy0REQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABzQUIDnmprDriGhifHlpZMzp6eeNCgoZ7On5+2yJqaybuPj9WnfHzVj2RkunVJ - SYNbLy8/PRQUCgAAAAAAAAAAAAAAAAAAAAAAAAAAKRUVBU0pKSphNDRtd0BAsotNTd2ZW1vrkVlY4HtJ - Sb5lOTmCUysrQTsbGxEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCwsA2Y4OA5xQkImdkhIRHhKSll0R0dibUBAWWI2 - NkNUKCgoOhISDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhkZB0km - Jh5LJiYsRSEhITATFAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD/+H////8AAP/gH////wAA/8Af//// - AAD/gA////8AAP+AD////wAA/wAP////AAD/AA////8AAP4AB////wAA/gAH////AAD8AAf///8AAPwA - B////wAA/AAH////AAD8AAf///8AAPgAB////wAA+AAH//4HAAD4AAP/8AEAAPgAAf/AAQAA8AAA/wAA - AADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAEAAPAAAAAAAQAA8AAAAAADAADwAAAAAAcAAPAA - AAAADwAA+AAAAAAfAAD4AAAAAD8AAPwAAAAAfwAA/gAAAAD/AAD/gAAAA/8AAP/gAAAH/wAAgAAAAB// - AAAAAAAAf/8AAAAD4AP//wAAgB/8H///AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAYAAAAZAAAAGQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAARCQkYOh8fb0ooKK80HByiCQUFTAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAIhERFmA2Np2ITUz3lVNT/4dLS/5IKCi9AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAANjODiBllhY+61kZP+vY2P/pV5e/3xHRvEhEhJfAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAASSgoN41VVeS6bW3/xW9w/8dwcf+9bG3/klZW/jogIIEAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1RkWcs2xs/8dxcv/HcHH/x3Bx/8Zwcf+iYWH/SSkpmAAA - AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUC0tMZtgX+fGcnP/x3Bx/8dwcf/HcHH/x3Fy/61q - av9UMTGqAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxRER1tm9v/8hxcv/HcHH/x3Bx/8dw - cf/HcnP/tnRz/185OboAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAACIxXV7TEdHT/yHJz/8l1 - dv/Kd3j/ynd4/8p4eP/Bf37/bURDywAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNKysjo2Zm4Mt4 - ef/NfH3/z4GC/9GFhf/RhYb/0YWF/82Mi/9+UVHeCAICOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAACwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGc+ - Pkm1c3P30IGC/9OJiv/XkZL/2ZaW/9mWl//YlJX/2JmY/5hnZfMeEBBrAAAABwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA0FAgItHhAQWzAbG4IqFxeHDQcHWwAAABkAAAAAAAAAAAAA - AAAAAAAAek1MdMN/f//VjI3/2piZ/9+io//hqKn/4qmp/+Clpf/jpqT/wImH/04xMLwAAAA6AAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABEbDg5GRygokW5CQs+MVlbxnGJh/JdfXvxnPz7hHA8PbgAA - AAwAAAAAAAAAAAAAAACMW1qbz4qK/9qXl//gpqb/5rKz/+q6u//rvLz/6La2/+qxr//epKL/j1lZ+DUc - HLACAQFPAAAAHQAAAA8AAAAPAAAAEwAAACIbDg5MVDExnYZUU+SpbWz+uXl4/7x+fP/AgoD/xoeF/72A - f/9fOzu1AAAAHAAAAAAAAAAAAAAABJhkZK/VkZH/3Z+g/+axsf/twMD/8svL//LNzf/vxcX/8Lq4/+6z - sf+1dHP/j1VU+144N9g7IiKqMhwclDcfH5RGKSmiYTw7v4tZWOiydXT+woOC/8aKiP/Ol5X/2aWj/9ui - of/cnpz/2pyb/35TUrgAAAAVAAAAAAAAAAAAAAAFmmVkstaTk//hpaX/7Lm6//TLy//419f/+NnZ//TP - z//1wb//9Lq3/8aGhP+1dHP/s3Rz/6xwb/+pb27+rnNy/7Z7ev/BhIL/yY2L/8+WlP/apqT/5be2/+vB - v//rvrz/6bKw/+uvrf/Um5n/bUVEgAAAAAMAAAAAAAAAAAAAAAOTXV2q1ZGR/9CYmP+dfX7/o4yM/9e8 - vP/z0tL/zLOz/+u8u//5v7z/1peV/8uLif/Ki4r/yoyL/86Ukv/TnJv/2qSi/+Gtq//nuLb/7cPB//DJ - x//xxsT/8b+9//G6t//zubf/77az/6d1dM89Hx8lAAAAAAAAAAAAAAAAAAAAAIJOTojNiIn/jGlp/01O - Tv9UVlb/dnNz/7uhof+Pfn7/xJ+e//zCv//lqKb/3J2b/+Chnv/hpaT/7Ly5/+vHxv/MxMn/0MjN//LK - yf/1x8X/9sLA//a/vP/3vrv/+L+8//S7uP+5hoXhYTo5RwAAAAAAAAAAAAAAAAAAAAAAAAAAaTs7RrVz - dPKmfn7/cXJx/4SGhv97fX3/b2Zm/516ev+7kJD/+sG+//C2s//lqqr/rpbA/3aB2/+ql83/tMHK/2jc - 9P9OzOz/2r3B//q/vP/3vrv/9ry6//a8uf/ss7D/tYGA32c+Pk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAvEhIHg01Njbp9fvrCn5//nI+P/4R7ev+fgID/2Jyd/9ybnP/ytrT/+b+8/+ewtf+Mld3/ZI36/5eI - zv/Ttrn/sNLc/6/Czv/stLT/8re0/++0sf/tsq//2qCe/6Rxb8phODg+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABCIB8MeUZGbqRpata8gYH8x4mJ/9eTk//YkpP/04qL/+Cbmv/5wL3/9726/+Sw - t//Zrrn/56qY/+2smf/lr6n/nLWJ/4Gtdf/Pppn/3qGf/7yEg/KJWViYTyoqIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQh0dGXJAQGOXXl7NtnR1/8V7fP/MfH3/znt8/+il - o//0urj/7LCu/+Whg//rq13/35VX/9Kek/9yvXz/ZbNv/6iCdfqYY2O/aj4+TCUJCgcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACcamsBjFRVB4FERAh9PT0JjU1ND6VnZx+/hINF0JqZiNOjoty0iIf2hFBQw5lX - V8+wY2P4xXR0/+aioP/oq6j/2pqT/92fif/Vlor/yYqJ/7N8efiVZmPGdERFYkEfHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALiFhgXFkJEdx5CQSMqSknbNlZWbz5uaws2cnOXBlJPnqH18r4dc - XFFULy8OSCUlFm07O0+FSUmeoV1d3sF9fPrGhoX/snZ295xkZNiFUlKbbD4+T0UdHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc0JDA5FgYRKdbm46onR0Zp9ycnuWampzhFlZVmY6 - OikvDAwHAAAAAAAAAAAAAAAAAAAAAB0ODgRULCwhbjo7UXhERGVrPDxHTCYmGxAAAQMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//////////////////////D////gf///wH///4A///+AP///AD///wA///8AP//+AD - ///gA//D4AH+AeAA+ADgAAAAwAAAAMAAAADAAAAB4AAAA+AAAAfgAAAP8AAAH/wAAD8AAAD/AAAD/wB4 - D//H////////////////////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABMAAAAtAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgIO1cwMM1qOjrsHhAQmwAA - ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAATCgogfUhI6ahgYP6lXV3+f0hI9wIBAT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGBgFPLy6kuW1t/sZv - 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 - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumPokeMemory.Designer.cs b/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumPokeMemory.Designer.cs index 7dea4b7119..729b6e1489 100644 --- a/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumPokeMemory.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumPokeMemory.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ZXSpectrumPokeMemory)); this.OkBtn = new System.Windows.Forms.Button(); this.CancelBtn = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); @@ -140,7 +139,7 @@ this.Controls.Add(this.CancelBtn); this.Controls.Add(this.OkBtn); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController_MultiSize; this.Name = "ZXSpectrumPokeMemory"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Poke Memory"; diff --git a/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumPokeMemory.resx b/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumPokeMemory.resx index ca821b54f8..1af7de150c 100644 --- a/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumPokeMemory.resx +++ b/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumPokeMemory.resx @@ -117,508 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAwAMDAQAAAABABoBgAAxgAAACAgEAAAAAQA6AIAAC4HAAAYGBAAAAAEAOgBAAAWCgAAEBAQAAAA - BAAoAQAA/gsAADAwAAAAAAgAqA4AACYNAAAgIAAAAAAIAKgIAADOGwAAGBgAAAAACADIBgAAdiQAABAQ - AAAAAAgAaAUAAD4rAAAwMAAAAAAgAKglAACmMAAAICAAAAAAIACoEAAATlYAABgYAAAAACAAiAkAAPZm - AAAQEAAAAAAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAQAAAAEAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAHR3AAAAAAAAAAAAAAAAAAAAAAAAAAAAdHdEcAAAAAAAAAAAAAAAAA - AAAAAAAAAHd0d3QAAAAAAAAAAAAAAAAAAAAAAAAAAEd8d3UAAAAAAAAAAAAAAAAAAAAAAAAAB3yHfHZw - AAAAAAAAAAAAAAAAAAAAAAAAd3fIyHVwAAAAAAAAAAAAAAAAAAAAAAAAfHh3jIxwAAAAAAAAAAAAAAAA - AAAAAAAHd8jIyHdgAAAAAAAAAAAAAAAAAAAAAAAHd4yHfIdAAAAAAAAAAAAAAAAAAAAAAAAHyMjIyMhQ - AAAAAAAAAAAAAAAAAAAAAAB3d3eMh4dgAAAAAAAAAAAAAAAAAAAAAAB8jIyIfIdQAAAAAAAAAAAAAAAA - AAAAAAB3h4jIiMh3AAAAAAAAAAAAAAAAAAAAAAB8jIeHeIjHAAAAAAAAAAAAAAAAAAAAAAeIiHh4eMiE - AAAAAAAAAAAAB0dHcAAAAAd8h4eIiIiHcAAAAAAAAAB0d3d3RwAAAAeIeIiIiIh3RwAAAAAAAHR3d8h3 - dAAAAAfIh4iIiHiIx0cAAAAAdHh3eIeHhwAAAAeHiIiIiIiId3R3dHR0eHd4h4eHhAAAAAd4eIiIiIiH - x3d2d3eId4iIiIiIhwAAAAd4eIiI+IiIh3d3eHh3iIiIiIeHwAAAAAfIjHeIiIiIyIeHh4iIiIiIiIiI - cAAAAAeIQ0R3h3iIiMiIiIiIiIiIiIiEAAAAAAfIR3d3d0iIiIh4iIeIiIiIiHhAAAAAAAB4d3d3SHiI - h4fTiIi3iIiIeIwAAAAAAAB3h4d3eIeIiHiJiIuIiIh4jHAAAAAAAAAHyId3h3h4iIh4iIiIiIiHeAAA - AAAAAAAAB8iMiMjIiIiIh4h3aMjHAAAAAAAAAAAAAAdYyIeIiIiMjId6d4eAAAAAAAAAAAAAAAAHdsjH - eIeH6MiId3AAAAAAAAAAAAAAAIiIh4V8jIh4eIfHcAAAAAAAAAAAAACIiIh3AAAHd3h3fHcAAAAAAAAA - AAAAAAiIjHgAAAAAAHx8eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAA - AAd0dAAAAAAAAAAAAAAAAAB3x3cAAAAAAAAAAAAAAAAAd3fHcAAAAAAAAAAAAAAAB3yMh3AAAAAAAAAA - AAAAAAfIeMdwAAAAAAAAAAAAAAAHjIyHQAAAAAAAAAAAAAAAfId4yHAAAAAAAAAAAAAAAHjIyIdQAAAA - AAAAAAAAAAB3iId4YAAAAAAAAAdwAAAAjIiIiIUAAAAAAHd3dAAAB4iIiHh8cAAAAHd3x4dwAAd4iIiI - h3Z3d3R3yIh4cAAHh4iIiIfHd3d4iIiIh3AAB3jHiIiIiHeHiIiIiIwAAAh3dXh4iMiIiIiIiIhwAAAA - yGd0d4iIeIi4iIiMAAAAAIeHd4iIh32IiIiIcAAAAAAAd4jIyIiIiHeHyAAAAAAAAAB3h4iIh8h3dwAA - AAAAAAAIh8fIh4eIaAAAAAAAAACIiHAAB8jIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////////////////////n////g////wP///8B///+Af///gH///4B///8Af///AH///wB//n8AP/A+AB - /AHgAAAB4AAAAeAAAAPgAAAH8AAAD/AAAB/8AAA//wAA//4AA//weA////////////////////////// - //8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRwAAAAAAAAAAAAB3dAAAAAAAAAAAAA - d8dwAAAAAAAAAAAAfId3AAAAAAAAAAAHeMjHAAAAAAAAAAAHyHh3AAAAAAAAAAAHh3eEAAAAAAAAAAAI - yIiHAAAAAHd2cAAIiIiIQAAAd3d4UACHiIiId3d3eHiIcACHh4iIyHeHiIiIcAAIR3d4iIiIiIiMAAAH - d3eIh3iIiIhwAAAAeMh4iIiHiMAAAAAAAHfIiMh4aAAAAAAAiIgHyIfIAAAAAAAIgAAAAIAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD8f/8A+H//APB/ - /wDwP/8A4D//AOA//wDgP/8A4D/BAOAfAQDAAAEAwAABAOAAAwDgAAcA8AAfAPwAPwDwgP8A5/f/AP// - /wD///8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAd1AAAAAAAAB8cAAAAAAAB4eAAAAAAAAHyMgAAAAAAAiIhwAAAHcACI - iHcAd3hwAIz4jIeIiIAAd3eIiIiIAACHeIiIiHAAAACMeMh4AAAAiAAIgAAAAAAAAAAAAAAAAAAAAAAA - AAD//wAA//8AAP//AADj/wAA4/8AAMP/AADB/wAAwfkAAMDBAADAAQAAwAMAAMAHAADwDwAAzn8AAP// - AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAA9OzsAZD8/AGg8 - PABtPj4AQkNDAEZIRwBWQkIAV0REAF5AQABbRkYAVklJAFxPTwBTU1MAXFJSAF5ZWQBkQEAAYUREAGZF - RQBqQkEAYEtLAGNPTwBwQUEAfUZGAHJKSgB2SUkAfU9PAGBRUQBgVFQAZlZWAGZYWABqWVkAclZWAHpU - VAB9W1oAbmJiAGtoaABtaWkAcWdnAHdnZwB8Y2MAe2pqAHJxcQB+dHQAd3l5AHl6egCGT08AiU9PAIFP - UACGU1MAjVFRAIlWVgCMV1cAg1xbAIxaWQCQUlIAlVJSAJFXVgCXVVUAmVVVAJZaWQCSXV0AlV9eAJpZ - WgCeW1sAml5eAKBZWgCgXFwAql9fAIRmZQCIZWQAhWtrAI5ragCTYmEAnGBhAJ9kYwCaZmYAk25uAJ1s - awCFdHQAiXd3AIt+fgCWd3cAmHR0AJV5eQCbfHwAo2JhAKZhYQChZWUApGVkAKplZACsZGQAqmhnAKZr - agCnbGsAqmloAKlubQCsbW0AtGZnALhsbACxb3AAv29wAKVxcACrc3IAr35+ALN0cwC5c3MAvXBxALR4 - dgC1fHsAunt6AMNtbgDGb3AAw3FyAMZwcQDGdXUAyHR1AMp3eADBeXkAxnt7AMB/fgDLensANLBSAEWf - TgBBtFwAPMdnADHkdgDciiIAvoF/AISrdwDln0sA35lhAN2XfADgmmEA8LdlAO61cAArWPIALWT+AEh5 - +gDOf4AAfoCAAHiA1ABZv9wAZrnUAGK+2ABxnv4Ad6P/ADPX/QBw0OcAW+D7AIKEgwCPgoIAjI2NAJuC - ggCUiIgAmYqKAJGSkgCjhIQAqoKCAKKLiwC+hIMAsoqKALaSgQCum5sAsZubALqqlQCdgr4Ar6ytALGh - oAC6pKQAwoSDAMyBggDGiIYAyYiHAMWMigDMjIoA0ISFANKHiADUjIwA2Y6NAMCUjQDIk44A0JCPANaP - kADHlZQAzpSSAMScmwDUkpIA2ZSVANWYlgDampcA2ZeYANWcnADam5sA4p2cAMChjwDeoJ4A5aCFAOaj - jQDlpJoA2p6hAMOkowDOoaEAy62tANegoADdoqEA2aGpANGsrwDdq6kAwbG4ANGysQDdtLQA2ri3AOGk - owDjqKYA66ylAOGnqADjq6oA6a2rAOOwrwDssK4A5K+wAOaztADttLIA57i2AO24tgDmurgA6rq6APC1 - swDyuLYA9Ly5APi+uwD1wL0A+cC9AKKMwACkk8QAqprMALSayACptsEAlaDkAOy/wACRxtQAgOv9AJnr - 9wDEwsoA5sbGAOzCwgDuyMcA7MzMAPPEwgDxy8oA9dPTAPja2gAAAAAAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAADLytDi9tOemQAAAAAAUy9EecLEsa1uPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj11Mme - VakAAAAAAAAAAAAATS84M0akAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE - AAAAAAAAAAAAAAABAAAAAQAAAAAAAFFNTQBRUlIAU1RUAGJHRwBiT08Aa0lIAGJTUwBrVlYAYllZAGZc - XABpWloAb1xbAHNTUwB7V1YAc1hXAHFbWwBkZWUAaWFhAG5kZABpamkAcGFhAHlubgB2cHAAf3V1AH55 - eQB8fX0AgUpKAI1PTwCLWFcAhlhYAI9ZWQCKXFsAm1ZWAJJZWQCWWVgAmlpbAJtcWwCiXFwAl2BfAIBg - YACAZ2YAgG9vAI9oaACWZWQAmGBhAJ5kZACcaWoAmm9vAIV0dACNcHAAiXZ2AIB8fACac3IAm3V0AJ51 - dQCZfHwAnHx8AKNmZgCnZmYAqmJiAK5jYwCvb24AtWVmALBtbgC5bW0AvmxtAKx+fQCxcnIAtHBwALZz - dACydXQAtnd2ALlwcAC5dnYAt3p5ALh5eAC8fHsAun18ALx+fQDGb3AAxnBxAMdzdADAd3YAyHJzAMlz - dADJdXYAynd4AMd/fwDMe3wAzXx9AHunbwBhvHIAYsN4ANuLOwC2hn4A4Zt5APC3ZABte9sAX47+AHWM - 5QAl0foAY+P8AIeDgwCFhoYAioSEAJOIiACWi4sAmpKRAKGCgQCmhYUAqYGBAKuDhACniooApYyMAKiO - jQCyhYMAvoWEALeNjQCrj5AAr5eXALSVlAC9lJMAmbCEAK6RugDBgYAAwoSCAMWDhADChoQAxYeFAM6A - gQDFiIYAxoqIAMqIiQDMi4oAy4yKAMiPjQDPj44A0ISFANKJigDUi4wA04+NANWNjgDKkY8A0JCOANud - iQDWj5AAzJSTAM2XlgDGm5oA1pGSANOUkgDVl5EA1pOUANiVlgDYmJUA2ZeYANKenADbmpsA3pmYANuc - mgDbn5wA1aacAN6gngDqqZoA3Z+gAMyjowDCra0AxqysAMqpqQDboaAA3qKiAN6logDbp6UA3aWkANer - qgDWsbMA0rW0ANe0tADfs7IA4aSiAOGlpQDkp6UA46imAOWopgDsraIA6qimAOGoqADhrqwA6a2rAOqv - rADpsK4A7LGuAOGzswDlsbEA7bKxAO+1sgDotrYA5rm3AO+4twDot7sA6bq5AOu9uwDrv70A8bazAPG2 - tADxuLUA9Lm2APC9uwD2vboA9L+9APi+uwD4v7wA8sC+APXAvgD5wL0AkILJAKqXzACsu8cAqr/LALLV - 3QDawMIA48XFAOvDwQDswMAA7cTDAO/ExQDgxsgA8cbEAPTGxADwyskA9MvJAPLNzQD21dYA+NjZAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAMEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHCEcBQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAayU9PSYbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQlBSQiJpAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAM0pSUlJQPRcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnUlJSUlJGFQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAFJSUlJSUkoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzUlJSWVJZfxAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5XWYqKioqGDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoqMkpqa - mqAsAAAAAAAAAAAAAAAAAABoNAAAAAAAAACMjJyuvLy2toYHAAAAAAAAAAAAABcOIDouBgAAAAAAc4yc - tsHKysPAriIKAAAAAAAAABYgRk1LTX+DEAAAAABukqXB4ejo4dHPQCIEChcXEwggTXV/k66unKMpAAAA - AG6Srsro6ero0dN/Rk1NRk2Dg4STrsbh4cHAt2sAAAAAbpKuOXPe6ajW15KGg4OGk528yuHo5eHPz882 - AAAAAAB4jCkDAxSoMabXt5yjt8ro3ePo5dbT09HTdAAAAAAAAABGcBFoGgFwdtfDwHxi2dpmZcrX09HP - z0MAAAAAAAAAAHh/qWwaOa6cz9PNZGPYsdzbzc3DwLk2AAAAAAAAAAAAAAAvhpKakoyg19HNyKS5wHtb - orZ/cwAAAAAAAAAAAAAAAAAANkaKWVm5zb1gYV6cXVxfNgAAAAAAAAAAAAAAAAAAALGvlTIuP1K5tqCR - l4xfLwAAAAAAAAAAAAAAAAAAsbPBenkAAAAAcCVYjE0scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////+f///+D////A////wH - ///4B///+Af///gH///wB///8Af///AH/+fwA/8D4AH8AeAAAAHgAAAB4AAAA+AAAAfwAAAP8AAAH/wA - AD//AAD//gAD//B4D////////////////////////////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAAWlJSAHBJSQB1SEgAe1dXAHdYWAB5WlkAel1dAGBiYgB1bGwAfWtrAHh2 - dgB9fn4Ag01NAIRXVwCIV1cAhV9eAItbWgCgX14ApV1dAJhgXwCNYGAAnWtqAJhtbQCCdnYAh3x8AI15 - eACeensAqGBgAKhoZwCga2oArGpqALNqagCzb28AtG1tALltbQCxb3AApnVzAKlzcwCqdHMApnp6AKd+ - fgCpensAq3x7ALZ3dgC8dHQAvH59AMZvcADGcHEAxXN0AMhycwDJdncAynh5AMx5egDNfn8Ajo1wAOek - VgDGgH8A4p53AEZ2+gB8u4AAd8PaAIuEhACOh4cAjo6OAJ+DggCejo4Ao4SEAKSIiACsi4sAqo2MAK6P - jgC+gYAAvoaGAL+KiACskJAAtJeXALWenQC5np4At6iOAKmyjgC9nroAwYSDAMaGhADOhoYAxomHAMiK - iQDJjYwA0oeIANOOjwDUjY0A2ZiPANaPkADGkZEAx5eXAMySkADGnZwA1ZOSANeTlADWl5YA2JSVANGZ - mADan50A3J6dAOCcmwDVoJ8A7K2fAMOtrQDXo6IA3aCgAN+kpADVq6oA3ay3AMu0tADPtrYA3L+/AOCi - oQDhpqUA5KelAOinpgDlq6gA46usAOOvrQDqrqwA7LGuAOayswDjtrQA5re1AOqysQDts7EA57y6AO+8 - ugDrvL0A8LOwAPC1sgDwtrQA87q3APS6twD2vboA8b69APi/vAD2wb4A+cC9AJmTzwDHqMMAu8PMAIHf - 8QDByNAA7cLCAO3FwwDvxsQA5cjIAOzOzgDwxcQA9cbEAPPP0AD10tIAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - BQMJAAAAAAAAAAAAAAAAAAAAAAAAAAAPHBMNAAAAAAAAAAAAAAAAAAAAAAAAABojLy8TAAAAAAAAAAAA - AAAAAAAAAAAAAB0wMDAiPgAAAAAAAAAAAAAAAAAAAAAAQjAwMDAtGAAAAAAAAAAAAAAAAAAAAAAAFzIy - NTU5CgAAAAAAAAAAAAAAAAAAAAAAIjZYWFxcBwAAAAAAAAAAAAAAAAAAAAAANlxtdW11JQAAAAAAAAAA - PgcRDgkAAAAAXG1/lISAZgMAAAAAABkVLC5SVhcAAABNY3WWnJuLfB8UBAcQHkhWaX91dSsAAABNY2BM - mJeCiVJSVl9laX+WloSJgEIAAAAAXAEIC0tGjnR0dJaRk5qNjIyJQwAAAAAAJkNADBtdjIaPO1GSPYuJ - hnVEAAAAAAAAAClISWRcd4xwkGp8UE90VwAAAAAAAAAAAAAAKSQ1NYZ7OjhbPDdGAAAAAAAAAAAAAHNv - YGsAKyJoXFYmRwAAAAAAAAAAAAAAcnIAAAAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// - /wD///8A////APx//wD4f/8A8H//APA//wDgP/8A4D//AOA//wDgP8EA4B8BAMAAAQDAAAEA4AADAOAA - BwDwAB8A/AA/APCA/wDn9/8A////AP///wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAABjZGQAdmRjAHtpaQB/eHgAgU9PAKBaWgCFbm0AlWtqAKptbgCwZ2cAsGhoAKxw - cACteHkAvnJyAMZvcADGcHEAy3l5AMx9fgCFmXQAwIB/ANeUfQDhoX8AlIqJAJWMjACYiIgAoIaGAK2K - igCxh4cAvoGAALKKigC4iYgAuJWVAL2cnACss50AuqKhAL+mpgDLgoIAxImHAMeNjADLkI8AxpWTANCS - kQDYlZUA1J6dANqZmgDdnp4A1J+oAMaiogDOr68AzLKyANi5uADhpaIA4qypAOWtqADrrqsA4bKwAOay - sgDtuLYA57++AOy4uADxtLIA8be0APa9ugDswL4A9sG+ALCcxwC5ncIA06zBALnH0QC2ytQA7sPDAPLS - 0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAZBgUAAAAAAAAAAAAAAAAACw8KAAAAAAAAAAAAAAAAGhAQDgAAAAAAAAAAAAAAAAkRESUYAAAA - AAAAAAAAAAAlKy4uBwAAAAAAAAcDAAAAKzlHPCYCAAAYCB0oKgAAAC0wSDs0FB0nLDlAOiwAAAANAQQb - Pi9DRkVBPzUAAAAAJB4cKz5EQjMiNSkAAAAAAAAAHwwRNxYVEyQAAAAAAAAxMgAAACEgAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA4/8AAOP/AADD/wAAwf8AAMH5 - AADAwQAAwAEAAMADAADABwAA8A8AAM5/AAD//wAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAkAAAAJAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAUAAAAOAEBAVUAAABUAAAANQAAABAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkFBSUvGRl5TCkpwlYuLtxDJCTQFw0NmQAA - AEkAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAwMKE8rK6V6RET2klJR/5ZS - U/+OT0//ZDc38B0QEJoAAAAyAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDAwYVzAwoopP - T/ygXVz/oFtb/55ZWf+bWFf/k1NT/1UvL9wGAwNcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AARNKipxhk5O+adkY/+uZWX/tWdo/7VmZ/+qYWH/nltb/3hERPcfERGCAAAAFgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADEZGS1zQ0LXqGdm/7ptbf/Fb3D/x3Bx/8hwcf/BbW7/q2Vl/4hPT/82HR2gAAAAIAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAB1gxMYyYXl3/vXFx/8Zwcf/HcHH/x3Bx/8dwcf/HcHH/uG1t/5NY - V/9EJia2AAAAKQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPB8fNH1MS+K4cnH/x3Fy/8dwcf/HcHH/x3Bx/8dw - cf/HcHH/wHBx/51gX/9PLCzGAAAAMwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAMAAAAAAAAAAAAAAAAAAAAALhAQFIZXVs/RjIz/1Y2O/9qYmP/eoaL/46qr/+aysv/ot7f/6rm5/+m4 - uf/otbX/5q+v/+uvrf/jqab/wYeF/28/P/QhEhKvAAAAXwAAACgAAAANAAAABQAAAAMAAAACAAAAAwAA - AAUAAAAKAAAAFQAAADAdDg9oSSkptHZHRu2dYmL+t3Z1/758e/+6enn/tnh3/7d5eP+8fn3/w4SD/7Z6 - ef9eODfbBgICTgAAAAgAAAAAAAAAAAAAAAAAAAAAPhwcJJVjYuPXkZH/2JOU/92fn//iqqr/57O0/+u8 - vP/uwsL/78XG/+/Exf/twMD/67i4/+60sv/wtrP/zZKQ/5taWv9xQED2MRsaxAgEBIcAAABaAAAAQQAA - ADcAAAA2AAAAOwAAAEUEAgJZHA4OfUcnJ7l5SkntqGxr/8CAfv/DgoH/vH59/7p+ff/DiIb/zZGP/9GT - kf/UlJP/1peV/9eZl/+GVlbuGQsLVwAAAAcAAAAAAAAAAAAAAAAAAAAARiIiLZ9rauvZk5P/2peY/+Ck - pP/lsLD/6ru7/+/Fxf/yzMz/9NDQ//PPz//xycr/7sDA//K5tv/1u7j/36Kg/6dmZf+mZWX/j1ZW/WM6 - OutDJSXQNBwcvDAaGrQ0HBy1PiIivUwsLMtkPDzfh1VU9a1xcP/EhIP/xIWE/7+Cgf/Ch4b/zZST/9mk - ov/grq3/4a6t/96lo//eoJ7/36Kg/+Cjof+IWVjnGwwMQwAAAAIAAAAAAAAAAAAAAAAAAAAARyQkL6Br - auzZk5P/25qb/+GnqP/ntLT/7cDA//LLy//209T/+NjY//fX1//00ND/8cbG//W9u//4vrz/46ak/7d0 - c/+vb27/s3Jy/7d2df+ucXD/pWpp/6Npaf+nbWz/sHVz/7p9fP/EhYT/yImI/8WIhv/DiIb/ypGP/9eg - n//hr63/57q5/+rCwP/rwsD/6bq4/+evrf/nq6n/6q6r/9qgnv9wRkbDBwAAHgAAAAAAAAAAAAAAAAAA - AAAAAAAASCQkLZ1nZuvYkpP/25uc/+Opqv/qtrf/7cHB//TOzv/52Nj/+tzc//na2v/xz9D/8MfH//fA - vv/6wb7/6a6r/8OBgP/DgoD/vX58/7h7ev+8fn3/woOC/8aHhv/HiYj/xoqJ/8aLif/Ijoz/zZST/9eg - nv/hrav/6Lm3/+zCwf/uyMf/78nH/+/Dwf/uvLr/7ba0/+60sf/vtLL/8ri1/7J+fflMKSltAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAQyEhI5JcXOPWj5D/3Juc/8qVlf+BZmb/bl5e/4l4eP/AqKj/8tPT//LO - zv+5p6b/w6qq//fBv//7wr//8LWy/86Ojf/Ojoz/0ZGP/9GSkP/OkY//zpOR/9GamP/VoJ//2qel/+Gv - rf/nt7X/6727/+3Dwf/wycf/8czL//LLyf/yxsT/8cC+//G7uf/yubf/87m3//S7uP/4vrv/1J6c/3JH - RrAdCgsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANRcXEYJNTcvPiIn/15aW/2VNTf85Ojr/Q0VF/0JF - RP9dXFz/n5GR/+S/v/+bh4f/hXp6/+25uP/7wr//9bu4/9qcmv/Zmpj/252b/96gnf/ipKH/5q+s/+u+ - vP/vycf/8srI/+3Hxv/wysj/9c7M//TNy//0ysj/9MbE//TBv//1vrz/9r26//e9u//4vrv/+L+8//vB - vv/hqqf/g1ZVzDwcHC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW4+Ppq/env/05OT/2ZX - V/9rbm7/fX9//3l6ev99f3//cHJy/5F9ff+ff3//XFhY/9eop//8wr//+L+8/+Wppv/ipaP/5qil/96i - pP/Kmaz/1qi1//LGxP/tyMf/qb3J/23E3P9kw9//vMTN//jDwP/3wb//+MC9//i/vf/5v73/+b+8//i/ - vP/3vrv/+L68/92mo/+IWlnRRSMjOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcv - L0mbX1/y15GS/6GAgP9XV1b/iYuL/4CBgf98fX3/cnR0/1dPT/++j4//km9w/9Sfnv/6wL3/+cC9/+6z - sP/ssK3/0Z+u/4OH1P9YffD/QGPs/7KYyv/Ct7z/Ytrz/3Ts//8s2f//cbvU//m+u//4v7z/+L67//e9 - uv/1vLn/9Lq3//O5tv/zuLX/0puZ/4RVVctGIyM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADIXFwdrPDySq2ts/diZmf/ApKT/sKur/4CBgP95enr/iYiI/49zdP/do6P/36Ch/96e - nv/zuLX/+sK///W7uP/1ubT/qZC//2qY+/9tnf//MGT6/56FxP/esK//nMbS/57n8/9+z+T/ybG3//a6 - t//zubb/8re0//C1s//utLH/7rKw/+qvrP++iIb9dklJtkMgISoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHIyMSazw8kZ5hYvXNjI3/2aSk/7OMjP+bd3f/sIKC/9KV - lv/cnJz/2peY/9aRkf/koqL/+sG+//nAvf/5v7z/4amw/6qZx/+aouP/qpvP/+mxtv/2urj/6rGv/+S6 - u//ptrX/466n/+Ovqf/ssK7/6q6s/+isqv/oq6n/2J2b/6JubfFoPT2NOxoaFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBoaCFowMFd7SEjAomZm9sWC - gv/XkZL/25SV/9iSk//Wj5D/1IyN/9KHiP/UiIj/8bOx//rCv//3vbv/9ru4//O3s//xuLX/7q6e/+ej - hf/npIn/7bCp/+Otp/+KsX3/ULdm/1WjWv+7oYz/5KWk/9uenP+4gH79glJRzVYuLlQgCAkGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAA8HBwQVy4uS3FBQaCPV1fjsG5v/cmAgf/ShYb/0YKD/85+f//LeXr/2I2M//e8uf/1vLn/7rOx/+2y - sP/lpJX/5qFY/+6xXP/djS3/35h9/86gl/9SwW7/Nd90/0WxXP+vlH//wYSE/49cW+VlOTmBQR4eHAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGk7OhqIWFd8oG5u8J5qav+eX2D/tmts/8Z0df/KdHX/yXJz/92T - k//3vLn/7LGu/+Snpf/dm5L/4Z1q/+61dP/fmmX/15WM/9eYlv/Bm43/r6uR/6uNgP+WYWDtbkBAnUwn - JzQVAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiFJSBnhC - QgpqNDQJWSUlB08dHQdfKisKfENDFJJWViinbGtRvYOCjtOcm8/pt7X157y6/7eOjfhxRUW7aTk5m4RK - StehWlr6uGdo/8Zwcf/dkpH/8bSx/+OnpP/YmZj/1ZWT/9ealP/Vl5X/0JCP/8eIhv+zdnb/lFtc6nA/ - QKRSKio/JQwNBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADTn6AB2qioDMuUlCHBhYU8voCAWcCBgXTEhoaLzZGQqdeensngrKvn47Sz/NOop/+yiIfyi2Bgs2k+ - PlZXKysPAAAAAUYlJRxcMTFYcj4+pYpMTeWmXF3+xnl5/9+Zl//dnJr/z46M/8KCgf+vc3L/ll9e831L - S8hlOTl/TigoMy0REQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABzQUIDnmprDriGhifHlpZMzp6eeNCgoZ7On5+2yJqaybuPj9WnfHzVj2RkunVJ - SYNbLy8/PRQUCgAAAAAAAAAAAAAAAAAAAAAAAAAAKRUVBU0pKSphNDRtd0BAsotNTd2ZW1vrkVlY4HtJ - Sb5lOTmCUysrQTsbGxEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCwsA2Y4OA5xQkImdkhIRHhKSll0R0dibUBAWWI2 - NkNUKCgoOhISDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhkZB0km - Jh5LJiYsRSEhITATFAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD/+H////8AAP/gH////wAA/8Af//// - AAD/gA////8AAP+AD////wAA/wAP////AAD/AA////8AAP4AB////wAA/gAH////AAD8AAf///8AAPwA - B////wAA/AAH////AAD8AAf///8AAPgAB////wAA+AAH//4HAAD4AAP/8AEAAPgAAf/AAQAA8AAA/wAA - AADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAEAAPAAAAAAAQAA8AAAAAADAADwAAAAAAcAAPAA - AAAADwAA+AAAAAAfAAD4AAAAAD8AAPwAAAAAfwAA/gAAAAD/AAD/gAAAA/8AAP/gAAAH/wAAgAAAAB// - AAAAAAAAf/8AAAAD4AP//wAAgB/8H///AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAYAAAAZAAAAGQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAARCQkYOh8fb0ooKK80HByiCQUFTAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAIhERFmA2Np2ITUz3lVNT/4dLS/5IKCi9AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAANjODiBllhY+61kZP+vY2P/pV5e/3xHRvEhEhJfAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAASSgoN41VVeS6bW3/xW9w/8dwcf+9bG3/klZW/jogIIEAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1RkWcs2xs/8dxcv/HcHH/x3Bx/8Zwcf+iYWH/SSkpmAAA - AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUC0tMZtgX+fGcnP/x3Bx/8dwcf/HcHH/x3Fy/61q - av9UMTGqAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxRER1tm9v/8hxcv/HcHH/x3Bx/8dw - cf/HcnP/tnRz/185OboAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAACIxXV7TEdHT/yHJz/8l1 - dv/Kd3j/ynd4/8p4eP/Bf37/bURDywAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNKysjo2Zm4Mt4 - ef/NfH3/z4GC/9GFhf/RhYb/0YWF/82Mi/9+UVHeCAICOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAACwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGc+ - Pkm1c3P30IGC/9OJiv/XkZL/2ZaW/9mWl//YlJX/2JmY/5hnZfMeEBBrAAAABwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA0FAgItHhAQWzAbG4IqFxeHDQcHWwAAABkAAAAAAAAAAAAA - AAAAAAAAek1MdMN/f//VjI3/2piZ/9+io//hqKn/4qmp/+Clpf/jpqT/wImH/04xMLwAAAA6AAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABEbDg5GRygokW5CQs+MVlbxnGJh/JdfXvxnPz7hHA8PbgAA - AAwAAAAAAAAAAAAAAACMW1qbz4qK/9qXl//gpqb/5rKz/+q6u//rvLz/6La2/+qxr//epKL/j1lZ+DUc - HLACAQFPAAAAHQAAAA8AAAAPAAAAEwAAACIbDg5MVDExnYZUU+SpbWz+uXl4/7x+fP/AgoD/xoeF/72A - f/9fOzu1AAAAHAAAAAAAAAAAAAAABJhkZK/VkZH/3Z+g/+axsf/twMD/8svL//LNzf/vxcX/8Lq4/+6z - sf+1dHP/j1VU+144N9g7IiKqMhwclDcfH5RGKSmiYTw7v4tZWOiydXT+woOC/8aKiP/Ol5X/2aWj/9ui - of/cnpz/2pyb/35TUrgAAAAVAAAAAAAAAAAAAAAFmmVkstaTk//hpaX/7Lm6//TLy//419f/+NnZ//TP - z//1wb//9Lq3/8aGhP+1dHP/s3Rz/6xwb/+pb27+rnNy/7Z7ev/BhIL/yY2L/8+WlP/apqT/5be2/+vB - v//rvrz/6bKw/+uvrf/Um5n/bUVEgAAAAAMAAAAAAAAAAAAAAAOTXV2q1ZGR/9CYmP+dfX7/o4yM/9e8 - vP/z0tL/zLOz/+u8u//5v7z/1peV/8uLif/Ki4r/yoyL/86Ukv/TnJv/2qSi/+Gtq//nuLb/7cPB//DJ - x//xxsT/8b+9//G6t//zubf/77az/6d1dM89Hx8lAAAAAAAAAAAAAAAAAAAAAIJOTojNiIn/jGlp/01O - Tv9UVlb/dnNz/7uhof+Pfn7/xJ+e//zCv//lqKb/3J2b/+Chnv/hpaT/7Ly5/+vHxv/MxMn/0MjN//LK - yf/1x8X/9sLA//a/vP/3vrv/+L+8//S7uP+5hoXhYTo5RwAAAAAAAAAAAAAAAAAAAAAAAAAAaTs7RrVz - dPKmfn7/cXJx/4SGhv97fX3/b2Zm/516ev+7kJD/+sG+//C2s//lqqr/rpbA/3aB2/+ql83/tMHK/2jc - 9P9OzOz/2r3B//q/vP/3vrv/9ry6//a8uf/ss7D/tYGA32c+Pk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAvEhIHg01Njbp9fvrCn5//nI+P/4R7ev+fgID/2Jyd/9ybnP/ytrT/+b+8/+ewtf+Mld3/ZI36/5eI - zv/Ttrn/sNLc/6/Czv/stLT/8re0/++0sf/tsq//2qCe/6Rxb8phODg+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABCIB8MeUZGbqRpata8gYH8x4mJ/9eTk//YkpP/04qL/+Cbmv/5wL3/9726/+Sw - t//Zrrn/56qY/+2smf/lr6n/nLWJ/4Gtdf/Pppn/3qGf/7yEg/KJWViYTyoqIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQh0dGXJAQGOXXl7NtnR1/8V7fP/MfH3/znt8/+il - o//0urj/7LCu/+Whg//rq13/35VX/9Kek/9yvXz/ZbNv/6iCdfqYY2O/aj4+TCUJCgcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACcamsBjFRVB4FERAh9PT0JjU1ND6VnZx+/hINF0JqZiNOjoty0iIf2hFBQw5lX - V8+wY2P4xXR0/+aioP/oq6j/2pqT/92fif/Vlor/yYqJ/7N8efiVZmPGdERFYkEfHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALiFhgXFkJEdx5CQSMqSknbNlZWbz5uaws2cnOXBlJPnqH18r4dc - XFFULy8OSCUlFm07O0+FSUmeoV1d3sF9fPrGhoX/snZ295xkZNiFUlKbbD4+T0UdHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc0JDA5FgYRKdbm46onR0Zp9ycnuWampzhFlZVmY6 - OikvDAwHAAAAAAAAAAAAAAAAAAAAAB0ODgRULCwhbjo7UXhERGVrPDxHTCYmGxAAAQMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//////////////////////D////gf///wH///4A///+AP///AD///wA///8AP//+AD - ///gA//D4AH+AeAA+ADgAAAAwAAAAMAAAADAAAAB4AAAA+AAAAfgAAAP8AAAH/wAAD8AAAD/AAAD/wB4 - D//H////////////////////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABMAAAAtAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgIO1cwMM1qOjrsHhAQmwAA - ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAATCgogfUhI6ahgYP6lXV3+f0hI9wIBAT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGBgFPLy6kuW1t/sZv - cP/Gb3D/oF9e/hMKCmgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4QECynZmX7xnBx/sdwcf/HcHH/tG1t/h8REYMAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAx - MIzFc3T+xm9w/sdwcf7HcHH+vHR0/jAcHJkAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQ4OAYVSUtfIcnP/yXZ3/st5ef/LeHn/xoB//kQq - KrEAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAJxYWGrNvb/7Nfn//0oeI/tSNjf/UjI3/1ZOS/mE+PtQAAAAXAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAIAAAARAAAALQAAADUAAAARAAAAAAAAAAAAAAAAQyYmUM6Ghv/Wj5D/3J2e/uCl - pf/fpKT/4KOi/qRycPkHBARlAAAABQAAAAAAAAAAAAAAAAAAAAAAAAADAQAAJh8REYBYNTXMhVJR8XxM - TO8gEhKeAAAAEAAAAAAAAAAAbUVEe9aPkP7doKD+5rKz/uu9vv7rvLz+6rKx/tqfnf5iNzfnCAQEcwAA - ACoAAAAbAAAAIQIBATorGBiQhFNT67Z3dv68fn3+wYSD/siKiP6aZmX2AQAAKQAAAAAAAAAAd05Ni9eT - lP/jq6z/7cLC/vXS0v/zz9D/8b69/uyxrv+samr/l15d+2tDQ+NkPz7bdkxL451nZve+gYD/yY2M/tWg - n//jtrT/46+t/uOmpP+mdHPwBQMDFAAAAAAAAAAAdkpJh9iUlf7Hl5f+tJeX/uzOzv7lyMj+57y6/vS6 - t/7HhoX+xYaE/saJh/7MkpD+0ZmY/tejov7mt7X+7cXD/vDFxP7vvLr+8Le0/u2zsf5PMzOMDQcHAQAA - AAAAAAAAYTg4X9OOj/9aUlL/YGJi/nh2dv+skJD/qo2M/vnAvf/dn53/4KKg/+Cnp/7vxsT/u8PM/sHI - 0P/1xsT/9sG+/ve+u//3vrv/87q3/ntVVLkkFhYIAAAAAAAAAAAAAAAAVC8wD6BkZOWjhIT/jo6O/n1+ - fv+eenv/xpGR/vi/vP/wtbL/mZPP/0Z2+v69nrr/gd/x/nfD2v/2vLr/9Lq3/vG2tP/lq6j/elJRrjQg - IAoAAAAAAAAAAAAAAAAAAAAAAAAAAGc7OyeOWVnGv4eH/r2Fhf7YlZb+1Y6P/uinpv74v7z+3ay3/seo - w/7srZ/+7LGv/qmyjv63qI7+5Kel/r2GhPZ1S0p1QCcmAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAd0pKOpReXtKxb3D/yXl6/sx5ev/ws7D/6q6s/+Ked/7npFb/2ZiP/ny7gP+OjW/9h1dWr2I7 - OiMAAAAAAAAAAAAAAAAAAAAAAAAAALSCggSqcXIbo2dnN61xcVS/h4eIzp2c2cKWle2OY2OGbz4+Y4xN - Tr6zaWn84Jyb/9aXlv7Ji4r/p25t9INTUqZlPDw3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJg - YASjcnMorH9/a6h7e4yabm6Df1NTU3VKSgwAAAAAAAAAAAAAAABgNDQgcj8/bntHR4ZnPDxTVTExDQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////APx//wD4P/8A8D//AOA//wDgH/8A4B//AMAf - /wDAH8EAwA8AAMAAAADAAAAAwAAAAMAAAQDAAAMA4AAHAPgAHwAAAH8AAcH/AP///wD///8A////ACgA - AAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQc - HA5LKSlUNBwcSAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsO - DgV/SkqHm1hY+X5HR90tGRkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAB4SEhCr2Zm7sZwcf+oYWL5UC8vUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAACnl9fnMRwcf/IcXL/tmxs/mI8PGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAa0NCGbRsbdbMenv/zn5//8R9ff9ySkmCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAA - AAkAAAAAAAAAAItYWDvFfn/y2ZWW/92fn//anJv/jWFgvwAAAB0AAAAAAAAAAAAAAAIzHBwiYjs7a3pM - S6pqQkKjLBoaMwAAAACeZ2dZ05KS/em0tP/vxMT/77u6/8CHhfpmPDyvRysqYlExMV1ySEiGnWdn07qB - gPzLkI//w4iG/HJLS3YAAAAAomloXsyRkf/DoKD/48bG/+jAv//hpKL/vX17/7h/fPu/iYj7z5qZ/+Gw - rv/rvLr/77q3/9ScmuR9U1I+AAAAAJZbWz2ndnbxdG9v/4yCgv+4lJP/77Wy/86erP+6nsH/tsXR/8PH - 0P/4wsD/9b26/+Cppu2peXdiAAAAAQAAAABYKCgHn2lqe6eCguSsgoL90pKS//Cxrv/TrcP/s5y+/8i3 - s/+quab/26mh/82UktSgbm1TBAAAAwAAAACud3cEvYGBC7N6ehyyfHtyt39+3bNub9vLgYH05qak/+Kg - g//OlH39jZR04Zd0aYmDT1EiAAAAAAAAAAAAAAAAr3t7D7aCgki5h4Z8uImJgah+fUltPz8ajU1ORq1s - bI6vdHOgm2RkaYxJUiZgCygCAAAAAAAAAAAAAAAAAAAAAGo9PQF9UVEHcEdHCTodHQIAAAAAAAAAAAAA - AAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AADh/wAAwf8AAMH/ - AACB/wAAgfkAAIDAAACAAAAAgAAAAIAAAACAAQAAAAcAAAAPAAAOfwAA//8AAA== - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/images/AboutBox/mom1.png b/BizHawk.Client.EmuHawk/images/AboutBox/mom1.png new file mode 100644 index 0000000000..a32e94144e Binary files /dev/null and b/BizHawk.Client.EmuHawk/images/AboutBox/mom1.png differ diff --git a/BizHawk.Client.EmuHawk/images/AboutBox/mom2.png b/BizHawk.Client.EmuHawk/images/AboutBox/mom2.png new file mode 100644 index 0000000000..3adad4f08a Binary files /dev/null and b/BizHawk.Client.EmuHawk/images/AboutBox/mom2.png differ diff --git a/BizHawk.Client.EmuHawk/images/AboutBox/pictureBox1.png b/BizHawk.Client.EmuHawk/images/AboutBox/pictureBox1.png new file mode 100644 index 0000000000..854275d0c4 Binary files /dev/null and b/BizHawk.Client.EmuHawk/images/AboutBox/pictureBox1.png differ diff --git a/BizHawk.Client.EmuHawk/images/AboutBox/pictureBox2.png b/BizHawk.Client.EmuHawk/images/AboutBox/pictureBox2.png new file mode 100644 index 0000000000..2ba7d509e0 Binary files /dev/null and b/BizHawk.Client.EmuHawk/images/AboutBox/pictureBox2.png differ diff --git a/BizHawk.Client.EmuHawk/images/AboutBox/pictureBox3.png b/BizHawk.Client.EmuHawk/images/AboutBox/pictureBox3.png new file mode 100644 index 0000000000..f9d50fa2ba Binary files /dev/null and b/BizHawk.Client.EmuHawk/images/AboutBox/pictureBox3.png differ diff --git a/BizHawk.Client.EmuHawk/images/AboutBox/pictureBox4.png b/BizHawk.Client.EmuHawk/images/AboutBox/pictureBox4.png new file mode 100644 index 0000000000..ce26a5665f Binary files /dev/null and b/BizHawk.Client.EmuHawk/images/AboutBox/pictureBox4.png differ diff --git a/BizHawk.Client.EmuHawk/images/AtariControllerIcon.png b/BizHawk.Client.EmuHawk/images/AtariControllerIcon.png index 1eec649c37..b25a6b54c1 100644 Binary files a/BizHawk.Client.EmuHawk/images/AtariControllerIcon.png and b/BizHawk.Client.EmuHawk/images/AtariControllerIcon.png differ diff --git a/BizHawk.Client.EmuHawk/images/Close.png b/BizHawk.Client.EmuHawk/images/Close.png index 7182e539dd..b1e9b1ca93 100644 Binary files a/BizHawk.Client.EmuHawk/images/Close.png and b/BizHawk.Client.EmuHawk/images/Close.png differ diff --git a/BizHawk.Client.EmuHawk/images/ControllerImages/ArcadeController.jpg b/BizHawk.Client.EmuHawk/images/ControllerImages/ArcadeController.jpg index d243bc8471..b1aaf0c937 100644 Binary files a/BizHawk.Client.EmuHawk/images/ControllerImages/ArcadeController.jpg and b/BizHawk.Client.EmuHawk/images/ControllerImages/ArcadeController.jpg differ diff --git a/BizHawk.Client.EmuHawk/config/ControllerImages/ZXSpectrumKeyboards.png b/BizHawk.Client.EmuHawk/images/ControllerImages/ZXSpectrumKeyboards.png similarity index 100% rename from BizHawk.Client.EmuHawk/config/ControllerImages/ZXSpectrumKeyboards.png rename to BizHawk.Client.EmuHawk/images/ControllerImages/ZXSpectrumKeyboards.png diff --git a/BizHawk.Client.EmuHawk/images/ExclamationRed.png b/BizHawk.Client.EmuHawk/images/ExclamationRed.png index e1e238ad30..a0c8493f28 100644 Binary files a/BizHawk.Client.EmuHawk/images/ExclamationRed.png and b/BizHawk.Client.EmuHawk/images/ExclamationRed.png differ diff --git a/BizHawk.Client.EmuHawk/images/LightOff.png b/BizHawk.Client.EmuHawk/images/LightOff.png index 14c35ff3fe..edddc3ee0a 100644 Binary files a/BizHawk.Client.EmuHawk/images/LightOff.png and b/BizHawk.Client.EmuHawk/images/LightOff.png differ diff --git a/BizHawk.Client.EmuHawk/images/LoadConfig.png b/BizHawk.Client.EmuHawk/images/LoadConfig.png index 329988cfff..bf91456b22 100644 Binary files a/BizHawk.Client.EmuHawk/images/LoadConfig.png and b/BizHawk.Client.EmuHawk/images/LoadConfig.png differ diff --git a/BizHawk.Client.EmuHawk/images/MsgBox.ico b/BizHawk.Client.EmuHawk/images/MsgBox.ico new file mode 100644 index 0000000000..86d0616848 Binary files /dev/null and b/BizHawk.Client.EmuHawk/images/MsgBox.ico differ diff --git a/BizHawk.Client.EmuHawk/images/NewFile.png b/BizHawk.Client.EmuHawk/images/NewFile.png index ee8faf24a8..c342e544d9 100644 Binary files a/BizHawk.Client.EmuHawk/images/NewFile.png and b/BizHawk.Client.EmuHawk/images/NewFile.png differ diff --git a/BizHawk.Client.EmuHawk/images/TAStudio.ico b/BizHawk.Client.EmuHawk/images/TAStudio.ico new file mode 100644 index 0000000000..1ccba9bb45 Binary files /dev/null and b/BizHawk.Client.EmuHawk/images/TAStudio.ico differ diff --git a/BizHawk.Client.EmuHawk/images/arrow_black_down.png b/BizHawk.Client.EmuHawk/images/arrow_black_down.png new file mode 100644 index 0000000000..7b99c5cca1 Binary files /dev/null and b/BizHawk.Client.EmuHawk/images/arrow_black_down.png differ diff --git a/BizHawk.Client.EmuHawk/images/dual.png b/BizHawk.Client.EmuHawk/images/dual.png index e70e7a9631..2247a47100 100644 Binary files a/BizHawk.Client.EmuHawk/images/dual.png and b/BizHawk.Client.EmuHawk/images/dual.png differ diff --git a/BizHawk.Client.EmuHawk/images/luaPictureBox.png b/BizHawk.Client.EmuHawk/images/luaPictureBox.png new file mode 100644 index 0000000000..3385c9b728 Binary files /dev/null and b/BizHawk.Client.EmuHawk/images/luaPictureBox.png differ diff --git a/BizHawk.Client.EmuHawk/images/mame.png b/BizHawk.Client.EmuHawk/images/mame.png index 18f5678efd..72606f3eb7 100644 Binary files a/BizHawk.Client.EmuHawk/images/mame.png and b/BizHawk.Client.EmuHawk/images/mame.png differ diff --git a/BizHawk.Client.EmuHawk/images/placeholder_bitmap.png b/BizHawk.Client.EmuHawk/images/placeholder_bitmap.png new file mode 100644 index 0000000000..347fb71667 Binary files /dev/null and b/BizHawk.Client.EmuHawk/images/placeholder_bitmap.png differ diff --git a/BizHawk.Client.EmuHawk/images/tastudio/ts_h_piano_12_green.png b/BizHawk.Client.EmuHawk/images/tastudio/ts_h_piano_12_green.png index 616354d4c6..92b11c8137 100644 Binary files a/BizHawk.Client.EmuHawk/images/tastudio/ts_h_piano_12_green.png and b/BizHawk.Client.EmuHawk/images/tastudio/ts_h_piano_12_green.png differ diff --git a/BizHawk.Client.EmuHawk/images/tastudio/ts_h_piano_14_green.png b/BizHawk.Client.EmuHawk/images/tastudio/ts_h_piano_14_green.png index 647dd9f69e..a4a5751a65 100644 Binary files a/BizHawk.Client.EmuHawk/images/tastudio/ts_h_piano_14_green.png and b/BizHawk.Client.EmuHawk/images/tastudio/ts_h_piano_14_green.png differ diff --git a/BizHawk.Client.EmuHawk/images/tastudio/ts_h_piano_17_green.png b/BizHawk.Client.EmuHawk/images/tastudio/ts_h_piano_17_green.png index a8d7bcc6d5..b459043bc3 100644 Binary files a/BizHawk.Client.EmuHawk/images/tastudio/ts_h_piano_17_green.png and b/BizHawk.Client.EmuHawk/images/tastudio/ts_h_piano_17_green.png differ diff --git a/BizHawk.Client.EmuHawk/images/whiteTriDown.png b/BizHawk.Client.EmuHawk/images/whiteTriDown.png index 23c23d2b00..789f5cbca4 100644 Binary files a/BizHawk.Client.EmuHawk/images/whiteTriDown.png and b/BizHawk.Client.EmuHawk/images/whiteTriDown.png differ diff --git a/BizHawk.Client.EmuHawk/movie/EditCommentsForm.Designer.cs b/BizHawk.Client.EmuHawk/movie/EditCommentsForm.Designer.cs index bd547f1aeb..df9cc38ccd 100644 --- a/BizHawk.Client.EmuHawk/movie/EditCommentsForm.Designer.cs +++ b/BizHawk.Client.EmuHawk/movie/EditCommentsForm.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditCommentsForm)); this.Cancel = new System.Windows.Forms.Button(); this.OK = new System.Windows.Forms.Button(); this.CommentGrid = new System.Windows.Forms.DataGridView(); @@ -106,7 +105,7 @@ this.Controls.Add(this.CommentGrid); this.Controls.Add(this.OK); this.Controls.Add(this.Cancel); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.TAStudio_MultiSize; this.MinimumSize = new System.Drawing.Size(188, 121); this.Name = "EditCommentsForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; diff --git a/BizHawk.Client.EmuHawk/movie/EditCommentsForm.resx b/BizHawk.Client.EmuHawk/movie/EditCommentsForm.resx index e059d9a791..25f683d27d 100644 --- a/BizHawk.Client.EmuHawk/movie/EditCommentsForm.resx +++ b/BizHawk.Client.EmuHawk/movie/EditCommentsForm.resx @@ -120,33 +120,4 @@ True - - - - AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA////AP64aABQUFAAwNjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAMDAAMDAwAAAAAAAAAAAAMCAgMDAwMDAwAAAAMDAAADAgICAwMDAwMDAwMCAgMAAAMCAwMD - AwMDAwMDAgIDAAMEBAQDAgMDAwMDAwICAgMDBAQEAwICAwQDAwQDAgIDAAMDAwICAgMCAgIDAwMDAAAA - AwICAgMCAgIDAgMAAAAAAAAAAwMEBAQEBAQCAwAAAAAAAwMEBAQDAwMDAwMAAAAAAwQEAwMEBAMEBAQC - AwAAAAMEBAMDBAMEBAQEAgMAAAAAAwMDBAQDBAMDAwIDAAAAAAMCAgICAgICAgMEBAMAAAAAAwICAgIC - AwMEBAQDAAAAAAADAwMDAwAAAwMDAJH/AAAAcwAAAAEAAIABAAAAAAAAAAAAAIABAADABwAA8AMAAOAD - AADAAQAAwAEAAOABAADgAAAA8AAAAPgxAAA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/movie/EditSubtitlesForm.Designer.cs b/BizHawk.Client.EmuHawk/movie/EditSubtitlesForm.Designer.cs index a3f9e7af46..156fa766c5 100644 --- a/BizHawk.Client.EmuHawk/movie/EditSubtitlesForm.Designer.cs +++ b/BizHawk.Client.EmuHawk/movie/EditSubtitlesForm.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditSubtitlesForm)); this.Cancel = new System.Windows.Forms.Button(); this.OK = new System.Windows.Forms.Button(); this.SubGrid = new System.Windows.Forms.DataGridView(); @@ -198,7 +197,7 @@ this.Controls.Add(this.SubGrid); this.Controls.Add(this.OK); this.Controls.Add(this.Cancel); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.TAStudio_MultiSize; this.MinimumSize = new System.Drawing.Size(188, 121); this.Name = "EditSubtitlesForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; diff --git a/BizHawk.Client.EmuHawk/movie/EditSubtitlesForm.resx b/BizHawk.Client.EmuHawk/movie/EditSubtitlesForm.resx index 20eaabb2a2..8d13c16828 100644 --- a/BizHawk.Client.EmuHawk/movie/EditSubtitlesForm.resx +++ b/BizHawk.Client.EmuHawk/movie/EditSubtitlesForm.resx @@ -135,33 +135,4 @@ True - - - - AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA////AP64aABQUFAAwNjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAMDAAMDAwAAAAAAAAAAAAMCAgMDAwMDAwAAAAMDAAADAgICAwMDAwMDAwMCAgMAAAMCAwMD - AwMDAwMDAgIDAAMEBAQDAgMDAwMDAwICAgMDBAQEAwICAwQDAwQDAgIDAAMDAwICAgMCAgIDAwMDAAAA - AwICAgMCAgIDAgMAAAAAAAAAAwMEBAQEBAQCAwAAAAAAAwMEBAQDAwMDAwMAAAAAAwQEAwMEBAMEBAQC - AwAAAAMEBAMDBAMEBAQEAgMAAAAAAwMDBAQDBAMDAwIDAAAAAAMCAgICAgICAgMEBAMAAAAAAwICAgIC - AwMEBAQDAAAAAAADAwMDAwAAAwMDAJH/AAAAcwAAAAEAAIABAAAAAAAAAAAAAIABAADABwAA8AMAAOAD - AADAAQAAwAEAAOABAADgAAAA8AAAAPgxAAA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/movie/PlayMovie.Designer.cs b/BizHawk.Client.EmuHawk/movie/PlayMovie.Designer.cs index 3ccf267f64..04a2f4aeea 100644 --- a/BizHawk.Client.EmuHawk/movie/PlayMovie.Designer.cs +++ b/BizHawk.Client.EmuHawk/movie/PlayMovie.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PlayMovie)); this.Cancel = new System.Windows.Forms.Button(); this.OK = new System.Windows.Forms.Button(); this.BrowseMovies = new System.Windows.Forms.Button(); @@ -357,7 +356,7 @@ this.Controls.Add(this.BrowseMovies); this.Controls.Add(this.OK); this.Controls.Add(this.Cancel); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.TAStudio_MultiSize; this.MaximizeBox = false; this.MinimizeBox = false; this.MinimumSize = new System.Drawing.Size(547, 228); diff --git a/BizHawk.Client.EmuHawk/movie/PlayMovie.resx b/BizHawk.Client.EmuHawk/movie/PlayMovie.resx index b726d762b7..06bfe21a73 100644 --- a/BizHawk.Client.EmuHawk/movie/PlayMovie.resx +++ b/BizHawk.Client.EmuHawk/movie/PlayMovie.resx @@ -123,33 +123,4 @@ 114, 17 - - - - AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA////AP64aABQUFAAwNjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAMDAAMDAwAAAAAAAAAAAAMCAgMDAwMDAwAAAAMDAAADAgICAwMDAwMDAwMCAgMAAAMCAwMD - AwMDAwMDAgIDAAMEBAQDAgMDAwMDAwICAgMDBAQEAwICAwQDAwQDAgIDAAMDAwICAgMCAgIDAwMDAAAA - AwICAgMCAgIDAgMAAAAAAAAAAwMEBAQEBAQCAwAAAAAAAwMEBAQDAwMDAwMAAAAAAwQEAwMEBAMEBAQC - AwAAAAMEBAMDBAMEBAQEAgMAAAAAAwMDBAQDBAMDAwIDAAAAAAMCAgICAgICAgMEBAMAAAAAAwICAgIC - AwMEBAQDAAAAAAADAwMDAwAAAwMDAJH/AAAAcwAAAAEAAIABAAAAAAAAAAAAAIABAADABwAA8AMAAOAD - AADAAQAAwAEAAOABAADgAAAA8AAAAPgxAAA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/movie/RecordMovie.Designer.cs b/BizHawk.Client.EmuHawk/movie/RecordMovie.Designer.cs index 9bad7a0962..cfec3f96cd 100644 --- a/BizHawk.Client.EmuHawk/movie/RecordMovie.Designer.cs +++ b/BizHawk.Client.EmuHawk/movie/RecordMovie.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RecordMovie)); this.Cancel = new System.Windows.Forms.Button(); this.OK = new System.Windows.Forms.Button(); this.BrowseBtn = new System.Windows.Forms.Button(); @@ -47,7 +46,7 @@ // this.Cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.Cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.Cancel.Location = new System.Drawing.Point(391, 139); + this.Cancel.Location = new System.Drawing.Point(391, 135); this.Cancel.Name = "Cancel"; this.Cancel.Size = new System.Drawing.Size(75, 23); this.Cancel.TabIndex = 1; @@ -58,7 +57,7 @@ // OK // this.OK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.OK.Location = new System.Drawing.Point(310, 139); + this.OK.Location = new System.Drawing.Point(310, 135); this.OK.Name = "OK"; this.OK.Size = new System.Drawing.Size(75, 23); this.OK.TabIndex = 0; @@ -179,7 +178,7 @@ this.Controls.Add(this.groupBox1); this.Controls.Add(this.OK); this.Controls.Add(this.Cancel); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.TAStudio_MultiSize; this.MaximizeBox = false; this.MaximumSize = new System.Drawing.Size(1440, 201); this.MinimizeBox = false; diff --git a/BizHawk.Client.EmuHawk/movie/RecordMovie.resx b/BizHawk.Client.EmuHawk/movie/RecordMovie.resx index fb80888459..c7e0d4bdf1 100644 --- a/BizHawk.Client.EmuHawk/movie/RecordMovie.resx +++ b/BizHawk.Client.EmuHawk/movie/RecordMovie.resx @@ -117,33 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA////AP64aABQUFAAwNjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAMDAAMDAwAAAAAAAAAAAAMCAgMDAwMDAwAAAAMDAAADAgICAwMDAwMDAwMCAgMAAAMCAwMD - AwMDAwMDAgIDAAMEBAQDAgMDAwMDAwICAgMDBAQEAwICAwQDAwQDAgIDAAMDAwICAgMCAgIDAwMDAAAA - AwICAgMCAgIDAgMAAAAAAAAAAwMEBAQEBAQCAwAAAAAAAwMEBAQDAwMDAwMAAAAAAwQEAwMEBAMEBAQC - AwAAAAMEBAMDBAMEBAQEAgMAAAAAAwMDBAQDBAMDAwIDAAAAAAMCAgICAgICAgMEBAMAAAAAAwICAgIC - AwMEBAQDAAAAAAADAwMDAwAAAwMDAJH/AAAAcwAAAAEAAIABAAAAAAAAAAAAAIABAADABwAA8AMAAOAD - AADAAQAAwAEAAOABAADgAAAA8AAAAPgxAAA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/movie/SubtitleMaker.Designer.cs b/BizHawk.Client.EmuHawk/movie/SubtitleMaker.Designer.cs index f9640b8f53..e3f8505b03 100644 --- a/BizHawk.Client.EmuHawk/movie/SubtitleMaker.Designer.cs +++ b/BizHawk.Client.EmuHawk/movie/SubtitleMaker.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SubtitleMaker)); this.OK = new System.Windows.Forms.Button(); this.Cancel = new System.Windows.Forms.Button(); this.Message = new System.Windows.Forms.TextBox(); @@ -223,7 +222,7 @@ this.Controls.Add(this.Message); this.Controls.Add(this.Cancel); this.Controls.Add(this.OK); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.TAStudio_MultiSize; this.MinimumSize = new System.Drawing.Size(272, 225); this.Name = "SubtitleMaker"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; diff --git a/BizHawk.Client.EmuHawk/movie/SubtitleMaker.resx b/BizHawk.Client.EmuHawk/movie/SubtitleMaker.resx index 38cae3797b..371edf5f43 100644 --- a/BizHawk.Client.EmuHawk/movie/SubtitleMaker.resx +++ b/BizHawk.Client.EmuHawk/movie/SubtitleMaker.resx @@ -120,33 +120,4 @@ 17, 17 - - - - AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA////AP64aABQUFAAwNjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAMDAAMDAwAAAAAAAAAAAAMCAgMDAwMDAwAAAAMDAAADAgICAwMDAwMDAwMCAgMAAAMCAwMD - AwMDAwMDAgIDAAMEBAQDAgMDAwMDAwICAgMDBAQEAwICAwQDAwQDAgIDAAMDAwICAgMCAgIDAwMDAAAA - AwICAgMCAgIDAgMAAAAAAAAAAwMEBAQEBAQCAwAAAAAAAwMEBAQDAwMDAwMAAAAAAwQEAwMEBAMEBAQC - AwAAAAMEBAMDBAMEBAQEAgMAAAAAAwMDBAQDBAMDAwIDAAAAAAMCAgICAgICAgMEBAMAAAAAAwICAgIC - AwMEBAQDAAAAAAADAwMDAwAAAwMDAJH/AAAAcwAAAAEAAIABAAAAAAAAAAAAAIABAADABwAA8AMAAOAD - AADAAQAAwAEAAOABAADgAAAA8AAAAPgxAAA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/packages.config b/BizHawk.Client.EmuHawk/packages.config new file mode 100644 index 0000000000..4a4e14a364 --- /dev/null +++ b/BizHawk.Client.EmuHawk/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.Designer.cs b/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.Designer.cs index 394ed980cf..6e08a62160 100644 --- a/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BasicBot)); this.BotMenu = new MenuStripEx(); this.FileSubMenu = new System.Windows.Forms.ToolStripMenuItem(); this.NewMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -337,7 +336,7 @@ // BotStatusButton // this.BotStatusButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.BotStatusButton.Image = ((System.Drawing.Image)(resources.GetObject("BotStatusButton.Image"))); + this.BotStatusButton.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.placeholder_bitmap; this.BotStatusButton.ImageTransparentColor = System.Drawing.Color.Magenta; this.BotStatusButton.Name = "BotStatusButton"; this.BotStatusButton.RightToLeftAutoMirrorImage = true; @@ -1158,7 +1157,7 @@ this.Controls.Add(this.ControlsBox); this.Controls.Add(this.BotStatusStrip); this.Controls.Add(this.BotMenu); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.basicbot; this.MainMenuStrip = this.BotMenu; this.Name = "BasicBot"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; diff --git a/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.resx b/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.resx index af56fa86d0..b6c80974d1 100644 --- a/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.resx +++ b/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.resx @@ -123,153 +123,10 @@ 119, 17 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== - - 400, 17 248, 17 - - - AAABAAEAMDAAAAEAGACoHAAAFgAAACgAAAAwAAAAYAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXD70AAAAA - AAAkHO0AAAAXD70XD70kHO0kHO0kHO0kHO0kHO0kHO0kHO0XD70XD70kHO0kHO0kHO0kHO0kHO0kHO0k - HO0XD70XD70AAAAkHO0AAAAAAAAXD70AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3t8oAAAAAAAB3t8oAAABfqsBf - qsB3t8p3t8p3t8p3t8p3t8pfqsBfqsAAAAAAAABfqsBfqsB3t8p3t8p3t8p3t8p3t8pfqsBfqsAAAAB3 - t8oAAAAAAAB3t8oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABfqsB3t8p3t8pfqsAAAABfqsB3t8p3t8p3t8p3t8p3t8p3t8p3t8pfqsAAAAAAAABfqsB3t8p3 - t8p3t8p3t8p3t8p3t8p3t8pfqsAAAABfqsB3t8p3t8pfqsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAABfqsB3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3 - t8pfqsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABfqsB3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8pfqsAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABfqsB3t8p3t8pfqsBfqsB3t8p3t8pfqsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3t8p3t8pfqsAAAAAAAABfqsB3t8p3t8oAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfqsB3t8pfqsAA - AAAAAABfqsB3t8pfqsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfqsBfqsBfqsBfqsAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAABfqsB3t8p3t8pfqsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3t8p3t8p3t8p3t8oAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXD70X - D70kHO0kHO0XD70AAAAsLCx/f38sLCwsLCwsLCwsLCwsLCwsLCwAAAAXD70kHO0kHO0XD70XD70AAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAXD70kHO0kHO0kHO0kHO0AAAB/f39/f39/f38sLCwkHO0sLCwkHO0s - LCwAAAAkHO0kHO0kHO0kHO0XD70AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYIScYIScYIScYIScYIScYIScYIScAAAAXD70kHO0kHO0kHO0A - AAAsLCx/f38sLCwsLCwsLCwsLCwsLCwsLCwAAAAkHO0kHO0kHO0XD70AAAAYIScYIScYIScYIScYIScY - IScYIScAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYIScYIScYIScYIScY - IScYIScAAAAAAAAAAAAXD70kHO0XD70AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXD70kHO0X - D70AAAAAAAAAAAAYIScYIScYIScYIScYIScYIScAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3t8p3 - t8p3t8p3t8oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXD70AAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAABfqsB3t8p3t8pfqsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAkHO0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXD70XD70AAAAAAAAAAABfqsB3t8p3t8p3t8p3t8p3t8p3 - t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8pfqsAAAAAAAAAAAAAXD70X - D70AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkHO0kHO0AAAAA - AABfqsB3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3 - t8p3t8p3t8p3t8pfqsAAAAAAAAAXD70kHO0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAXD70kHO0XD70AAAAAAABfqsBfqsB3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3 - t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8pfqsBfqsAAAAAAAAAXD70kHO0XD70AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkHO0kHO0AAAB3t8oAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAB3t8oAAAAkHO0kHO0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXD70k - HO0kHO0AAABfqsAAAABfqsBfqsB3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8p3 - t8p3t8p3t8p3t8p3t8p3t8p3t8pfqsBfqsAAAABfqsAAAAAkHO0kHO0XD70AAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAkHO0kHO0XD70AAAAAAAAAAABfqsB3t8p3t8p3t8p3t8p3t8p3t8p3 - t8p3t8pfqsBfqsBfqsBfqsBfqsBfqsB3t8p3t8p3t8p3t8p3t8p3t8p3t8p3t8pfqsAAAAAAAAAAAAAX - D70kHO0kHO0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXD70kHO0AAABfqsB3t8pf - qsAAAAAAAAB3t8p3t8p3t8p3t8p3t8p3t8pfqsAAAAAAAAAAAAAAAAAAAAAAAABfqsB3t8p3t8p3t8p3 - t8p3t8p3t8oAAAAAAABfqsB3t8pfqsAAAAAkHO0XD70AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABfqsB3t8p3t8p3t8pfqsAAAABfqsB3t8p3t8p3t8p3t8pfqsBfqsAAAABfqsB3 - t8p3t8pfqsAAAABfqsBfqsB3t8p3t8p3t8p3t8pfqsAAAABfqsB3t8p3t8p3t8pfqsAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfqsB3t8p3t8pfqsAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfqsB3t8p3t8p3t8p3t8pfqsAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAYIScYIScYIScYIScYIScYIScYIScYIScYIScYIScYIScYIScYIScYIScAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYIScQGzAVAIgVAIgQGzAYIScYIScYIScYIScQGzAV - AIgVAIgQGzAYIScAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYIScVAIgk - HO0kHO0VAIgYIScYIScYIScYIScVAIgkHO0kHO0VAIgYIScAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAYIScVAIgkHO1EOu8VAIgYIScYIScYIScYIScVAIgkHO1EOu8VAIgYIScA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYIScQGzAVAIgVAIgQGzAYIScY - IScYIScYIScQGzAVAIgVAIgQGzAYIScAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAYIScYIScYIScYIScYIScYIScYIScYIScYIScYIScYIScYIScYIScYIScAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAkHO0kHO0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEOu9EOu8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD/AAAAAP8AAP8AAAAA/wAA/wAAAAD/AAD/AAAAAP8AAP8AAAAA/wAA/4AAAAH/ - AAD//AAAP/8AAP/+AAB//wAA//8AAP//AAD//4AB//8AAP//4Af//wAA///gB///AAD//+AH//8AAP// - 8A///wAA///4H///AAD///gf//8AAP//+B///wAA//gAAB//AAD/+AAAH/8AAP4AAAAAfwAA/AAAAAA/ - AAD8AAAAAD8AAP4HCBDgfwAA/x/4H/j/AAD/GAAAGP8AAP4QAAAIfwAA/gAAAAB/AAD8AAAAAD8AAPwA - AAAAPwAA+AAAAAAfAAD4AAAAAB8AAPgAAAAAHwAA/AAAAAA/AAD/AAAAAP8AAP//+B///wAA///4H/// - AAD///AP//8AAP//gAH//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP// - AAD//wAA//+AAf//AAD///w///8AAP///D///wAA///+f///AAA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/CDL.designer.cs b/BizHawk.Client.EmuHawk/tools/CDL.designer.cs index e816226b0d..e86cae874b 100644 --- a/BizHawk.Client.EmuHawk/tools/CDL.designer.cs +++ b/BizHawk.Client.EmuHawk/tools/CDL.designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CDL)); this.menuStrip1 = new MenuStripEx(); this.FileSubMenu = new System.Windows.Forms.ToolStripMenuItem(); this.NewMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -216,7 +215,7 @@ // this.tsbLoggingActive.CheckOnClick = true; this.tsbLoggingActive.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; - this.tsbLoggingActive.Image = ((System.Drawing.Image)(resources.GetObject("tsbLoggingActive.Image"))); + this.tsbLoggingActive.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.placeholder_bitmap; this.tsbLoggingActive.ImageTransparentColor = System.Drawing.Color.Magenta; this.tsbLoggingActive.Name = "tsbLoggingActive"; this.tsbLoggingActive.Size = new System.Drawing.Size(41, 22); @@ -234,7 +233,7 @@ this.tsbViewUpdate.CheckOnClick = true; this.tsbViewUpdate.CheckState = System.Windows.Forms.CheckState.Checked; this.tsbViewUpdate.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; - this.tsbViewUpdate.Image = ((System.Drawing.Image)(resources.GetObject("tsbViewUpdate.Image"))); + this.tsbViewUpdate.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.placeholder_bitmap; this.tsbViewUpdate.ImageTransparentColor = System.Drawing.Color.Magenta; this.tsbViewUpdate.Name = "tsbViewUpdate"; this.tsbViewUpdate.Size = new System.Drawing.Size(46, 22); @@ -296,7 +295,7 @@ this.Controls.Add(this.lvCDL); this.Controls.Add(this.toolStrip1); this.Controls.Add(this.menuStrip1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.cdlogger_MultiSize; this.MainMenuStrip = this.menuStrip1; this.MinimumSize = new System.Drawing.Size(150, 130); this.Name = "CDL"; diff --git a/BizHawk.Client.EmuHawk/tools/CDL.resx b/BizHawk.Client.EmuHawk/tools/CDL.resx index acb5948fc4..b5af03fe13 100644 --- a/BizHawk.Client.EmuHawk/tools/CDL.resx +++ b/BizHawk.Client.EmuHawk/tools/CDL.resx @@ -123,54 +123,4 @@ 126, 17 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== - - - - - AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAQAMAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAACMWwCMWwCMWwCMWwCMWwCMWwCMWwCMWwCMWwCMWwCMWwCMWwAAAAAAAAAAAACMWxApOoZ - jN1ApOoCMWyj0/Wj0/Wj0/Wj0/Wj0/Wj0/Wj0/Wj0/UCMWwAAAACMWxApOpApOoCMWxApOoZjN0CMWyj - 0/UuKfAuKfCj0/XLPAPLPANApOpApOoCMWwCMWwZjN0CMWwQUHwCMWxApOoCMWxApOouKfCj0/Wj0/XL - PAOj0/XLPAOj0/UCMWwCMWxApOoCMWwQUHwCMWxApOoCMWyj0/UuKfCj0/Wj0/XLPAOj0/XLPAOj0/UC - MWwCMWxApOoCMWwQUHwCMWxApOoCMWyj0/UuKfCj0/Wj0/XLPAOj0/XLPAOj0/UCMWwCMWxApOoCMWwQ - UHwCMWwZjN0CMWyj0/UuKfAuKfCj0/XLPAPLPANApOpApOoCMWwCMWxApOoCMWwQUHwCMWwZjN0CMWyj - 0/Wj0/Wj0/VApOpApOpApOpApOpApOoCMWwCMWwZjN1ApOoCMWxApOpApOoCMWyj0/Wj0/Wj0/UCMWwC - MWyj0/Wj0/Wj0/UCMWwAAAACMWxApOpApOoZjN0CMWxApOpApOqj0/UCMWyj0/Wj0/Wj0/Wj0/UCMWwA - AAAAAAAAAAACMWwCMWwCMWwCMWwCMWwCMWwCMWyj0/VApOqj0/UCMWwCMWwAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAACMWyj0/VApOqj0/UOOwMOOwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAOOwMjpQUCMWyj0/UOOwMhhwkjpQUOOwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOOwMhhwkjpQUC - MWwOOwMjpQUhhwkOOwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMLAQOOwMOOwMAAAAOOwMhhwkjpQUO - OwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOOwMjpQUOOwMAAADAAwAAgAEAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAAwAMAAP+BAAD/AAAA/wAAAP8QAAD/8QAA - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/Cheats/Cheats.Designer.cs b/BizHawk.Client.EmuHawk/tools/Cheats/Cheats.Designer.cs index 6612dd2e26..94875574e0 100644 --- a/BizHawk.Client.EmuHawk/tools/Cheats/Cheats.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/Cheats/Cheats.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Cheats)); this.CheatListView = new InputRoll(); this.CheatsContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components); this.ToggleContextMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -473,7 +472,7 @@ // NewToolBarItem // this.NewToolBarItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.NewToolBarItem.Image = ((System.Drawing.Image)(resources.GetObject("NewToolBarItem.Image"))); + this.NewToolBarItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.NewFile; this.NewToolBarItem.ImageTransparentColor = System.Drawing.Color.Magenta; this.NewToolBarItem.Name = "NewToolBarItem"; this.NewToolBarItem.Size = new System.Drawing.Size(23, 22); @@ -483,7 +482,7 @@ // OpenToolBarItem // this.OpenToolBarItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.OpenToolBarItem.Image = ((System.Drawing.Image)(resources.GetObject("OpenToolBarItem.Image"))); + this.OpenToolBarItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.OpenFile; this.OpenToolBarItem.ImageTransparentColor = System.Drawing.Color.Magenta; this.OpenToolBarItem.Name = "OpenToolBarItem"; this.OpenToolBarItem.Size = new System.Drawing.Size(23, 22); @@ -493,7 +492,7 @@ // SaveToolBarItem // this.SaveToolBarItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.SaveToolBarItem.Image = ((System.Drawing.Image)(resources.GetObject("SaveToolBarItem.Image"))); + this.SaveToolBarItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.SaveAs; this.SaveToolBarItem.ImageTransparentColor = System.Drawing.Color.Magenta; this.SaveToolBarItem.Name = "SaveToolBarItem"; this.SaveToolBarItem.Size = new System.Drawing.Size(23, 22); @@ -558,7 +557,7 @@ // LoadGameGenieToolbarItem // this.LoadGameGenieToolbarItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; - this.LoadGameGenieToolbarItem.Image = ((System.Drawing.Image)(resources.GetObject("LoadGameGenieToolbarItem.Image"))); + this.LoadGameGenieToolbarItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.placeholder_bitmap; this.LoadGameGenieToolbarItem.ImageTransparentColor = System.Drawing.Color.Magenta; this.LoadGameGenieToolbarItem.Name = "LoadGameGenieToolbarItem"; this.LoadGameGenieToolbarItem.Size = new System.Drawing.Size(75, 22); @@ -619,7 +618,7 @@ this.Controls.Add(this.toolStrip1); this.Controls.Add(this.CheatsMenu); this.Controls.Add(this.CheatListView); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.Freeze_MultiSize; this.MinimumSize = new System.Drawing.Size(285, 384); this.Name = "Cheats"; this.Text = "Cheats"; diff --git a/BizHawk.Client.EmuHawk/tools/Cheats/Cheats.resx b/BizHawk.Client.EmuHawk/tools/Cheats/Cheats.resx index 1631505e05..58eeb5a808 100644 --- a/BizHawk.Client.EmuHawk/tools/Cheats/Cheats.resx +++ b/BizHawk.Client.EmuHawk/tools/Cheats/Cheats.resx @@ -126,642 +126,4 @@ 234, 17 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAERSURBVDhPrZDbSgJRGIXnpewd6jXsjSQvIrwoI0RQMChU - 0iiDPCGiE3ZCRkvR8VzTeBhnyR5/ccaZNnPhB4t9sdf6Ln5hb8QeathNJFVFKF5C8DqL4ksDVHWGDf7j - LHyPg6NjviSaFqlu5yQYR+KpupaIkrMknCxT3Y7v/NYYb0ITK1c3BarbWWhLQ7IR0cTKReyZ6lZ0XYei - ztHpK4bAc+h1FgQijzSxMptrGIxVSO0xX3AaStFki7bUMVFmaMm/eJMGfIH/MkGzLep0AXn4h/r3CJV3 - mS9gn2bY4UY/UzQ7E9TqfeTFtnuB+XAfzSHKr11kSl/uBebDiZ89ZCst3OUkdwL28sIVsE83ock+EIQV - 2Mz2wxeg6/UAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJHSURBVDhPxZBdSNNhFMb/F110ZZEVhVBgeeHNICiiuggp - olAUyyxI0oSaH1QYC3N+tKnp5ubm1JUua5uuqdNKMwr7kApFItTUkWZqVhSVYmao5Nevvy7UoYR3HXh4 - 4XCe33nOKyy3lAY7l9RWMo0O/raWXxEyo5spVYTNvOGyfIRPfW+ptOkXqaPl6T83hcRmExSdgzAz3NVm - YWyoYla/B+1M9JtxWLPpaH22JORIjI6gKAMB0jyEimIdo4OlbuaprwVMOOMovammpDADc34qppwUrmnl - 5Kni3aFlFg2j3y1z5mnRTJccnNIltQhwq0jFry+mOXNtpWZWDx1Z1NhV3C3JwGFOw25SYjVe5oYhiUKd - HKMmwQUrMWUw/CF3NnZvvYKqUh1TvUroS3fXe7HXkwidMngTS2t5KLbregSzMY2f3Wr4qKW6LJvGR1rX - 0MLor8OhKYTJBn/GHvvxrliCTBrsOqXIoOBHh5K+hmSq7FqmexTQHuUytkaKxuNMNgYyVneA4Qd7GKjc - hjLaRzxH7gIU6JIZaEvgtk1D8wsxSWecCDgNzWFMvwxm/PkhRmr3Mli1nW9lvjRdWc0Jf+/5jzRmyWmv - S+GOLQu6U6BFjPvqKOP1AYw88WOoZif9DgmfLVtxaj1RSLdwNvrkPCA3M54KqxrnvRia9MKcGrUrqFOt - 5H7qKsqT1mGO9+Lqhc2ELdw+U/r0i+gVZ8hMiCDx3DHORwZyKnQ/hw/uYt9uCTskPvh6e7Fp41rWr/Fg - g6eHO+A/lyD8ARfG3mk9fv1YAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIySURBVDhPrZLfS5NRGMfff6H7boIuuq2pMZyL1eAt11CW - DcOKsB9vpFmaLtNExco0av6CbIVLJ61Wk3BSkT/AFCkRZSpZmrmiJQ41xSaCwdfznL15XEUX0Reem5f3 - 8znnec4j/Zc8fxYGla91CS3eRTx0z6OpMYS7jmnU1X6B/VYA18snUVoyjsKCt8jLHcH5c36ouCQR2NUJ - 1Nas4G9ZXlmFKbULh1Kf8lJxSfI+WeCCyopv6q+/h+DQ/DJ2WV5Ao1FgPegRAveDOS4oLfmq/h6dn/DH - 4AJizD4UXJrCAUuzEDgbZrjgou2DiohshIcnQtgme5GTPYbkJKcQ1N8OckHW2REVi+RXuM8fxGaDG4oy - ALPZIQQ11Z+5QDk1oKJ/hjv7P2FTfCMOH3mFxMQ6IbhROYWOdrCnBI4dfwPr0V4+bRoY9UzXppMjcDdS - rC8hy3YhuFI2gTYf2A4Aza4f7N2/o/zaLB8qDYx6zszwr8P7k1thNFYIweXCMXgeAfedq2xxwjClZUeV - Jd2GtDNFETiJwfs8MBjKhMCWN8pgoLoqzE8miH1GjE7G4PsZjE7OQsm9ij2mFg7rdrug1xcJAa2l4w7W - r00Cgk/n38S7wBwC04u4UGxHrMHF4CbEJtyDLj5fCDIzhljfSxzeavRgyw4Zj9t64GvvQ0d3P3pfD2Kv - 2QqNvgFxDN6urYdWmyMElJMnevh60obRktA701PRtGlg1DOdSkXwzrisaMG/RZLWAE60OMW5fNhvAAAA - AElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== - - - - - AAABAAUAQEAAAAAAIAAoQgAAVgAAADAwAAAAACAAqCUAAH5CAAAgIAAAAAAgAKgQAAAmaAAAGBgAAAAA - IACICQAAzngAABAQAAAAACAAaAQAAFaCAAAoAAAAQAAAAIAAAAABACAAAAAAAABCAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpb - MQEaXzNcGWc2mxlrOasZazmoGWg3lhlgM04AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAcVS85G10y/xlpOP8ZbTn/GW06/xlqOP8aXTL+G1gwGwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIJVTGR+QUEEikFFfIopOdyCB - SIoggEiUIH5HmR99RpYfekSPHnRBfh9qPGcdVzFRHFAtZBtfNP8abDr/GXA8/xlwO/8ZbDn/GmAz/xtT - LkgdVjFRHmg7Zx5zQH4eeUSPH3xGliB+R5kgf0iUIIBIiiKKT3cikFFfIJFRQSCWVBkAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIptXGCCWVGYeklGrHpBP5SGY - Vf4np2D/Lrht/zK/c/8yvnL/Mr1y/zK5cP8ws2v/LKdj/ymVV/8jeUb/H1cy/x1JKv8bYjX/G3M//xt4 - Qf8adj//GW87/xphNP8dRin/H1cy/yN5Rv8plVf/LKdj/zCza/8yuXD/Mr1y/zK+cv8yv3P/Lrht/yen - YP8hmFX+HpBP5R+SUasgl1VmIp1ZGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdj05FHY5OtCOe - WvsqsWf/L8Fy/zXQff863of/PumQ/0Dwlf9B8JX/QvGW/0Lzl/9C85f/Qe+U/z7ljf851YH/Lq9m/yNu - P/8eTSz/G2g5/x18RP8eg0j/HYBG/xt1QP8bYTX/Hkor/yNuP/8ur2b/OdWB/z7ljf9B75T/QvOX/0Lz - l/9C8Zb/QfCV/0Dwlf8+6ZD/Ot6H/zXQff8vwXL/KrFn/yOeWvsdjk60HpFQRQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2P - TjIbiUrDIppX/yu1av8zzHr/OduF/z3njf9A75P/QvaZ/0T6nP9E+pz/Q/mb/0P4mv9D+Jr/Q/ib/0P5 - m/9C9pj/POmN/zLEc/8leEb/H1Ev8BxuPP8ghkv/I5FS/yKPUP8ef0b/G2I2/yBVMdYleEb/MsRz/zzp - jf9C9pj/Q/mb/0P4m/9D+Jr/Q/ia/0P5m/9E+pz/RPqc/0L2mf9A75P/PeeN/znbhf8zzHr/K7Vq/yKa - V/8biUrDHpFQMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAHY9OAhqGSHwdj076KbBm/zTMev8634j/P+yR/0Hylv9C9pn/Q/mb/0T7nf9E/J3/RPuc/0P4 - mv9C95n/QfaX/0DzlP8/8pP/O+eK/zLRev8zw3P/J3tJ/yBnO7IddUH/I5NT/yihXf8on1z/IotP/x1n - Ov8hajySJ3tJ/zPDc/8y0Xr/O+eK/z/yk/9A85T/QfaX/0L3mf9D+Jr/RPuc/0T8nf9E+53/Q/mb/0L2 - mf9B8pb/P+yR/zrfiP80zHr/KbBm/x2PTvobh0l8HpJQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAHpJRBhqFR6ogllP/Lr5w/zjahP896Y//QfOX/0P3mf9D+Zv/RPuc/0T7 - nP9E+pz/RPqb/0T6m/9D+Zr/QveY/0DzlP877I3/M9V8/zDMdv8214D/NcZ4/yd6Sf8jgkpuIYNK/yqm - Yf8wt23/LbBo/yWYV/8edUL/In5ITyd6Sf81xnj/NteA/zDMdv8z1Xz/O+yN/0DzlP9C95j/Q/ma/0T6 - m/9E+pv/RPqc/0T7nP9E+5z/Q/mb/0P3mf9B85f/PemP/zjahP8uvnD/IJZT/xqFR6oflVIGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIZlVAhuISakinFj/McZ2/zvhif8/7ZL/QvSX/0P4 - mv9D+Jr/Q/ma/0P5m/9D+Jr/QvaY/0L1l/9C95n/QfaX/z/zk/8654n/L811/zHOd/822ID/OuGI/zfG - ef8nfUrdJpVVQSaVVv8xu3D/Nsh4/zK+cv8ool7/IIFJ/ySNUCInfUrdN8Z5/zrhiP822ID/Mc53/y/N - df8654n/P/OT/0H2l/9C95n/QvWX/0L2mP9D+Jr/Q/mb/0P5mv9D+Jr/Q/ia/0L0l/8/7ZL/O+GJ/zHG - dv8inFj/G4lKqSKbVwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6QT3slpF7/NdF+/z7q - kP9B8pb/QfKV/0H0lv9C9Zf/QfSW/0H0lv9B85X/QPGT/z/vkf8+75D/Pe+Q/zztjv80137/MM12/zPT - fP833IP/O+SK/z7njv82wHX/KY1ThyeYWEAqpGD/NcV3/zfMfP81x3j/LKtk/x+FSv8ki1AgJ4lRhzbA - df8+547/O+SK/zfcg/8z03z/MM12/zTXfv887Y7/Pe+Q/z7vkP8/75H/QPGT/0Hzlf9B9Jb/QfSW/0L1 - l/9B9Jb/QfKV/0Hylv8+6pD/NdF+/yWkXv8ekVB7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWk - XSwlo135ONmE/0Hylv9C9pn/QvWY/0DxlP8/7pH/P+6R/z/tkP8/7ZD/Pu2P/z3rjf897I7/PO2O/zbe - gv8wzHX/MtF6/zbZgP8534b/POaL/z/tkf8+54//MrFs/SyiYCopmFo/Lq9o/zbKev83zn3/Nsl6/y2x - af8ehUr/I4pPICiXWSoysWz9PueP/z/tkf885ov/Od+G/zbZgP8y0Xr/MMx1/zbegv887Y7/PeyO/z3r - jf8+7Y//P+2Q/z/tkP8/7pH/P+6R/0DxlP9C9Zj/QvaZ/0Hylv842YT/JaNd+SamXywAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAlpF64N9WB/0L0mP9D+Zv/Q/eZ/0H0lv9B8pT/P+6R/z/tkP8/7I//PuyP/z3r - jf876Yv/OeOG/zHPeP8vy3X/M9J7/zfbgv8644n/PemO/0Dvk/9B8pb/PeCK/y+pZr4AAAAALKNhPzG5 - b/83zHz/ONB+/zbLe/8utGv/IIhM/yKLTyAAAAAAL6dlvj3giv9B8pb/QO+T/z3pjv8644n/N9uC/zPS - e/8vy3X/Mc94/znjhv876Yv/PeuN/z7sj/8/7I//P+2Q/z/ukf9B8pT/QfSW/0P3mf9D+Zv/QvSY/zfV - gf8lpF64AAAAAAAAAAAAAAAAAAAAAAAAAAAnqmIxLrxv/kDvlP9D+Zv/Q/mb/0P3mf9C9Jf/QfOV/0Dv - kv8/7ZD/PuyP/zzqjP865Ij/MtJ6/y/Jc/8xznf/NNR8/zfbgv875In/PuyQ/0DxlP9C9pj/QvOX/znQ - f/8yuW9IAAAAAC6tZz8yvnL/Nsx8/zfPfv82y3z/LrVr/yGMT/8ii08gAAAAADG0bEg50H//QvOX/0L2 - mP9A8ZT/PuyQ/zvkif8324L/NNR8/zHOd/8vyXP/MtJ6/zrkiP886oz/PuyP/z/tkP9A75L/QfOV/0L0 - l/9D95n/Q/mb/0P5m/9A75T/Lrxv/iitZDEAAAAAAAAAAAAAAAAAAAAAJqhhkTjYg/9D+Jr/Q/mb/0P3 - mf9C9pj/QvWX/0Hzlv9A8ZT/P+6R/zzoi/811n3/MMx2/zLPeP8003z/Nth//zjdg/864oj/PeuP/0Dy - lf9C9pj/Q/ia/0Duk/80xXfEAAAAAAAAAAAwtm0/M8J1/zfNfP83z37/Nct7/y60a/8ijlD/IYtPIAAA - AAAAAAAANMV3xEDuk/9D+Jr/QvaY/0Dylf8964//OuKI/zjdg/822H//NNN8/zLPeP8wzHb/NdZ9/zzo - i/8/7pH/QPGU/0Hzlv9C9Zf/QvaY/0P3mf9D+Zv/Q/ia/zjYg/8nqmKRAAAAAAAAAAAAAAAAAAAAAC27 - bt5A8JT/RPqb/0L3mf9C9pj/QvWX/0L1l/9C9Jb/Pu2Q/zbagf8yznj/M9J6/zXWfv822oH/ON2E/zrh - hv875In/POiM/0Dwk/9C9pn/QveZ/0L0mP874Ij7N9J/NgAAAAAAAAAAMbxxPzTFdv83zn3/N899/zXL - ev8us2r/Io1Q/yCJTiAAAAAAAAAAADbRfjY74Ij7QvSY/0L3mf9C9pn/QPCT/zzojP875In/OuGG/zjd - hP822oH/NdZ+/zPSev8yznj/NtqB/z7tkP9C9Jb/QvWX/0L1l/9C9pj/QveZ/0T6m/9A8JT/Lbtu3gAA - AAAAAAAAAAAAAC/BcyA21ID+Q/ea/0T6m/9C9pj/QvWX/0H0lv896o7/NtqB/zPSe/811X7/Nth//zfc - gv8534X/OuKH/zvliv8854v/PemN/z7tkP9B9Jb/Q/eZ/0Hylf896I7/N9eCjAAAAAAAAAAAAAAAADK/ - cz81x3j/N899/zfPff81yXn/LbFn/yCJTf8fhksgAAAAAAAAAAAAAAAAN9eCjD3ojv9B8pX/Q/eZ/0H0 - lv8+7ZD/PemN/zzni/875Yr/OuKH/znfhf833IL/Nth//zXVfv8z0nv/NtqB/z3qjv9B9Jb/QvWX/0L2 - mP9E+pv/Q/ea/zbUgP4xxnYgAAAAAAAAAAAtum1RONiD/0P3mf9D+Zv/QfOW/zvliv8113//NNV+/zbZ - gf843YT/OuGH/zrih/8744j/POaK/z3ojP896Y3/PuuO/z7skP9B85X/Q/ia/0L0l/89543/N9iCxTre - hwYAAAAAAAAAAAAAAAAyv3M/NcZ4/zfMfP82zHv/NMR2/yyrZP8egUj/HoFIIAAAAAAAAAAAAAAAADnd - hgY32ILFPeeN/0L0l/9D+Jr/QfOV/z7skP8+647/PemN/z3ojP885or/O+OI/zrih/864Yf/ON2E/zbZ - gf801X7/Ndd//zvliv9B85b/Q/mb/0P3mf842IP/Lr1vUQAAAAAAAAAALr9xMTXSfd8+7JD/PemO/znh - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZlUPEGRUD4djUw/yZFQP/2ZWD/9rWg//c2EQ/4Ft - Ef+RfBP/n4cU/6mPFf+wlRb/tJkW/7abF/+4nRf/uZ4X/7qdF/+6nhf/u58X/76iGP++ohj/tZoX/6KK - Ff+SexP/gWwR/3FeD/9nVg//YlIP/19PD/9eTg//Xk4P/15OD+peTg93Xk4PCQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoWA8BZ1cPZmVVD+xnVg//a1oP/3Ri - D/+CbhH/lH0T/6eNFP+9oRj/0LEa/9q6G//fvxz/4cAc/+LBHP/jwRz/48Ic/+TDHP/mxB3/58Ud/+rI - Hf/uzB7/7swe/+zKHf/kwx3/3b0c/9GyGv+6nRf/nIQU/4JuEf9xXg//Z1YP/2JSD/9gUA//X08P/15O - D+FeTg9TAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqWQ8dZ1cPvmlY - D/9vXQ//emYQ/4t1Ev+fhxT/tJkX/8aoGf/VtRv/5cMc/+7MHf/xzx7/89Ee//TRHv/00R7/89Ee//PQ - Hv/z0R//9NEf//XSH//20x//+NQf//jUH//31B//99Qe//bTHv/10h7/8c8e/+bFHf/QsRr/sJUW/494 - Ev92Yw//alkP/2NTD/9gUA//Xk4P/15ODqpeTg4RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABsXA9FaFgP7G9eD/9+ahD/lX4T/6+VFv/BpBj/z7AZ/9u7G//mxR3/7csd//LPHf/00R7/9dEe//XR - Hv/10R7/9dEe//bSHf/00B//8tAf//PQHv/z0B7/8s8f//bSHv/30x3/9tMe//bTHv/51R7/+9Yf//vX - H//51h//9tMf/+7MHv/YuBv/s5cW/453Ev91YxD/aFcP/2JSD/9eTg//Xk4O315ODjEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABuXQ9hbVwP+n1pEP+XfxL/tZoW/9CwGv/hwBz/58Ud/+vJHf/vzR3/8s8e//LP - Hv/yzx7/89Ad/+3MIP/RwCX/trgq/6GyLP+TrS//iKov/4KpLv+GrCz/hqss/4KoL/+Lqi7/l60t/6ax - LP+8uij/1sMl//XSH//61h7/+9cf//vXH//71x//99Qe/+zLHv/Ssxr/qY8V/4VwEf9vXA//Y1IP/15O - D/9eTg7zXk4OSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABvXg9ocF8P/YhzEf+tkxX/za4Z/+PBHP/uzB7/89Ee//XR - Hv/z0B7/8s8e//LPHv/uzB//y8An/6W1Lv+Lry//irEu/4qxLv+Msi7/jbMv/4yzL/+Lsi7/irAu/4mv - Lf+Iry3/h64t/4atLf+GrC3/hqwt/4WrLP+IqS//p7Mr/9LDJ//51h//+9cf//vXH//51R//9NEe/+TC - HP/CpBj/l34T/3VhEP9kUw//Xk4P/15NDvheTg5LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzYQ9TcV8P/Ix2Ef+4nRf/2rob/+3L - Hv/00R7/9tMf//XSHv/z0B7/8M0e/+rKIP+/vyv/mboy/5e/Mf+ZwTL/mMAy/5i/Mf+awTL/ncUy/5/J - M/+gyTP/nsgz/5zFMv+bwzH/msIx/5nBMf+XvjH/k7ow/4+2Lv+Msy3/ibAt/4etLf+FrC3/j6su/8S+ - KP/31CD/+9cf//rWH//31B7/7sse/9GyGv+jiRT/emYQ/2VUD/9eTg//Xk0O9l5ODjsAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6Zw8scmAP9I95 - Ev+/ohj/4sEc//LPHv/20x//9tMe//PQHv/uzB3/58Uc/8O8KP+bvDP/m8My/6DJM/+kzjT/qNI1/6rU - Nf+s1jb/sdw3/7bhOf+55Tr/u+c6/7vmOv+65Tn/ueU5/7nlOf+45Dj/tuI4/7LdNv+r1jX/pM4z/5zF - Mf+Uuy//jbQt/4mwLf+GrSz/kKwu/9PEJv/71x7/+tYf//jUH//vzR7/2Lgb/6mPFf97ZxH/ZVQP/19P - D/9eTg/nX08OGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACJdBEGd2QP0pJ7Ev/Dphj/5cMc//TRHv/41R//99Qe//LPHv/pyB3/2Lse/6a3L/+awjL/n8cz/6XP - NP+t1zb/tOA4/7rmOf++6jv/wu47/8byPf/I9D3/yvY9/8v2Pf/L9j3/y/c9/8v3Pf/L9z7/y/c9/8r2 - Pf/I9D3/xPA8/7/rOv+45Dj/rtk1/6LLMv+XvzD/j7Yu/4ivLf+Fqy3/rLUs//TSIP/41R7/9dMe/+/N - Hv/ZuRz/p44V/3llEP9lVA//YFAP/19PDrhgUA8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAiXQRe5aAE//Dphj/48Mc//PQHv/41B//+NQf//TRHv/pxxz/zbcg/527 - Mf+cxDP/osw0/6vVNf+14Dj/vuo7/8XxPP/J9D7/y/Y+/8z3Pv/N+D7/zfk+/835Pf/N+j3/zfs9/877 - Pf/O/D3/zvw9/877Pf/O+z7/zfo+/835Pv/L9z3/yfU9/8TwO/+86Dn/sdw2/6PNMv+XvzD/jrUu/4iv - Lf+Xri3/6cwh//XSHv/00B7/7swe/9W2G/+giBT/dWIQ/2VUD/9gUA//YFAPXAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIQTFZmCE/LCpRj/4MAc//DOHv/30x7/9tMe//LQ - Hv/pyB3/zbcg/5y+Mv+gyDP/p9E0/7LdN/+96Dr/xfE9/8r2Pv/M+D7/zfk//835Pv/N+j7/zvs9/8v2 - P/++4U7/tM5e/7DGZ/+rvmv/q75r/7DHZv+10Vz/wOVM/835Pf/P/T3/z/w+/876Pv/N+T3/yvY9/8Tw - PP+75zn/r9o2/6HKM/+VvTD/jLIu/5OvLf/nyiH/9NEe//TRHv/tyx7/za4a/5R9E/9wXQ//Y1MP/2BQ - D+BhUQ8HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCIE4K6nhf/3Lwb/+3L - Hf/10h7/9tMe//LQHv/pxxz/0LUd/5++Mv+jzTP/rNc1/7jjOf/C7zz/yvU+/834Pv/O+T//zvo+/877 - Pv/N+T7/uNVb/6Swff+Zmpb/m5ud/52dnf+enp7/np6e/56env+dnZ3/nJyc/5mZm/+YmpP/pbN3/7vZ - Vf/P/D7/z/w+/877Pv/N+T7/yvY9/8PwO/+55Tn/qtU1/5vDMv+Pti//mbAt/+3MH//00R7/9NEe/+jH - Hf+7nhf/hW8R/2lYD/9hUQ//YVEPYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALOY - FQSqkBTm07Qa/+nIHf/z0R7/9tMe//PQHv/qyR3/2Lga/6S5L/+m0DT/sNs3/7zoOv/F8Tz/y/c+/835 - P//O+j7/zvs9/8/8Pf+61l7/o6eU/6SjpP+oqKj/ra2t/7CwsP+ysrL/s7Oz/7Ozs/+ysrL/sLCw/66u - rv+rq6v/pqam/6Kiov+dnZ7/n6WJ/7vbVf/O/D3/zvo+/836Pv/M+T3/yfU8/7/rOv+w2zb/n8gy/5G5 - L/+vtiv/8s8e//TRHv/xzh7/2bkb/6SLFf93Yw//ZVQP/2FRD8oAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC2mxZCxqgY/+TDHP/xzh7/9tMe//XTHv/uzB3/3bwb/7KsJP+n0TT/st03/77q - O//H8z3/zPc+/835Pv/N+T3/zfo9/8n0Qf+vvIX/rKyt/7W1tf+7u7v/wcHB/8bGxv/Kysr/y8vL/8zM - zP/MzMz/y8vL/8jIyP/FxcX/wcHB/7y8vP+1tbX/ra2t/6ampv+enp7/qbpz/8n0Pv/N+D3/zfk+/835 - Pv/L9z3/xO87/7TfNv+hyzP/krkw/9K+I//tyx3/7csd/+jGHf/GqBn/j3kT/21bD/9jUw/+ZFQPIgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwKQXh9u6G//uzB3/9dIe//bUHv/z0B7/5sUc/8ep - GP+kxDP/st03/77qOv/H9D3/zPg+/834Pv/M+D3/yvc8/8TuQv+zu5v/u7u7/8XFxf/Nzc3/1dXV/9vb - 2//e3t7/4ODg/+Hh4f/h4eH/4ODg/9/f3//d3d3/2tra/9bW1v/R0dH/y8vL/8PDw/+4uLj/rq6u/6Wl - pf+kr4L/wOs9/8r2Pf/M+T7/zfo+/8z4Pf/F8Tv/s982/6DKM/+jty//5cMc/+fFHP/qyR3/374c/6+U - Fv98aBD/Z1YP/2ZVD2cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMyuGLzmxRz/89Ae//fU - Hv/21B//7s0d/9m5Gv+spCH/sNs3/7voOf/G8jz/zPg+/835Pv/L+D3/x/Q7/8DtOf+6xZj/xsbG/9LS - 0v/b29v/4+Pj/+np6f/s7Oz/7Ozs/+7u7v/u7u7/7e3t/+zs7P/r6+v/6enp/+fn5//k5OT/4ODg/97e - 3v/Z2dn/zMzM/8HBwf+1tbX/qqqq/6W1d/+86Dj/yfQ8/835Pf/N+j7/zPg9/8LwOv+v2zX/nMUy/9S8 - Iv/mxBz/6sgc/+rIHf/Orxn/lH0T/3BeD/9pWA+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADVthrh7csd//XRHv/31B7/9dIf/+nIHf/Jqxj/pbUr/7biOP/C7jv/y/Y+/8z5Pv/M+D3/xvM7/7zp - OP+30Wr/z8/P/9ra2v/k5OT/6+vr/8XFxf8RERP/QUFC//T09P/19fX/9fX1//T09P/09PT/8/Pz//Hx - 8f/w8PD/7Ozs/+vr6/8+Pj//ERES/7i4uP/S0tL/xsbG/7m5uf+urq//qspQ/8DsO//L9z3/zfk+/835 - Pv/K9jz/vOg4/6jTM/+8vSr/58Uc/+rIHf/tyx3/4b8d/7CWFv9/bBH/bVwPwgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADauhoB3Lsa9O3MHf/00R7/9tQe//TRHv/jwhz/u58V/6XFMv+65Tn/xfI8/8z4 - Pf/M+T3/yvY8/7/sOv+v2zX/ydC3/97e3v/n5+f/7u7u//Pz8/9ubm7/AQMG/wABA//V1dX/+Pj4//j4 - +P/4+Pj/+Pj4//f39//29vb/9PT0//Ly8v/IyMj/AQID/wECBf9xcXH/3t7e/9XV1f/Kysr/vb29/665 - jf+45Dn/x/M9/835Pv/N+T7/zPg9/8TxO/+z3jb/sMQv/+rIHP/tyx3/7swd/+nHHf/FqBj/kHkS/3Ng - D9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3b0bA9++G/rsyx3/89Ae//fUH//z0B7/3bwb/7GX - Fv+lzzb/uuY5/8bzPP/L+D3/y/c9/8XxO/+55Tj/qc5D/97e3//o6Oj/7+/v//T09P/39/f/T09Q/wMI - Dv8BAwf/wsLC//r6+v/6+vr/+vr6//r6+v/5+fn/+Pj4//f39//29vb/qamp/wIFCf8DBw3/YmJi/+jo - 6P/g4OD/19fX/8vLy/+8vbr/sNo5/8XwPP/M+D3/zfk9/8z4Pf/J9Tz/ueY3/6rLNf/qxxz/7s0e/+/N - Hf/ryR3/z7Aa/5yEE/95ZQ/eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLBGwHjwhzy7csd//PQ - Hv/31B//8s8e/9i4Gv+pkRb/rNc0/7voOP/H9Dv/y/c8/8n2Pf/B7Tr/s983/6/OW//m5uf/7e3t//Pz - 8//39/f/+vr6/0ZIS/8RGyj/ChEb/8DAwP/7+/v/+/v7//v7+//7+/v/+vr6//j4+P/4+Pj/9/f3/6Gh - of8LEx7/ERsp/2FiZP/u7u7/6Ojo/+Hh4f/X19f/zMzO/6/VRP/D7jv/zPc+/835Pv/M+T3/yvc7/77r - OP+y1zT/58Qc/+7NHf/vzR3/7Moe/9S0Gv+jixT/fWkP1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA5sUc3e7NHf/z0B7/99Qf//HPHv/Vthr/p48U/6/bNv++6zn/yPU7/8v3PP/I9Dz/vus6/6/b - Nv+sy1n/7Ovs//Hx8f/19fX/+Pj4//r6+v9ITFL/His8/xIcKv/BwcL/+/v7//v7+//7+/v/+vr6//n5 - +f/4+Pj/+Pj4//j4+P+goKD/GCMy/xwpOf9kZmn/8/Pz/+/v7//p6en/4eHh/9fW2f+t00P/wu08/8z3 - Pv/N+T7/zfk+/8v4PP/E8Tr/uN03/+fFG//vzR3/8M4d/+3KHv/Wthr/qI8U/4RvEL0AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAOrJHbbwzh3/9NEe//fUH//xzx7/1bYa/6aME/+w2Dj/w/A6/8r3 - PP/L9z3/x/M8/73pOf+t2DX/n8M9/+3t7v/z8/P/9vb2//j4+P/7+/r/S1FY/zJBUv8eKjn/wcHC//v7 - +//6+vr/+vr6//r6+v/5+fn/+fn5//j4+P/4+Pj/oKCi/yQyQf8xQFH/ZWhs//f39//09PT/8PDw/+np - 6f/b3Nb/qdI1/8LuPP/M9z7/zfk+/835Pv/M+Tz/yfY7/7/cOP/pxxv/8c8e//HPHv/tyx7/1rYa/6uR - Ff+PehKXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADuzB1/8s8e//TRHv/31B//8s8e/9i4 - Gv+pkBP/r8ky/8j1Ov/L+Tz/y/g8/8fzPP+86Tn/rNc1/5nBL//W3sH/8/Pz//b29v/5+fn/+/v7/1Vb - ZP9ygI//Sldk/8DBwv/7+/v/+/v7//v7+//7+/v/+vr6//r6+v/5+fn/+fn5/6OlqP9NW2r/c4KQ/2pt - cf/6+vr/+Pj4//T09P/w8PD/ydem/6zXNf/E7z3/zPc+/836Pv/N+j7/zfo9/8z6PP/J2DL/7csd//TR - Hv/z0B7/7csd/9W1Gv+skhX/nYYTXwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8c8dOPPQ - Hv/00R7/99Qf//PQHv/buxv/rpUU/6WtKP/M+Tv/zPo9/8z5PP/I9Tz/v+s6/67ZNf+ZwjD/psFi//T0 - 9P/29vb/+Pj4//n5+f9obnX/yM3T/4CHjv/Fxsb//Pz8//z8/P/8/Pz//Pz8//v7+//7+/v/+/v7//v7 - +/+ztbj/hIyV/8rP1P9ydXj/+/v7//r6+v/4+Pj/8/Py/6PETv+w2zf/xvE9/8z4Pv/N+j7/zfo+/877 - Pf/P/Tz/z8cp//LPHv/31B//9dIe/+vKHf/Rshn/q5EU/KmPFBoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPLPHgH00B7c9NEe//fUH//00R7/378b/7ecFv+YiBj/yfY+/8/8Pf/N+j3/y/c9/8Pv - O/+y3Tf/ncYx/461Lf/H1qX/9/f3//j4+P/6+vr/iIyR/8bLz/98goj/4uLj//39/f/9/f3//f39//39 - /f/9/f3//Pz8//z8/P/8/Pz/3N3e/3h/h//Lz9L/jZCU//39/f/8/Pz/+/v7/73Qjf+bwzD/t+E4/8j0 - Pf/N+D7/zfo+/836Pv/O/D3/yPA9/9m6HP/10h7/+dUf//XSHv/oxh3/y60Y/6ySFL8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA888edfTQHv/31R//9tMe/+bFHP/CpRf/n4gT/67A - MP/P/j3/zvs9/835Pv/I9Dz/ueU4/6TOM/+Tuy//jLEw/9Peuf/6+vr/+/v7/9/f4P9WW2L/eHyC//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f91eH3/WV5m/+Dh4v/9/f3//f39/8jX - pP+OtS3/o80z/7zoOv/K9j3/zfk+/876Pv/N+j3/z/09/7zCLP/kwxz/99Qf//nVH//z0R7/4cAb/8Kl - F/+1mhVVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPPQHg700B7r+dUf//nV - H//vzR3/0bEZ/6mQFP+Yhxf/x/A8/8/9Pf/N+j3/zPg9/8PvO/+y3jb/nsYy/4+2Lv+KsC7/wtOY//r7 - +v/8/Pz//f39//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7/+vv4/7fNhv+KsSz/lr4v/67YNf/D7zz/zPg+/836Pv/O+j7/zvw9/8PnOv/Bphn/7swd//nW - H//61h7/7swd/9a2Gv+6nhbWwKMWAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA9dIeaPjUHv/61h//9dIe/+HAG/+8oRb/n4cT/6OhI//P/D3/zvw9/835Pv/L9z3/wu47/67a - Nf+awjH/j7Yu/4qxLP+du1T/2+XF//39/f/+/v7///////////////////////////////////////// - ///////////////////9/fz/1OC4/5e4Sf+KsSz/kbgu/6PMMv+65jn/yfU9/835Pv/O+j7/zvo+/8v4 - Pv+voyD/2Lga//XTHv/61h//99Me/+XDG//Iqhj/vqIWSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPbTHgL20x7A+dUe//jVHv/uzB3/1rYa/7GXFf+dhBL/q7Ys/9D+ - Pf/N+j3/zfk+/8v2Pf/A7Dr/rdk1/53GMf+Tui//jbMt/4mwK/+aulH/xdad/+nu3P/9/f3///////// - /////////////////////////Pz7/+Xs1f/A05X/lrdI/4mwLP+Msi3/krku/6DJMv+14Df/xvI8/8z4 - Pv/N+j7/zvo+/836Pv+srSf/xKcX/+vJHf/51R//+tYf//HOHv/Wthn/v6MWowAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA99QeHvjUHur61h7/99Qe/+vK - Hf/QsRj/rJMU/5uEEv+suS7/z/09/837Pf/N+T7/yvY9/8HtOv+z3zf/ptA0/5rDMf+SuS7/jLMt/4qx - LP+Iryv/jbE4/5+9Wf+sxW//s8t6/7PMef+rxW3/nr1V/46yNf+KsSv/jLMt/461Lv+RuC7/mL8w/6XP - M/+44zj/xvI8/834Pv/N+T7/zfo+/8z6Pv+rsCn/uJwV/929G//00R7/+dYf//bTHv/jwhv/xqgX2cyt - GA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD51R4++9ce9/vXH//41R7/7cwd/9OzGf+vlRT/m4MS/6WqKP/L9z3/zvs9/835Pv/L9z3/xvI8/73p - Of+y3jf/qNI0/57GMf+WvS//kbgu/4+2Lf+OtS3/jrQt/461Lf+Pty3/kbgu/5K5Lv+Uuy//lr4v/5nB - MP+exzH/ptAz/7LeNv/A7Dr/yvY9/835Pv/N+j7/zvs+/8jyPf+opiT/tJgU/9OzGf/tyx7/99Qf//bT - Hv/oxhz/zK4Y7M2uGCcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPrWHkz82B74/Ngf//rWHv/yzx3/2roa/7ebFf+ehhL/m5Ad/77f - Of/P/D3/zfo+/8z4Pv/K9j3/xvI7/8HtO/+75zn/s943/63XNf+o0jT/pc8z/6TNM/+kzjP/ps8z/6fS - M/+q1TT/rdk1/7HdNv+14jf/vOg5/8PvPP/J9T3/zPg+/836Pv/O+z7/z/w+/7vYN/+klRv/tZoV/8+w - Gf/nxhz/9NIe//bTHv/syR3/0bIZ78+wGDcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+9ceRvzYH/L82R//+9ge//XS - Hf/kwxz/xKYX/6WNE/+YghP/pq0o/8TtPP/O/D3/zfo+/8z4Pf/M+D3/y/c9/8n1Pf/H8z3/xfE8/8Tw - PP/D7zz/w+88/8TwPP/F8Tz/x/M8/8j0Pf/K9j3/y/c9/8z4Pf/N+T7/zfo+/877Pv/P/T7/wuc8/6an - Jv+ljBP/uZ0V/9GyGf/mxBz/89Ae//bTHv/wzR3/3Lsa5ta2GTIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD71x4t/Nge2/3ZHv/82B7/+dUe/+7LHP/VtRn/tpsV/6OKE/+ZhRX/pqwn/7zeOf/O/D7/zvs+/836 - Pf/N+T3/zfk+/835Pv/N+D7/zfk+/835Pv/N+T7/zfk+/835Pv/O+j7/zvs+/877Pv/O/D7/z/09/877 - Pv+72Tf/paYm/5+IE/+vlRT/xacX/9y7Gv/ryR3/89Ee//fUH//z0B7/5sQbyuPBGx4AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPvXHg761x6g/Nge/vzZHv/82B7/9tMe/+jGHP/TtBn/vqEW/62T - FP+jixL/oZUc/663K/+61jf/xe89/877Pf/O+z3/zvs9/877Pf/O+z3/zvw9/8/8Pf/Q/j3/0P49/9D9 - Pv/F7T7/uNI0/6uxKf+fkBr/powS/7abFP/KrBj/3b0b/+vKHf/00h7/99Qf//jUHv/10R787Mkci+zJ - HAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPvXHkb82B7X/dke//zZ - Hv/71x7/9tMd/+7LHf/jwhz/17cZ/8utF//ApBb/tZkU/6qQFP+ilBz/paIi/6qtJf+psiz/rbgr/624 - K/+qsiv/qqwl/6OfIf+fjhr/o4oT/62SE/+6nhX/y60Y/92+HP/syx7/9dIe//nVHv/61x//+9cf//rW - Hv/30x7J89AdNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA+9ceBfzYHmb82B7f/dke//zYHv/72B7/+dYe//jUHf/00B3/78wd/+fGHP/cuxr/0rMY/8qr - F//CpRb/vKEW/7qfFf+6nxb/vqIW/8OmF//Jqxf/0LEY/9m5Gv/lwxz/780e//fUHv/61x///Nkf//3Z - H//92h///Nge//rWHtP41R5W99MeAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/NgeBPvYHlb82B69/Nge/PvYHv/82B7//Nge//zZ - Hv/71x7/+dYe//fUHv/20h7/9NAe//HOHv/vzR7/784e//HPHv/00R7/9tMe//jUHv/61h//+9gf//3Z - H//92h///tof//3aH//92R75/NkesfvXHkj61h4BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPrX - Hh361h5v+tYeu/vXHvX82R///tof//3aH//92h///dkf//3ZH//92R///dkf//3ZH//92R///dkf//3a - H//92h///tof//3ZHv/92R7//dke8PzYHrL82B5m/NgeFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - UBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAejk42Ho5O5i68b/863Yf+QO+U/kP2 - mv9E+Zz+Rfud/0X6nf5F+pz+RPmb/kP3mf8/8ZL+ON+E/jPQev830n/+K4pT/iJ7RpsllFX+L7Jq/iyr - ZP8ih0z+InVDhCuKU/830n/+M9B6/jjghP8/8ZL+Q/eZ/0T5m/5F+pz+Rfqd/0X7nf5E+Zz+Q/aa/0Dv - lP463Yf+Lrxv/x6OTuYekE82AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCVUy0gllTuMsd3/z7n - jv9C8Zb/RPea/0T4m/9E+Jv/RPea/0P1mP9C9Zj/QfWX/z7ukP801X3/Ms95/zjchP872YX/K4xU2yaT - VXAtrWf/N8h5/zK9cf8llFT/JIlOWSuMVNs72YX/ONyE/zLPef801X3/Pu6Q/0H1l/9C9Zj/Q/WY/0T3 - mv9E+Jv/RPib/0T3mv9C8Zb/PueO/zLHd/8hllTuIZdULQAAAAAAAAAAAAAAAAAAAAAAAAAAJqReCCOc - WNU31YL+QfCV/kL0mP9B8ZX+QfGV/kHwlP9B8JP+P+6R/z7tkP497Y/+N96E/jLPef821n/+OuCH/j7p - kP881oT+LJtcgimZWm8zvHH+OM19/jXGeP8mmlj+I4dNVyqVWYI81oT+PumQ/jrgh/821n/+Ms95/zfe - hP497Y/+Pu2Q/z/ukf5B8JP+QfCU/0Hxlf5B8ZX+QvSY/0Hwlf431YL+I5xY1SenYAgAAAAAAAAAAAAA - AAAAAAAAJ6hheDfUgf9D9pr+RPea/kL0l/9B75P+P+2R/j/skP8/7JD+PeqN/zrjh/4y0Hn+M895/jjb - g/885Iv+P+2S/kLwlf84xnr5MKxoIi2lYm81xXf+OM9//jbIev8on1z+IohNVyufXiI4xnr5QvCV/j/t - kv885Iv+ONuD/zPPef4y0Hn+OuOH/z3qjf4/7JD+P+yQ/z/tkf5B75P+QvSX/0T3mv5D9pr+N9SB/yip - YncAAAAAAAAAAAAAAAAqsGcJLbds5kLyl/9E+Zz/RPea/0P0l/9B8ZX/QO2R/z/rj/875Ij/NNN7/zHL - dv800nz/ONuD/z3njP9A8JT/Q/aZ/0LulP80vnOlAAAAADCyam82x3n/OM9//zbIev8po1//IYlOVwAA - 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 - L/+KsS7+iK0u/7G5K/7x0SL++tYg//XSH/7fvx3+qY8W/3NhEP5hUQ7+X08O2GBQDg4AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACLdRECfmoQtqSLFP/buxz/89Ef//jVIP/00R//6Mcd/8S6 - Jv+dvzP/ock0/6rTNv+13zn/veg7/8LtPP/G8j3/yfU+/8v2Pv/L9z7/y/c+/8z4Pv/M9z//y/c+/8n1 - Pv/F8D3/vuk7/7HbN/+iyzP/lbww/4qxLv+Qri7/2ccm//fUH//z0B//4cEd/6iOFv9yYBD/YlIP/2BQ - DqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVfhNTp44V/ti6HP/xzx/+99Qf/vTS - H//pxx7+urgo/53ENP6mzzX+s904/sDrPP/I8z7+y/c//s34P//N+T/+zvo+/sz4P//H70X+w+hK/sPp - Sv/I8UT+zfo+/s78Pv/N+j7+zPg+/sn1Pv/B7Dv+s903/6LKM/6TujD+i7Av/8vBJ/700R/+8s8f/929 - Hf6dhRT+blwP/2JSDvxhUQ49AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKeOFAOljBXP07Ub/u3L - Hv/20x/+89Ef/ujGHf+9tyf+ock0/6zWNv675jv+x/I+/sz4P//N+T/+zvs//sr1Qv+20WL+prJ//p2g - lP+cnJv+nZ2d/p2dnf+bnJr+nKCR/qe0e/+41F3+zfhB/s78P//N+T7+yfU9/7/qO/6v2Tf+m8Mz/460 - L/7Qwib+9NEf//HPH/7PsBv+inQS/2dXDv5hUQ65AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALCW - FTzEpxn+6Mcd//TRH//10h//6ske/8i0IP+kyjT/stw4/8HsPP/K9T7/zfk//876P//N+j//udJp/6ap - nv+rq6v/sbGx/7a2tv+4uLj/uLi4/7e3t/+0tLT/sLCw/6qqqv+jo6T/oKOU/7fTYP/N+T//zfo//8z5 - Pv/G8j3/t+I5/6HKM/+WtzD/5cki//PQH//pxx7/tJkY/3dkEP9jUw/8Y1MPJgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAL6iF4zfvxz+8s8f/vbTH//wzh/+2Lkb/qm+L/+03Tj+wu49/8v2Pv7M+D/+zPk+/snz - Qv+1wY3+uLe4/sPDw//Ly8v+0tLS/tbW1v/X19f+19fX/tbW1v/S0tL+zc3N/sbGxv+9vb3+sbGx/qWl - pf+runr+xvFA/8z4Pv7N+T7+yvY+/7vmOf6iyzT+sLos/+jHHf7qyB3+2bkc/5eAFP5rWg/+ZVUPdAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAM+xGsbsyx7+9tMf/vXTH//nxh3+uagf/rHbOP/A6zv+y/Y+/835 - P/7K9z7+xPA7/rzJlf/IyMj+1tbW/uHh4f/o6Oj+6urq/uzs7P/s7Oz+6+vr/unp6f/m5ub+4uLi/t3d - 3f/Y2Nj+zMzM/ry8vP+urq7+qbl5/8HtO/7M+D7+zfk//8r2Pf634zj+n8Y0/9vAIP7oxh3+6cge/7+j - Gf59aRD+aVkPrgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu7G+vyzx//9tQf//PRH//Zuhv/q7Io/7rl - Ov/I8z3/zfk//8v3Pf/B7Dr/udVo/9PT1P/i4uL/6+vr/42Njv8PDxH/zMzM//X19f/19fX/9fX1//Pz - 8//y8vL/7u7u/8TExP8ODxH/hoaG/9LS0v/Dw8P/tLS0/6/OU//G8j3/zfk//835Pv/F8Tz/rtk2/8XA - KP/pyB7/7cse/9y8Hf+agxT/cmAP1AAAAAAAAAAAAAAAAAAAAAAAAAAA27sbAuDAHPrxzh7+9tMf/vHO - H//Mrxn+prsu/r3oOv/J9j3+zPg+/8byPP603zf+ydSt/uXl5f/u7u7+9fX1/kVGR/8CBAj+l5eX/vn5 - +f/5+fn++fn5/vj4+P/29vb+9PT0/oiIiP8CBAj+TU1O/uLi4v/W1tb+x8fH/7PCiv6/6jz+zPc+/835 - Pv7K9j7+uuY5/7zHLv7syh7+7swe/+bFHv6xlxb+fGgP5QAAAAAAAAAAAAAAAAAAAAAAAAAA4MAcAeTD - Hffwzh7/9tQf/+/MHv/Dpxj/qMMu/77qOf/K9j3/yvY+/8DsO/+r1Tb/3eDU/+7u7v/09PT/+fn5/zg7 - QP8OFyP/kJGS//v7+//7+/v/+/v7//r6+v/4+Pj/9/f3/3p7ff8OGCT/TE5S/+zs7P/j4+P/19fX/8LI - sP+65Tn/y/Y+/835Pv/L+D3/we06/77QL//syh7/780e/+nHHv+8oRj/g28Q4gAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAOjHHeHxzx7+99Mf/u3LHv++ohf+q8Uw/sHuOv/K9z3+yPU9/7zoOv6mzzT+4uXZ/vLy - 8v/39/f++vr6/j5FTv8fLDz+kpSX/vv7+//7+/v++vr6/vn5+f/4+Pj++Pj4/nx/gv8gLj/+UVZc/vPz - 8//t7e3+5OTk/83Tuv644jn+yvY+/835Pv7M+D7+xvM7/8TWMf7syh7+8M4e/+rIHv7BpRj+jHcRyQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAO3LHrTyzx7+99Qf/u7MHv+/oxf+rL4t/sf0O//L+D3+yPQ9/7vm - Ov6kzTP+0dy0/vPz8//39/f++vr6/ktTXf9LW2z+lJeb/vv7+//6+vr++vr6/vr6+v/5+fn++fn5/oCE - if9MXG3+XGJq/vj4+P/09PT+7u7u/8fXnv654zr+y/Y+/835Pv7N+j7+y/g9/83VL/7vzR7+8tAf/+rI - Hv7BpRj+mYMTnQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHPHnPz0B//99Qf//DNHv/EqBj/pqkl/8v5 - Pf/M+T3/yfU9/73oOv+kzTT/qcRj//T09P/39/f/+fn5/3B3f/+7wcj/nJ6h//z8/P/8/Pz/+/v7//v7 - +//7+/v/+/v7/5GVm/+6wcj/en6D//v7+//5+fn/9PTz/6rLVf+95zv/zPc//836P//N+j//zvw9/9bL - KP/10h//9dIf/+jHHv+/oxj/po0UWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPPQHyDz0B/59tQf/vLP - H//OsBr+n4sW/sfyPf/O/D7+zPg+/8LtO/6p0jX+krkv/sjXpP/39/j++vr6/oyRl/+tsrf+ubu+/v39 - /f/9/f3+/f39/v39/f/8/Pz+/Pz8/ra5vP+rsLX+kpaa/vz8/P/7+/v+wdST/6LLM/7C7Tz+zfg//835 - Pv7O+z7+yO08/+DBHf741B/+9tMf/+PCHf65nRfwspgVEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADz0B6q99Qf/vbTH//cvBv+qpEV/qy2Kv/P/T7+zfo+/8j0Pf624Dj+nMQy/o60Mf/K2ab++/v7/ufn - 6P+qrLD++fn6/v7+/v/+/v7+/v7+/v7+/v/+/v7+/f39/vr6+v+qrK/+6enq/vz9/P/D1Zj+kbgw/67X - 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 - mf9D9Zn/PuaO/yuXWf8eXjX7IIZL/x+CSP8eWTP0K5dZ/z7mjv9D9Zn/Q/WZ/0P1mf9B7pT/OdqF/y++ - cf4jnFm+HpBPPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByKSgEdjU2KLLZr/Tzii/9C85j/RPmc/0X7 - nf9E+Zz/QvaY/zzqjf8213//L6Bg/yF5RccqpWD/KJ1b/yFyQbcvoGD/Ntd//zzqjf9C9pj/RPmc/0X7 - nf9E+Zz/QvOY/zzii/8stmv9Ho5Oih2MTAEAAAAAAAAAAAAAAAAAAAAAIZZUiTPIeP9A7ZP/Q/WY/0P2 - mf9D9Zj/QfKV/0DylP8434X/NNN8/zvhif8wpWTYKJpZoDbFeP8wtWz/I4lOkDCkY9g74Yn/NNN8/zjf - hf9A8pT/QfKV/0P1mP9D9pn/Q/WY/0Dtk/8zyHj/IZdViQAAAAAAAAAAAAAAACeoYTk20n/9Q/aa/0Lz - l/9A7pL/QO2R/z7rjv8644f/M9J7/zfagv896I3/QOqR/zGsaHkuqmWfOM19/zO/c/8iiU6PLqVjeUDq - kf896I3/N9qC/zPSe/8644f/PuuO/0Dtkf9A7pL/QvOX/0P2mv820n/9KKpjOQAAAAAAAAAALrpur0P2 - mv9E95r/QvSX/0Dvk/885Yr/NdR9/zPQev8424P/PuuQ/0P1mf893onwM71yEjK6cJ84zn7/M8B0/yKN - UI8tqmUSPd6J8EP1mf8+65D/ONuD/zPQev811H3/POWK/0Dvk/9C9Jf/RPea/0P2mv8uu2+vAAAAAC26 - bgg73Yj2RPib/0P1mP8/65D/ONuD/zXVfv853IT/O+OJ/z7ojf9D9Jj/QvGW/zrahW8AAAAANMJ1nzjP - fv8yvnL/IYpPjwAAAAA52YRvQvGW/0P0mP8+6I3/O+OJ/znchP811X7/ONuD/z/rkP9D9Zj/RPib/zvd - iPYvvnEILbltIDzji/dA7pL/Od+G/znehf885Yv/PeaM/z7pjf8/64//QvKV/0Lyl/8524WrOduFAQAA - AAA0wXWfNsl6/y+yaf8efkaPAAAAADnZhAE524WrQvKX/0Lylf8/64//PumN/z3mjP885Yv/Od6F/znf - hv9A7pL/POOL9y++cSAAAAAAMs14Jjjbg6Q+6Y/5QPCU/0Lylv9B8JT/P+uQ/z/rkP884or9N9WBlDjS - fgUAAAAAAAAAAC2nYp8qpmH/IYhN/x1xPI8AAAAAAAAAADjQfAU31YCUPOKK/T/rkP8/65D/QfCU/0Ly - lv9A8JT/PumP+Tjbg6QzznkmAAAAAAAAAAAAAAAAM856ATndhhY63IZkOt2HnTvgibc414KxONN/hTvC - cCsAAAAAWGgiB15PEDhWUhljRGQpzEFhJv8/XCT/Qlkhw1dQE2FeTg41WGAdBgAAAAA7vm0rONJ/hTjX - grE74Im3Ot2HnTrchmQ63oYWNdN9AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABTgTYEXWEbVWFTELJkVA/1Z1cP/21cD/9xXxD/cV8Q/21cD/9rWQ//ZVUP/2FRD/9fTw/zXk8PrVpb - GU5QeTMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAZ1cPWGdXD91xYA//h3IS/6iQFv/BpRn/yqwa/82vGv/QsRv/0rMb/9e4HP/KrRr/sZYX/4x2 - Ev9uXA//YlIP/2BQD9dfTw9PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAbFsPEWtaD7F8aBD/noYU/8CkGf/cvBz/7swe//TQH//00R//9NEf//PRH//00R//99Mf//fT - H//41B//89Af/9m6HP+ljBX/dWIQ/2NTD/9fTw6mX08ODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAHFfDxp2ZBDWpIsV/9a3G//syh7/8M0e//HOH//VxSX/tbwp/5y0Lv+OsDD/iK8v/4et - Lv+NrS7/nLIs/7e7Kf/cySX/+tcg//bTH//Vthv/lH0T/2dWD/9fTw7NX04OEgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAB3ZA8LemcQ0LqeGP/syh7/9dIf/+/NHv/PxCf/psIx/6DINP+iyzT/qNE2/67Y - OP+t1jf/q9Q2/6nSNf+hyTP/lr4x/4yzLv+Zsi3/1scm//nVH//pyB7/qI4W/2pYD/9fTw7GX08OBgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIl0EZW/oxj/8c4f//fTH//kxR//r70t/6PLNP+y3Dj/wOs8/8bx - Pv/K9j7/zPg+/8z5Pv/N+T7/zPk+/8r2Pv/E7zz/td84/5/IMv+OtS//sboq//PRIP/qyR7/po0W/2lY - D/9hUQ6FAAAAAAAAAAAAAAAAAAAAAAAAAAChiRQlvaEY++3LHv/10h//5cUe/6vBL/+s1Tf/v+o8/8r2 - P//N+T//yPBG/7bPZf+ru3r/prGE/6axhP+ru3j/t9Fi/8rzRf/N+j7/xvI9/7TeOP+awjL/qbkr//LQ - H//lxB7/knsT/2RUD/dhUQ8aAAAAAAAAAAAAAAAAAAAAALecF4rkxB3/9dIf/+rJHv+2vCn/s904/8Xx - Pf/M+D//zPk//7rPdP+vsKv/uLi4/76+vv/AwMD/vr6+/7i4uP+vr6//paag/7TMav/M+D//zPg+/8Dr - O/+iyzT/wsAo//DNHv/LrRr/d2QQ/2NTD3oAAAAAAAAAAAAAAAAAAAAA07Ua0PPQH//z0R//zbMd/7HZ - N//G8j3/zPg//8j0PP++zpD/y8vL/9zc3P/k5OT/5+fn/+fn5//k5OT/39/f/9fX1//IyMj/s7Oz/66/ - ef/H8z3/zfk+/8LuO/+kyTP/4cMe/+fGHv+kixX/alkPwAAAAAAAAAAAAAAAAAAAAADjwh309dMf/+3L - Hv+0sST/v+o7/8z4P//H8zz/vNlk/9vb3P/s7Oz/UVJT/4ODhP/39/f/9vb2//T09P/x8fH/fH19/09P - UP/T09P/vLy9/7XVVf/L9z7/zPg+/7fiOP/QxCX/7cse/9CyG/99aRDmAAAAAAAAAAAAAAAA3b0bAefG - Hfr10h//5sUd/6y0Jv/B7Tv/y/c+/73pOv/I2Jr/7u7u//f39/8qLzX/Y2Zp//r6+v/6+vr/+fn5//f3 - 9/9WWVz/Njo//+jo6P/W1tb/u86C/8jzPv/N+T7/w+87/8zMKf/vzR7/378d/454EewAAAAAAAAAAAAA - AAAAAAAA7Moe5PXSH//jwx3/rLQm/8XyO//J9T3/t+E4/8nanf/09PT/+fn5/zlDT/9tc3r/+/v7//r6 - +v/5+fn/+Pj4/2Bmbv9GTlj/8/Pz/+np6f/D1or/x/I+/835P//J9jz/0tEq//DOHv/hwR3/moMT1AAA - AAAAAAAAAAAAAAAAAADxzh6t9tMf/+bFHf+sqCH/y/g9/8r2Pf+24Tj/rMlh//X19f/5+fn/foaP/5Sa - n//7+/v/+/v7//r6+v/6+vr/ipGY/4eNlP/6+vr/9PT0/7PUWf/J9D7/zfo//837Pv/ezif/9dIf/9+/ - HP+ojxWdAAAAAAAAAAAAAAAAAAAAAPPQH1X10h//7Moe/62VF//F7Dv/zfk+/77pOv+awTH/yNei//r6 - +v+hpKn/tbi7//39/f/9/f3//f39//39/f+ytbj/pais//39/f/E1pf/rdc2/8v3Pv/N+j7/yes6/+rJ - Hv/30x//1rcb/7KYFkUAAAAAAAAAAAAAAAAAAAAA89AfA/bTH9T20x//xqkY/6moI//O/D7/yvY+/7Hb - N/+RuTD/uc+F//X37//+/v7//v7+//7+/v/+/v7//v7+//7+/v/z9uz/tc19/5a9MP++6Tv/zfk//836 - P//DuyT/9tMf//HOHv/GqRjHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9tMfOPnVH/nqyB3/s5kV/7G9 - K//O+z7/yPQ9/7DbN/+ZwTH/kbY3/7DJdf/K26T/1+S6/9fkuf/K26H/sMlx/5C2Nf+YvzD/teA4/8v3 - Pv/N+j//uL0q/+DAHP/51R//3Lwb9capGCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+tYfYPrX - H/3ryR3/t5wW/6uuJf/K9D3/y/c+/8DsO/+x2zf/o8sz/5vDMf+awjH/nMUx/6DJM/+m0DT/sdw3/8Lu - PP/N+T7/yfI9/7OyJf/PsRr/89Ef/+fFHfvPsBlSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA+9cfWfzYH/b00R7/y64Z/6aWGf+1xy7/yfM9/835Pv/K9j7/yfU+/8j0Pv/J9T7/y/Y+/8z5 - Pv/O+z7/yfM9/7bFLf+xnRr/1bYa//DOH//wzR7x3b0bTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA+9cfK/zYH8f71x//68kd/8+xGf+6ohn/uLMk/7jEK/+70jH/vdk1/73Z - Nf+80jH/tsEr/7OuIv+8oxn/2bob/+/NHv/41B//9tIfvu7LHSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+9cfAfzYH1L82B/E+9cf/vnVHv/z0R7/6MYd/929 - G//Wtxv/1rgb/96+HP/nxR3/89Ef//vXH//92R/9/NgfvvrWH0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD61h8j+tcfbvzY - H6f92R/T/dkf7v3ZH/r92R/6/dkf7f3ZH9D92R+k/NgfafzYHx4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA//w///wAAD/wAAAPwAAAA8AAAAOAAAABgAAAAQAEIAAABCAAgAwwAcAg - BAP/AAD//gAAf/gAAB/wAAAP4AAAB+AAAAfAAAADwAAAA8AAAAPAAAADgAAAA8AAAAPAAAADwAAAA8AA - AAfgAAAH8AAAD/gAAB/8AAA//gAA///AA/8oAAAAGAAAADAAAAABACAAAAAAAGAJAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFmc5AhppOxEZZTgYGF00ERxYMScZaDfXGWk41RtZ - MR8YWzMRGWQ4GBppOxEXaDoCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG4VIESKb - V3QpsGbCMcN18jjRf/43zn7+MLNq/h9dNfgcdkH/G3M+/h9cNfcws2r+N85+/zjRf/4xw3XyKbBmwiKc - WHQbiUoRAAAAAAAAAAAAAAAAAAAAAAAAAAAci0xOKrJo7Dvji/5C9Zj+RPqc/kP4mv4+75H+N9mB/iV6 - R90ll1b+I45R/iV5R9E32YH+Pu+R/kP4mv5E+pz+QvWY/jvji/4qs2jsHY1NTgAAAAAAAAAAAAAAACGZ - VUMyyHf6QO+T/0H0lv9B85X+P/GT/znkiP80137+Ot2G/ymUV48zv3L/LKtk/iaLUYM63Yb+NNd+/znk - iP8/8ZL+QfOV/0H0lv9A75P+Msh3+iGbV0MAAAAAHodNAjLJeNdD95r+QfKV/z7sj/8644f+M9R8/zfb - gv8/7pH+O9iF5y+uaEA2ynr/LrRr/iWUVTQ72ITnP+6R/zfbgv8z1Hv+OuOH/z7sj/9B8pX+Q/ea/zLJ - edcil1cCK7drNkDwlP5C9pj+PuuP/jfbgf422H/+OuGG/j7tkP5B9Jf+OdiDZzK9cTc2zXz+LrNq/iGM - Tys41oJnQfSX/j7tkP464Yb+Nth//jfbgf4+64/+QvaY/kDwlP4tum42Lr9wPj3qj/E644n+OuOJ/z3o - jf896Y3+PuyQ/0Hylf853YWhAAAAADC4bjc0xHb/KJ9c/ht2QSsAAAAAOdyFoUHylf8+7JD+PemN/z3o - jf8644n+OuOJ/z3qj/Evw3M+AAAAADHMdhk64Yh/POaM0j7qj/k744r8Od2G2TfMeGtDp1kCSl4mAjh5 - P0csg0f/JW45/jJfKjtMWR8BRKFUAjjKdms53YXZO+OK/D7qj/k85ozSOuKIfzHNeBkAAAAAAAAAAAAA - AAAAAAAAAAAAADO7bwdBs2IKTY5CDFpkH2RhUw+1ZVUP7WtZD/5sWg/+aFcP/mVUD/5gTw7rXk4Pslhe - HF9LiUAJQLBhCjS+cAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFtMDQNnVg5ublwP7Il0 - Ev+xlxb+zrAa/9W2Gv/YuBv/27sb/ty8G//Epxn+nIQU/3JfEP9hUQ/oXk4OZ1RGDQEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAaVkODnRiD7mfhxT+zrAa/+bEHP/wzh7+3Mci/8bBJv+8vib/vb4m/sjB - Jf/gyiL++NUf/+jGHf+rkRb+b1wP/15ODrFaSg0LAAAAAAAAAAAAAAAAAAAAAAAAAABqWQ4GfmoQwsqs - Gf/xzh7+7cwe/8fFKP+kwzH+nMUy/6PNNP+kzjT/ocoz/p3GMv+Tui/+lrMs/8bCJv/10x/+0rMa/3tn - Ef9eTg65WEkNAwAAAAAAAAAAAAAAAAAAAACQehKC0rMa/vbTHv7gxR/+qMIv/q7ZN/7B7Dv+yPQ9/sv3 - Pf7I8UL+yfJC/sz4Pf7H8zz+tuI4/pzFMf6htyz+6s0g/ta2G/53ZBD+YFAOdgAAAAAAAAAAAAAAAJ6H - Ew/Jqxjy89Ae/+PFHv+syTH+vOc6/8v3Pv/I8En+tMZ6/6qtnv+pqan/qKin/qaqmf+yxHT+yPBG/8j0 - PP+x3Df+pb0t/+/OH/+9oBj+aFcP7F5ODgkAAAAAAAAAAMWoF1Ttyx3+8c4e/rq+J/6/6zv+y/g9/sXp - U/7Cxbj+1tbW/t/f3/7h4eH+3t7e/tTU1P7ExMT+rbGh/r/kS/7M+D3+t+I3/sTBJv7lxBz+j3gT/mdW - DkgAAAAAAAAAANu6Gnr00R7+4sIc/7HOMf/K9j3+we06/87Ys//s7Oz+OTk7/9TU1P/39/f/9fX1/szM - zP85OTv+09PT/7fClf/H8z3+yvY8/7rRMP/syh3+w6YY/3ZjD24AAAAAAAAAAOXDHHb00R7+17ga/7PY - M//K9jz+s943/+fp4//39/f+KDA7/8bGyP/6+vr/+fn5/rm6u/8yOkP+7Ozs/9LVyf/B7Tv+zPk9/8Lh - NP/uzB3+07Qa/4dyEGoAAAAAAAAAAO7MHUr10h7+2Lga/rnVMf7K9zz+r9o2/tjiv/74+Pj+b3mD/snL - zP77+/v++vr6/sHDxf52f4j++Pj4/tTgtP7C7jv+zfo9/s/lM/7z0B7+1LUa/pqDEz4AAAAAAAAAAN+/ - Gwj10h7o5MMc/66xJP/O+z3+ueU4/6DBTf/t8eT+srW5/+vs7P/9/f3//f39/urr7P+0trr+7vLj/6jL - Sv/I9D3+zvs9/9XOJ//30x7+y60Y4KKKEwQAAAAAAAAAAAAAAAD20x5n9dEe/7ugFv+81TL+y/c9/67Y - Nf+YvD7+xtic/+zx3//7/Pr/+/z5/uvx3f/E15j+l7s7/7XgOP/N+T3+wdYx/+jHHf/syh3+w6YXWwAA - AAAAAAAAAAAAAAAAAAAAAAAA+tYeofDOHf65oBf+uMwv/sv3Pf675zn+ptA0/pjAMP6WvjL+mcAz/pzF - Mf6n0TT+veg5/sz5Pf68zS7+0LMa/vPQHv7TtBmWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6McbA/zY - HpD31B39z7AY/7CpIP+81TL+yvQ9/8r3Pf/J9j3/yvc9/sz5Pf/K9T3+vdQx/7asH//Wtxr+8tAe/ebE - G4bHqhcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD71x1D/Ngey/TRHf7iwRr+z7Ma/8O1 - IP+9uCP/vrgj/sGzH//Lrxr+5cQc//fUHv761h7G9dIdPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPrXHTj61x6J/Ngew/zYHun71x76+9ge+vzYHuj92R7B/NkehvzY - HjQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AA/AOAABwDAAAMAgAABAAAAAAAAAAAAAEIAAIAA - AQDwAA8A8AAPAOAABwDAAAMAwAADAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAMAAAwDgAAcA4AAHAPgA - HwD+AH8AKAAAABAAAAAgAAAAAQAgAAAAAABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZn - OSEdfUdSIX1IZB5nO1wbZDfDG2Q2vh5mOlwhfUhkHn1HUhZpOiEAAAAAAAAAAAAAAAAAAAAAF3M+Iiqx - Z7484Yr+Q/aa/0Hylv8zvXH/IoFJ8CF7RuozvXH/QfKW/0P2mv884Yr+KrFnvhh4QSIAAAAAF2k7DjPJ - eeFB8ZX/QfGU/zvmi/843YT/N8d51DG2bc8qol/HNsV41DjdhP875ov/QfGU/0Hxlf8zyXnhGnRCDi67 - cGtD95r/PuqP/zjbgv853oX/QfKW/zjOflw1xnjPKqZhxzPBdVxB8pb/Od6F/zjbgv8+6o//Q/ea/zDA - c2syyHdPPOSL5j7pjv8/64//P+qQ/jvdh5EAAAAAMLZszyKKTscAAAAAO9yGkT/qkP4/64//PumO/zzk - i+YzzHlPAAAAACKGUAYwunBAPsVzWkmeUEJZaiRsYlUSplphHPJWWxnwX1EQpVdlIWlHmU5APcRyWjG7 - cUAji1MGAAAAAAAAAAAAAAAAPjUIBG1cD4KNeBP2vqIZ/929HP/hwR3/5cQd/9q7HP+ylxf/d2QQ9WBQ - Dn05LwgDAAAAAAAAAAAAAAAAPzUIAodyEbDXtxv/5sog/8PHKv+nwzD/nMMz/5rAMv+ivS7/v8Eo/+bJ - IP+jihX/YlEOqTctCAEAAAAAAAAAAJuEE23lxB3/28gj/6/SNf/C7jz/xOpK/7rXX/+7117/w+pI/7rl - Of+jxDH/3ski/6GJFf9hUQ5lAAAAAAAAAADYuRvW6Mge/7jZNv/J9T7/xNiE/8rKyf/T09P/zs7O/729 - u/+4zXX/yPQ9/7PQMv/hwR3/emcRzgAAAAAAAAAA7cse+82+If/G8Tz/wuNd/+vr6/9YWl3/+Pj4//X1 - 9f9WWFr/09PT/8HjVf/F8Tz/3soj/6+UFvQAAAAAAAAAAPLPH+TIuSD/yfU9/7nZXP/39/f/bnV+//v7 - +//5+fn/bnV9//Ly8v/B5Fj/zPk+/+XQJP/BpRjcAAAAAAAAAAD00R+K1bcb/8LiNv+13zj/w9aU/9LU - 1P/+/v7//f39/9LU1P/D15D/wew8/8rmN//yzx//wqYYgwAAAAAAAAAAtZsWDvbTH9XCrx3/w+Q3/7Xf - OP+lykb/ttFw/7fTcP+my0T/t+E5/8XlOP/XwCD/48Ic0JR+EgsAAAAAAAAAAAAAAADNsBkW+tYfuda5 - G//Cwyf/wtoz/8LlOP/D5jj/wdky/8XFJ//bvRz/8c4etLecFhMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADvzR1F+tYeo/XSHt7ryh3568od+fXSHtz82B+h8M4dQgAAAAAAAAAAAAAAAAAAAADgBwAAgAEAAAAA - AAAAAAAAAkAAAIABAADAAwAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAMADAADwDwAA - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Designer.cs b/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Designer.cs index 0b4e82aefb..3c10e62805 100644 --- a/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GenericDebugger)); this.menuStrip1 = new MenuStripEx(); this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.ExitMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -363,7 +362,7 @@ this.Controls.Add(this.RegistersGroupBox); this.Controls.Add(this.DisassemblerBox); this.Controls.Add(this.menuStrip1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.Bug_MultiSize; this.MainMenuStrip = this.menuStrip1; this.Name = "GenericDebugger"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; diff --git a/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.IControlMainform.cs b/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.IControlMainform.cs index c7f95fbc04..b10352a3e4 100644 --- a/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.IControlMainform.cs +++ b/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.IControlMainform.cs @@ -1,13 +1,8 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace BizHawk.Client.EmuHawk +namespace BizHawk.Client.EmuHawk { public partial class GenericDebugger : IControlMainform { - public bool WantsToControlSavestates { get { return false; } } + public bool WantsToControlSavestates => false; public void SaveState() { } public void LoadState() { } @@ -15,22 +10,22 @@ namespace BizHawk.Client.EmuHawk public void LoadStateAs() { } public void SaveQuickSave(int slot) { } public void LoadQuickSave(int slot) { } - public void SelectSlot(int slot) { } - public void PreviousSlot() { } - public void NextSlot() { } + public bool SelectSlot(int slot) => false; + public bool PreviousSlot() => false; + public bool NextSlot() => false; - public bool WantsToControlReadOnly { get { return false; } } + public bool WantsToControlReadOnly => false; public void ToggleReadOnly() { } - public bool WantsToControlStopMovie { get { return false; } } - public void StopMovie(bool supressSave) { } + public bool WantsToControlStopMovie => false; + public void StopMovie(bool suppressSave) { } // TODO: We probably want to do this - public bool WantsToControlRewind { get { return false; } } + public bool WantsToControlRewind => false; public void CaptureRewind() { } - public bool Rewind() { return false; } + public bool Rewind() => false; - public bool WantsToControlRestartMovie { get { return false; } } + public bool WantsToControlRestartMovie => false; public void RestartMovie() { } // TODO: We want to prevent movies and probably other things diff --git a/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.resx b/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.resx index ba660d4792..c55f42d509 100644 --- a/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.resx +++ b/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.resx @@ -126,29 +126,4 @@ 132, 17 - - - - AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABMLAAATCwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEpWMf/m5ub/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPUgo/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJBI/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEpWMf8AAAAAAAAAAAAAAAAyOSD/eWId/3hjHf95Yx3/eWId/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARU4t/wAAAAB5ZR//eWUg/4fJpv+Bx5//ecKV/yt8 - Ov94ZB//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADlFKP8AAAAAeWch/5zSuP+Z0rX/kc6u/zyN - U/95w5b/emYi/wAAAAAAAAAASk4x/wAAAAAAAAAAAAAAAAAAAAAyPiP/emgk/67cxv+038v/rtvH/1in - c/+Rzq//gcef/3poJP8yOSD/PU4t/wAAAAAAAAAAAAAAAAAAAABFTjH/OUUo/3tqJ//C59X/zOvb/3/B - kv+u28b/mdK2/4fJpv96ayf/AAAAAAAAAAAAAAAAAAAAAFNWOP9TVjj/AAAAAAAAAAB7bSr/zOrb/9vz - 5//M69v/tN/L/53SuP98bSr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9zH/yJq - Lv/M69v/wubV/67cxv97byz/AAAAAAAAAAA9Ti3/SlYx/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANvz - 5/+v28f/fHAt/3xwLf98cC3/8vLy/zI5IP85QSj/AAAAAAAAAAAAAAAAAAAAAEpWMf9KTjH/RU4t/z1I - KP98cC3/fHAt//Pz8/85RSj/8/Pz/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAPUgt/wAAAAAAAAAAAAAAAEVOMf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAEpOMf8AAAAAAAAAAAAAAABTVjj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABOVjj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA+f8AAP3/AAD9/wAA3B8AAOgPAADoDQAA4AMAAMAPAAAwHwAA8DMAAPAPAAAAfwAA938AAPd/ - AAD3/////////w== - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/GB/GBGPUView.Designer.cs b/BizHawk.Client.EmuHawk/tools/GB/GBGPUView.Designer.cs index 481497f84a..7c38ef673d 100644 --- a/BizHawk.Client.EmuHawk/tools/GB/GBGPUView.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/GB/GBGPUView.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GBGPUView)); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); @@ -505,7 +504,7 @@ this.Controls.Add(this.groupBox1); this.Controls.Add(this.menuStrip1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.gambatte_MultiSize; this.MainMenuStrip = this.menuStrip1; this.Name = "GBGPUView"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; diff --git a/BizHawk.Client.EmuHawk/tools/GB/GBGPUView.resx b/BizHawk.Client.EmuHawk/tools/GB/GBGPUView.resx index 25ee9b9c97..0f6d8eb42b 100644 --- a/BizHawk.Client.EmuHawk/tools/GB/GBGPUView.resx +++ b/BizHawk.Client.EmuHawk/tools/GB/GBGPUView.resx @@ -120,161 +120,4 @@ 17, 17 - - - - AAABAAQAICAAAAEAIACoEAAARgAAACAgAAABAAgAqAgAAO4QAAAQEAAAAQAgAGgEAACWGQAAEBAAAAEA - CABoBQAA/h0AACgAAAAgAAAAQAAAAAEAIAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAB7e3tAfHx8v3d3d/9tbW3/aWlp/2lpaf9paWn/aWlp/2lpaf9paWn/aWlp/2lpaf9paWn/aWlp/2lp - af9paWn/aWlp/2lpaf9oaGj/ZmZm/3BwcP+EhIT/jo6Ov4+Pj0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAHt7e0B6enq/fX19/4GBgf+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4KCgv+BgYH/fn5+/3x8 - fP98fHz/fn5+/4GBgf+CgoL/goKC/3x8fP9ycnL/dXV1/4WFhf+MjIzPiIiIcISEhDB/f38QAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAd3d3QHl5eb+JiYn/qKio/7i4uP+3t7f/t7e3/7e3t/+3t7f/tra2/7Gx - sf+oqKj/o6Oj/6SkpP+pqan/s7Oz/7a2tv+0tLT/paWl/4iIiP9+fn7/h4eH/4mJie+FhYXPgoKCj4SE - hDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3dAeHh4v4+Pj/+7u7v/0dHR/8/Pz//Pz8//0NDQ/9HR - 0f/Q0ND/ycnJ/729vf+3t7f/uLi4/729vv/IyMr/zs7P/83Nzv+9vb3/np6e/46Ojv+NjY3/ioqK/4KC - gv9+fn6/f39/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHd3d0B4eHi/jo6O/7q6uv/Ozs7/ysrK/8rK - yv/Ozs7/0NDQ/9DQ0P/Kysr/vb29/7e3t/+3t7f/urq8/8LCx//IyM3/zMzO/8TExf+ysrL/o6Oj/5iY - mP+MjIz/fn5+/3Z2dr93d3dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3QHZ2dr+JiYn/ra2t/7e3 - t/+lpaX/p6en/7y8vP/Jycn/zs7O/8zMzP/Dw8L/urq9/7Kyu/+oqLz/nZ3C/6Cgxf+xscf/ubnD/7i4 - vP+vr7D/oKCh/5OTlP+JiYr/hYWFz4aGhnCKioowj4+PEAAAAAAAAAAAAAAAAAAAAAB3d3dAdXV1v4CA - gP+VlZX/ioqK/2BgYP9mZmb/mpqa/7u7u//Jycn/z8/O/8zMzP/AwMj/qqrE/4iIv/9ZWbn/Vla3/39/ - uP+cnLn/rq66/7GxtP+kpKf/n5+i/6Skpf+hoaHvkpKSz4uLi4+KioowAAAAAAAAAAAAAAAAAAAAAHNz - c0B0dHS/dHR0/3R0dP9gYGD/NjY2/zs7O/9wcHD/m5ub/7y8vP/Ozs7/0NDQ/8PDzv+mpsn/eHjD/zg4 - u/8xMbf/ZGS1/4SEtf+Rkbf/lJS1/4yMrf+UlK7/ra22/62trv+Wlpb/ioqKv4uLi0AAAAAAAAAAAAAA - AAAAAAAAb29vQHBwcL9jY2P/S0tL/zY2Nv8mJib/KCgo/zw8PP9nZ2f/qKio/8rKyv/Pz87/wsLO/6am - yv94eMj/ODjJ/zAwxf9hYb7/cXG4/19fsv9YWLH/WVmz/3Jyt/+jo73/sLCy/5eXmP+Kioq/i4uLQAAA - AAAAAAAAAAAAAAAAAABvb29AcHBwv2VlZf9QUFD/PDw8/ygoKP8pKSn/Pz8//2pqav+pqan/ysrK/87O - zv/Gxs//sLDM/42NzP9cXND/VFTN/3d3w/90dLv/S0u0/zo6tf9AQL3/YWHC/5+fwv+xsbX/l5eZ/4qK - ir+Li4tAAAAAAAAAAAAAAAAAAAAAAHNzc0B1dXW/enp6/4WFhf9wcHD/PDw8/z8/P/94eHj/o6Oj/7+/ - v//Ozs7/0NDQ/83N0P/Gxs//uLjP/6Sk0f+ens3/paXD/42Nvv9VVb3/OzvB/0BAzP9hYc7/n5/H/7Gx - tf+Xl5n/ioqKv4uLi0AAAAAAAAAAAAAAAAAAAAAAd3d3QHh4eL+Hh4f/pqam/5ubm/9nZ2f/ampq/6Oj - o//ExMT/zMzM/9DQ0P/Q0ND/0dHR/9HR0f/OztH/ysrS/8bGzv/Cwsf/p6fE/3Z2xf9fX8r/YmLT/3t7 - 0/+oqMj/srK1/5iYmf+Kioq/i4uLQAAAAAAAAAAAAAAAAAAAAAB3d3dAeHh4v4yMjP+0tLT/vb29/6io - qP+pqan/v7+//8zMzP/Pz8//0NDQ/9DQ0P/R0dH/0dHR/9DQ0f/OztH/zc3Q/8zMzf/Bwcz/r6/N/6am - z/+oqNP/r6/Q/7u7x/+0tLX/mJiZ/4qKir+Li4tAAAAAAAAAAAAAAAAAAAAAAHd3d0B4eHi/jo6O/7q6 - uv/Nzc3/yMjI/8fHx//Ly8v/zc3N/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/8zM - zv/Kys7/ycnP/8nJz//IyMz/xMTG/7W1tf+ZmZn/ioqKv4uLi0AAAAAAAAAAAAAAAAAAAAAAd3d3QHh4 - eL+Ojo7/uLi4/8zMzP/IyMj/xsbG/8fHx//IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jI - yP/IyMj/yMjI/8fHyP/Hx8n/x8fJ/8bGyP/ExMT/tbW1/5mZmf+Kioq/i4uLQAAAAAAAAAAAAAAAAAAA - AAB3d3dAdnZ2v4aGhv+jo6P/r6+v/6qqqv+nqKj/pqio/6WpqP+lqaj/pamo/6WpqP+lqaj/pamo/6Wp - qP+lqaj/pamo/6WpqP+mqaj/pqio/6eoqP+oqKj/rKys/7Kysv+rq6v/lZWV/4qKir+Li4tAAAAAAAAA - AAAAAAAAAAAAAHNzc0B0dHS/dnZ2/3t7e/94eXn/b3Bw/2lsbP9nbm3/ZW9t/2Vvbf9lb23/ZW9t/2Vv - bf9lb23/ZW9t/2Vvbf9lb23/ZW9t/2Zvbf9obmz/am1s/2xtbP94eHj/j4+P/5eXl/+Pj4//ioqKv4uL - i0AAAAAAAAAAAAAAAAAAAAAAb29vQHFxcb9sbGz/Y2Nj/11eXv9bXV3/UWNf/0FtY/84c2b/NnNm/zZz - Zv82c2b/NnNm/zZzZv82c2b/NnNm/zZzZv82c2b/O3Bl/0RrYv9OZV//Vl5c/2VkZf95eHn/hYWF/4mJ - if+Kioq/i4uLQAAAAAAAAAAAAAAAAAAAAABra2tAbW1tv2dnZ/9bW1v/XV9e/2xzcf9eioD/NKWM/x2z - kv8atJP/GLWT/xi1k/8YtZP/GLWT/xi1k/8YtZP/GLWT/xi1k/8krZD/PZ6J/1OOgf9oe3f/cXBx/25u - bv90dHT/hISE/4qKir+Li4tAAAAAAAAAAAAAAAAAAAAAAGtra0BsbGy/ZWVl/1dXV/9cX1//dH17/2Se - kf8swaD/DdSp/wnWqv8H16r/B9eq/wfXqv8H16r/B9eq/wfXqv8H16r/B9eq/xfNpv83uZ3/VaOS/3GK - hf93d3f/aWlp/2xsbP+BgYH/jIyMv4uLi0AAAAAAAAAAAAAAAAAAAAAAa2trQGxsbL9lZWX/V1dX/1xf - Xv90fXv/Y5+R/yjDof8J1qr/BNir/wLZq/8C2av/Atmr/wLZq/8C2av/Atmr/wLZq/8C2av/E8+m/zS6 - nf9To5L/cIqE/3d3d/9paWn/bGxs/4GBgf+MjIy/i4uLQAAAAAAAAAAAAAAAAAAAAABra2tAbGxsv2Vl - Zf9XV1f/XF9e/3R9e/9in5L/JsOi/wbXqv8C2av/ANus/wDbrP8A26z/ANus/wDbrP8A26z/ANus/wDb - rP8R0Kf/M7ud/1Kkkv9wioT/d3d3/2lpaf9sbGz/gYGB/4yMjL+Li4tAAAAAAAAAAAAAAAAAAAAAAGtr - a0BsbGy/ZWVl/1dXV/9cX17/dH17/2Kfkv8mw6L/Bteq/wLZq/8A26z/ANus/wDbrP8A26z/ANus/wDb - rP8A26z/ANus/xHQp/8zu53/UqSS/3CKhP93d3f/aWlp/2xsbP+BgYH/jIyMv4uLi0AAAAAAAAAAAAAA - AAAAAAAAa2trQGxsbL9lZWX/V1dX/1xfXv90fXv/Yp+S/ybDov8G16r/Atmr/wDbrP8A26z/ANus/wDb - rP8A26z/ANus/wDbrP8A26z/EdCn/zO7nf9SpJL/cIqE/3d3d/9paWn/bGxs/4GBgf+MjIy/i4uLQAAA - AAAAAAAAAAAAAAAAAABra2tAbGxsv2VlZf9XV1f/XF9e/3R9e/9in5L/JsOi/wbXqv8C2av/ANus/wDb - rP8A26z/ANus/wDbrP8A26z/ANus/wDbrP8R0Kf/M7ud/1Kkkv9wioT/d3d3/2lpaf9sbGz/gYGB/4yM - jL+Li4tAAAAAAAAAAAAAAAAAAAAAAGtra0BsbGy/ZWVl/1dXV/9cX17/dH17/2Ofkf8ow6H/Cdaq/wTY - q/8C2qv/Atqr/wLaq/8C2qv/Atqr/wLaq/8C2qv/Atqr/xPPpv80up3/U6OS/3CKhP93d3f/aWlp/2xs - bP+BgYH/jIyMv4uLi0AAAAAAAAAAAAAAAAAAAAAAa2trQGxsbL9lZWX/V1dX/1xfX/90fXv/ZJ6R/yzB - oP8N1Kn/Cdaq/wfYqv8H2Kr/B9iq/wfYqv8H2Kr/B9iq/wfYqv8H2Kr/F82m/ze5nf9Vo5L/cYqE/3d3 - d/9paWn/bGxs/4GBgf+MjIy/i4uLQAAAAAAAAAAAAAAAAAAAAABra2tAbW1tv2dnZ/9bW1v/XWBf/210 - cv9fi4H/NaaN/x60k/8btpT/GbeU/xm3lP8Zt5T/GbeU/xm3lP8Zt5T/GbeU/xm3lP8lr5H/Pp+K/1SP - gv9pfHj/cnFx/25ubv90dHT/hISE/4qKir+Li4tAAAAAAAAAAAAAAAAAAAAAAG9vb0BxcXG/bGxs/2Rk - ZP9fYGD/XWBg/1RmYv9EcGb/O3Zp/zl2af85d2n/OXdp/zl3af85d2n/OXdp/zl3af85d2n/OXdp/z5z - aP9HbWX/UWdi/1lhX/9nZ2f/enp6/4WFhf+JiYn/ioqKv4uLi0AAAAAAAAAAAAAAAAAAAAAAc3NzQHV1 - db9xcXH/aGho/2BgYP9XWFj/UVRU/09WVf9NV1X/TVdV/01XVf9NV1X/TVdV/01XVf9NV1X/TVdV/01X - Vf9NV1X/TldV/1BWVP9SVVT/VFVU/2FhYf95eXn/hoaG74iIiM+Li4uPioqKMAAAAAAAAAAAAAAAAAAA - AAB3d3dAeXl5v3R0dP9oaGj/YGBg/1paWv9XWFj/VlhY/1VZWP9VWVj/VVlY/1VZWP9VWVj/VVlY/1VZ - WP9VWVj/VVlY/1VZWP9WWVj/VlhY/1dYWP9YWFj/X19f/2xsbP91dXXPfX19cIqKijCPj48QAAAAAAAA - AAAAAAAAAAAAAHt7e0B8fHy/dXV1/2hoaP9gYGD/XFxc/1paWv9aWlr/Wlpa/1paWv9aWlr/Wlpa/1pa - Wv9aWlr/Wlpa/1paWv9aWlr/Wlpa/1paWv9aWlr/Wlpa/1paWv9eXl7/ZmZm/2lpab9ra2tAAAAAAAAA - AAAAAAAA8AAAP/AAAD/wAAAP8AAAD/AAAA/wAAAP8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AA - AAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AA - AAPwAAAD8AAAD/AAAA8oAAAAIAAAAEAAAAABAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/zMz - M/82Njb/ODg4/z57bv87fW//OH9v/zd/cP9DQ0P/SEhI/01NTf9MX1v/T15b/1FRUf9XV1f/VFlY/1dY - WP9TXFr/UF5b/1RcWv9YWln/Wlpa/1ldXP9aXFz/XFxc/11eXv9KYVz/TGBc/11lY/9UbWf/XWhm/1Jt - aP9HdWv/RnZs/1dzbf9Zcm3/THpw/0t8cf9gYGD/YGJi/2JiYv9hZGP/YWVk/2FmZP9kZGT/ZmZm/2Nq - af9ibmv/aGho/2pqav9pbGv/bGxs/25ubv9jcm//ZHNv/29xcf9tcnH/bnNy/2R6dv9ofHf/aHx4/2h/ - ev9sf3v/b357/3BwcP9ycnL/cXd2/3R0dP92dnb/cnl3/3N8ev90fHr/eHh4/3p6ev95fHv/en18/3x8 - fP9+fn7/NoBw/zuFdf88hHT/Q4Bz/0CCdP9Whnz/Uol9/2qAfP9sgHz/Skq5/0tLvP9PT77/UVG//1pa - uP9jY7T/Z2e1/2pqtv9mZrn/YWG+/2Rkv/9vb7n/bW28/3FxvP99fbj/SkrD/05Owv9RUcf/UlLI/25u - wf9pacr/dXXD/3l5xP9wcMr/cXHO/3p6yf87m4b/PpiE/zych/8crY7/HqyN/x2vj/8ero//K6SK/yym - i/8mqIv/IKuN/yepjP8hrY7/OLKX/zS2mf84spj/M7ud/zW6nf8wvp//Lr+g/1Sdjf9Ymov/WJqM/1if - kP9piIL/aoiB/2qMhf9To5H/V6CQ/1Kkkv8ewp//D8yj/wvOpP8OzaT/DM6k/w7OpP8Yx6H/EM2j/xbN - pv8Wzqb/Gcyl/wbXqv8P0qj/CNaq/wPZq/8E2Kv/Btiq/wDarP8R0aj/gICA/4KCgv+DhIT/hISE/4aG - hv+IiIj/ioqK/4yMjP+Ojo7/j4+Q/5CQkP+SkpL/lJSU/5aWl/+YmJj/mpqa/5ubnf+cnJ3/np6i/5yc - pP+Tk6//n5+p/4qKsf+Kirf/gYG5/5WVv/+amrr/nqKh/6Ghof+jpKT/pKSk/6ampv+lpan/pqau/6mp - qf+rq67/ra2t/6KisP+lpbL/qamz/66usv+mprn/pKS+/7CwsP+1tbX/srK4/7e3uv+xsb7/t7e+/7i4 - uP+9vb7/hobA/4ODxv+KisD/h4fP/5aWw/+amsH/nJzD/5iYxv+QkM3/mprM/6Kixf+oqMT/o6PJ/6Wl - y/+goM7/qqrN/7KywP+zs8X/u7vA/76+wf+6usX/vb3H/7e3yf+wsM3/u7vL/7+/yv++vs3/oKDQ/7Gx - 0P+/wMD/wMHB/8TExf/Bwcr/wMDN/8bGzf/Jycn/y8vN/83Nzf/BwdD/ycnQ/83N0P/Q0ND/AAAA/wBM - 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 - qv8K1qr/Ctaq/0mvmf9/fn//YmJi/4yMjP8AAAAAAAAAAAAAAABsbGz/UFBQ/4CNiv8J1qr/ANus/wDb - rP8A26z/ANus/wDbrP9EsZn/f35+/2JiYv+MjIz/AAAAAAAAAAAAAAAAbGxs/1BQUP+AjYr/Cdaq/wDb - rP8A26z/ANus/wDbrP8A26z/RLGZ/39+fv9iYmL/jIyM/wAAAAAAAAAAAAAAAGxsbP9QUFD/gI2K/wnW - qv8A26z/ANus/wDbrP8A26z/ANus/0Sxmf9/fn7/YmJi/4yMjP8AAAAAAAAAAAAAAABsbGz/UVFR/4GN - iv8S0qj/Cteq/wrXqv8K16r/Cteq/wrXqv9Jr5n/f35+/2JiYv+MjIz/AAAAAAAAAAAAAAAAc3Nz/2Vl - Zf9RUlL/SldU/0lXVP9JV1T/SVdU/0lXVP9JV1T/TlRT/1NTU/+Pj4//i4uL/wAAAAAAAAAAAAAAAHx8 - fP9iYmL/Wlpa/1paWv9aWlr/Wlpa/1paWv9aWlr/Wlpa/1paWv9bW1v/ampq/wAAAAAAAAAAwAcAAMAD - AADAAwAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAMAACgA - AAAQAAAAIAAAAAEACAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAcHBz/IyMj/yQkJP8lJSX/TU5O/09P - T/9KUU//RVNQ/0ZTUP9OVFP/SVdU/0pXVP9QUFD/UVFR/1FSUv9TU1P/Wlpa/1tbW/9iYmL/Y2Nj/2Vl - Zf9mZmb/aWlp/2pqav9sbGz/bm5u/3Nzc/90dHT/dnZ2/3h4eP95eXn/fHx8/39+fv8YGK//Nzes/0ND - uv94eL7/GBjS/zo6wv9CQtr/Sa+Z/0Sxmf8J1qr/Ctaq/wDbrP8S0qj/gYGB/4ODg/+AjYr/gY2K/4uL - i/+MjIz/jo6O/4+Pj/+QkJD/lpaW/4CAsv+goKX/rKys/62trf+2trb/t7e3/7i4uP+5ubn/u7u7/7i4 - vf+6ur//mJjH/5iYyf++vsP/vr7E/8PDw//Gxsb/x8fH/8PDzP/Nzc3/zs7P/8/Pz//GxtP/ysrS/8vL - 0//Q0ND/0dHR/9LS0f/T09P//////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VVUfFhYWFhYWFxYVNVVVVVVV - HlRTU009P1NLLjIvVVVVVR1RSFFSPjxKTD03G1VVVVUcNgE6UVNDIThBOT4yVVVVGQIAA0hSRCUkIiNF - MlVVVR07A0BRUlJOQiYnRjJVVVUdUkhRUlJSUlJPUEcyVVVVHktISEhISEhISElHMlVVVRoTBAgHBwcH - BwYFNDJVVVUYDTEtKysrKysoIBIzVVVVGAwwKiwsLCwsKSASM1VVVRgMMCosLCwsLCkgEjNVVVUYDDAq - LCwsLCwpIBIzVVVVGA0xLSsrKysrKCASM1VVVRoUDgsKCgoKCgkPNTJVVVUfEhAQEBAQEBAQERdVVcAH - AADAAwAAwAMAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMAD - AAA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/GB/GBPrinterView.Designer.cs b/BizHawk.Client.EmuHawk/tools/GB/GBPrinterView.Designer.cs index f285047c54..3f0c108852 100644 --- a/BizHawk.Client.EmuHawk/tools/GB/GBPrinterView.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/GB/GBPrinterView.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GBPrinterView)); this.paperView = new BmpView(); this.label1 = new System.Windows.Forms.Label(); this.paperScroll = new System.Windows.Forms.VScrollBar(); @@ -121,7 +120,7 @@ this.Controls.Add(this.label1); this.Controls.Add(this.paperScroll); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.gambatte_MultiSize; this.MainMenuStrip = this.menuStrip1; this.MaximizeBox = false; this.Name = "GBPrinterView"; diff --git a/BizHawk.Client.EmuHawk/tools/GB/GBPrinterView.resx b/BizHawk.Client.EmuHawk/tools/GB/GBPrinterView.resx index 5be3d7bf98..d5494e3059 100644 --- a/BizHawk.Client.EmuHawk/tools/GB/GBPrinterView.resx +++ b/BizHawk.Client.EmuHawk/tools/GB/GBPrinterView.resx @@ -120,161 +120,4 @@ 17, 17 - - - - AAABAAQAICAAAAEAIACoEAAARgAAACAgAAABAAgAqAgAAO4QAAAQEAAAAQAgAGgEAACWGQAAEBAAAAEA - CABoBQAA/h0AACgAAAAgAAAAQAAAAAEAIAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAB7e3tAfHx8v3d3d/9tbW3/aWlp/2lpaf9paWn/aWlp/2lpaf9paWn/aWlp/2lpaf9paWn/aWlp/2lp - af9paWn/aWlp/2lpaf9oaGj/ZmZm/3BwcP+EhIT/jo6Ov4+Pj0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAHt7e0B6enq/fX19/4GBgf+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4KCgv+BgYH/fn5+/3x8 - fP98fHz/fn5+/4GBgf+CgoL/goKC/3x8fP9ycnL/dXV1/4WFhf+MjIzPiIiIcISEhDB/f38QAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAd3d3QHl5eb+JiYn/qKio/7i4uP+3t7f/t7e3/7e3t/+3t7f/tra2/7Gx - sf+oqKj/o6Oj/6SkpP+pqan/s7Oz/7a2tv+0tLT/paWl/4iIiP9+fn7/h4eH/4mJie+FhYXPgoKCj4SE - hDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3dAeHh4v4+Pj/+7u7v/0dHR/8/Pz//Pz8//0NDQ/9HR - 0f/Q0ND/ycnJ/729vf+3t7f/uLi4/729vv/IyMr/zs7P/83Nzv+9vb3/np6e/46Ojv+NjY3/ioqK/4KC - gv9+fn6/f39/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHd3d0B4eHi/jo6O/7q6uv/Ozs7/ysrK/8rK - yv/Ozs7/0NDQ/9DQ0P/Kysr/vb29/7e3t/+3t7f/urq8/8LCx//IyM3/zMzO/8TExf+ysrL/o6Oj/5iY - mP+MjIz/fn5+/3Z2dr93d3dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3QHZ2dr+JiYn/ra2t/7e3 - t/+lpaX/p6en/7y8vP/Jycn/zs7O/8zMzP/Dw8L/urq9/7Kyu/+oqLz/nZ3C/6Cgxf+xscf/ubnD/7i4 - vP+vr7D/oKCh/5OTlP+JiYr/hYWFz4aGhnCKioowj4+PEAAAAAAAAAAAAAAAAAAAAAB3d3dAdXV1v4CA - gP+VlZX/ioqK/2BgYP9mZmb/mpqa/7u7u//Jycn/z8/O/8zMzP/AwMj/qqrE/4iIv/9ZWbn/Vla3/39/ - uP+cnLn/rq66/7GxtP+kpKf/n5+i/6Skpf+hoaHvkpKSz4uLi4+KioowAAAAAAAAAAAAAAAAAAAAAHNz - c0B0dHS/dHR0/3R0dP9gYGD/NjY2/zs7O/9wcHD/m5ub/7y8vP/Ozs7/0NDQ/8PDzv+mpsn/eHjD/zg4 - u/8xMbf/ZGS1/4SEtf+Rkbf/lJS1/4yMrf+UlK7/ra22/62trv+Wlpb/ioqKv4uLi0AAAAAAAAAAAAAA - AAAAAAAAb29vQHBwcL9jY2P/S0tL/zY2Nv8mJib/KCgo/zw8PP9nZ2f/qKio/8rKyv/Pz87/wsLO/6am - yv94eMj/ODjJ/zAwxf9hYb7/cXG4/19fsv9YWLH/WVmz/3Jyt/+jo73/sLCy/5eXmP+Kioq/i4uLQAAA - AAAAAAAAAAAAAAAAAABvb29AcHBwv2VlZf9QUFD/PDw8/ygoKP8pKSn/Pz8//2pqav+pqan/ysrK/87O - zv/Gxs//sLDM/42NzP9cXND/VFTN/3d3w/90dLv/S0u0/zo6tf9AQL3/YWHC/5+fwv+xsbX/l5eZ/4qK - ir+Li4tAAAAAAAAAAAAAAAAAAAAAAHNzc0B1dXW/enp6/4WFhf9wcHD/PDw8/z8/P/94eHj/o6Oj/7+/ - v//Ozs7/0NDQ/83N0P/Gxs//uLjP/6Sk0f+ens3/paXD/42Nvv9VVb3/OzvB/0BAzP9hYc7/n5/H/7Gx - tf+Xl5n/ioqKv4uLi0AAAAAAAAAAAAAAAAAAAAAAd3d3QHh4eL+Hh4f/pqam/5ubm/9nZ2f/ampq/6Oj - o//ExMT/zMzM/9DQ0P/Q0ND/0dHR/9HR0f/OztH/ysrS/8bGzv/Cwsf/p6fE/3Z2xf9fX8r/YmLT/3t7 - 0/+oqMj/srK1/5iYmf+Kioq/i4uLQAAAAAAAAAAAAAAAAAAAAAB3d3dAeHh4v4yMjP+0tLT/vb29/6io - qP+pqan/v7+//8zMzP/Pz8//0NDQ/9DQ0P/R0dH/0dHR/9DQ0f/OztH/zc3Q/8zMzf/Bwcz/r6/N/6am - z/+oqNP/r6/Q/7u7x/+0tLX/mJiZ/4qKir+Li4tAAAAAAAAAAAAAAAAAAAAAAHd3d0B4eHi/jo6O/7q6 - uv/Nzc3/yMjI/8fHx//Ly8v/zc3N/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/8zM - zv/Kys7/ycnP/8nJz//IyMz/xMTG/7W1tf+ZmZn/ioqKv4uLi0AAAAAAAAAAAAAAAAAAAAAAd3d3QHh4 - eL+Ojo7/uLi4/8zMzP/IyMj/xsbG/8fHx//IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jI - yP/IyMj/yMjI/8fHyP/Hx8n/x8fJ/8bGyP/ExMT/tbW1/5mZmf+Kioq/i4uLQAAAAAAAAAAAAAAAAAAA - AAB3d3dAdnZ2v4aGhv+jo6P/r6+v/6qqqv+nqKj/pqio/6WpqP+lqaj/pamo/6WpqP+lqaj/pamo/6Wp - qP+lqaj/pamo/6WpqP+mqaj/pqio/6eoqP+oqKj/rKys/7Kysv+rq6v/lZWV/4qKir+Li4tAAAAAAAAA - AAAAAAAAAAAAAHNzc0B0dHS/dnZ2/3t7e/94eXn/b3Bw/2lsbP9nbm3/ZW9t/2Vvbf9lb23/ZW9t/2Vv - bf9lb23/ZW9t/2Vvbf9lb23/ZW9t/2Zvbf9obmz/am1s/2xtbP94eHj/j4+P/5eXl/+Pj4//ioqKv4uL - i0AAAAAAAAAAAAAAAAAAAAAAb29vQHFxcb9sbGz/Y2Nj/11eXv9bXV3/UWNf/0FtY/84c2b/NnNm/zZz - Zv82c2b/NnNm/zZzZv82c2b/NnNm/zZzZv82c2b/O3Bl/0RrYv9OZV//Vl5c/2VkZf95eHn/hYWF/4mJ - if+Kioq/i4uLQAAAAAAAAAAAAAAAAAAAAABra2tAbW1tv2dnZ/9bW1v/XV9e/2xzcf9eioD/NKWM/x2z - kv8atJP/GLWT/xi1k/8YtZP/GLWT/xi1k/8YtZP/GLWT/xi1k/8krZD/PZ6J/1OOgf9oe3f/cXBx/25u - bv90dHT/hISE/4qKir+Li4tAAAAAAAAAAAAAAAAAAAAAAGtra0BsbGy/ZWVl/1dXV/9cX1//dH17/2Se - kf8swaD/DdSp/wnWqv8H16r/B9eq/wfXqv8H16r/B9eq/wfXqv8H16r/B9eq/xfNpv83uZ3/VaOS/3GK - hf93d3f/aWlp/2xsbP+BgYH/jIyMv4uLi0AAAAAAAAAAAAAAAAAAAAAAa2trQGxsbL9lZWX/V1dX/1xf - Xv90fXv/Y5+R/yjDof8J1qr/BNir/wLZq/8C2av/Atmr/wLZq/8C2av/Atmr/wLZq/8C2av/E8+m/zS6 - nf9To5L/cIqE/3d3d/9paWn/bGxs/4GBgf+MjIy/i4uLQAAAAAAAAAAAAAAAAAAAAABra2tAbGxsv2Vl - Zf9XV1f/XF9e/3R9e/9in5L/JsOi/wbXqv8C2av/ANus/wDbrP8A26z/ANus/wDbrP8A26z/ANus/wDb - rP8R0Kf/M7ud/1Kkkv9wioT/d3d3/2lpaf9sbGz/gYGB/4yMjL+Li4tAAAAAAAAAAAAAAAAAAAAAAGtr - a0BsbGy/ZWVl/1dXV/9cX17/dH17/2Kfkv8mw6L/Bteq/wLZq/8A26z/ANus/wDbrP8A26z/ANus/wDb - rP8A26z/ANus/xHQp/8zu53/UqSS/3CKhP93d3f/aWlp/2xsbP+BgYH/jIyMv4uLi0AAAAAAAAAAAAAA - AAAAAAAAa2trQGxsbL9lZWX/V1dX/1xfXv90fXv/Yp+S/ybDov8G16r/Atmr/wDbrP8A26z/ANus/wDb - rP8A26z/ANus/wDbrP8A26z/EdCn/zO7nf9SpJL/cIqE/3d3d/9paWn/bGxs/4GBgf+MjIy/i4uLQAAA - AAAAAAAAAAAAAAAAAABra2tAbGxsv2VlZf9XV1f/XF9e/3R9e/9in5L/JsOi/wbXqv8C2av/ANus/wDb - rP8A26z/ANus/wDbrP8A26z/ANus/wDbrP8R0Kf/M7ud/1Kkkv9wioT/d3d3/2lpaf9sbGz/gYGB/4yM - jL+Li4tAAAAAAAAAAAAAAAAAAAAAAGtra0BsbGy/ZWVl/1dXV/9cX17/dH17/2Ofkf8ow6H/Cdaq/wTY - q/8C2qv/Atqr/wLaq/8C2qv/Atqr/wLaq/8C2qv/Atqr/xPPpv80up3/U6OS/3CKhP93d3f/aWlp/2xs - bP+BgYH/jIyMv4uLi0AAAAAAAAAAAAAAAAAAAAAAa2trQGxsbL9lZWX/V1dX/1xfX/90fXv/ZJ6R/yzB - oP8N1Kn/Cdaq/wfYqv8H2Kr/B9iq/wfYqv8H2Kr/B9iq/wfYqv8H2Kr/F82m/ze5nf9Vo5L/cYqE/3d3 - d/9paWn/bGxs/4GBgf+MjIy/i4uLQAAAAAAAAAAAAAAAAAAAAABra2tAbW1tv2dnZ/9bW1v/XWBf/210 - cv9fi4H/NaaN/x60k/8btpT/GbeU/xm3lP8Zt5T/GbeU/xm3lP8Zt5T/GbeU/xm3lP8lr5H/Pp+K/1SP - gv9pfHj/cnFx/25ubv90dHT/hISE/4qKir+Li4tAAAAAAAAAAAAAAAAAAAAAAG9vb0BxcXG/bGxs/2Rk - ZP9fYGD/XWBg/1RmYv9EcGb/O3Zp/zl2af85d2n/OXdp/zl3af85d2n/OXdp/zl3af85d2n/OXdp/z5z - aP9HbWX/UWdi/1lhX/9nZ2f/enp6/4WFhf+JiYn/ioqKv4uLi0AAAAAAAAAAAAAAAAAAAAAAc3NzQHV1 - db9xcXH/aGho/2BgYP9XWFj/UVRU/09WVf9NV1X/TVdV/01XVf9NV1X/TVdV/01XVf9NV1X/TVdV/01X - Vf9NV1X/TldV/1BWVP9SVVT/VFVU/2FhYf95eXn/hoaG74iIiM+Li4uPioqKMAAAAAAAAAAAAAAAAAAA - AAB3d3dAeXl5v3R0dP9oaGj/YGBg/1paWv9XWFj/VlhY/1VZWP9VWVj/VVlY/1VZWP9VWVj/VVlY/1VZ - WP9VWVj/VVlY/1VZWP9WWVj/VlhY/1dYWP9YWFj/X19f/2xsbP91dXXPfX19cIqKijCPj48QAAAAAAAA - AAAAAAAAAAAAAHt7e0B8fHy/dXV1/2hoaP9gYGD/XFxc/1paWv9aWlr/Wlpa/1paWv9aWlr/Wlpa/1pa - Wv9aWlr/Wlpa/1paWv9aWlr/Wlpa/1paWv9aWlr/Wlpa/1paWv9eXl7/ZmZm/2lpab9ra2tAAAAAAAAA - AAAAAAAA8AAAP/AAAD/wAAAP8AAAD/AAAA/wAAAP8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AA - AAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AA - AAPwAAAD8AAAD/AAAA8oAAAAIAAAAEAAAAABAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/zMz - M/82Njb/ODg4/z57bv87fW//OH9v/zd/cP9DQ0P/SEhI/01NTf9MX1v/T15b/1FRUf9XV1f/VFlY/1dY - WP9TXFr/UF5b/1RcWv9YWln/Wlpa/1ldXP9aXFz/XFxc/11eXv9KYVz/TGBc/11lY/9UbWf/XWhm/1Jt - aP9HdWv/RnZs/1dzbf9Zcm3/THpw/0t8cf9gYGD/YGJi/2JiYv9hZGP/YWVk/2FmZP9kZGT/ZmZm/2Nq - af9ibmv/aGho/2pqav9pbGv/bGxs/25ubv9jcm//ZHNv/29xcf9tcnH/bnNy/2R6dv9ofHf/aHx4/2h/ - ev9sf3v/b357/3BwcP9ycnL/cXd2/3R0dP92dnb/cnl3/3N8ev90fHr/eHh4/3p6ev95fHv/en18/3x8 - fP9+fn7/NoBw/zuFdf88hHT/Q4Bz/0CCdP9Whnz/Uol9/2qAfP9sgHz/Skq5/0tLvP9PT77/UVG//1pa - uP9jY7T/Z2e1/2pqtv9mZrn/YWG+/2Rkv/9vb7n/bW28/3FxvP99fbj/SkrD/05Owv9RUcf/UlLI/25u - wf9pacr/dXXD/3l5xP9wcMr/cXHO/3p6yf87m4b/PpiE/zych/8crY7/HqyN/x2vj/8ero//K6SK/yym - i/8mqIv/IKuN/yepjP8hrY7/OLKX/zS2mf84spj/M7ud/zW6nf8wvp//Lr+g/1Sdjf9Ymov/WJqM/1if - kP9piIL/aoiB/2qMhf9To5H/V6CQ/1Kkkv8ewp//D8yj/wvOpP8OzaT/DM6k/w7OpP8Yx6H/EM2j/xbN - pv8Wzqb/Gcyl/wbXqv8P0qj/CNaq/wPZq/8E2Kv/Btiq/wDarP8R0aj/gICA/4KCgv+DhIT/hISE/4aG - hv+IiIj/ioqK/4yMjP+Ojo7/j4+Q/5CQkP+SkpL/lJSU/5aWl/+YmJj/mpqa/5ubnf+cnJ3/np6i/5yc - pP+Tk6//n5+p/4qKsf+Kirf/gYG5/5WVv/+amrr/nqKh/6Ghof+jpKT/pKSk/6ampv+lpan/pqau/6mp - qf+rq67/ra2t/6KisP+lpbL/qamz/66usv+mprn/pKS+/7CwsP+1tbX/srK4/7e3uv+xsb7/t7e+/7i4 - uP+9vb7/hobA/4ODxv+KisD/h4fP/5aWw/+amsH/nJzD/5iYxv+QkM3/mprM/6Kixf+oqMT/o6PJ/6Wl - y/+goM7/qqrN/7KywP+zs8X/u7vA/76+wf+6usX/vb3H/7e3yf+wsM3/u7vL/7+/yv++vs3/oKDQ/7Gx - 0P+/wMD/wMHB/8TExf/Bwcr/wMDN/8bGzf/Jycn/y8vN/83Nzf/BwdD/ycnQ/83N0P/Q0ND/AAAA/wBM - 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 - qv8K1qr/Ctaq/0mvmf9/fn//YmJi/4yMjP8AAAAAAAAAAAAAAABsbGz/UFBQ/4CNiv8J1qr/ANus/wDb - rP8A26z/ANus/wDbrP9EsZn/f35+/2JiYv+MjIz/AAAAAAAAAAAAAAAAbGxs/1BQUP+AjYr/Cdaq/wDb - rP8A26z/ANus/wDbrP8A26z/RLGZ/39+fv9iYmL/jIyM/wAAAAAAAAAAAAAAAGxsbP9QUFD/gI2K/wnW - qv8A26z/ANus/wDbrP8A26z/ANus/0Sxmf9/fn7/YmJi/4yMjP8AAAAAAAAAAAAAAABsbGz/UVFR/4GN - iv8S0qj/Cteq/wrXqv8K16r/Cteq/wrXqv9Jr5n/f35+/2JiYv+MjIz/AAAAAAAAAAAAAAAAc3Nz/2Vl - Zf9RUlL/SldU/0lXVP9JV1T/SVdU/0lXVP9JV1T/TlRT/1NTU/+Pj4//i4uL/wAAAAAAAAAAAAAAAHx8 - fP9iYmL/Wlpa/1paWv9aWlr/Wlpa/1paWv9aWlr/Wlpa/1paWv9bW1v/ampq/wAAAAAAAAAAwAcAAMAD - AADAAwAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAMAACgA - AAAQAAAAIAAAAAEACAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAcHBz/IyMj/yQkJP8lJSX/TU5O/09P - T/9KUU//RVNQ/0ZTUP9OVFP/SVdU/0pXVP9QUFD/UVFR/1FSUv9TU1P/Wlpa/1tbW/9iYmL/Y2Nj/2Vl - Zf9mZmb/aWlp/2pqav9sbGz/bm5u/3Nzc/90dHT/dnZ2/3h4eP95eXn/fHx8/39+fv8YGK//Nzes/0ND - uv94eL7/GBjS/zo6wv9CQtr/Sa+Z/0Sxmf8J1qr/Ctaq/wDbrP8S0qj/gYGB/4ODg/+AjYr/gY2K/4uL - i/+MjIz/jo6O/4+Pj/+QkJD/lpaW/4CAsv+goKX/rKys/62trf+2trb/t7e3/7i4uP+5ubn/u7u7/7i4 - vf+6ur//mJjH/5iYyf++vsP/vr7E/8PDw//Gxsb/x8fH/8PDzP/Nzc3/zs7P/8/Pz//GxtP/ysrS/8vL - 0//Q0ND/0dHR/9LS0f/T09P//////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VVUfFhYWFhYWFxYVNVVVVVVV - HlRTU009P1NLLjIvVVVVVR1RSFFSPjxKTD03G1VVVVUcNgE6UVNDIThBOT4yVVVVGQIAA0hSRCUkIiNF - MlVVVR07A0BRUlJOQiYnRjJVVVUdUkhRUlJSUlJPUEcyVVVVHktISEhISEhISElHMlVVVRoTBAgHBwcH - BwYFNDJVVVUYDTEtKysrKysoIBIzVVVVGAwwKiwsLCwsKSASM1VVVRgMMCosLCwsLCkgEjNVVVUYDDAq - LCwsLCwpIBIzVVVVGA0xLSsrKysrKCASM1VVVRoUDgsKCgoKCgkPNTJVVVUfEhAQEBAQEBAQERdVVcAH - AADAAwAAwAMAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMAD - AAA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/GBA/GBAGPUView.Designer.cs b/BizHawk.Client.EmuHawk/tools/GBA/GBAGPUView.Designer.cs index 307a53cf4a..d2b023eff2 100644 --- a/BizHawk.Client.EmuHawk/tools/GBA/GBAGPUView.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/GBA/GBAGPUView.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GBAGPUView)); this.listBoxWidgets = new System.Windows.Forms.ListBox(); this.panel1 = new System.Windows.Forms.Panel(); this.label1 = new System.Windows.Forms.Label(); @@ -175,7 +174,7 @@ this.Controls.Add(this.panel1); this.Controls.Add(this.listBoxWidgets); this.Controls.Add(this.menuStrip1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.gba_MultiSize.Value; this.KeyPreview = true; this.MainMenuStrip = this.menuStrip1; this.Name = "GBAGPUView"; diff --git a/BizHawk.Client.EmuHawk/tools/GBA/GBAGPUView.resx b/BizHawk.Client.EmuHawk/tools/GBA/GBAGPUView.resx index a05bb7c4be..b517a57083 100644 --- a/BizHawk.Client.EmuHawk/tools/GBA/GBAGPUView.resx +++ b/BizHawk.Client.EmuHawk/tools/GBA/GBAGPUView.resx @@ -126,5895 +126,4 @@ 63 - - - - AAABAAUAEBAAAAEAIABoBAAAVgAAACAgAAABACAAqBAAAL4EAAAwMAAAAQAgAKglAABmFQAAgIAAAAEA - IAAoCAEADjsAAAAAAAABACAAKCAEADZDAQAoAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAABDAAAAXwAAAG0AAABtAAAAXQAA - AEEAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAAAAfwAAANMKCgr9FhYW/hwcHP4eHh7+HBwc/hgY - GP4RERH+CQkJ/QAAANAAAAB8AAAAKAAAAAAAAACMAgIC/isrK/4mJib+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv0RERH9ExMT/gMDA/0AAABkAAAAxQICAv4wMDD+Jycn/nFtPf7Kvkz+yr5M/sq+ - TP7Kvkz+yr5M/sq+TP5oZDv+ExMT/h8fH/4ICAj+AAAAsAAAAMQHBwf+ISEh/gYGBv50aiT+0bgN/smx - DP61nwv+tqAL/rmjC/7RuA3+bGMl/hQUFP0QEBD8AAAA/gAAALkAAAC6VVVV/oSEhP4QEBD+aVMh/qd3 - Fv6Wj0P+j6RO/quHFf6Qly3+oIUP/mJPI/5CQkL8SEhI+nZ2dvsAAACxAAAAqQgICP4hISH+AAAA/l07 - Iv6SQQn+ik0h/ohXJf6QSA7+glUd/oZKDf5VNyH+AAAA/gAAAP4pKSn8AAAAmwICAnoAAAD+AAAA/gAA - AP4/JiP+XSEZ/l0hGf5dIRn+XSEZ/l0hGf5dIRn+PCck/gAfAP4AMAD+AAAA/gEBAXYUFBQqbGxs1lFR - Uf0LCwv+AAAA/goKCv4PDw/+JCQk/iQkJP4ODg7+DAwM/gMDA/4GBwb+W1xb/np6et8UFBQzAAAAAAAA - AAAFBQUTERERNgUFBXEGBgZ5AAAAeQAAAHkTExN5Dg4OeQcHB3kEBARyExMTPgoKChwAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//AAD//wAA//8AAPAPAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAD - AAD//wAA//8AAP//AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACQAAABAAAAAYAAAAGgAAABoAAAAYAAAADwAA - AAgAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAABEAAAAdQAAAJMAAACrAAAAuAAAAMEAAADEAAAAxAAA - AMEAAAC3AAAAqAAAAJAAAAByAAAAQQAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAIAAAAaAAAAPgAAAIYAAADMAAAA/QAAAP4DAwP+BwcH/gsLC/4NDQ3+Dg4O/g4O - Dv4NDQ3+CwsL/gkJCf4GBgb+AgIC/gAAAP4AAAD+AAAA/AAAAMgAAACAAAAAOgAAABcAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAMAAABAAAAAfAAAAMEAAADlAAAA/AAAAP4ODg7+HR0d/iUlJf4pKSn+LCws/i4u - Lv4vLy/+Ly8v/i4uLv4tLS3+Kioq/igoKP4lJSX+ICAg/hkZGf4LCwv+AAAA/gAAAPsAAADjAAAAvQAA - AHQAAAAsAAAAAAAAAAAAAAAhAAAAuQAAAP4AAAD+BwcH/hISEv4lJSX+EBAQ/jMzM/4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMvwHBwf9DQ0N/goK - Cv4GBgb+AAAA/gAAAPwAAAB6AAAACgAAAGEAAAD1AAAA/ggICP5NTU3+SUlJ/kdHR/4cHBz+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/RUV - Ff0eHh7+Hx8f/iAgIP4MDAz+AAAA/gAAANsAAAAzAAAAiwAAAP0AAAD+AQEB/h4eHv4lJSX+Pj4+/hwc - HP48PDX+johL/q2kU/6tpFP+raRT/q2kU/6tpFP+raRT/q2kU/6tpFP+raRT/q2kU/6tpFP+raRT/oaA - SP42NjP+ExMT/hwcHP4hISH+Hx8f/hAQEP4AAAD+AAAA9wAAAGAAAACRAAAA/gAAAP4HBwf+RkZG/jc3 - N/4uLi7+FxcX/kFANP67sEH+6NlF/ujZRf7o2UX+6NlF/ujZRf7o2UX+6NlF/ujZRf7o2UX+6NlF/ujZ - Rf7o2UX+rqM//jg4Mv4ODg7+ERER/hwcHP4hISH+ERER/gAAAP4AAAD7AAAAcQAAAI4AAAD9AAAA/gQE - BP4PDw/+AgIC/gAAAP4ODg7+QD8x/q+gHv7YxBX+2MQV/tjDFf7GsxT+t6YT/ralE/62pRP+t6YT/rGh - E/7KtxT+2MQV/tjEFf6jlR7+OTgy/ggICP4AAAD+AAAA/gAAAP4BAQH+AAAA/gAAAPwAAAB3AAAAiAAA - AP0AAAD+Gxsb/mdnZ/4MDAz+AAAA/gwMDP4/PS/+pY8S/sutBf7LrQX+y60F/r6hBP60mQT+tpsE/rWZ - BP63nAT+r5QE/rygBP7LrQX+y60F/pqGE/46OTP+CAgI/kBAQP0/Pz/7BAQE/AAAAP4AAAD+AAAA/AAA - AHcAAAB/AAAA/TU1Nf5mZmb+kJCQ/l9fX/4UFBT+CAgI/j87MP6ZdhH+uosF/q2EGP6rjyP+qpcn/rGW - HP6jnSj+to4K/rSUFf6qlxr+qZQU/qyQDf63jAb+j28T/js6Nf4iIiL9kpKS/ZGRkfsiIiL8UFBQ/Ts7 - O/oAAAD6AAAAbwAAAHQAAAD7RERE/nd3d/6bm5v+hoaG/iAgIP4EBAT+QDsy/o9iEf6scQX+iV45/oSA - Wf6AmGr+hax6/ma0ev6mdg3+n4cq/nGnW/5+jS7+gIUg/p92DP6GXRP+OTYz/gkJCf1OTk78TU1N+CAg - IPy6urr9lJSU+gAAAPgAAABkAAAAZAAAAPgAAAD+HBwc/mVlZf4MDAz+AAAA/gAAAP5AOjT+gkkR/pxP - Bf6RTRj+hWFC/olnN/6KdkX+e3tF/opiIf6ZVQ3+eXs//nRwKv51Zx3+h1gP/ntGE/42MzD+AAAA/gAA - AP4AAAD+AAAA/mFhYf1ERET3AAAA9AAAAFAAAABUAAAA9QAAAP4FBQX+EhIS/gICAv4AAAD+AAAA/j02 - Mv54NhH+jzUF/o81Bf6ONgf+jzYF/o82Bf6ONgX+jjYF/o81Bf6ONgb+jjYF/o42Bf6ONQX+cTQT/jMw - Lv4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAADqAAAAQAAAADsAAADjAAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+OTEw/mchFf54GQr+eBkK/ngZCv54GQr+eBkK/ngZCv54GQr+eBkK/ngZCv54GQr+eBkK/ngZ - Cv5hIRf+Lywr/gAAAP4AKQD+AD8A/gAEAP4AAAD+AAAA/gAAANkAAAAwAAAAGAsLC7QAAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4gHh7+Pisq/kMpKP5DKSj+Qyko/kMpKP5DKSj+Qyko/kMpKP5DKSj+Qyko/kMp - KP5DKSj+Qyko/j4tLP4lJCT+AAIA/gBSAP4AdwD+AAkA/gAAAP4AAAD+BAQEtgAAABkBAQEIS0tLiZmZ - mfxsbGz+LS0t/g0NDf4AAAD+AAAA/gAAAP4DAwP+ERER/hgYGP4eHh7+ICAg/ikpKf4sLCz+LCws/ioq - Kv4eHh7+HBwc/hoaGv4WFhb+DQ0N/gICAv4AAAD+AAEA/hIUEv46Ojr+eXl5/p+fn/1HR0edAQEBDgAA - AAAGBgYYQEBAkW5ubs+RkZH8e3t7/i0tLf4CAgL+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+GRkZ/iMj - I/4iIiL+Gxsb/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4bGxv+f39//qOjo/6BgYHgUVFRogoK - CiMAAAAAAAAAAAAAAAAAAAAAAAAAAAEBARITExM7MzMzYhEREXkAAAC+ERERzhQUFM4AAADOAAAAzgAA - AM4AAADOAAAAzg4ODs4uLi7OJiYmzgYGBs4BAQHOFhYWzg4ODs4AAAC/EBAQhj4+PnEkJCROBQUFJAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcFBQUkBQUFJQAA - ACUAAAAlAAAAJQAAACUAAAAlBAQEJQ8PDyUMDAwlAQEBJQAAACUGBgYlBAQEJAAAABcAAAACAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP/////////////////////////////////gB///AAD/4AAAB4AAAAMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAfAAAA//AAB///////// - ////////////////////////KAAAADAAAABgAAAAAQAgAAAAAACAJQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAFAAAAEAAAABcAAAAlAAAANwAAAEYAAABQAAAAUAAAAFEAAABQAAAARAAAADUAAAAhAAAAFgAA - AA4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - ABEAAABGAAAAdwAAAKQAAADHAAAA3gAAAO4AAAD8AAAA/QAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD6AAAA6wAAANwAAADCAAAAnwAAAHIAAABBAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAA - ADUAAAB+AAAAzwAAAP0AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA+wAAAMkAAAB2AAAALQAA - AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAA - ADQAAACDAAAAzwAAAPYAAAD+AAAA/gAAAP4AAAD+AQEB/gYGBv4QEBD+GRkZ/iAgIP4lJSX+KCgo/ioq - Kv4qKir+Kioq/igoKP4mJib+IiIi/h0dHf4ZGRn+ERER/goKCv4FBQX+AQEB/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA8wAAAMcAAAB5AAAALQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAA - AEwAAACIAAAAzwAAAPoAAAD+AAAA/gAAAP4AAAD+AAAA/g4ODv4nJyf+Li4u/jMzM/40NDT+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MzMz/jU1Nf4xMTH+Li4u/igo - KP4iIiL+CQkJ/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA9wAAAMYAAAB5AAAAJwAAAAAAAAAAAAAAAAAA - AAAAAAAxAAAA2gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gQEBP8AAAD+CwsL/jU1Nf4yMjL+MjIy/jMz - M/8yMjL+MjIy/jMzM/8yMjL+MjIy/jMzM/8yMjL+MjIy/jMzM/8yMjL+MjIy/jMzM/8yMjL+MjIy/jMz - M/8yMjL+MjIy/jIyMv4yMjL+MjIy+wEBAf4GBgb+BAQE/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA+wAA - AIEAAAAEAAAAAAAAAAUAAADDAAAA/gAAAP4AAAD+AAAA/g8PD/4mJib+QEBA/ouLi/4qKir+Hh4e/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MzMz/REREfwUFBT+IyMj/iIiIv4aGhr+Dw8P/gQE - BP4AAAD+AAAA/gAAAPkAAABUAAAAAAAAAC0AAAD0AAAA/gAAAP4AAAD+EhIS/mxsbP5kZGT+SkpK/klJ - Sf4RERH+Hx8f/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/hcXF/0WFhb+IiIi/h4e - Hv4kJCT+KSkp/hkZGf4AAAD+AAAA/gAAAP4AAAC9AAAAAAAAAE8AAAD9AAAA/gAAAP8AAAD+AQEB/g8P - D/8DAwP+CwsL/isrK/8ODg7+HR0d/jIyMv5KSDv+jIZQ/oyGUP+MhlD+jIZQ/oyGUP+MhlD+jIZQ/oyG - UP+MhlD+jIZQ/oyGUP+MhlD+jIZQ/oyGUP+MhlD+jIZQ/oyGUP+MhlD+jIZQ/oqET/48OzX+MjIy/hUV - Ff4QEBD+ISEh/iIiIv4eHh7+ICAg/hsbG/4AAAD+AAAA/gAAAP4AAADoAAAAFAAAAFsAAAD+AAAA/gAA - AP4AAAD+BgYG/jw8PP5XV1f+ZWVl/pmZmf45OTn+Gxsb/jIyMv5jYD/+7+FZ/u/hWf7v4Vn+7+FZ/u/h - Wf7v4Vn+7+FZ/u/hWf7v4Vn+7+FZ/u/hWf7v4Vn+7+FZ/u/hWf7v4Vn+7+FZ/u/hWf7v4Vn+7+FZ/unb - WP5HRTb+MjIy/hMTE/4UFBT+JCQk/iMjI/4iIiL+Hx8f/hUVFf4AAAD+AAAA/gAAAP4AAADzAAAAKAAA - AFsAAAD+AAAA/gAAAP4AAAD+DQ0N/lBQUP41NTX+Gxsb/g0NDf4CAgL+GRkZ/jIyMv5hXTj+5dU7/uXV - O/7l1Tv+5dU7/uXVO/7l1Tv+5dU7/uXVO/7l1Tv+5dU7/uXVO/7l1Tv+5dU7/uXVO/7l1Tv+5dU7/uXV - O/7l1Tv+5dU7/uDQO/5GRDP+MjIy/hEREf4DAwP+Dg4O/hgYGP4dHR3+JSUl/hwcHP4AAAD+AAAA/gAA - AP4AAAD3AAAAMgAAAFkAAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+FhYW/jIy - Mv5fWjH+3Mkd/tzJHf/cyR3+3Mkd/tzJHf/byB3+0L4c/sm4G//LuRv+xrUb/si3G//Muxv+xbQb/sOy - G//PvRz+3Mkd/tzJHf/cyR3+3Mkd/tbEHf5FQzD+MzMz/g4ODv4AAAD+AAAA/gAAAP4AAAD+AAAA/gQE - BP4AAAD+AAAA/gAAAP4AAAD6AAAANgAAAFIAAAD9AAAA/gAAAP4AAAD+FBQU/js7O/4SEhL+AAAA/gAA - AP4AAAD+FBQU/jIyMv5cVyv+0roH/tK6B/7Sugf+0roH/tK6B/7RuQb+mYcE/pGBBP6VhAT+lIME/o18 - BP6XhgT+l4YE/oV1A/6NfQT+w60G/tK6B/7Sugf+0roH/s22CP5DQS3+NTU1/gkJCf4AAAD+AgIC/gIC - Av4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD6AAAANgAAAEwAAAD8AAAA/gAAAP4AAAD+NDQ0/q6u - rv4wMDD+AAAA/gAAAP4AAAD+EhIS/jIyMv5aUiv+yKcF/sinBf7IpwX+yKcF/sinBf7IpwX+x6YF/sWk - Bf7IpwX+yKcF/sinBf7IpwX+yKcF/sWkBf7AoAT+xKQF/sinBf7IpwX+yKcF/sSkBv5CPy3+Nzc3/gQE - BP4WFhb+hYWF/YSEhPsVFRX5AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD6AAAANgAAAEUAAAD8AAAA/hQU - FP8xMTH+U1NT/qCgoP9PT0/+MjIy/hISEv8AAAD+Dw8P/jMzM/5XTSv+vpIF/r6SBv++kgX+vpIF/r6S - Bv++kgX+vpIF/r6SBv++kgX+vpIF/r6SBv++kgX+vpIF/r6SBv++kgX+vpIF/r6SBv++kgX+vpIF/rqQ - B/5BPS3+Ojo6/gAAAP52dnb9kpKS/pycnP5lZWX7AAAA/hkZGf4zMzP9BwcH+wAAAP4AAAD2AAAAMAAA - ADsAAAD6AAAA/kFBQf6urq7+np6e/q6urv6bm5v+rKys/jo6Ov4AAAD+CgoK/jU1Nf5VSCv+tH8F/rR/ - Bf6yfgf+el9b/oODZP6MllL+gah4/p+YP/6LrGD+Yrp1/qOLHP60fwX+mqdP/oqjSf56nz3+gpgt/oOS - Iv6UiBb+tH8F/rB8Bv5AOi3+ODg4/gAAAP5OTk790NDQ/MzMzPhISEj3ExMT/rS0tP2lpaX9d3d39AAA - AP4AAADyAAAAJwAAADAAAAD2AAAA/iMjI/5VVVX+aGho/qOjo/56enr+dXV1/isrK/4AAAD+BQUF/jc3 - N/5TQyv+qmsF/qprBf6oagj+eFBP/otxSv53k3L+gpNl/ne5of6HqnT+ULmH/qRwDf6qawX+mIg1/mqw - cf5knVH+jH0b/n2DIv58fh/+qmsF/qZpBv4/OC3+NTU1/gAAAP4CAgL+MzMz+zQ0NPcDAwP8LS0t/t3d - 3f2Ghob+pqam+wAAAP4AAADsAAAAGwAAACQAAADxAAAA/gAAAP8AAAD+NDQ0/qKiov8uLi7+AAAA/gAA - AP8AAAD+AQEB/jo6Ov5QPyv+oFYF/qBWBv+gVgX+h1Ax/nxsZf+Ed07+g3tQ/oOQaP+LkF3+Yppp/niA - Q/+gVgX+mWQY/mmibf9zfTf+X4w+/mh9K/9kcSb+kFsM/p1VB/4+Ni3+MzMz/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AQEB/oWFhf2tra39Q0ND8AAAAP4AAADlAAAADQAAABYAAADqAAAA/gAAAP4AAAD+GRkZ/kpK - Sv4WFhb+AAAA/gAAAP4AAAD+AAAA/jg4OP5OOiv+lkMF/pZDBf6WQwX+lkMF/pJEDv6VRAj+lUQH/pVF - CP6VQwb+lEUI/pNFCf6WQwX+lUMG/pNHC/6VQwb+kkUI/pREBv6URAb+lUMF/pNCBv49NC3+MTEx/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4CAgL+AAAA/gAAAP4AAADWAAAAAQAAAAcAAADhAAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/jY2Nv5LNSv+jC8F/owvBf6MLwX+jC8F/owv - Bf6MLwX+jC8F/owvBf6MLwX+jC8F/owvBf6MLwX+jC8F/owvBf6MLwX+jC8F/owvBf6MLwX+jC8F/okv - Bv48Mi3+Li4u/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAC4AAAAAAAA - AAAAAADGAAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/jQ0NP5JMCv+ghoF/oIa - Bv+CGgX+ghoF/oIaBv+CGgX+ghoF/oIaBv+CGgX+ghoF/oIaBv+CGgX+ghoF/oIaBv+CGgX+ghoF/oIa - Bv+CGgX+ghoF/n8bB/47Ly3+LCws/gAAAP4AAAD+ABYA/gAgAP4ABAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAACZAAAAAAAAAAAAAACIAAAA+QAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/i8v - L/5BLy7+ZRkV/mUZFf5lGRX+ZRkV/mUZFf5lGRX+ZRkV/mUZFf5lGRX+ZRkV/mUZFf5lGRX+ZRkV/mUZ - Ff5lGRX+ZRkV/mUZFf5lGRX+ZRkV/mMaFv43Ly/+KSkp/gAAAP4ABwD+AIsA/gDHAP4AIwD+AAAA/gAA - AP4AAAD+AAAA/gAAAPsAAACEAAAAAAAAAAACAgIsGRkZ4gICAv4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gwMDP4rKyv+NTU1/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv41NTX+GBgY/gAAAP4ABgD+AG8A/gCU - AP4AGQD+AAAA/gAAAP4AAAD+AQEB/gsLC+MAAAAxAAAAAAAAAAAGBgYkmZmZ7bGxsf5ycnL+MTEx/gUF - Bf4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+CAgI/hgYGP4gICD+Jycn/iwsLP4vLy/+Ly8v/i8v - L/4vLy/+Ly8v/i8vL/4vLy/+Ly8v/i4uLv4tLS3+Kioq/igoKP4lJSX+ISEh/hoaGv4KCgr+AAAA/gAA - AP4AAAD+AAQA/gAFAP4AAAD+ERER/kZGRv6BgYH+srKy/oeHh/gGBgY/AAAAAAAAAAAAAAABHBwcbYOD - g/i0tLT+uLi4/pqamv5UVFT+ERER/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4CAgL+AgIC/hkZGf4oKCj+KCgo/icnJ/4oKCj+HBwc/gEBAf4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/hwcHP5wcHD+r6+v/ry8vP6zs7P+kZGR/C4uLpIAAAAEAAAAAAAA - AAAAAAAAAAAAAA4ODkQoKCiPW1tbzYyMjPuxsbH+oKCg/l9fX/4NDQ3+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/hMTE/4hISH+ISEh/iAgIP4gICD+FhYW/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4EBAT+PDw8/pubm/6ysrL+pKSk/nV1dedGRkaoICAgXAAA - AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwFBQU8KSkpZ09PT4xJSUmkAgICvQAA - APgAAAD+Gxsb/h8fH/4CAgL+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gEBAf4rKyv+MTEx/jEx - Mf4TExP+AAAA/gAAAP4EBAT+IiIi/hgYGP4AAAD+AAAA+wAAAM9LS0u3ZmZmo0RERIMaGhpZAAAAJgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAABAAAADQAAABtFxcXbxkZGXACAgJvAAAAbwAAAHAAAABvAAAAbwAAAHAAAABvAAAAbwEB - AXAqKipvLy8vby8vL3ARERFvAAAAbwAAAHAEBARvHBwcbxMTE3AAAABrAAAAMwAAAAkAAAACAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//8AAP// - AAD/8AAAD/8AAP8AAAAA/wAA+AAAAAAfAADAAAAAAAcAAIAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAA - AAAAAQAAgAAAAAABAADgAAAAAAMAAPwAAAAAPwAA/+AAAAP/AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AACgA - AACAAAAAAAEAAAEAIAAAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAIAAAAbAAAANAAAADwAAABOAAAAWwAAAGkAAAB6AAAAgwAAAIMAAACDAAAAgwAAAIMAAACDAAAAgwAA - AIMAAACDAAAAgwAAAG8AAABmAAAAUgAAAEoAAAA0AAAAKwAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAA - AB0AAAA6AAAAXgAAAH0AAACcAAAAqQAAAL4AAADcAAAA9wAAAPwAAAD9AAAA/QAAAP0AAAD+AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP4AAAD9AAAA/QAA - AP0AAAD8AAAA+wAAAO0AAADOAAAAsQAAAKcAAACSAAAAcgAAAEwAAAAsAAAAFwAAAA0AAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAFAAAAIQAAAEAAAABnAAAAlgAAAL8AAADYAAAA8wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAADnAAAA0AAAALIAAACFAAAAWgAAADYAAAAYAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAADMAAABpAAAApAAAANEAAADqAAAA+QAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA9QAAAOYAAADGAAAAlgAAAFsAAAAnAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAtAAAAewAAAMIAAADzAAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAADqAAAAtgAAAGgAAAAiAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAA - ADkAAACCAAAAxAAAAPgAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAPAAAAC2AAAAaQAA - ACYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAAMAAAAIMAAADRAAAA9QAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD+AAAA7gAAALsAAABoAAAAGAAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAA7AAAAhgAAANUAAAD9AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+BAQE/ggICP4NDQ3+EhIS/hgYGP4fHx/+JCQk/ioq - Kv4qKir+Kioq/ioqKv4qKir+Kioq/ioqKv4qKir+Kioq/ikpKf4jIyP+ISEh/hkZGf4YGBj+ERER/gwM - DP4JCQn+BAQE/gQEBP4BAQH+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD6AAAAuwAAAGkAAAAnAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAA - AD4AAACNAAAA0QAAAPsAAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8FBQX/ERER/h4eHv8oKCj/MzMz/zo6 - Ov48PDz/PT09/z4+Pv8/Pz/+PDw8/zo6Ov84ODj/NTU1/jY2Nv82Njb/NjY2/zU1Nf42Njb/NjY2/zY2 - Nv81NTX+NjY2/zg4OP85OTn/PDw8/j09Pf9AQED/Pj4+/z09Pf48PDz/Ozs7/zs7O/82Njb+LS0t/ycn - J/8dHR3/ExMT/g0NDf8DAwP/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - APMAAAC+AAAAcgAAACoAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAHAAAAPAAAAI0AAADXAAAA9wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gEBAf8CAgL/BgYG/xQU - FP4pKSn/ODg4/z8/P/88PDz+ODg4/zY2Nv80NDT/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/41NTX/NjY2/zk5Of87Ozv+Pj4+/0BAQP89PT3/NDQ0/iws - LP8gICD/Dw8P/wICAv4BAQH/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA8AAAAMMAAAByAAAAHwAA - AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAB8AAABDAAAAlgAAAOIAAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/xEREf8vLy/+Pj4+/0ZGRv9FRUX/Pj4+/jQ0NP8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zg4OP9BQUH/RUVF/j09Pf83Nzf/NDQ0/y8v - L/4bGxv/BQUF/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD8AAAAwgAAAHEAAAAoAAAABgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAOgAA - AJQAAADQAAAA6wAAAPwAAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gQEBP4wMDD+QEBA/jU1Nf4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+NDQ0/jw8PP49PT3+FhYW/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAPIAAADAAAAAeQAAAB0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAAALIAAAD1AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+Ojo6/zk5Of8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8yMjL+MzMz/zQ0NP9AQED7EBAQ/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA5wAA - AGYAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMAAADfAAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/yUlJf46Ojr/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zQ0NPs8PDz2AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/QAAAJ0AAAAJAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAbAAAA1AAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4DAwP/HBwc/xcXF/8BAQH+AAAA/wAA - AP8EBAT/Pj4+/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/0JCQvQQEBD/AAAA/wAAAP8KCgr+LS0t/yMjI/8WFhb/BAQE/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAIgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AQEB/gYG - Bv4aGhr+MjIy/nV1df6RkZH+g4OD/jo6Ov4AAAD+AAAA/hcXF/47Ozv+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+NDQ0+y0t - LfsAAAD+AAAA/gUFBf4nJyf+MjIy/j4+Pv4/Pz/+MTEx/igoKP4TExP+BAQE/gEBAf4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA9AAAAEgAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAZAAAA9AAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gEBAf8MDAz/HBwc/zMzM/5MTEz/Y2Nj/2dnZ/9tbW3+vb29/6ioqP+ZmZn/YWFh/gMD - A/8AAAD/HBwc/zk5Of4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+OTk59QAAAP8AAAD/BQUF/hgYGP8ODg7/BQUF/xER - Ef4jIyP/LS0t/z8/P/9CQkL+OTk5/ygoKP8VFRX/CgoK/gEBAf8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAAyAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoAAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8VFRX+TExM/11dXf9paWn/bGxs/nFx - cf9wcHD/cXFx/3R0dP6kpKT/0tLS/7W1tf9ZWVn+AAAA/wAAAP8cHBz/OTk5/jMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIy - Mv48PDz4AAAA/wAAAP8NDQ3+Ozs7/z8/P/86Ojr/Kysr/iIiIv8TExP/BAQE/w4ODv4aGhr/LS0t/z09 - Pf9DQ0P+Pj4+/ygoKP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD7AAAASQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAsgAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/0FBQf51dXX/eHh4/3Fxcf90dHT+cXFx/2xsbP9kZGT/X19f/ktLS/9NTU3/Ojo6/wgI - CP4AAAD/AAAA/xwcHP85OTn+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/kFBQf0AAAD/AAAA/wAAAP4EBAT/BwcH/xcX - F/8pKSn+MzMz/z4+Pv8+Pj7/MDAw/icnJ/8TExP/BwcH/wgICP4WFhb/Hx8f/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAChAAAAAAAAAAAAAAAAAAAAAAAAAAcAAADdAAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+NTU1/nl5ef5ubm7+Z2dn/l9f - X/5JSUn+MDAw/hkZGf4EBAT+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+Ghoa/jo6Ov4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+QUFB/gAAAP4AAAD+Dg4O/j09Pf4yMjL+Hh4e/hMTE/4HBwf+AwMD/hUVFf4kJCT+Li4u/j09 - Pf4/Pz/+Nzc3/icnJ/4WFhb+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AOoAAAAFAAAAAAAAAAAAAAAAAAAAIQAAAOwAAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8JCQn+LCws/zExMf8ZGRn/CgoK/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8VFRX/Ozs7/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv48PDz/AAAA/wAAAP8DAwP+FRUV/yMj - I/81NTX/PT09/j4+Pv8xMTH/JSUl/xkZGf4EBAT/BAQE/xEREf8cHBz+Li4u/zU1Nf8CAgL/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAACcAAAAAAAAAAAAAAAAAAAA1AAAA9QAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gcHB/8hISH/ICAg/wYGBv4AAAD/AAAA/xQUFP87Ozv+MzMz/zMz - M/8zMzP/MjIy/lxaR/+hml7/oZpe/6GaXv6hml7/oZpe/6GaXv+hml7+oZpe/6GaXv+hml7/oZpe/qGa - Xv+hml7/oZpe/6GaXv6hml7/oZpe/6GaXv+hml7+oZpe/6GaXv+hml7/oZpe/qGaXv+hml7/oZpe/6Ga - Xv6hml7/oZpe/6GaXv+hml7+oZpe/6GaXv+hml7/oZpe/qGaXv+hml7/oZpe/6GaXv6hml7/oZpe/6Ga - Xv+hml7+oZpe/6GaXv+hml7/oZpe/qGaXv+hml7/oZpe/6GaXv6hml7/oZpe/5SOWP8yMjL+MzMz/zMz - M/8zMzP/MjIy/jo6Ov8AAAD/AAAA/wICAv4ODg7/BgYG/wICAv8EBAT+EBAQ/yQkJP8vLy//PDw8/kFB - Qf81NTX/LCws/xgYGP4ICAj/BAQE/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAAXQAAAAAAAAAAAAAAAAAAAEUAAAD8AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4HBwf/FRUV/ysrK/9DQ0P+dHR0/56e - nv+MjIz/U1NT/gQEBP8AAAD/Dw8P/z09Pf4zMzP/MzMz/zMzM/8yMjL+eHRO//Xoav/16Gr/9edq/vXo - av/16Gr/9ehq//Xnav716Gr/9ehq//Xoav/152r+9ehq//Xoav/16Gr/9edq/vXoav/16Gr/9ehq//Xn - av716Gr/9ehq//Xoav/152r+9ehq//Xoav/16Gr/9edq/vXoav/16Gr/9ehq//Xnav716Gr/9ehq//Xo - av/152r+9ehq//Xoav/16Gr/9edq/vXoav/16Gr/9ehq//Xnav716Gr/9ehq//Xoav/152r+9ehq//Xo - av/16Gr/9edq/vXoav/16Gr/3dJj/zIyMv4zMzP/MzMz/zMzM/8yMjL+ODg4/wAAAP8AAAD/DQ0N/kBA - QP8+Pj7/NTU1/yYmJv4YGBj/DAwM/wEBAf8AAAD+Dw8P/yAgIP8oKCj/Ojo6/kBAQP85OTn/AQEB/wAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAACBAAAAAAAAAAAAAAAAAAAASgAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AwMD/hcX - F/4uLi7+RUVF/ldXV/5kZGT+aWlp/m9vb/6mpqb+t7e3/pqamv52dnb+DQ0N/gAAAP4ODg7+PT09/jIy - Mv4yMjL+MjIy/jIyMv53c0r+8eNf/vHjX/7x417+8eNf/vHjX/7x41/+8eNe/vHjX/7x41/+8eNf/vHj - Xv7x41/+8eNf/vHjX/7x417+8eNf/vHjX/7x41/+8eNe/vHjX/7x41/+8eNf/vHjXv7x41/+8eNf/vHj - X/7x417+8eNf/vHjX/7x41/+8eNe/vHjX/7x41/+8eNf/vHjXv7x41/+8eNf/vHjX/7x417+8eNf/vHj - X/7x41/+8eNe/vHjX/7x41/+8eNf/vHjXv7x41/+8eNf/vHjX/7x417+8eNf/vHjX/7azln+MjIy/jIy - Mv4yMjL+MjIy/jIyMv42Njb+AAAA/gAAAP4AAAD+BgYG/hAQEP4eHh7+Li4u/jo6Ov5AQED+ODg4/igo - KP4fHx/+DAwM/gAAAP4CAgL+DAwM/hEREf4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAJ0AAAAAAAAAAAAAAAAAAABKAAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/xwcHP5dXV3/ZWVl/2xsbP90dHT+fX19/3l5ef9wcHD/eXl5/omJ - if/S0tL/t7e3/2pqav4EBAT/AAAA/wkJCf8+Pj7+MzMz/zMzM/8zMzP/MjIy/nZyR//u31T/7t9U/+7f - VP7u31T/7t9U/+7fVP/u31T+7t9U/+7fVP/u31T/7t9U/u7fVP/u31T/7t9U/+7fVP7u31T/7t9U/+7f - VP/u31T+7t9U/+7fVP/u31T/7t9U/u7fVP/u31T/7t9U/+7fVP7u31T/7t9U/+7fVP/u31T+7t9U/+7f - VP/u31T/7t9U/u7fVP/u31T/7t9U/+7fVP7u31T/7t9U/+7fVP/u31T+7t9U/+7fVP/u31T/7t9U/u7f - VP/u31T/7t9U/+7fVP7u31T/7t9U/9fKUP8yMjL+MzMz/zMzM/8zMzP/MjIy/jQ0NP8AAAD/AAAA/w8P - D/48PDz/MDAw/yEhIf8PDw/+CAgI/wkJCf8bGxv/LCws/jY2Nv9BQUH/Ojo6/zAwMP4iIiL/DAwM/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAAqwAAAAAAAAAAAAAAAAAA - AEoAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/QEBA/nV1 - df91dXX/d3d3/2tra/5zc3P/aGho/2BgYP9PT0/+Nzc3/zQ0NP8xMTH/DAwM/gAAAP8AAAD/BwcH/z8/ - P/4zMzP/MzMz/zMzM/8yMjL+dXBE/+rbSf/q20n/6tpJ/urbSf/q20n/6ttJ/+raSf7q20n/6ttJ/+rb - Sf/q2kn+6ttJ/+rbSf/q20n/6tpJ/urbSf/q20n/6ttJ/+raSf7q20n/6ttJ/+rbSf/q2kn+6ttJ/+rb - Sf/q20n/6tpJ/urbSf/q20n/6ttJ/+raSf7q20n/6ttJ/+rbSf/q2kn+6ttJ/+rbSf/q20n/6tpJ/urb - Sf/q20n/6ttJ/+raSf7q20n/6ttJ/+rbSf/q2kn+6ttJ/+rbSf/q20n/6tpJ/urbSf/q20n/1MZG/zIy - Mv4zMzP/MzMz/zMzM/8yMjL+MDAw/wAAAP8AAAD/AwMD/hoaGv8kJCT/NDQ0/z4+Pv48PDz/MzMz/yIi - Iv8WFhb+CAgI/wgICP8aGhr/JCQk/jMzM/87Ozv/AQEB/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAADBAAAAAAAAAAAAAAAAAAAASgAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8zMzP+cXFx/3V1df9nZ2f/UVFR/jc3N/8eHh7/DQ0N/wIC - Av4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8EBAT/Pz8//jMzM/8zMzP/MzMz/zIyMv50b0D/5tY9/+bW - Pf/m1j3+5tY9/+bWPf/m1j3/5tY9/ubWPf/m1j3/5tY9/+bWPf7m1j3/5tY9/+bWPf/m1j3+5tY9/+bW - Pf/m1j3/5tY9/ubWPf/m1j3/5tY9/+bWPf7m1j3/5tY9/+bWPf/m1j3+5tY9/+bWPf/m1j3/5tY9/ubW - Pf/m1j3/5tY9/+bWPf7m1j3/5tY9/+bWPf/m1j3+5tY9/+bWPf/m1j3/5tY9/ubWPf/m1j3/5tY9/+bW - Pf7m1j3/5tY9/+bWPf/m1j3+5tY9/+bWPf/Rwjz/MjIy/jMzM/8zMzP/MzMz/zIyMv4wMDD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/CAgI/hMTE/8gICD/MzMz/zw8PP5BQUH/MzMz/ycnJ/8cHBz+BwcH/wIC - Av8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAMEAAAAAAAAAAAAA - AAAAAABKAAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gQE - BP4bGxv+ICAg/gkJCf4BAQH+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP5BQUH+MjIy/jIyMv4yMjL+MjIy/nNtPP7j0TL+49Ey/uLRMv7j0TL+49Ey/uPRMv7i0TL+49Ey/uPR - Mv7j0TL+4tEy/uPRMv7j0TL+49Ey/uLRMv7j0TL+49Ey/uPRMv7i0TL+49Ey/uPRMv7j0TL+4tEy/uPR - Mv7j0TL+49Ey/uLRMv7j0TL+49Ey/uPRMv7i0TL+49Ey/uPRMv7j0TL+4tEy/uPRMv7j0TL+49Ey/uLR - Mv7j0TL+49Ey/uPRMv7i0TL+49Ey/uPRMv7j0TL+4tEy/uPRMv7j0TL+49Ey/uLRMv7j0TL+49Ey/s2+ - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/isrK/4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AgIC/gsLC/4hISH+LS0t/jg4OP5BQUH+ODg4/gICAv4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA1QAAAAAAAAAAAAAAAAAAAEoAAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/0BAQP4zMzP/MzMz/zMzM/8yMjL+cmw5/9/N - J//fzSf/380n/t/NJ//fzSf/380n/9/NJ/7fzSf/380n/9/NJ//fzSf+380n/9/NJ//fzSf/380n/t/N - J//fzSf/380n/9/NJ/7fzSf/380n/9/NJ//fzSf+380n/9/NJ//fzSf/380n/t/NJ//fzSf/380n/9/N - J/7fzSf/380n/9/NJ//fzSf+380n/9/NJ//fzSf/380n/t/NJ//fzSf/380n/9/NJ/7fzSf/380n/9/N - J//fzSf+380n/9/NJ//fzSf/380n/t/NJ//fzSf/yroo/zIyMv4zMzP/MzMz/zMzM/8yMjL+Kysr/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gwM - DP8UFBT/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAADcAAAAAAAA - AAAAAAAAAAAASgAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/Ozs7/jMzM/8zMzP/MzMz/zIyMv5xazb/3Mkc/9zJHP/cyRz+3Mkc/9zJHP/cyRz/3Mkc/tzJ - HP/cyRz/3Mkc/9zJHP7cyRz/3Mkc/9zJHP/cyRz+3Mkc/9zJHP/cyRz/3Mkc/tzJHP/cyRz/3Mkc/9zJ - HP7cyRz/3Mkc/9zJHP/cyRz+3Mkc/9zJHP/cyRz/3Mkc/tzJHP/cyRz/3Mkc/9zJHP7cyRz/3Mkc/9zJ - HP/cyRz+3Mkc/9zJHP/cyRz/3Mkc/tzJHP/cyRz/3Mkc/9zJHP7cyRz/3Mkc/9zJHP/cyRz+3Mkc/9zJ - HP/Htx//MjIy/jMzM/8zMzP/MzMz/zY2Nv4kJCT/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAANwAAAAAAAAAAAAAAAAAAAA8AAAA+AAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP86Ojr+MzMz/zMzM/8zMzP/MjIy/nBp - Mv/YxBD/2MQQ/9jEEP7YxBD/2MQQ/9jEEP/YxBD+2MQQ/9jEEP/YxBD/2MQQ/tjEEP/YxBD/2MQQ/9jE - EP7YxBD/y7kP/3RpCP/Ktw/+bmQI/66eDP+FeQn/dGkI/sKwDv99cgn/em8I/46BCf51agj/g3cI/6ub - DP91agj+yrcP/2ddB/+AdAn/iXwI/lFJBf+Mfwr/hXkI/2heB/7YxBD/2MQQ/9jEEP/YxBD+2MQQ/9jE - EP/YxBD/2MQQ/tjEEP/YxBD/2MQQ/9jEEP7YxBD/2MQQ/8SyFP8yMjL+MzMz/zMzM/8zMzP/ODg4/iAg - IP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA3AAA - AAAAAAAAAAAAAAAAADgAAAD2AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/jc3N/4yMjL+MjIy/jIyMv4yMjL+bmgv/tS+Bv7Uvgb+1L4G/tS+Bv7Uvgb+1L4G/tS+ - Bv7Uvgb+1L4G/tS+Bv7Uvgb+1L4G/tS+Bv7Uvgb+1L4G/tS+Bv7Hswb+al8D/n5xA/5sYQP+o5IF/oBz - A/5eVQL+nY4F/nhsA/5sYQP+vKkG/lRLAv54awP+YVcD/mpgAv6mlgX+V04C/nBkAv6unAX+WVAC/ndq - A/6kkwX+YFYC/q+dBf67qAb+1L4G/tS+Bv7Uvgb+1L4G/tS+Bv7Uvgb+1L4G/tS+Bv7Uvgb+1L4G/tS+ - Bv7Uvgb+wK0L/jIyMv4yMjL+MjIy/jIyMv45OTn+HR0d/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAADcAAAAAAAAAAAAAAAAAAAAOAAAAPYAAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wUFBf9hYWH+ampq/2pqav9qamr/ODg4/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/NjY2/jMzM/8zMzP/MzMz/zIy - Mv5tZi//0bgG/9G4Bv/RtwX+0bgG/9G4Bv/RuAb/0bcF/tG4Bv/RuAb/0bgG/9G3Bf7RuAb/0bgG/9G4 - Bv/RtwX+0bgG/8SsBf9MQwH/vqcE/ndpA/+gjQT/oo8D/5yJA/6PfgP/t6EE/2VYAf+ijgP+s50E/5KA - A/+lkQT/p5ME/paEA/+jkAT/vqcE/499A/5NQwH/uqQE/499A/+ahwT+VkwB/2teAv/KsgX/0bcF/tG4 - Bv/RuAb/0bgG/9G3Bf7RuAb/0bgG/9G4Bv/RtwX+0bgG/9G4Bv++pwv/MjIy/jMzM/8zMzP/MzMz/z09 - Pf4VFRX/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - ANwAAAAAAAAAAAAAAAAAAAA3AAAA9gAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/BgYG/4aGhv6ZmZn/m5ub/5mZmf9JSUn+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8zMzP+MzMz/zMzM/8zMzP/MjIy/mxjL//NsAb/zbAG/82wBf7NsAb/zbAG/82w - Bv/NsAX+zbAG/82wBv/NsAb/zbAF/s2wBv/NsAb/zbAG/82wBf7NsAb/yq4F/8KnBf/NsAX+uZ8F/8Oo - Bf+9owX/zbAF/s2wBv/NsAb/zK8F/82wBf7NsAb/zbAG/82wBv/NsAX+zbAG/82wBv/NsAb/zbAF/qiQ - BP/NsAb/zbAG/8uuBf6JdgL/kHsD/8ywBf/NsAX+zbAG/82wBv/NsAb/zbAF/s2wBv/NsAb/zbAG/82w - Bf7NsAb/zbAG/7qhC/8yMjL+MzMz/zMzM/8zMzP/Pj4+/hQUFP8AAAD/AAAA/wAAAP4AAAD/AAAA/xER - Ef8kJCT+JCQk/w0NDf8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA3AAAAAAAAAAAAAAAAAAAACkAAADvAAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8GBgb/hoaG/p2dnf/AwMD/paWl/0lJ - Sf4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/zAwMP4zMzP/MzMz/zMz - M/8yMjL+a2Ev/8mpBv/JqQb/yakF/smpBv/JqQb/yakG/8mpBf7JqQb/yakG/8mpBv/JqQX+yakG/8mp - Bv/JqQb/yakF/smpBv/JqQb/yakG/8mpBf7JqQb/yakG/8mpBv/JqQX+yakG/8mpBv/JqQb/yakF/smp - Bv/JqQb/yakG/8mpBf7JqQb/yakG/8mpBv/JqQX+yakG/8mpBv/JqQb/yakF/smpBv/JqQb/yakG/8mp - Bf7JqQb/yakG/8mpBv/JqQX+yakG/8mpBv/JqQb/yakF/smpBv/JqQb/t5oL/zIyMv4zMzP/MzMz/zMz - M/9CQkL+CwsL/wAAAP8AAAD/AAAA/gICAv89PT3+qamp/rq6uv65ubn/np6e+Tg4OPMBAQH+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAADcAAAAAAAAAAAAAAAAAAAAJQAAAO0AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gYGBv6Ghob+tbW1/svLy/64uLj+SUlJ/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+Ly8v/jIyMv4yMjL+MjIy/jIyMv5qXy/+xqEF/sahBf7GoQX+xqEF/sah - Bf7GoQX+xqEF/sahBf7GoQX+xqEF/sahBf7GoQX+xqEF/sahBf7GoQX+xqEF/sahBf7GoQX+xqEF/sah - Bf7GoQX+xqEF/sahBf7GoQX+xqEF/sahBf7GoQX+xqEF/sahBf7GoQX+xqEF/sahBf7GoQX+xqEF/sah - Bf7GoQX+xqEF/sahBf7GoQX+xqEF/sahBf7GoQX+xqEF/sahBf7GoQX+xqEF/sahBf7GoQX+xqEF/sah - Bf7GoQX+xqEF/sahBf60kwr+MjIy/jIyMv4yMjL+MjIy/kJCQv4KCgr+AAAA/gAAAP4AAAD+RkZG/s7O - zvzHx8f+tbW1/sfHx/7Ly8v+v7+/70NDQ+UAAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAANwAAAAAAAAAAAAAAAAAAAAlAAAA7gAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/BgYG/4aGhv6ZmZn/mZmZ/5mZ - mf9JSUn+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8rKyv+MzMz/zMz - M/8zMzP/MjIy/mlcL//BmQb/wZkG/8GZBf7BmQb/wZkG/8GZBv/BmQX+wZkG/8GZBv/BmQb/wZkF/sGZ - Bv/BmQb/wZkG/8GZBf7BmQb/wZkG/8GZBv/BmQX+wZkG/8GZBv/BmQb/wZkF/sGZBv/BmQb/wZkG/8GZ - Bf7BmQb/wZkG/8GZBv/BmQX+wZkG/8GZBv/BmQb/wZkF/sGZBv/BmQb/wZkG/8GZBf7BmQb/wZkG/8GZ - Bv/BmQX+wZkG/8GZBv/BmQb/wZkF/sGZBv/BmQb/wZkG/8GZBf7BmQb/wZkG/7CNC/8yMjL+MzMz/zMz - M/8zMzP/RkZG/gMDA/8AAAD/AAAA/wwMDP6+vr765OTk/oSEhP9vb2/+RUVF/8zMzP/MzMz/qqqq6AYG - Bv8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAAxwAAAAAAAAAAAAAAAAAAABsAAADpAAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/ERER/x0d - Hf8dHR3+HR0d/x0dHf8iIiL/h4eH/pmZmf+ZmZn/mZmZ/1VVVf4dHR3/HR0d/x0dHf8dHR3+HR0d/wQE - BP8AAAD/AAAA/gAAAP8AAAD/AAAA/ysrK/4zMzP/MzMz/zMzM/8yMjL+Z1ov/76SBv++kgb/vpIF/r6S - Bv++kgb/vpIG/76SBf6+kgb/vpIG/76SBv++kgX+vpIG/76SBv++kgb/vpIF/r6SBv++kgb/vpIG/76S - Bf6+kgb/vpIG/76SBv++kgX+vpIG/76SBv++kgb/vpIF/r6SBv++kgb/vpIG/76SBf6+kgb/vpIG/76S - Bv++kgX+vpIG/76SBv++kgb/vpIF/r6SBv++kgb/vpIG/76SBf6+kgb/vpIG/76SBv++kgX+vpIG/76S - Bv++kgb/vpIF/r6SBv++kgb/rYcL/zIyMv4zMzP/MzMz/zMzM/9ISEj+AAAA/wAAAP8AAAD/HBwc/ufn - 5/zn5+f/hYWF/09PT/5MTEz/zMzM/8zMzP/Dw8P9FxcX/wAAAP8AAAD/AAAA/gAAAP8AAAD/FBQU/xwc - HP4RERH/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAADBAAAAAAAAAAAAAAAAAAAAEgAA - AOUAAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP9GRkb/kpKS/5OTk/6hoaH/lpaW/5KSkv+cnJz+v7+//76+ - vv+cnJz/k5OT/pKSkv+srKz/p6en/5KSkv6Ghob/ERER/wAAAP8AAAD+AAAA/wAAAP8AAAD/ISEh/jc3 - N/8zMzP/MzMz/zIyMv5mWC//u4sG/7uLBv+7iwX+u4sG/7uLBv+7iwb/u4sF/ruLBv+7iwb/u4sG/7uL - Bf67iwb/u4sG/7uLBv+7iwX+u4sG/7uLBv+7iwb/u4sF/ruLBv+7iwb/u4sG/7uLBf67iwb/u4sG/7uL - Bv+7iwX+u4sG/7uLBv+7iwb/u4sF/ruLBv+7iwb/u4sG/7uLBf67iwb/u4sG/7uLBv+7iwX+u4sG/7uL - Bv+7iwb/u4sF/ruLBv+7iwb/u4sG/7uLBf67iwb/u4sG/7uLBv+7iwX+u4sG/7uLBv+qgAv/MjIy/jMz - M/8zMzP/MzMz/0VFRf4AAAD/AAAA/wAAAP8eHh7+6+vr/fDw8P+NjY3/e3t7/llZWf/MzMz/zMzM/8XF - xf4bGxv/AAAA/wAAAP8AAAD+BwcH/np6ev27u7v9vb29/Le3t/pvb2/hCAgI9AAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAALUAAAAAAAAAAAAAAAAAAAAPAAAA4wAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/khI - SP6fn5/+w8PD/svLy/6kpKT+mJiY/rGxsf7Dw8P+w8PD/q2trf6YmJj+mJiY/rq6uv7Ly8v+tbW1/ouL - i/4RERH+AAAA/gAAAP4AAAD+AAAA/gAAAP4gICD+Nzc3/jIyMv4yMjL+MjIy/mVVL/62gwX+toMF/raD - Bf62gwX+toMF/raDBf62gwX+toMF/raDBf6LaUT+bWJ5/oF3Zf6phB/+hZhc/pOURv6zhQz+kZtS/pGf - WP6Rolv+pZMv/raDBf6foUn+oqFG/oikR/5ysmL+d65a/o+eO/6uiRH+toMF/raDBf62gwX+toMF/raD - B/6hqU/+lqxW/o6rUv6Vnjn+s4UK/rKFCf5krFH+VbNZ/peSHv61gwX+toMF/nyaKP53lij+jowa/raD - Bf62gwX+toMF/raDBf62gwX+toMF/qZ5Cv4yMjL+MjIy/jIyMv4yMjL+QkJC/gAAAP4AAAD+AAAA/gsL - C/69vb35+vr6/s/Pz/6enp7+t7e3/s/Pz/7Q0ND+sbGx7wcHB/4AAAD+AAAA/gsLC/6ioqL819fX/cfH - x/7Ly8v+yMjI/snJyfySkpLZBQUF+wAAAP4AAAD+AAAA/gAAAP4AAAD+AAAApgAAAAAAAAAAAAAAAAAA - AAEAAADdAAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/SEhI/5mZmf+lpaX+v7+//6Ojo/+ZmZn/oKCg/qen - p/+np6f/n5+f/5iYmP6ZmZn/qqqq/6mpqf+bm5v+jIyM/xEREf8AAAD/AAAA/gAAAP8AAAD/AAAA/xoa - Gv47Ozv/MzMz/zMzM/8yMjL+ZFMv/7N7Bv+zewb/snsF/rN7Bv+zewb/s3sG/7J7Bf6zewb/oG4f/xsh - 3/9iWIT+bW+G/2WEqf9joZT/S7PK/quAFf9msqn/V8XT/2jAuP5+sYv/rIQZ/4+scP932sn+iaBO/xLw - 5P8d6NT/KODF/li9gv+zewb/s3sG/7J7Bf6zewb/snwI/43Ahv9r4sL+dLx//1vDif9zqVj/hJU0/inH - if9tn0L/Obpm/4OUKP6zewb/QqxJ/xGzYf9bkjP+snsG/7N7Bv+zewb/snsF/rN7Bv+zewb/o3IL/zIy - Mv4zMzP/MzMz/zMzM/9BQUH+AAAA/wAAAP8AAAD/AAAA/klJSf3s7Oz6+fn5/+/v7/7n5+f/5eXl/+Xl - 5ehLS0vmAAAA/wAAAP8AAAD/UlJS/ezs7P3Pz8//ampq/7q6uv5wcHD/urq6/8zMzPw+Pj7xAAAA/wAA - AP8AAAD/AAAA/gAAAP8AAACUAAAAAAAAAAAAAAAAAAAAAAAAANkAAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP9ISEj/mpqa/5qamv6bm5v/m5ub/5eXl/+IiIj+mJiY/5iYmP+ZmZn/hoaG/pqamv+ampr/mpqa/5qa - mv6MjIz/ERER/wAAAP8AAAD+AAAA/wAAAP8AAAD/FRUV/j09Pf8zMzP/MzMz/zIyMv5jUS//r3QG/690 - Bv+vdAX+r3QG/690Bv+vdAb/r3QF/q90Bv+GWT3/Miu7/6lyD/6EcVj/VYjQ/5WCQP9cqKn+fphr/3Om - i/9ssKH/kZRR/oOnef+BtI3/k59d/4a/lv6ngiD/Qsme/46ONP+nehD+b6Ve/690Bv+vdAb/r3QF/q90 - Bv+vdAb/qn0V/3fLnf6qexH/oIAa/0PFjv9Zql/+a51I/690Bv+dfhP/PrRZ/qR6DP+odwr/P59F/5J+ - Ff6vdAb/r3QG/690Bv+vdAX+r3QG/690Bv+gbAv/MjIy/jMzM/8zMzP/MzMz/z09Pf4AAAD/AAAA/wAA - AP8AAAD+AwMD/1RUVPzLy8v27Ozs6+3t7erS0tLfYWFh2wQEBPoAAAD/AAAA/wAAAP+Li4v+8/Pz/tjY - 2P9kZGT/WFhY/kNDQ//Ly8v/zMzM/3Fxcf0AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAIkAAAAAAAAAAAAA - AAAAAAAAAAAAwQAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/zc3N/98fHz/fHx8/nx8fP98fHz/e3t7/4aG - hv6ZmZn/mZmZ/5mZmf+Pj4/+urq6/7q6uv+6urr/ubm5/qOjo/8QEBD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8SEhL+Pj4+/zMzM/8zMzP/MjIy/mJPL/+rbQb/q20G/6ttBf6rbQb/q20G/6ttBv+rbQX+q20G/5Vf - I/82LbT/q20F/n9rX/9rfpj/lXtB/4CMXv5OuM7/YbCv/3Cok/+jdxz+bb6y/3DJvf92yrj/ibSG/pqT - Sf9drnX/MNa5/0TEmv6rbQb/q20G/6ttBv+rbQX+q20G/6ttBv+rbQb/d8KS/nW2e/9fuoD/Q8SQ/2Cf - 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 - AP8GBgb/g4OD/pSUlP+UlJT/lJSU/0hISP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP5ISEj/MzMz/zMzM/8yMjL+XUYv/51PBv+dTwb/nE8F/p1PBv+dTwb/nU8G/5xP - Bf6dTwb/nU8G/51PBv+ZTwv+gFVF/31iWP+LYzv/m1IM/pNaG/+KZzX/mVQQ/5xPBf6TYST/kWkv/5xP - Bv+cTwX+mVwY/5hfHP+SWxb/gW0w/nZ4Qf+OXxz/nU8G/5xPBf6dTwb/nU8G/51PBv+YWRP+iHM2/4Ny - M/+FaSf/mlEH/p1PBv+UVg3/em0k/39oHv6aUQj/jloP/3pmHP+RVgz+j1UN/35ZFP+YUAj/nE8F/p1P - Bv+dTwb/kEwL/zIyMv4zMzP/MzMz/zMzM/8yMjL+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8BAQH/GBgY/x0dHf4WFhb/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAAZAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gYGBv6AgID+lZWV/pWVlf6VlZX+RUVF/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/kRERP4yMjL+MjIy/jIy - Mv5cQy/+mEcF/phHBf6YRwX+mEcF/phHBf6YRwX+mEcF/phHBf6YRwX+mEcF/phHBf6YRwX+mEcF/phH - Bf6YRwX+mEcF/phHBf6YRwX+mEcF/phHBf6YRwX+mEcF/phHBf6YRwX+mEcF/phHBf6YRwX+mEcF/phH - Bf6YRwX+mEcF/phHBf6YRwX+mEcF/phHBf6YRwX+mEcF/phHBf6YRwX+mEcF/phHBf6YRwX+mEcF/phH - Bf6YRwX+mEcF/phHBf6YRwX+mEcF/phHBf6YRwX+mEcF/phHBf6MRAr+MjIy/jIyMv4yMjL+MzMz/jAw - MP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA+gAA - AAQAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD+QkJC/zMzM/8zMzP/MjIy/ltBL/+UPwb/lD8G/5Q/Bf6UPwb/lD8G/5Q/ - Bv+UPwX+lD8G/5Q/Bv+UPwb/lD8F/pQ/Bv+UPwb/lD8G/5Q/Bf6UPwb/lD8G/5Q/Bv+UPwX+lD8G/5Q/ - Bv+UPwb/lD8F/pQ/Bv+UPwb/lD8G/5Q/Bf6UPwb/lD8G/5Q/Bv+UPwX+lD8G/5Q/Bv+UPwb/lD8F/pQ/ - Bv+UPwb/lD8G/5Q/Bf6UPwb/lD8G/5Q/Bv+UPwX+lD8G/5Q/Bv+UPwb/lD8F/pQ/Bv+UPwb/lD8G/5Q/ - Bf6UPwb/lD8G/4g9C/8yMjL+MzMz/zMzM/82Njb/KSkp/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAADcAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAA7AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP5AQED/MzMz/zMz - M/8yMjL+Wj8v/5E4Bv+ROAb/kTgF/pE4Bv+ROAb/kTgG/5E4Bf6ROAb/kTgG/5E4Bv+ROAX+kTgG/5E4 - Bv+ROAb/kTgF/pE4Bv+ROAb/kTgG/5E4Bf6ROAb/kTgG/5E4Bv+ROAX+kTgG/5E4Bv+ROAb/kTgF/pE4 - Bv+ROAb/kTgG/5E4Bf6ROAb/kTgG/5E4Bv+ROAX+kTgG/5E4Bv+ROAb/kTgF/pE4Bv+ROAb/kTgG/5E4 - Bf6ROAb/kTgG/5E4Bv+ROAX+kTgG/5E4Bv+ROAb/kTgF/pE4Bv+ROAb/hTcL/zIyMv4zMzP/MzMz/zY2 - Nv8pKSn+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AL0AAAABAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/j09Pf8zMzP/MzMz/zIyMv5ZPC//jTEG/40xBv+NMQX+jTEG/40x - Bv+NMQb/jTEF/o0xBv+NMQb/jTEG/40xBf6NMQb/jTEG/40xBv+NMQX+jTEG/40xBv+NMQb/jTEF/o0x - Bv+NMQb/jTEG/40xBf6NMQb/jTEG/40xBv+NMQX+jTEG/40xBv+NMQb/jTEF/o0xBv+NMQb/jTEG/40x - Bf6NMQb/jTEG/40xBv+NMQX+jTEG/40xBv+NMQb/jTEF/o0xBv+NMQb/jTEG/40xBf6NMQb/jTEG/40x - Bv+NMQX+jTEG/40xBv+CMQv/MjIy/jMzM/8zMzP/OTk5/yEhIf4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAAnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA - APoAAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+PDw8/jIy - Mv4yMjL+MjIy/lc6L/6KKQX+iikF/okpBf6KKQX+iikF/oopBf6JKQX+iikF/oopBf6KKQX+iSkF/oop - Bf6KKQX+iikF/okpBf6KKQX+iikF/oopBf6JKQX+iikF/oopBf6KKQX+iSkF/oopBf6KKQX+iikF/okp - Bf6KKQX+iikF/oopBf6JKQX+iikF/oopBf6KKQX+iSkF/oopBf6KKQX+iikF/okpBf6KKQX+iikF/oop - Bf6JKQX+iikF/oopBf6KKQX+iSkF/oopBf6KKQX+iikF/okpBf6KKQX+iikF/n8qCv4yMjL+MjIy/jIy - Mv45OTn+ICAg/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAA2wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP43Nzf/MzMz/zMzM/8yMjL+Vjcv/4UhBv+FIQb/hSEF/oUh - Bv+FIQb/hSEG/4UhBf6FIQb/hSEG/4UhBv+FIQX+hSEG/4UhBv+FIQb/hSEF/oUhBv+FIQb/hSEG/4Uh - Bf6FIQb/hSEG/4UhBv+FIQX+hSEG/4UhBv+FIQb/hSEF/oUhBv+FIQb/hSEG/4UhBf6FIQb/hSEG/4Uh - Bv+FIQX+hSEG/4UhBv+FIQb/hSEF/oUhBv+FIQb/hSEG/4UhBf6FIQb/hSEG/4UhBv+FIQX+hSEG/4Uh - Bv+FIQb/hSEF/oUhBv+FIQb/eyML/zIyMv4zMzP/MzMz/zw8PP8ZGRn+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAEAAAC7AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/jc3 - N/8zMzP/MzMz/zIyMv5VNS//ghoG/4IaBv+CGgX+ghoG/4IaBv+CGgb/ghoF/oIaBv+CGgb/ghoG/4Ia - Bf6CGgb/ghoG/4IaBv+CGgX+ghoG/4IaBv+CGgb/ghoF/oIaBv+CGgb/ghoG/4IaBf6CGgb/ghoG/4Ia - Bv+CGgX+ghoG/4IaBv+CGgb/ghoF/oIaBv+CGgb/ghoG/4IaBf6CGgb/ghoG/4IaBv+CGgX+ghoG/4Ia - Bv+CGgb/ghoF/oIaBv+CGgb/ghoG/4IaBf6CGgb/ghoG/4IaBv+CGgX+ghoG/4IaBv94HAv/MjIy/jMz - M/8zMzP/PT09/xcXF/4AAAD/AAAA/wAAAP8AAAD+AAAA/wACAP8ACwD/ABEA/gASAP8AEwD/AAsA/wAB - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJcAAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+NDQ0/zMzM/8zMzP/MjIy/lQzL/9+Ewb/fhMG/34T - Bf5+Ewb/fhMG/34TBv9+EwX+fhMG/34TBv9+Ewb/fhMF/n4TBv9+Ewb/fhMG/34TBf5+Ewb/fhMG/34T - Bv9+EwX+fhMG/34TBv9+Ewb/fhMF/n4TBv9+Ewb/fhMG/34TBf5+Ewb/fhMG/34TBv9+EwX+fhMG/34T - Bv9+Ewb/fhMF/n4TBv9+Ewb/fhMG/34TBf5+Ewb/fhMG/34TBv9+EwX+fhMG/34TBv9+Ewb/fhMF/n4T - Bv9+Ewb/fhMG/34TBf5+Ewb/fhMG/3UWC/8yMjL+MzMz/zMzM/8+Pj7/FBQU/gAAAP8AAAD/AAAA/wAA - AP4AAQD/ABgA/wBFAP8AawD+AHkA/wByAP8ARwD/ABUA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAAoAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAXgAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP40NDT+MjIy/jIyMv4yMjL+UzEv/noLBf56CwX+egsF/noLBf56CwX+egsF/noLBf56CwX+egsF/noL - Bf56CwX+egsF/noLBf56CwX+egsF/noLBf56CwX+egsF/noLBf56CwX+egsF/noLBf56CwX+egsF/noL - Bf56CwX+egsF/noLBf56CwX+egsF/noLBf56CwX+egsF/noLBf56CwX+egsF/noLBf56CwX+egsF/noL - Bf56CwX+egsF/noLBf56CwX+egsF/noLBf56CwX+egsF/noLBf56CwX+egsF/noLBf56CwX+cg8K/jIy - Mv4yMjL+MjIy/j8/P/4PDw/+AAAA/gAAAP4AAAD+AAAA/gADAP4AMgD+AIEA/gDHAP4A4gD+ANQA/gCJ - AP4ALgD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAA6QAAAPoAAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/h8fH/89PT3/MzMz/zIyMv5EMzP/WSIi/1ki - Iv9ZIiL+WSIi/1kiIv9ZIiL/WSIi/lkiIv9ZIiL/WSIi/1kiIv5ZIiL/WSIi/1kiIv9ZIiL+WSIi/1ki - Iv9ZIiL/WSIi/lkiIv9ZIiL/WSIi/1kiIv5ZIiL/WSIi/1kiIv9ZIiL+WSIi/1kiIv9ZIiL/WSIi/lki - Iv9ZIiL/WSIi/1kiIv5ZIiL/WSIi/1kiIv9ZIiL+WSIi/1kiIv9ZIiL/WSIi/lkiIv9ZIiL/WSIi/1ki - Iv5ZIiL/WSIi/1kiIv9ZIiL+WSIi/1kiIv9UJCT/MjIy/jMzM/8zMzP/QEBA/w8PD/4AAAD/AAAA/wAA - AP8AAAD+AAQA/wA7AP8AnwD/AOIA/gD4AP8A9wD/AKYA/wA2AP4AAQD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAAKAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEAAAAvAAAAbQAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AgIC/zExMf87Ozv/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8+Pj7/BgYG/gAAAP8AAAD/AAAA/wAAAP4ABAD/ADsA/wCdAP8A2wD+AOoA/wDp - AP8AnAD/ADIA/gABAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAAoQAAAGgAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AgIC/yMjI/9DQ0P+Nzc3/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/PT09/yUlJf8AAAD+AAAA/wAA - AP8AAAD/AAAA/gADAP8AMgD/AH8A/wC4AP4AxAD/ALcA/wB1AP8AKAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAABYAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAoDY2NvZfX1/+MzMz/g4ODv4BAQH+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gYGBv4oKCj+Pj4+/jw8PP43Nzf+NDQ0/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4zMzP+Nzc3/kFBQf4mJib+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAEA/gAXAP4AQAD+AFwA/gBf - AP4AWQD+ADcA/gAQAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AQEB/gsL - C/4YGBj+Li4u/g8PD8IAAACIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTcXFx+8zM - zP/Ly8v+tra2/4ODg/9DQ0P/ExMT/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8CAgL/ExMT/yYmJv44ODj/PT09/z8/P/8+Pj7+OTk5/zQ0NP8zMzP/MjIy/jMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MjIy/jQ0NP82Njb/OTk5/zs7O/49PT3/PT09/zo6Ov8pKSn+DAwM/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAIA/wALAP8AEQD+ABEA/wAQAP8ACQD/AAEA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8LCwv+Kioq/1lZWf+Hh4f/rKys/sjIyP/MzMz/a2tr/wEBAaoAAAADAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoZGRnRwcHB/8vLy/7MzMz/zMzM/8rKyv+1tbX+i4uL/0VF - Rf8KCgr/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8FBQX/Dg4O/xcX - F/4iIiL/Li4u/zY2Nv88PDz+Pj4+/0FBQf9BQUH/QUFB/j09Pf89PT3/PT09/zw8PP49PT3/PT09/z09 - Pf88PDz+PT09/z09Pf89PT3/PDw8/j09Pf89PT3/PT09/zw8PP49PT3/PT09/z09Pf9AQED+QkJC/0RE - RP9HR0f/RkZG/kdHR/9CQkL/Pz8//z09Pf48PDz/ODg4/zQ0NP80NDT+MDAw/ykpKf8iIiL/Ghoa/hIS - Ev8JCQn/AQEB/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gcHB/8/Pz//fn5+/6ysrP7FxcX/zMzM/8zM - zP/Ly8v+zMzM/4qKiv8NDQ33AAAARgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AERhYWH7ycnJ/szMzP/MzMz/zMzM/8vLy/7MzMz/ysrK/7y8vP95eXn+Ly8v/wgICP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4BAQH/AgIC/wwM - DP8NDQ3+FxcX/xcXF/8XFxf/FxcX/hcXF/8XFxf/FxcX/xcXF/4XFxf/FxcX/xcXF/8XFxf+FxcX/xcX - F/8XFxf/FxcX/hcXF/8XFxf/FxcX/w4ODv4NDQ3/CAgI/wICAv8CAgL+AgIC/wICAv8BAQH/AQEB/gEB - Af8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/CAgI/zMz - M/+CgoL+u7u7/8rKyv/MzMz/y8vL/szMzP/MzMz/zMzM/8bGxv57e3v/UFBQ/wgICKoAAAACAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQcHB49fX1/9ra2t/svLy/7Ly8v+y8vL/svL - y/7Ly8v+y8vL/svLy/7Kysr+oaGh/lxcXP4bGxv+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AQEB/g0N - Df4SEhL+EhIS/hISEv4SEhL+EhIS/hISEv4SEhL+EhIS/hISEv4SEhL+EhIS/hISEv4QEBD+AgIC/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+EBAQ/lRUVP6fn5/+ysrK/svLy/7Ly8v+y8vL/svLy/7Ly8v+y8vL/svL - y/6zs7P+WVlZ/n9/f/48PDznAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAEAAAALUjIyP/RkZG/4CAgP+xsbH+zMzM/8zMzP/MzMz/y8vL/szMzP/MzMz/y8vL/7u7 - u/6BgYH/IyMj/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4KCgr/MTEx/z09Pf8+Pj7+Pz8//z09Pf85OTn/Pj4+/js7 - O/88PDz/PT09/0BAQP4/Pz//PT09/zc3N/8TExP+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/CgoK/11dXf+vr6/+ysrK/8zM - zP/MzMz/y8vL/szMzP/MzMz/zMzM/8XFxf6ZmZn/WFhY/11dXf+9vb3+TU1N7gEBAUcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwYGBo1UVFTxYWFh/1NT - U/5ISEj/T09P/11dXf9paWn+dHR0/39/f/+Ojo7/oqKi/rGxsf+0tLT/hoaG/y4uLv4EBAT/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gsL - C/8yMjL/SUlJ/z8/P/4+Pj7/Pj4+/zw8PP9ERET+Ojo6/0JCQv8/Pz//PDw8/kBAQP8+Pj7/OTk5/xYW - Fv4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/CQkJ/lBQUP+4uLj/y8vL/8jIyP6+vr7/tLS0/52dnf9+fn7+bGxs/1hYWP9TU1P/Xl5e/oiI - iP++vr7/p6en/iEhIc4AAAA7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAByGhoasExMTOWDg4P+rKys/8XFxf7Jycn/u7u7/6en - p/+Ojo7+enp6/29vb/9mZmb/Xl5e/jExMf8lJSX/AgIC/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AwMD/yAgIP8uLi7/Li4u/iwsLP8rKyv/Kysr/ysr - K/4rKyv/Kysr/ysrK/8rKyv+LCws/ysrK/8mJib/CQkJ/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/yMjI/94eHj+jY2N/29vb/9iYmL/YGBg/mZm - Zv92dnb/lZWV/7u7u/7X19f/39/f/8HBwf+JiYn+S0tL4hcXF60AAABmAAAAEAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAAFwAAADgFBQV1GRkZsTk5OeZvb2/+o6Oj/tvb2/79/f3+/v7+/v7+/v729vb+7e3t/uzs - 7P6urq7+KCgo/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gMDA/4DAwP+AwMD/gMDA/4DAwP+AwMD/gMDA/4DAwP+AwMD/gMDA/4DAwP+AwMD/gEB - Af4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/hAQ - EP42Njb+ZGRk/oeHh/6np6f+z8/P/uPj4/7w8PD+/Pz8/vz8/P7CwsL+f39//kZGRvQcHBy6BgYGeQAA - ADsAAAAWAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - ACEAAABTAAAAiRAQEL48PDzdZ2dn65WVlfq5ubn/1tbW/+Li4v/j4+P+f39//woKCv8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP9DQ0P+3Nzc//j4+P/t7e3/5OTk/tnZ2f+0tLT/iYmJ915e - XugzMzPXBAQEqAAAAHMAAAAxAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAQAAA - AF0BAQF/EhISmiAgIK8wMDDBExMTxgAAANcAAAD9AAAA/wAAAP8AAAD/AAAA/gAAAP8BAQH/FxcX/x0d - Hf4dHR3/GRkZ/wkJCf8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wMDA/8hISH+ISEh/yEh - If8hISH/ISEh/iEhIf8hISH/ISEh/xgYGP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAA - AP8RERH/HR0d/x0dHf4bGxv/Dg4O/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD6BgYG7E1N - TeZHR0fZOzs7zCUlJbUWFhaiAQEBfwAAAF0AAAA5AAAAHAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAIAAAAEAAA - AE8AAADBAAAA/QAAAP4AAAD+AAAA/xwcHP9jY2P/ZWVl/mZmZv9kZGT/RERE/wEBAf4AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/ERER/5OTk/6Tk5P/k5OT/5OTk/+Tk5P+k5OT/5OTk/+Tk5P/ZmZm/gAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+BwcH/15eXv9lZWX/ZWVl/mVlZf9cXFz/AwMD/wAA - AP4AAAD/AAAA/gAAAP0AAADeAAAAggAAADIAAAAZAAAAFwAAABAAAAAKAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA4AAAApAAAANUAAADWBgYG1jAw - MNYrKyvVKioq1ioqKtYZGRnWAAAA1QAAANYAAADWAAAA1gAAANUAAADWAAAA1gAAANYAAADVAAAA1gAA - ANYAAADWAAAA1QAAANYAAADWAAAA1gAAANUAAADWAAAA1gAAANYAAADVAAAA1gAAANYJCQnWTk5O1U9P - T9ZPT0/WT09P1k5OTtVPT0/WT09P1k9PT9YxMTHVAAAA1gAAANYAAADWAAAA1QAAANYAAADWAAAA1gAA - ANUCAgLWKSkp1iwsLNYqKirVKioq1iMjI9YAAADWAAAA1QAAANAAAACKAAAAOQAAAAIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////+AAAA///////////////4AAAAAAAf////////////AA - AAAAAAAP//////////8AAAAAAAAAAP/////////wAAAAAAAAAAAP////////gAAAAAAAAAAAA/////// - /AAAAAAAAAAAAAA//////+AAAAAAAAAAAAAAB/////8AAAAAAAAAAAAAAAD////4AAAAAAAAAAAAAAAA - H///gAAAAAAAAAAAAAAAAAP//AAAAAAAAAAAAAAAAAAA//gAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAA - AAAAAAAf4AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAHwAAAAAAA - AAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAA4AA - AAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAA - AAOAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAA - AAAAAAADgAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAADgAAAAAAA - AAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAA4AA - AAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAA - AAOAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAA - AAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA - AAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAB8AA - AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAA - AAfgAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAA - AAAAAAAf8AAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAAfwAAAAAAAAAAAAAAAAAAAP+AAAAAAA - AAAAAAAAAAAAD/gAAAAAAAAAAAAAAAAAAB/8AAAAAAAAAAAAAAAAAAA//gAAAAAAAAAAAAAAAAAAf/+A - AAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAH - ///////wAAAAAAAAAAAD/////////wAAAAAAAAAA//////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //8oAAAAAAEAAAACAAABACAAAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAwAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAA - ACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAASAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAvAAAAPgAAAGkAAABpAAAAaQAAAIcAAACcAAAAnQAA - AKcAAADFAAAA0gAAANIAAADWAAAA3QAAAN0AAADdAAAA3QAAAN0AAADdAAAA3QAAAN0AAADdAAAA3QAA - AN0AAADdAAAA3QAAAN0AAADdAAAA3QAAAN0AAADdAAAA3QAAAN0AAADdAAAA1wAAANMAAADSAAAAyQAA - AKsAAACdAAAAnQAAAI4AAABpAAAAaQAAAGkAAABFAAAANAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACQAAAA0AAAAUAAAAFgAAABwAAAApAAAATAAA - AFQAAABUAAAAbAAAAI8AAACuAAAAxwAAAOcAAAD4AAAA+QAAAPoAAAD7AAAA+wAAAPsAAAD8AAAA/QAA - AP0AAAD9AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD9AAAA/QAAAP0AAAD8AAAA+wAAAPsAAAD7AAAA+gAAAPoAAAD4AAAA7QAAAMkAAACrAAAAjwAA - AHQAAABUAAAAVAAAAE4AAAAvAAAAHgAAABgAAAAVAAAADgAAAAkAAAAFAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAgAAABEAAAAdAAAAJAAAADAAAABFAAAAYAAAAHsAAACWAAAAwQAAANAAAAD0AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAADWAAAAyAAAAJoAAAB/AAAAZAAAAEkAAAA0AAAAKAAA - AB8AAAAVAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEwAA - ACsAAABEAAAAVgAAAG8AAACPAAAAqwAAALoAAADUAAAA/QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA3AAA - AMMAAACtAAAAmAAAAHcAAABfAAAASAAAADAAAAAbAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAANwAAAE8AAABwAAAAjQAA - AKMAAAC8AAAA1wAAAOoAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA9AAAANwAAADCAAAArAAAAJkAAAB9AAAAXgAAAEQAAAAfAAAACgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAASQAAAG8AAACXAAAAuwAAANEAAADeAAAA7wAA - APwAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA9QAAAOUAAADYAAAAxAAA - AKwAAACAAAAAYQAAACsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEAAAAYAAAARwAAAIYAAADBAAAA2gAAAOgAAADwAAAA+AAAAP0AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD8AAAA8wAAAO0AAADiAAAA0wAAAJsAAABrAAAANAAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA - ABYAAAAxAAAAcAAAAJsAAADQAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADrAAAAwAAAAIsAAABUAAAAHQAA - ABAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAcAAAAQAAA - AG8AAAC1AAAA8AAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA+wAA - ANoAAACaAAAAVgAAADAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAJQAAAE0AAAB1AAAApgAA - AOYAAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAPgAAADNAAAAkwAAAF0AAAA1AAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAABVAAAAjAAAALgAAADeAAAA+AAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP0AAADtAAAAyAAAAJwAAABoAAAAMAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAARgAAAI8AAADAAAAA4QAAAPgAAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD8AAAA6gAAANAAAACjAAAAYAAA - AB0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAACAAAABQAAADEAAACPAAAA0QAAAOwAAAD3AAAA/gAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA+wAA - APAAAADeAAAApwAAAFgAAAAKAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAEAAAAB8AAAA8AAAAhAAAANUAAAD9AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8CAgL+BAQE/wQEBP8HBwf/CAgI/wgICP8MDAz/DQ0N/w0NDf4NDQ3/DQ0N/w0N - Df8NDQ3/DQ0N/w0NDf8NDQ3/DQ0N/g0NDf8NDQ3/DQ0N/w0NDf8NDQ3/DQ0N/w0NDf8NDQ3+DQ0N/wwM - DP8KCgr/CAgI/wgICP8ICAj/BQUF/wQEBP4EBAT/BAQE/wEBAf8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA7QAAAKAAAABUAAAAIgAAABIAAAAEAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AA8AAAAsAAAATAAAAJEAAADMAAAA8wAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gICAv4HBwf+CgoK/g8P - D/4TExP+GBgY/hwcHP4gICD+Jycn/i0tLf4uLi7+NjY2/jo6Ov46Ojr+RERE/kdHR/5HR0f+R0dH/kdH - R/5HR0f+R0dH/kdHR/5HR0f+R0dH/kdHR/5HR0f+R0dH/kdHR/5HR0f+R0dH/kdHR/5HR0f+R0dH/kdH - R/5GRkb+QEBA/jo6Ov46Ojr+Ojo6/jAwMP4tLS3+LS0t/i0tLf4jIyP+ICAg/hsbG/4YGBj+FBQU/hAQ - EP4LCwv+CAgI/ggICP4ICAj+BAQE/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA+gAAANcAAACZAAAAYwAAADYAAAAXAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAMAAA - AFsAAACNAAAAwAAAAPIAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8GBgb/DQ0N/xQUFP8hISH/JSUl/y8vL/8xMTH+NjY2/zk5 - Of8+Pj7/QUFB/0VFRf9JSUn/Tk5O/0pKSv5HR0f/RkZG/0JCQv9AQED/QEBA/zo6Ov85OTn/OTk5/jk5 - Of85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn+OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/zk5 - Of45OTn/OTk5/z09Pf9AQED/QEBA/0BAQP9FRUX/R0dH/kdHR/9HR0f/TExM/05OTv9JSUn/RUVF/0JC - Qv8+Pj7+OTk5/zc3N/82Njb/NjY2/zMzM/8wMDD/LCws/yMjI/4bGxv/FxcX/xISEv8MDAz/AQEB/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADRAAAAngAA - AGwAAAA9AAAAEgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIAAABbAAAAmQAA - AMQAAADoAAAA/AAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wMDA/8SEhL/HR0d/ycnJ/41NTX/Pz8//0BAQP9BQUH/Q0ND/0RERP9GRkb/RUVF/kJC - Qv8/Pz//PDw8/zo6Ov83Nzf/NTU1/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/NTU1/zc3 - N/86Ojr/PDw8/j8/P/9BQUH/QUFB/0FBQf9DQ0P/RkZG/0ZGRv9DQ0P+Q0ND/0JCQv9BQUH/QEBA/z4+ - Pv84ODj/LCws/yMjI/4fHx//FhYW/w8PD/8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAADyAAAAzwAAAKsAAAB0AAAANAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAVQAAAJsAAADMAAAA5QAA - APsAAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8KCgr/ISEh/zc3N/9HR0f/SEhI/0ZGRv9ERET+QEBA/z09Pf87Ozv/OTk5/zY2Nv81NTX/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/NTU1/jc3N/85OTn/Ojo6/zs7 - O/8+Pj7/QEBA/0JCQv9FRUX+RkZG/0hISP9JSUn/TExM/0NDQ/83Nzf/JiYm/xUVFf4JCQn/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA7gAAANYAAACzAAAAawAAACUAAAADAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAAAAFQAAAFMAAACdAAAA3wAAAPEAAAD6AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AgIC/wMDA/8EBAT/BQUF/wcHB/8TExP/Hx8f/zIy - Mv5KSkr/U1NT/0pKSv9BQUH/OTk5/zY2Nv81NTX/NDQ0/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/80NDT/NDQ0/jU1Nf82Njb/NjY2/zg4OP87Ozv/QEBA/0hISP9PT0/+VFRU/1ZW - Vv9HR0f/Ojo6/yIiIv8aGhr/BwcH/wQEBP4DAwP/AgIC/wEBAf8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/QAAAPQAAADrAAAAtgAAAGYAAAAXAAAACAAA - AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAACAAAAFAAAACoAAABYAAAAogAAAOsAAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wMDA/8NDQ3/Ghoa/jExMf9DQ0P/VFRU/1tbW/9aWlr/VFRU/05O - Tv9FRUX+Ojo6/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/80NDT/Ozs7/0FBQf9NTU3/UVFR/1paWv9SUlL+QEBA/zMzM/8oKCj/Hh4e/xQUFP8UFBT/ExMT/w8P - D/4JCQn/AgIC/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA9AAA - AKsAAABiAAAALgAAABcAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAALAAAAJwAAADoAAABCAAAAXAAAAJoAAADYAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AwMD/xUVFf8sLCz/RUVF/1BQUP5ISEj/Pz8//zg4OP8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/NjY2/j8/P/9FRUX/SkpK/05OTv9UVFT/VFRU/1FR - Uf9JSUn+Ozs7/ycnJ/8TExP/AQEB/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAN8AAACjAAAAZgAAADcAAAAXAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAA - ADYAAABmAAAAjgAAALcAAADTAAAA3gAAAPkAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/DAwM/y0tLf9GRkb/SkpK/zw8PP81NTX+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/80NDT/OTk5/kJCQv9JSUn/RUVF/ykpKf8LCwv/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP0AAADPAAAAoAAAAHIAAABFAAAAGAAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAARgAA - AJcAAADKAAAA7QAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+EhIS/j8/P/5ISEj+PT09/jMzM/4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MzMz/j8/P/5KSkr+PT09/hEREf4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAADzAAAA1QAAALQAAABmAAAADwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA5AAAApAAA - AOAAAAD3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+DQ0N/0ZGRv9HR0f/NjY2/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/ODg4/0lJSfk9PT35CwsL/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA6gAA - ALgAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAB8AAAA8gAA - APsAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AwMD/k5OTv9HR0f/NDQ0/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8yMjL+SUlJ/TIyMv4FBQX+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD9AAAA5AAAAHgAAAATAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAACTAAAA+AAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AQEB/zMzM/5PT0//MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zc3N/FPT0/1Ghoa/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD4AAAAoQAAACkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAAACaAAAA9QAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/xUVFf9NTU3+NjY2/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/Q0ND60RE - RPoAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAACuAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAACAAAAA7QAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8EBAT/BgYG/wUFBf8BAQH/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAf86Ojr/QkJC/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zU1 - Ne5XV1f0EBAQ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wgICP4gICD/ISEh/xMTE/8EBAT/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAKAAAAASAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAABXAAAA5QAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8NDQ3/Li4u/zk5Of81NTX/IiIi/wYG - Bv8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8RERH/RkZG/zk5Of4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/SUlJ8TIyMv8AAAD/AAAA/wAAAP8AAAD/AAAA/wICAv8hISH+QkJC/zIyMv82Njb/QEBA/zQ0 - NP8kJCT/EBAQ/wICAv4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAADyAAAAfwAAAAYAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAwQAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/w4ODv4sLCz/cHBw/4mJif98fHz/eXl5/2tr - a/88PDz/CQkJ/gAAAP8AAAD/AAAA/wAAAP8AAAD/Jycn/0VFRf81NTX+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zg4OPFRUVH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/FhYW/kRERP9UVFT/Tk5O/zw8 - PP8xMTH/MDAw/0JCQv9JSUn+Nzc3/x4eHv8HBwf/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/gAAANkAAABJAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAaQAA - APwAAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gEBAf4FBQX+CAgI/hISEv4oKCj+QUFB/lpaWv5jY2P+gYGB/rm5uf6oqKj+mJiY/piY - mP6Tk5P+d3d3/i0tLf4BAQH+AAAA/gAAAP4AAAD+AAAA/jg4OP5CQkL+MzMz/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4zMzP+U1NT8BISEv4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4CAgL+AwMD/hMT - E/4sLCz+R0dH/lNTU/5BQUH+MzMz/jExMf5BQUH+UlJS/klJSf4xMTH+HR0d/gwMDP4HBwf+BAQE/gEB - Af4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD9AAAAtgAA - ACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAA - ANcAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wEB - Af8ICAj/Dw8P/xYWFv4nJyf/Pj4+/1RUVP9jY2P/ZmZm/2ZmZv9oaGj/ampq/pmZmf/b29v/rKys/5mZ - mf+ZmZn/mJiY/4WFhf88PDz+BgYG/wAAAP8AAAD/AAAA/wAAAP85OTn/QUFB/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/kxMTOciIiL/AAAA/wAAAP8AAAD/AAAA/wAAAP8BAQH+BQUF/wMD - A/8AAAD/AAAA/wAAAP8EBAT/FxcX/y0tLf5CQkL/RERE/zg4OP85OTn/Q0ND/0xMTP9SUlL/QUFB/iws - LP8eHh7/FBQU/w0NDf8FBQX/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - APEAAAByAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AFUAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8HBwf/ExMT/yAg - IP8tLS3/PT09/0xMTP9dXV3+ZWVl/2ZmZv9oaGj/bW1t/2xsbP9nZ2f/dXV1/29vb/6bm5v/5+fn/76+ - vv+goKD/mpqa/5mZmf+Hh4f/Pz8//gYGBv8AAAD/AAAA/wAAAP8AAAD/OTk5/0FBQf8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv5GRkbxMDAw/wAAAP8AAAD/AAAA/wAAAP8AAAD/ExMT/i8v - L/8rKyv/IiIi/xkZGf8NDQ3/AwMD/wAAAP8AAAD+AAAA/wcHB/8aGhr/Kioq/zY2Nv84ODj/NTU1/0FB - Qf5MTEz/T09P/0hISP84ODj/LS0t/yUlJf8bGxv/Dw8P/gQEBP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAAwQAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAC0AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/w4ODv4uLi7/Pz8//01N - Tf9cXFz/ZmZm/2ZmZv9mZmb/ZWVl/mdnZ/9qamr/a2tr/3R0dP9xcXH/bGxs/3h4eP90dHT+kZGR/93d - 3f/c3Nz/ubm5/6urq/+np6f/jY2N/zo6Ov4CAgL/AAAA/wAAAP8AAAD/AAAA/zk5Of9BQUH/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+QUFB+DU1Nf8AAAD/AAAA/wAAAP8AAAD/AgIC/yYm - Jv5UVFT/R0dH/z8/P/8yMjL/NDQ0/zQ0NP8rKyv/HR0d/g0NDf8AAAD/AAAA/wAAAP8BAQH/CgoK/xcX - F/8jIyP+Li4u/zIyMv88PDz/TExM/1FRUf9MTEz/QUFB/zc3N/42Njb/LS0t/x0dHf8LCwv/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAPMAAABiAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAXAAAA4AAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wsLC/89PT3+YGBg/2Zm - Zv9mZmb/ZmZm/2dnZ/9xcXH/fHx8/2xsbP56enr/enp6/3Jycv9wcHD/dnZ2/3Jycv9ubm7/eHh4/nR0 - dP+vr6//39/f/9TU1P/Hx8f/vr6+/4CAgP8dHR3+AAAA/wAAAP8AAAD/AAAA/wAAAP85OTn/QUFB/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/js7O+xCQkL/AAAA/wAAAP8AAAD/AAAA/wAA - AP8NDQ3+JSUl/y8vL/8+Pj7/UFBQ/0ZGRv88PDz/NDQ0/zMzM/48PDz/QEBA/zAwMP8cHBz/CAgI/wAA - AP8AAAD/AAAA/gEBAf8KCgr/EhIS/xoaGv8kJCT/MzMz/0RERP9SUlL+T09P/0hISP9BQUH/Ojo6/wIC - Av8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAAqQAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAUwAAAO4AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8VFRX/XFxc/m5u - bv9oaGj/ampq/319ff9tbW3/bm5u/35+fv9tbW3+cnJy/4aGhv96enr/a2tr/2lpaf9oaGj/ZmZm/2ho - aP5mZmb/dXV1/5WVlf+Xl5f/hYWF/2NjY/8eHh7/AgIC/gAAAP8AAAD/AAAA/wAAAP8AAAD/OTk5/0FB - Qf8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv46Ojr6SEhI/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gICAv8GBgb/CwsL/xAQEP8kJCT/ODg4/0tLS/9QUFD+QEBA/zQ0NP8tLS3/OTk5/01N - Tf9HR0f/MjIy/xgYGP4DAwP/AAAA/wAAAP8AAAD/AgIC/wcHB/8LCwv/EhIS/iIiIv82Njb/SEhI/zQ0 - NP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAOsAAAAnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAJAAAAD4AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Hx8f/3Z2 - dv5/f3//gYGB/3V1df+EhIT/eXl5/3BwcP9xcXH/dnZ2/mdnZ/9mZmb/ZmZm/2ZmZv9jY2P/X19f/1tb - W/9TU1P+ODg4/xwcHP8HBwf/AQEB/wEBAf8BAQH/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/zk5 - Of9BQUH/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+Ojo6/0hISP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wEBAf4GBgb/BQUF/wEBAf8AAAD/AAAA/wAAAP8BAQH/CwsL/iEhIf83Nzf/TExM/0lJ - Sf83Nzf/MDAw/zIyMv9HR0f+VFRU/0VFRf8xMTH/Gxsb/w0NDf8ICAj/BAQE/wEBAf4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD+AAAAdQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAUAAAC1AAAA/QAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xkZ - Gf9gYGD+fX19/35+fv9wcHD/cXFx/3BwcP9nZ2f/a2tr/3Nzc/5nZ2f/XV1d/1VVVf9NTU3/PT09/ygo - KP8SEhL/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP85OTn/QUFB/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jo6Ov9ISEj/AAAA/wAA - AP8AAAD/AAAA/wAAAP8VFRX+NjY2/y0tLf8hISH/GRkZ/xAQEP8ICAj/AQEB/wAAAP4AAAD/AAAA/wEB - Af8NDQ3/ICAg/zU1Nf9DQ0P/PDw8/jMzM/82Njb/Pj4+/0xMTP9MTEz/Ozs7/ywsLP8gICD+FxcX/xAQ - EP8HBwf/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAL4AAAAEAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAaAAAAxgAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4PDw/+Tk5O/nJycv53d3f+dHR0/mVlZf5lZWX+YmJi/ldXV/5ISEj+Ojo6/igoKP4YGBj+BwcH/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+MjIy/kJCQv4zMzP+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv46Ojr+SEhI/gAA - AP4AAAD+AAAA/gAAAP4CAgL+IyMj/k1NTf5HR0f+S0tL/kNDQ/4zMzP+Ly8v/ioqKv4hISH+FRUV/ggI - CP4AAAD+AAAA/gAAAP4AAAD+AgIC/g8PD/4gICD+MTEx/jg4OP40NDT+NjY2/j8/P/5HR0f+SUlJ/kFB - Qf41NTX+Ly8v/iIiIv4BAQH+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAADvAAAAEQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAOgAAANUAAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AwMD/yAgIP5CQkL/U1NT/1lZWf9JSUn/ODg4/ykpKf8cHBz/Dg4O/gEBAf8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/yoqKv9CQkL/NDQ0/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+Pj4+/z09 - Pf8AAAD/AAAA/wAAAP8AAAD/AAAA/wwMDP4lJSX/LS0t/zIyMv87Ozv/SUlJ/0ZGRv9CQkL/Nzc3/jMz - M/83Nzf/Nzc3/yYmJv8VFRX/BAQE/wAAAP8AAAD+AAAA/wAAAP8EBAT/Dw8P/xwcHP8oKCj/LS0t/zMz - M/4+Pj7/SUlJ/0lJSf9ISEj/BgYG/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAADgAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEoAAADdAAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8CAgL+CwsL/xMTE/8WFhb/Dg4O/wYGBv8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8qKir/QkJC/zQ0NP4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/kBA - QP81NTX/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wQEBP8MDAz/FRUV/x4eHv8qKir/NjY2/0hI - SP5LS0v/Q0ND/zY2Nv8xMTH/ODg4/0VFRf89PT3/Jycn/hEREf8CAgL/AAAA/wAAAP8AAAD/AAAA/wUF - Bf8NDQ3+FRUV/x0dHf8oKCj/HR0d/wICAv8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAABnAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjAAAA6AAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wEBAf8FBQX/BQUF/wICAv8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/Kioq/0JCQv80NDT+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv43Nzf/RUVE/0tKSf9LSkn/S0pJ/0tKSf9LSkn/S0pJ/ktKSf9LSkn/S0pJ/0tKSf9LSkn/S0pJ/0tK - Sf9LSkn+S0pJ/0tKSf9LSkn/S0pJ/0tKSf9LSkn/S0pJ/0tKSf5LSkn/S0pJ/0tKSf9LSkn/S0pJ/0tK - Sf9LSkn/S0pJ/ktKSf9LSkn/S0pJ/0tKSf9LSkn/S0pJ/0tKSf9LSkn+S0pJ/0tKSf9LSkn/S0pJ/0tK - Sf9LSkn/S0pJ/0tKSf5LSkn/S0pJ/0tKSf9LSkn/S0pJ/0tKSf9LSkn/S0pJ/ktKSf9LSkn/S0pJ/0tK - Sf9LSkn/S0pJ/0tKSf9LSkn+S0pJ/0tKSf9LSkn/S0pJ/0tKSf9LSkn/S0pJ/0tKSf5LSkn/S0pJ/0tK - Sf9LSkn/S0pJ/0tKSf9LSkn/S0pJ/ktKSf9LSkn/S0pJ/0tKSf9LSkn/S0pJ/0tKSf9LSkn+S0pJ/0tK - Sf9LSkn/S0pJ/0tKSf9LSkn/S0pJ/0tKSf5LSkn/S0pJ/0tKSf9LSkn/S0pJ/0tKSf9LSkn/S0pJ/ktK - Sf9LSkn/S0pJ/0tKSf9LSkn/RUVD/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv5AQED/NTU1/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/BAQE/wcH - B/8LCwv+GBgY/ykpKf8/Pz//U1NT/05OTv86Ojr/LS0t/zAwMP5FRUX/UFBQ/0BAQP8nJyf/Dg4O/wEB - Af8AAAD/AAAA/gAAAP8AAAD/AwMD/wICAv8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAAowAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAO4AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8CAgL+BwcH/xUVFf81NTX/SUlJ/0ZGRv8zMzP/FhYW/wQE - BP4AAAD/AAAA/wAAAP8AAAD/AAAA/ykpKf9DQ0P/NDQ0/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+Pj4+/7auZP/463P/+Otz//jrc//463P/+Otz//jrc/7463P/+Otz//jrc//463P/+Otz//jr - c//463P/+Otz/vjrc//463P/+Otz//jrc//463P/+Otz//jrc//463P++Otz//jrc//463P/+Otz//jr - c//463P/+Otz//jrc/7463P/+Otz//jrc//463P/+Otz//jrc//463P/+Otz/vjrc//463P/+Otz//jr - c//463P/+Otz//jrc//463P++Otz//jrc//463P/+Otz//jrc//463P/+Otz//jrc/7463P/+Otz//jr - c//463P/+Otz//jrc//463P/+Otz/vjrc//463P/+Otz//jrc//463P/+Otz//jrc//463P++Otz//jr - c//463P/+Otz//jrc//463P/+Otz//jrc/7463P/+Otz//jrc//463P/+Otz//jrc//463P/+Otz/vjr - c//463P/+Otz//jrc//463P/+Otz//jrc//463P++Otz//jrc//463P/+Otz//jrc//463P/+Otz//jr - c/7463P/+Otz//jrc//463P/+Otz/8m/Y/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+QEBA/zU1Nf8AAAD/AAAA/wAAAP8AAAD/AAAA/wsLC/4gICD/GRkZ/w4ODv8KCgr/BQUF/wEB - Af8AAAD/AAAA/gAAAP8AAAD/AAAA/wEBAf8PDw//KCgo/0BAQP9TU1P+Pz8//zAwMP8wMDD/PT09/1FR - Uf9TU1P/PDw8/yYmJv4VFRX/DQ0N/wgICP8DAwP/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - ANQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIAAAD2AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8CAgL/CgoK/xMTE/8dHR3/Kysr/kJCQv92dnb/nZ2d/42Njf+EhIT/fn5+/1tb - W/8hISH+BAQE/wAAAP8AAAD/AAAA/wAAAP8hISH/RERE/zY2Nv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/j4+Pv+0rGD/9ult//bpbf/26W3/9ult//bpbf/26W3+9ult//bpbf/26W3/9ult//bp - bf/26W3/9ult//bpbf726W3/9ult//bpbf/26W3/9ult//bpbf/26W3/9ult/vbpbf/26W3/9ult//bp - bf/26W3/9ult//bpbf/26W3+9ult//bpbf/26W3/9ult//bpbf/26W3/9ult//bpbf726W3/9ult//bp - bf/26W3/9ult//bpbf/26W3/9ult/vbpbf/26W3/9ult//bpbf/26W3/9ult//bpbf/26W3+9ult//bp - bf/26W3/9ult//bpbf/26W3/9ult//bpbf726W3/9ult//bpbf/26W3/9ult//bpbf/26W3/9ult/vbp - bf/26W3/9ult//bpbf/26W3/9ult//bpbf/26W3+9ult//bpbf/26W3/9ult//bpbf/26W3/9ult//bp - bf726W3/9ult//bpbf/26W3/9ult//bpbf/26W3/9ult/vbpbf/26W3/9ult//bpbf/26W3/9ult//bp - bf/26W3+9ult//bpbf/26W3/9ult//bpbf/HvV//MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/kJCQv8yMjL/AAAA/wAAAP8AAAD/AAAA/wEBAf8jIyP+UlJS/05OTv9JSUn/ODg4/ysr - K/8gICD/GBgY/xAQEP4HBwf/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/hUVFf8qKir/Ozs7/z8/ - P/82Njb/MTEx/zw8PP9GRkb+T09P/0ZGRv80NDT/JSUl/wEBAf8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAADiAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVAAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+CAgI/xYWFv8jIyP/MTEx/0FBQf9RUVH/YWFh/2VlZf5zc3P/p6en/7Ozs/+dnZ3/mZmZ/5iY - mP+Hh4f/SkpK/g8PD/8AAAD/AAAA/wAAAP8AAAD/HBwc/0RERP82Njb+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4+Pj7/s6tc//TnZ//052f/9Odn//TnZ//052f/9OZn/vTnZ//052f/9Odn//Tn - Z//052f/9Odn//TnZ//05mf+9Odn//TnZ//052f/9Odn//TnZ//052f/9Odn//TmZ/7052f/9Odn//Tn - Z//052f/9Odn//TnZ//052f/9OZn/vTnZ//052f/9Odn//TnZ//052f/9Odn//TnZ//05mf+9Odn//Tn - Z//052f/9Odn//TnZ//052f/9Odn//TmZ/7052f/9Odn//TnZ//052f/9Odn//TnZ//052f/9OZn/vTn - Z//052f/9Odn//TnZ//052f/9Odn//TnZ//05mf+9Odn//TnZ//052f/9Odn//TnZ//052f/9Odn//Tm - Z/7052f/9Odn//TnZ//052f/9Odn//TnZ//052f/9OZn/vTnZ//052f/9Odn//TnZ//052f/9Odn//Tn - Z//05mf+9Odn//TnZ//052f/9Odn//TnZ//052f/9Odn//TmZ/7052f/9Odn//TnZ//052f/9Odn//Tn - Z//052f/9OZn/vTnZ//052f/9Odn//TnZ//052f/xrta/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv5GRkb/KCgo/wAAAP8AAAD/AAAA/wAAAP8AAAD/EBAQ/jAwMP8zMzP/ODg4/0JC - Qv9FRUX/RkZG/z4+Pv8zMzP+MDAw/yoqKv8fHx//EhIS/wUFBf8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8HBwf/FRUV/ycnJ/8yMjL/NTU1/jIyMv85OTn/RUVF/0ZGRv8EBAT/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA5wAAAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlQAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/BAQE/xQU - FP8jIyP/NTU1/kRERP9QUFD/XFxc/2RkZP9mZmb/aGho/21tbf9wcHD+goKC/8TExP+/v7//oaGh/5mZ - mf+ZmZn/j4+P/1xcXP4ZGRn/AQEB/wAAAP8AAAD/AAAA/xwcHP9ERET/NjY2/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+Pj4+/7KpWf/y5GL/8uRi//LkYv/y5GL/8uRi//LkYf7y5GL/8uRi//Lk - Yv/y5GL/8uRi//LkYv/y5GL/8uRh/vLkYv/y5GL/8uRi//LkYv/y5GL/8uRi//LkYv/y5GH+8uRi//Lk - Yv/y5GL/8uRi//LkYv/y5GL/8uRi//LkYf7y5GL/8uRi//LkYv/y5GL/8uRi//LkYv/y5GL/8uRh/vLk - Yv/y5GL/8uRi//LkYv/y5GL/8uRi//LkYv/y5GH+8uRi//LkYv/y5GL/8uRi//LkYv/y5GL/8uRi//Lk - Yf7y5GL/8uRi//LkYv/y5GL/8uRi//LkYv/y5GL/8uRh/vLkYv/y5GL/8uRi//LkYv/y5GL/8uRi//Lk - Yv/y5GH+8uRi//LkYv/y5GL/8uRi//LkYv/y5GL/8uRi//LkYf7y5GL/8uRi//LkYv/y5GL/8uRi//Lk - Yv/y5GL/8uRh/vLkYv/y5GL/8uRi//LkYv/y5GL/8uRi//LkYv/y5GH+8uRi//LkYv/y5GL/8uRi//Lk - Yv/y5GL/8uRi//LkYf7y5GL/8uRi//LkYv/y5GL/8uRi/8S6Vv8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+SEhI/yQkJP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4HBwf/ERER/xsb - G/8oKCj/Li4u/zY2Nv9BQUH/SEhI/kRERP8/Pz//NDQ0/zQ0NP86Ojr/MjIy/yQkJP8RERH+AgIC/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AQEB/wkJCf4UFBT/Hh4e/ygoKP8cHBz/AQEB/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAOsAAABDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJUAAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/g0NDf4jIyP+Ozs7/k5O - Tv5UVFT+W1tb/mJiYv5lZWX+ZWVl/mdnZ/5qamr+Z2dn/m9vb/52dnb+ampq/oODg/7Pz8/+0tLS/qys - rP6cnJz+mpqa/pCQkP5dXV3+GRkZ/gEBAf4AAAD+AAAA/gAAAP4cHBz+RERE/jY2Nv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/j4+Pv6xqFb+8eJc/vHiXP7x4lz+8eJc/vHiXP7w4lz+8eJc/vHi - XP7x4lz+8eJc/vHiXP7x4lz+8eJc/vDiXP7x4lz+8eJc/vHiXP7x4lz+8eJc/vHiXP7x4lz+8OJc/vHi - XP7x4lz+8eJc/vHiXP7x4lz+8eJc/vHiXP7w4lz+8eJc/vHiXP7x4lz+8eJc/vHiXP7x4lz+8eJc/vDi - XP7x4lz+8eJc/vHiXP7x4lz+8eJc/vHiXP7x4lz+8OJc/vHiXP7x4lz+8eJc/vHiXP7x4lz+8eJc/vHi - XP7w4lz+8eJc/vHiXP7x4lz+8eJc/vHiXP7x4lz+8eJc/vDiXP7x4lz+8eJc/vHiXP7x4lz+8eJc/vHi - XP7x4lz+8OJc/vHiXP7x4lz+8eJc/vHiXP7x4lz+8eJc/vHiXP7w4lz+8eJc/vHiXP7x4lz+8eJc/vHi - XP7x4lz+8eJc/vDiXP7x4lz+8eJc/vHiXP7x4lz+8eJc/vHiXP7x4lz+8OJc/vHiXP7x4lz+8eJc/vHi - XP7x4lz+8eJc/vHiXP7w4lz+8eJc/vHiXP7x4lz+8eJc/vHiXP7DuFL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/khISP4kJCT+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gcHB/4ODg7+FBQU/h4eHv4sLCz+Ojo6/kxMTP5MTEz+QEBA/jY2Nv4wMDD+PDw8/kVF - Rf43Nzf+JCQk/g4ODv4BAQH+AAAA/gAAAP4AAAD+AAAA/gAAAP4BAQH+AQEB/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAADvAAAAWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVAAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/FxcX/kpKSv9dXV3/YGBg/2Nj - Y/9mZmb/ZmZm/2tra/94eHj+hYWF/2tra/99fX3/fX19/2lpaf9nZ2f/hYWF/3l5ef58fHz/ubm5/+Pj - 4//Kysr/sLCw/6qqqv+ampr/VFRU/g8PD/8AAAD/AAAA/wAAAP8AAAD/GBgY/0RERP83Nzf+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4+Pj7/sKZS/+/gV//v4Ff/7+BX/+/gV//v4Ff/7+BX/u/g - V//v4Ff/7+BX/+/gV//v4Ff/7+BX/+/gV//v4Ff+7+BX/+/gV//v4Ff/7+BX/+/gV//v4Ff/7+BX/+/g - V/7v4Ff/7+BX/+/gV//v4Ff/7+BX/+/gV//v4Ff/7+BX/u/gV//v4Ff/7+BX/+/gV//v4Ff/7+BX/+/g - V//v4Ff+7+BX/+/gV//v4Ff/7+BX/+/gV//v4Ff/7+BX/+/gV/7v4Ff/7+BX/+/gV//v4Ff/7+BX/+/g - V//v4Ff/7+BX/u/gV//v4Ff/7+BX/+/gV//v4Ff/7+BX/+/gV//v4Ff+7+BX/+/gV//v4Ff/7+BX/+/g - V//v4Ff/7+BX/+/gV/7v4Ff/7+BX/+/gV//v4Ff/7+BX/+/gV//v4Ff/7+BX/u/gV//v4Ff/7+BX/+/g - V//v4Ff/7+BX/+/gV//v4Ff+7+BX/+/gV//v4Ff/7+BX/+/gV//v4Ff/7+BX/+/gV/7v4Ff/7+BX/+/g - V//v4Ff/7+BX/+/gV//v4Ff/7+BX/u/gV//v4Ff/7+BX/+/gV//v4Ff/wbZO/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv5ISEj/IyMj/wAAAP8AAAD/AAAA/wAAAP8AAAD/FBQU/kBA - QP84ODj/IiIi/w4ODv8DAwP/AgIC/wEBAf8BAQH+BAQE/wYGBv8LCwv/GRkZ/ywsLP9DQ0P/U1NT/0dH - R/42Njb/Li4u/zU1Nf9JSUn/Tk5O/zo6Ov8iIiL/DAwM/gMDA/8CAgL/AQEB/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA7wAAAF0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlQAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Dw8P/0tLS/5nZ2f/aGho/2dn - Z/9ra2v/dXV1/3BwcP90dHT/enp6/omJif97e3v/bGxs/39/f/9/f3//cnJy/3Jycv91dXX+Z2dn/4qK - iv/Gxsb/1dXV/8jIyP+9vb3/jIyM/zAwMP4EBAT/AAAA/wAAAP8AAAD/AAAA/w4ODv9GRkb/ODg4/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+Pj4+/6+mT//t3lH/7d5R/+3eUf/t3lH/7d5R/+3e - Uf7t3lH/7d5R/+3eUf/t3lH/7d5R/+3eUf/t3lH/7d5R/u3eUf/t3lH/7d5R/+3eUf/t3lH/7d5R/+3e - Uf/t3lH+7d5R/+3eUf/t3lH/7d5R/+3eUf/t3lH/7d5R/+3eUf7t3lH/7d5R/+3eUf/t3lH/7d5R/+3e - Uf/t3lH/7d5R/u3eUf/t3lH/7d5R/+3eUf/t3lH/7d5R/+3eUf/t3lH+7d5R/+3eUf/t3lH/7d5R/+3e - Uf/t3lH/7d5R/+3eUf7t3lH/7d5R/+3eUf/t3lH/7d5R/+3eUf/t3lH/7d5R/u3eUf/t3lH/7d5R/+3e - Uf/t3lH/7d5R/+3eUf/t3lH+7d5R/+3eUf/t3lH/7d5R/+3eUf/t3lH/7d5R/+3eUf7t3lH/7d5R/+3e - Uf/t3lH/7d5R/+3eUf/t3lH/7d5R/u3eUf/t3lH/7d5R/+3eUf/t3lH/7d5R/+3eUf/t3lH+7d5R/+3e - Uf/t3lH/7d5R/+3eUf/t3lH/7d5R/+3eUf7t3lH/7d5R/+3eUf/t3lH/7d5R/8C1Sv8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+SkpK/xwcHP8AAAD/AAAA/wAAAP8AAAD/AwMD/ygo - KP5ERET/NTU1/0NDQ/9QUFD/S0tL/zQ0NP8kJCT/FhYW/g4ODv8ICAj/AwMD/wAAAP8AAAD/AAAA/wMD - A/8VFRX+Li4u/0ZGRv9MTEz/Ozs7/zExMf8yMjL/Q0ND/1FRUf5MTEz/ODg4/yQkJP8ODg7/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAPIAAABvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AJUAAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xcXF/9hYWH+dHR0/3Fx - cf95eXn/bm5u/3x8fP9tbW3/aGho/3Nzc/6AgID/fX19/2dnZ/9ubm7/bW1t/2ZmZv9mZmb/ZGRk/llZ - Wf9TU1P/YmJi/25ubv9qamr/W1tb/y4uLv8FBQX+AAAA/wAAAP8AAAD/AAAA/wAAAP8ODg7/RkZG/zg4 - OP4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/j4+Pv+upEz/69xM/+vcTP/r3Ez/69xM/+vc - TP/r3Ez+69xM/+vcTP/r3Ez/69xM/+vcTP/r3Ez/69xM/+vcTP7r3Ez/69xM/+vcTP/r3Ez/69xM/+vc - TP/r3Ez/69xM/uvcTP/r3Ez/69xM/+vcTP/r3Ez/69xM/+vcTP/r3Ez+69xM/+vcTP/r3Ez/69xM/+vc - TP/r3Ez/69xM/+vcTP7r3Ez/69xM/+vcTP/r3Ez/69xM/+vcTP/r3Ez/69xM/uvcTP/r3Ez/69xM/+vc - TP/r3Ez/69xM/+vcTP/r3Ez+69xM/+vcTP/r3Ez/69xM/+vcTP/r3Ez/69xM/+vcTP7r3Ez/69xM/+vc - TP/r3Ez/69xM/+vcTP/r3Ez/69xM/uvcTP/r3Ez/69xM/+vcTP/r3Ez/69xM/+vcTP/r3Ez+69xM/+vc - TP/r3Ez/69xM/+vcTP/r3Ez/69xM/+vcTP7r3Ez/69xM/+vcTP/r3Ez/69xM/+vcTP/r3Ez/69xM/uvc - TP/r3Ez/69xM/+vcTP/r3Ez/69xM/+vcTP/r3Ez+69xM/+vcTP/r3Ez/69xM/+vcTP+/s0b/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/k9PT/8RERH/AAAA/wAAAP8AAAD/AAAA/wAA - AP8MDAz+LS0t/z4+Pv89PT3/MzMz/zQ0NP8+Pj7/R0dH/0tLS/4+Pj7/MDAw/ygoKP8eHh7/FRUV/wsL - C/8DAwP/AAAA/gAAAP8AAAD/BgYG/xgYGP8rKyv/Pz8//zw8PP80NDT+NTU1/z4+Pv9JSUn/TExM/wIC - Av8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD3AAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACVAAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8bGxv/bW1t/nd3 - d/96enr/hISE/2lpaf99fX3/eXl5/2lpaf9oaGj+a2tr/2ZmZv9mZmb/ZmZm/15eXv9QUFD/QUFB/zIy - Mv4hISH/EBAQ/wMDA/8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/Dg4O/0ZG - Rv84ODj+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4+Pj7/raNI/+raRv/q2kb/6tpG/+ra - Rv/q2kb/6dlG/uraRv/q2kb/6tpG/+raRv/q2kb/6tpG/+raRv/p2Ub+6tpG/+raRv/q2kb/6tpG/+ra - Rv/q2kb/6tpG/+nZRv7q2kb/6tpG/+raRv/q2kb/6tpG/+raRv/q2kb/6dlG/uraRv/q2kb/6tpG/+ra - Rv/q2kb/6tpG/+raRv/p2Ub+6tpG/+raRv/q2kb/6tpG/+raRv/q2kb/6tpG/+nZRv7q2kb/6tpG/+ra - Rv/q2kb/6tpG/+raRv/q2kb/6dlG/uraRv/q2kb/6tpG/+raRv/q2kb/6tpG/+raRv/p2Ub+6tpG/+ra - Rv/q2kb/6tpG/+raRv/q2kb/6tpG/+nZRv7q2kb/6tpG/+raRv/q2kb/6tpG/+raRv/q2kb/6dlG/ura - Rv/q2kb/6tpG/+raRv/q2kb/6tpG/+raRv/p2Ub+6tpG/+raRv/q2kb/6tpG/+raRv/q2kb/6tpG/+nZ - Rv7q2kb/6tpG/+raRv/q2kb/6tpG/+raRv/q2kb/6dlG/uraRv/q2kb/6tpG/+raRv/q2kb/vrFB/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv5PT0//ERER/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/CQkJ/xkZGf8qKir/NDQ0/zMzM/80NDT+Pj4+/0dHR/9GRkb/Q0ND/zc3 - N/8yMjL/MDAw/yYmJv4YGBj/CwsL/wICAv8AAAD/AAAA/wAAAP8KCgr/GRkZ/igoKP8yMjL/MDAw/ycn - J/8EBAT/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA9wAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAlQAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/FxcX/1xc - XP5ubm7/gYGB/3d3d/9+fn7/bm5u/2xsbP9mZmb/ZWVl/mVlZf9SUlL/QEBA/y4uLv8fHx//FRUV/wkJ - Cf8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/w4O - Dv9GRkb/ODg4/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+Pj4+/6uhRP/n10D/59dA/+fX - QP/n10D/59dA/+fXQP7n10D/59dA/+fXQP/n10D/59dA/+fXQP/n10D/59dA/ufXQP/n10D/59dA/+fX - QP/n10D/59dA/+fXQP/n10D+59dA/+fXQP/n10D/59dA/+fXQP/n10D/59dA/+fXQP7n10D/59dA/+fX - QP/n10D/59dA/+fXQP/n10D/59dA/ufXQP/n10D/59dA/+fXQP/n10D/59dA/+fXQP/n10D+59dA/+fX - QP/n10D/59dA/+fXQP/n10D/59dA/+fXQP7n10D/59dA/+fXQP/n10D/59dA/+fXQP/n10D/59dA/ufX - QP/n10D/59dA/+fXQP/n10D/59dA/+fXQP/n10D+59dA/+fXQP/n10D/59dA/+fXQP/n10D/59dA/+fX - QP7n10D/59dA/+fXQP/n10D/59dA/+fXQP/n10D/59dA/ufXQP/n10D/59dA/+fXQP/n10D/59dA/+fX - QP/n10D+59dA/+fXQP/n10D/59dA/+fXQP/n10D/59dA/+fXQP7n10D/59dA/+fXQP/n10D/59dA/7yw - Pf8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+T09P/xEREf8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wICAv8LCwv/FhYW/iEhIf8oKCj/MDAw/zo6 - Ov9JSUn/SkpK/0BAQP85OTn+MjIy/zk5Of85OTn/LCws/xoaGv8KCgr/AAAA/wAAAP4AAAD/AQEB/wgI - CP8BAQH/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAPcAAACMAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAJUAAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/w8P - D/9LS0v+Z2dn/25ubv9xcXH/bm5u/2ZmZv9fX1//SkpK/zAwMP4YGBj/EBAQ/wkJCf8CAgL/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8FBQX/RkZG/zk5Of4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/j4+Pv+qoEH/5tU6/+bV - Ov/m1Tr/5tU6/+bVOv/m1Tr+5tU6/+bVOv/m1Tr/5tU6/+bVOv/m1Tr/5tU6/+bVOv7m1Tr/5tU6/+bV - Ov/m1Tr/5tU6/+bVOv/m1Tr/5tU6/ubVOv/m1Tr/5tU6/+bVOv/m1Tr/5tU6/+bVOv/m1Tr+5tU6/+bV - Ov/m1Tr/5tU6/+bVOv/m1Tr/5tU6/+bVOv7m1Tr/5tU6/+bVOv/m1Tr/5tU6/+bVOv/m1Tr/5tU6/ubV - Ov/m1Tr/5tU6/+bVOv/m1Tr/5tU6/+bVOv/m1Tr+5tU6/+bVOv/m1Tr/5tU6/+bVOv/m1Tr/5tU6/+bV - Ov7m1Tr/5tU6/+bVOv/m1Tr/5tU6/+bVOv/m1Tr/5tU6/ubVOv/m1Tr/5tU6/+bVOv/m1Tr/5tU6/+bV - Ov/m1Tr+5tU6/+bVOv/m1Tr/5tU6/+bVOv/m1Tr/5tU6/+bVOv7m1Tr/5tU6/+bVOv/m1Tr/5tU6/+bV - Ov/m1Tr/5tU6/ubVOv/m1Tr/5tU6/+bVOv/m1Tr/5tU6/+bVOv/m1Tr+5tU6/+bVOv/m1Tr/5tU6/+bV - Ov+7rjn/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/k9PT/8RERH/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AwMD/wkJ - Cf8PDw//FhYW/yMjI/8zMzP/RkZG/lVVVf9ERET/ODg4/zIyMv83Nzf/RERE/0RERP8tLS3+GRkZ/wUF - Bf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD3AAAAjAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAACVAAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8BAQH/ERER/iwsLP9DQ0P/TU1N/zU1Nf8cHBz/CgoK/wUFBf8CAgL+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/0hISP86Ojr+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4+Pj7/qZ49/+TT - Nf/k0zX/5NM1/+TTNf/k0zX/49I1/uTTNf/k0zX/5NM1/+TTNf/k0zX/5NM1/+TTNf/j0jX+5NM1/+TT - Nf/k0zX/5NM1/+TTNf/k0zX/5NM1/+PSNf7k0zX/5NM1/+TTNf/k0zX/5NM1/+TTNf/k0zX/49I1/uTT - Nf/k0zX/5NM1/+TTNf/k0zX/5NM1/+TTNf/j0jX+5NM1/+TTNf/k0zX/5NM1/+TTNf/k0zX/5NM1/+PS - Nf7k0zX/5NM1/+TTNf/k0zX/5NM1/+TTNf/k0zX/49I1/uTTNf/k0zX/5NM1/+TTNf/k0zX/5NM1/+TT - Nf/j0jX+5NM1/+TTNf/k0zX/5NM1/+TTNf/k0zX/5NM1/+PSNf7k0zX/5NM1/+TTNf/k0zX/5NM1/+TT - Nf/k0zX/49I1/uTTNf/k0zX/5NM1/+TTNf/k0zX/5NM1/+TTNf/j0jX+5NM1/+TTNf/k0zX/5NM1/+TT - Nf/k0zX/5NM1/+PSNf7k0zX/5NM1/+TTNf/k0zX/5NM1/+TTNf/k0zX/49I1/uTTNf/k0zX/5NM1/+TT - Nf/k0zX/uaw0/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv5UVFT/BQUF/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8BAQH/BAQE/wYGBv4MDAz/IyMj/zg4OP9OTk7/TU1N/zk5Of8xMTH/NDQ0/kFB - Qf9UVFT/RkZG/yQkJP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA+wAAAKMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAlQAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP5ISEj+Ojo6/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+Pj4+/qid - Ov7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQ - L/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQ - L/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQ - L/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQ - L/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQ - L/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQ - L/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQL/7i0C/+4tAv/uLQ - L/7i0C/+4tAv/riqMP4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+VlZW/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gwMDP4kJCT+Nzc3/kdH - R/4/Pz/+MTEx/jMzM/5DQ0P+CgoK/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAC6AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJUAAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/SEhI/zo6Ov4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/j4+ - Pv+nmzf/4M4q/+DOKv/gzir/4M4q/+DOKv/gzir+4M4q/+DOKv/gzir/4M4q/+DOKv/gzir/4M4q/+DO - Kv7gzir/4M4q/+DOKv/gzir/4M4q/+DOKv/gzir/4M4q/uDOKv/gzir/4M4q/+DOKv/gzir/4M4q/+DO - Kv/gzir+4M4q/+DOKv/gzir/4M4q/+DOKv/gzir/4M4q/+DOKv7gzir/4M4q/+DOKv/gzir/4M4q/+DO - Kv/gzir/4M4q/uDOKv/gzir/4M4q/+DOKv/gzir/4M4q/+DOKv/gzir+4M4q/+DOKv/gzir/4M4q/+DO - Kv/gzir/4M4q/+DOKv7gzir/4M4q/+DOKv/gzir/4M4q/+DOKv/gzir/4M4q/uDOKv/gzir/4M4q/+DO - Kv/gzir/4M4q/+DOKv/gzir+4M4q/+DOKv/gzir/4M4q/+DOKv/gzir/4M4q/+DOKv7gzir/4M4q/+DO - Kv/gzir/4M4q/+DOKv/gzir/4M4q/uDOKv/gzir/4M4q/+DOKv/gzir/4M4q/+DOKv/gzir+4M4q/+DO - Kv/gzir/4M4q/+DOKv+2qCz/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/ldX - V/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8DAwP+ERER/yEhIf8yMjL/ISEh/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAAugAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVAAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/0NDQ/88PDz+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4+Pj7/ppoz/9/MJP/fzCT/38wk/9/MJP/fzCT/3swk/t/MJP/fzCT/38wk/9/MJP/fzCT/38wk/9/M - JP/ezCT+38wk/9/MJP/fzCT/38wk/9/MJP/fzCT/38wk/97MJP7fzCT/38wk/9/MJP/fzCT/38wk/9/M - JP/fzCT/3swk/t/MJP/fzCT/38wk/9/MJP/fzCT/38wk/9/MJP/ezCT+38wk/9/MJP/fzCT/38wk/9/M - JP/fzCT/38wk/97MJP7fzCT/38wk/9/MJP/fzCT/38wk/9/MJP/fzCT/3swk/t/MJP/fzCT/38wk/9/M - JP/fzCT/38wk/9/MJP/ezCT+38wk/9/MJP/fzCT/38wk/9/MJP/fzCT/38wk/97MJP7fzCT/38wk/9/M - JP/fzCT/38wk/9/MJP/fzCT/3swk/t/MJP/fzCT/38wk/9/MJP/fzCT/38wk/9/MJP/ezCT+38wk/9/M - JP/fzCT/38wk/9/MJP/fzCT/38wk/97MJP7fzCT/38wk/9/MJP/fzCT/38wk/9/MJP/fzCT/3swk/t/M - JP/fzCT/38wk/9/MJP/fzCT/tacn/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv5XV1f/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - ALoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlQAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP84ODj/Pz8//jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+Pj4+/6WZMP/dyh//3cof/93KH//dyh//3cof/93KH/7dyh//3cof/93KH//dyh//3cof/93K - H//dyh//3cof/t3KH//dyh//3cof/93KH//dyh//3cof/93KH//dyh/+3cof/93KH//dyh//3cof/93K - H//dyh//3cof/93KH/7dyh//3cof/93KH//dyh//3cof/93KH//dyh//3cof/t3KH//dyh//3cof/93K - H//dyh//3cof/93KH//dyh/+3cof/93KH//dyh//3cof/93KH//dyh//3cof/93KH/7dyh//3cof/93K - H//dyh//3cof/93KH//dyh//3cof/t3KH//dyh//3cof/93KH//dyh//3cof/93KH//dyh/+3cof/93K - H//dyh//3cof/93KH//dyh//3cof/93KH/7dyh//3cof/93KH//dyh//3cof/93KH//dyh//3cof/t3K - H//dyh//3cof/93KH//dyh//3cof/93KH//dyh/+3cof/93KH//dyh//3cof/93KH//dyh//3cof/93K - H/7dyh//3cof/93KH//dyh//3cof/7SmJP8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/82Njb+T09P/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAC6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJUAAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/NTU1/0BAQP4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/j4+Pv+kmC3/28ga/9vIGv/byBr/28ga/9vIGv/byBn+28ga/9vIGv/byBr/28ga/9vI - Gv/byBr/28ga/9vIGf7byBr/28ga/9vIGv/byBr/28ga/9vIGv/byBr/28gZ/tvIGv/byBr/28ga/9vI - Gv/byBr/28ga/9vIGv/byBn+28ga/9vIGv/byBr/28ga/9vIGv/byBr/28ga/9vIGf7byBr/28ga/9vI - Gv/byBr/28ga/9vIGv/byBr/28gZ/tvIGv/byBr/28ga/9vIGv/byBr/28ga/9vIGv/byBn+28ga/9vI - Gv/byBr/28ga/9vIGv/byBr/28ga/9vIGf7byBr/28ga/9vIGv/byBr/28ga/9vIGv/byBr/28gZ/tvI - Gv/byBr/28ga/9vIGv/byBr/28ga/9vIGv/byBn+28ga/9vIGv/byBr/28ga/9vIGv/byBr/28ga/9vI - Gf7byBr/28ga/9vIGv/byBr/28ga/9vIGv/byBr/28gZ/tvIGv/byBr/28ga/9vIGv/byBr/28ga/9vI - Gv/byBn+28ga/9vIGv/byBr/28ga/9vIGv+ypCD/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/PDw8/kNDQ/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAAugAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCAAAA9gAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zU1Nf9AQED+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4+Pj7/o5Yp/9nGE//ZxhP/2cYT/9nGE//ZxhP/2cUT/tnGE//ZxhP/2cYT/9nG - E//ZxhP/2cYT/9nGE//ZxRP+2cYT/9nGE//ZxhP/2cYT/9nGE//ZxhP/2cYT/9nFE/7ZxhP/2cYT/9nG - E//ZxhP/2cYT/9nGE//ZxhP/2cUT/tnGE//ZxhP/2cYT/8CvEf9FPgb/q5sP/9nGE//XwxP+k4YN/4V5 - C//ZxhP/h3sM/1BIB//BrxH/XlUI/5GEDf7ZxhP/rp4P/ygkA//ZxhP/tqUQ/1hQB/9GQAb/a2EJ/sOx - Ef9LRAb/My4E/01GBv9NRgb/ybYS/7alEP88NwX+vqwR/9nGE/9jWgn/c2gK/8i1Ev9rYgn/PzkF/01G - Bv4zLgT/SkMG/826Ev+AdAv/SUIG/01GBv9FPwb/ppcP/tnGE//ZxhP/2cYT/9nGE//ZxhP/2cYT/9nG - E//ZxRP+2cYT/9nGE//ZxhP/2cYT/9nGE//ZxhP/2cYT/9nFE/7ZxhP/2cYT/9nGE//ZxhP/2cYT/9nG - E//ZxhP/2cUT/tnGE//ZxhP/2cYT/9nGE//ZxhP/saIb/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/z09Pf5AQED/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAALoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAO4AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP81NTX/QEBA/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+Pj4+/6GVJf/Xww3/18MN/9fDDf/Xww3/18MN/9fDDf7Xww3/18MN/9fD - Df/Xww3/18MN/9fDDf/Xww3/18MN/tfDDf/Xww3/18MN/9fDDf/Xww3/18MN/9fDDf/Xww3+18MN/9fD - Df/Xww3/18MN/9fDDf/Xww3/18MN/9fDDf7Xww3/18MN/9fDDf+9rAv/PDYD/6aXCv/VwQz/o5QK/jMu - Av9tYwb/18MN/4F1B/9HQQP/vawL/1ZOBf+Mfwj+18MN/6qbCf8eGwH/18MN/5SGCP9IQQT/sqEK/9fD - Df6BdQf/Rj8D/8SyC//Ktwz/yrcM/826DP+yoQr/My4C/rqpC//Xww3/XFMF/2pgBv+Rgwj/PDYD/8Kw - C//Xww3+gnYH/0Y/A/+rmwr/OTQD/6qaCv/Xww3/in0I/y0oAv7Xww3/18MN/9fDDf/Xww3/18MN/9fD - Df/Xww3/18MN/tfDDf/Xww3/18MN/9fDDf/Xww3/18MN/9fDDf/Xww3+18MN/9fDDf/Xww3/18MN/9fD - Df/Xww3/18MN/9fDDf7Xww3/18MN/9fDDf/Xww3/18MN/7CgFv8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/89PT3+QEBA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAC6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAADuAAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Li4u/0NDQ/4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/j4+Pv+gkyL/1cAI/9XACP/VwAj/1cAI/9XACP/VwAj+1cAI/9XA - CP/VwAj/1cAI/9XACP/VwAj/1cAI/9XACP7VwAj/1cAI/9XACP/VwAj/1cAI/9XACP/VwAj/1cAI/tXA - CP/VwAj/1cAI/9XACP/VwAj/1cAI/9XACP/VwAj+1cAI/9XACP/VwAj/u6kH/zs1Av+llQb/sqAH/1hP - A/5USwL/bGEE/9XACP+AcwX/Rj8C/7upB/9VTQP/in0F/tXACP+klAb/HRoB/9XACP+ThAX/U0oD/7ak - B//VwAj+YlkD/zo0Av+LfQX/i30F/3hsBP9/cwX/sJ8G/zMuAf64pgf/1cAI/1dOA/9oXgT/g3cE/0hB - Av/Svgj/1cAI/oF0Bf9FPgL/ppYG/zw2Av+5pwf/1cAI/6mZBv8hHQH+1cAI/9XACP/VwAj/1cAI/9XA - CP/VwAj/1cAI/9XACP7VwAj/1cAI/9XACP/VwAj/1cAI/9XACP/VwAj/1cAI/tXACP/VwAj/1cAI/9XA - CP/VwAj/1cAI/9XACP/VwAj+1cAI/9XACP/VwAj/1cAI/9XACP+unhL/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/PT09/kBAQP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAAugAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAA7QAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/iQkJP5ISEj+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4+Pj7+n5Eh/tO9Bf7TvQX+070F/tO9Bf7TvQX+070F/tO9 - Bf7TvQX+070F/tO9Bf7TvQX+070F/tO9Bf7TvQX+070F/tO9Bf7TvQX+070F/tO9Bf7TvQX+070F/tO9 - Bf7TvQX+070F/tO9Bf7TvQX+070F/tO9Bf7TvQX+070F/tO9Bf7TvQX+070F/rqmBf47NAH+jn8D/l1U - Av6TgwP+h3kD/mtfA/7KtAX+cGQD/kU+Af66pgX+SkIC/lJKAf6UhQT+al8C/iEeAP7PuQX+hngD/kc/ - Af6cjAT+ybQF/ox9A/4pJQH+YVcC/mleAv4uKQH+X1UC/q6cBP4ZFwD+c2cD/puLBP4zLQH+a2AC/qeV - BP5ORQH+e24D/paGBP5dVAL+QjsB/rOgBP5HPwH+bWEC/paGBP5qXwL+TUUC/q6bBP5nXAL+gXQD/sKt - Bf7TvQX+070F/tO9Bf7TvQX+070F/tO9Bf7TvQX+070F/tO9Bf7TvQX+070F/tO9Bf7TvQX+070F/tO9 - Bf7TvQX+070F/tO9Bf7TvQX+070F/tO9Bf7TvQX+070F/tO9Bf7TvQX+rZwQ/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/kNDQ/41NTX+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAALoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAA - AO4AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8ICAj/QUFB/0VFRf5FRUX/RUVF/0VF - Rf9FRUX/RUVF/0VFRf9CQkL/EBAQ/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8kJCT/SEhI/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+Pj4+/56PIf/Sugb/0roG/9K6Bv/Sugb/0roG/9K5 - Bf7Sugb/0roG/9K6Bv/Sugb/0roG/9K6Bv/Sugb/0rkF/tK6Bv/Sugb/0roG/9K6Bv/Sugb/0roG/9K6 - Bv/SuQX+0roG/9K6Bv/Sugb/0roG/9K6Bv/Sugb/0roG/9K5Bf7Sugb/0roG/9K6Bv+4owX/OjMB/0I7 - Af+RgAP/zrYF/oZ3A/9qXgP/taAE/25hA/9zZQL/wasF/39wA/9nWwL+Z1sC/1tQAv+BcgP/xq8F/21g - Av8vKQD/aFsC/7GdBP7CrAX/dmgC/2RYAv9pXAP/WU8C/7GcBP+6pAX/VkwC/nBjAv9pXAP/VkwC/6yY - BP/MtAX/lIMD/1xRAv9lWQL+PzgB/0A5Af/JsgX/inoD/1pPAv9mWgL/V00C/52LBP5oXQL/XVIC/19U - Av+BcgP/yLEF/9K6Bv/Sugb/0rkF/tK6Bv/Sugb/0roG/9K6Bv/Sugb/0roG/9K6Bv/SuQX+0roG/9K6 - Bv/Sugb/0roG/9K6Bv/Sugb/0roG/9K5Bf7Sugb/0roG/9K6Bv/Sugb/0roG/6yZEP8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/9ISEj+Kysr/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAC6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AHAAAADuAAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/DQ0N/3Fxcf+QkJD+kJCQ/5CQ - kP+QkJD/kJCQ/5CQkP+QkJD/dnZ2/xkZGf4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/JCQk/0hI - SP4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/j4+Pv+djSH/0LYG/9C2Bv/Qtgb/0LYG/9C2 - Bv/QtgX+0LYG/9C2Bv/Qtgb/0LYG/9C2Bv/Qtgb/0LYG/9C2Bf7Qtgb/0LYG/9C2Bv/Qtgb/0LYG/9C2 - Bv/Qtgb/0LYF/tC2Bv/Qtgb/0LYG/9C2Bv/Qtgb/0LYG/9C2Bv/QtgX+0LYG/9C2Bv/Qtgb/t6AF/0A4 - Af91ZgL/ybAF/9C2Bf6FdAP/aVwD/8qxBf+VggT/iXgD/860Bf/HrgX/w6sF/r6nBf++pgX/yrAF/820 - Bf+VggP/ZFcC/6iTBP/JsAX+z7UF/8atBf++pgX/vqYF/7+oBf/OtAX/zbMF/8GpBf7EqwX/vqYF/7+o - Bf/OtQX/0LYG/8qxBf+/pwX/vqYF/nNkA/9DOgH/z7YF/8iwBf+/pwX/vqYF/76mBf+4oQX+JyIB/29h - Av9kWAL/aFsC/8CoBf/Qtgb/0LYG/9C2Bf7Qtgb/0LYG/9C2Bv/Qtgb/0LYG/9C2Bv/Qtgb/0LYF/tC2 - Bv/Qtgb/0LYG/9C2Bv/Qtgb/0LYG/9C2Bv/QtgX+0LYG/9C2Bv/Qtgb/0LYG/9C2Bv+qlhD/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/SEhI/isrK/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAAugAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABwAAAA7gAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/w0NDf90dHT/mJiY/pmZ - mf+ZmZn/mZmZ/5mZmf+ZmZn/mZmZ/3p6ev8ZGRn+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yIi - Iv9ISEj+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4+Pj7/nIsh/86yBv/Osgb/zrIG/86y - Bv/Osgb/zrIF/s6yBv/Osgb/zrIG/86yBv/Osgb/zrIG/86yBv/OsgX+zrIG/86yBv/Osgb/zrIG/86y - Bv/Osgb/zrIG/86yBf7Osgb/zrIG/86yBv/Osgb/zrIG/86yBv/Osgb/zrIF/s6yBv/Osgb/zrIG/8Oo - Bf+tlQT/xaoF/86yBf/OsgX+rJUF/6CKBP/Osgb/qZIE/5F9A//Osgb/zrIG/86yBf7Osgb/zrIG/86y - Bv/Osgb/zbEF/8ywBf/OsgX/zrIF/s6yBv/Osgb/zrIG/86yBv/Osgb/zrIG/86yBv/OsgX+zrIG/86y - Bv/Osgb/zrIG/86yBv/Osgb/zrIG/86yBf6YgwP/cWIC/86yBv/Osgb/zrIG/86yBv/Osgb/x6sF/nBh - Av82LwD/OzMB/5aBA//MsAX/zrIG/86yBv/OsgX+zrIG/86yBv/Osgb/zrIG/86yBv/Osgb/zrIG/86y - Bf7Osgb/zrIG/86yBv/Osgb/zrIG/86yBv/Osgb/zrIF/s6yBv/Osgb/zrIG/86yBv/Osgb/qZQQ/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/0hISP4rKyv/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AgIC/wQEBP8FBQX+BQUF/wQEBP8BAQH/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAALoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAbQAAAOwAAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8NDQ3/dHR0/5iY - mP6ZmZn/mZmZ/5ubm/+ioqL/m5ub/5mZmf96enr/GRkZ/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8UFBT/Tk5O/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+Pj4+/5uIIf/Mrwb/zK8G/8yv - Bv/Mrwb/zK8G/8yvBf7Mrwb/zK8G/8yvBv/Mrwb/zK8G/8yvBv/Mrwb/zK8F/syvBv/Mrwb/zK8G/8yv - Bv/Mrwb/zK8G/8yvBv/MrwX+zK8G/8yvBv/Mrwb/zK8G/8yvBv/Mrwb/zK8G/8yvBf7Mrwb/zK8G/8yv - Bv/Mrwb/zK8G/8yvBv/Mrwb/zK8F/syvBv/Mrwb/zK8G/8yvBv/Mrwb/zK8G/8yvBv/MrwX+zK8G/8yv - Bv/Mrwb/zK8G/8yvBv/Mrwb/zK8G/8yvBf7Mrwb/zK8G/8yvBv/Mrwb/zK8G/8yvBv/Mrwb/zK8F/syv - Bv/Mrwb/zK8G/8yvBv/Mrwb/zK8G/8yvBv/MrwX+zK8G/8yvBv/Mrwb/zK8G/8yvBv/Mrwb/zK8G/8yv - Bf7KrQX/t50E/6uTBP/EpwX/zK8G/8yvBv/Mrwb/zK8F/syvBv/Mrwb/zK8G/8yvBv/Mrwb/zK8G/8yv - Bv/MrwX+zK8G/8yvBv/Mrwb/zK8G/8yvBv/Mrwb/zK8G/8yvBf7Mrwb/zK8G/8yvBv/Mrwb/zK8G/6eR - EP8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/9KSkr+JiYm/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8CAgL/FBQU/y4uLv9CQkL/R0dH/kdHR/9AQED/Jycn/w8P - D/8CAgL/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAC6AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAFsAAADkAAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/DQ0N/3R0 - dP+YmJj+mZmZ/5mZmf+wsLD/wcHB/6ioqP+ZmZn/enp6/xkZGf4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/ERER/09PT/4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/j4+Pv+ahiH/y6sG/8ur - Bv/Lqwb/y6sG/8urBv/LqwX+y6sG/8urBv/Lqwb/y6sG/8urBv/Lqwb/y6sG/8urBf7Lqwb/y6sG/8ur - Bv/Lqwb/y6sG/8urBv/Lqwb/y6sF/surBv/Lqwb/y6sG/8urBv/Lqwb/y6sG/8urBv/LqwX+y6sG/8ur - Bv/Lqwb/y6sG/8urBv/Lqwb/y6sG/8urBf7Lqwb/y6sG/8urBv/Lqwb/y6sG/8urBv/Lqwb/y6sF/sur - Bv/Lqwb/y6sG/8urBv/Lqwb/y6sG/8urBv/LqwX+y6sG/8urBv/Lqwb/y6sG/8urBv/Lqwb/y6sG/8ur - Bf7Lqwb/y6sG/8urBv/Lqwb/y6sG/8urBv/Lqwb/y6sF/surBv/Lqwb/y6sG/8urBv/Lqwb/y6sG/8ur - Bv/LqwX+y6sG/8urBv/Lqwb/y6sG/8urBv/Lqwb/y6sG/8urBf7Lqwb/y6sG/8urBv/Lqwb/y6sG/8ur - Bv/Lqwb/y6sF/surBv/Lqwb/y6sG/8urBv/Lqwb/y6sG/8urBv/LqwX+y6sG/8urBv/Lqwb/y6sG/8ur - Bv+mjhD/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/UVFR/hgYGP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8EBAT/Kioq/3Nzc/6bm5v+qKio/6qqqv6qqqr/paWl/5GR - kf1kZGT2JCQk+gQEBP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAAugAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAABKAAAA3QAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/w0N - Df90dHT/mJiY/pmZmf+pqan/xsbG/8vLy/+6urr/nJyc/3p6ev8ZGRn+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/xEREf9PT0/+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4+Pj7/mIQh/8in - Bv/Ipwb/yKcG/8inBv/Ipwb/yKcF/sinBv/Ipwb/yKcG/8inBv/Ipwb/yKcG/8inBv/IpwX+yKcG/8in - Bv/Ipwb/yKcG/8inBv/Ipwb/yKcG/8inBf7Ipwb/yKcG/8inBv/Ipwb/yKcG/8inBv/Ipwb/yKcF/sin - Bv/Ipwb/yKcG/8inBv/Ipwb/yKcG/8inBv/IpwX+yKcG/8inBv/Ipwb/yKcG/8inBv/Ipwb/yKcG/8in - Bf7Ipwb/yKcG/8inBv/Ipwb/yKcG/8inBv/Ipwb/yKcF/sinBv/Ipwb/yKcG/8inBv/Ipwb/yKcG/8in - Bv/IpwX+yKcG/8inBv/Ipwb/yKcG/8inBv/Ipwb/yKcG/8inBf7Ipwb/yKcG/8inBv/Ipwb/yKcG/8in - Bv/Ipwb/yKcF/sinBv/Ipwb/yKcG/8inBv/Ipwb/yKcG/8inBv/IpwX+yKcG/8inBv/Ipwb/yKcG/8in - Bv/Ipwb/yKcG/8inBf7Ipwb/yKcG/8inBv/Ipwb/yKcG/8inBv/Ipwb/yKcF/sinBv/Ipwb/yKcG/8in - Bv/Ipwb/pIsQ/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/1NTU/4VFRX/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8KCgr/NTU1/5KSkv3IyMj+0NDQ/s3Nzf/Ly8v+zMzM/8zM - zP/Ly8v9u7u79IaGhuU0NDTuBwcH/QAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAALoAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAASgAAAN0AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8NDQ3/dHR0/5iYmP6jo6P/wMDA/8vLy//MzMz/xcXF/6mpqf96enr/GRkZ/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8RERH/T09P/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+Pj4+/5eB - If/Howb/x6MG/8ejBv/Howb/x6MG/8ejBf7Howb/x6MG/8ejBv/Howb/x6MG/8ejBv/Howb/x6MF/sej - Bv/Howb/x6MG/8ejBv/Howb/x6MG/8ejBv/HowX+x6MG/8ejBv/Howb/x6MG/8ejBv/Howb/x6MG/8ej - Bf7Howb/x6MG/8ejBv/Howb/x6MG/8ejBv/Howb/x6MF/sejBv/Howb/x6MG/8ejBv/Howb/x6MG/8ej - Bv/HowX+x6MG/8ejBv/Howb/x6MG/8ejBv/Howb/x6MG/8ejBf7Howb/x6MG/8ejBv/Howb/x6MG/8ej - Bv/Howb/x6MF/sejBv/Howb/x6MG/8ejBv/Howb/x6MG/8ejBv/HowX+x6MG/8ejBv/Howb/x6MG/8ej - Bv/Howb/x6MG/8ejBf7Howb/x6MG/8ejBv/Howb/x6MG/8ejBv/Howb/x6MF/sejBv/Howb/x6MG/8ej - Bv/Howb/x6MG/8ejBv/HowX+x6MG/8ejBv/Howb/x6MG/8ejBv/Howb/x6MG/8ejBf7Howb/x6MG/8ej - Bv/Howb/x6MG/6OIEP8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/9TU1P+FRUV/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4GBgb/RERE/6Ojo/zW1tb81NTU/s7Ozv/MzMz/y8vL/szM - zP/MzMz/zMzM/8zMzP7FxcXxoqKi1z4+PuAEBAT9AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAC6AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEoAAADcAAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+DQ0N/nR0dP6YmJj+ra2t/sfHx/7Ly8v+y8vL/sfHx/6tra3+enp6/hkZGf4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+Dg4O/lBQUP4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/j4+ - Pv6WfyH+xZ8F/sWfBf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWf - Bf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWf - Bf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWf - Bf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWf - Bf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWf - Bf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWf - Bf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWfBf7FnwX+xZ8F/sWf - Bf7FnwX+xZ8F/sWfBf6ihRD+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+U1NT/hUV - Ff4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+Kioq/qSkpPzi4uL93d3d/s3Nzf6vr6/+oKCg/qCg - oP65ubn+y8vL/svLy/7Ly8v+y8vL/srKyviysrLIGhoa8QAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAAugAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKAAAA3QAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/w0NDf90dHT/mJiY/pmZmf+ZmZn/mZmZ/5mZmf+ZmZn/mZmZ/3p6ev8ZGRn+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9XV1f+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4+Pj7/lHwh/8KbBv/Cmwb/wpsG/8KbBv/Cmwb/wpsF/sKbBv/Cmwb/wpsG/8KbBv/Cmwb/wpsG/8Kb - Bv/CmwX+wpsG/8KbBv/Cmwb/wpsG/8KbBv/Cmwb/wpsG/8KbBf7Cmwb/wpsG/8KbBv/Cmwb/wpsG/8Kb - Bv/Cmwb/wpsF/sKbBv/Cmwb/wpsG/8KbBv/Cmwb/wpsG/8KbBv/CmwX+wpsG/8KbBv/Cmwb/wpsG/8Kb - Bv/Cmwb/wpsG/8KbBf7Cmwb/wpsG/8KbBv/Cmwb/wpsG/8KbBv/Cmwb/wpsF/sKbBv/Cmwb/wpsG/8Kb - Bv/Cmwb/wpsG/8KbBv/CmwX+wpsG/8KbBv/Cmwb/wpsG/8KbBv/Cmwb/wpsG/8KbBf7Cmwb/wpsG/8Kb - Bv/Cmwb/wpsG/8KbBv/Cmwb/wpsF/sKbBv/Cmwb/wpsG/8KbBv/Cmwb/wpsG/8KbBv/CmwX+wpsG/8Kb - Bv/Cmwb/wpsG/8KbBv/Cmwb/wpsG/8KbBf7Cmwb/wpsG/8KbBv/Cmwb/wpsG/8KbBv/Cmwb/wpsF/sKb - Bv/Cmwb/wpsG/8KbBv/Cmwb/oIIQ/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/1dX - V/4NDQ3/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/DQ0N/nV1dfzk5OT76+vr/tzc3P+7u7v/SEhI/y0t - Lf9JSUn+Kioq/29vb//MzMz/zMzM/8zMzP/MzMz/zMzM+WdnZ8wHBwf/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA+gAA - AKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASgAAAN0AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8NDQ3/dHR0/5iYmP6ZmZn/mZmZ/5mZmf+ZmZn/mZmZ/5mZmf96enr/GRkZ/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/V1dX/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+Pj4+/5R6If/BmAb/wZgG/8GYBv/BmAb/wZgG/8GYBf7BmAb/wZgG/8GYBv/BmAb/wZgG/8GY - Bv/BmAb/wZgF/sGYBv/BmAb/wZgG/8GYBv/BmAb/wZgG/8GYBv/BmAX+wZgG/8GYBv/BmAb/wZgG/8GY - Bv/BmAb/wZgG/8GYBf7BmAb/wZgG/8GYBv/BmAb/wZgG/8GYBv/BmAb/wZgF/sGYBv/BmAb/wZgG/8GY - Bv/BmAb/wZgG/8GYBv/BmAX+wZgG/8GYBv/BmAb/wZgG/8GYBv/BmAb/wZgG/8GYBf7BmAb/wZgG/8GY - Bv/BmAb/wZgG/8GYBv/BmAb/wZgF/sGYBv/BmAb/wZgG/8GYBv/BmAb/wZgG/8GYBv/BmAX+wZgG/8GY - Bv/BmAb/wZgG/8GYBv/BmAb/wZgG/8GYBf7BmAb/wZgG/8GYBv/BmAb/wZgG/8GYBv/BmAb/wZgF/sGY - Bv/BmAb/wZgG/8GYBv/BmAb/wZgG/8GYBv/BmAX+wZgG/8GYBv/BmAb/wZgG/8GYBv/BmAb/wZgG/8GY - Bf7BmAb/wZgG/8GYBv/BmAb/wZgG/59/EP8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/9eXl7+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yUlJf6urq758vLy+uzs7P/d3d3/u7u7/1RU - VP9+fn7/y8vL/mhoaP8VFRX/zMzM/8zMzP/MzMz/zMzM/8zMzP+rq6vdExMT/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - APcAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIAAADZAAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/DQ0N/3R0dP+YmJj+mZmZ/5mZmf+ZmZn/mZmZ/5mZmf+ZmZn/enp6/xkZ - Gf4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1dXV/4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/j4+Pv+SeCH/v5QG/7+UBv+/lAb/v5QG/7+UBv+/lAX+v5QG/7+UBv+/lAb/v5QG/7+U - Bv+/lAb/v5QG/7+UBf6/lAb/v5QG/7+UBv+/lAb/v5QG/7+UBv+/lAb/v5QF/r+UBv+/lAb/v5QG/7+U - Bv+/lAb/v5QG/7+UBv+/lAX+v5QG/7+UBv+/lAb/v5QG/7+UBv+/lAb/v5QG/7+UBf6/lAb/v5QG/7+U - Bv+/lAb/v5QG/7+UBv+/lAb/v5QF/r+UBv+/lAb/v5QG/7+UBv+/lAb/v5QG/7+UBv+/lAX+v5QG/7+U - Bv+/lAb/v5QG/7+UBv+/lAb/v5QG/7+UBf6/lAb/v5QG/7+UBv+/lAb/v5QG/7+UBv+/lAb/v5QF/r+U - Bv+/lAb/v5QG/7+UBv+/lAb/v5QG/7+UBv+/lAX+v5QG/7+UBv+/lAb/v5QG/7+UBv+/lAb/v5QG/7+U - Bf6/lAb/v5QG/7+UBv+/lAb/v5QG/7+UBv+/lAb/v5QF/r+UBv+/lAb/v5QG/7+UBv+/lAb/v5QG/7+U - Bv+/lAX+v5QG/7+UBv+/lAb/v5QG/7+UBv+dfRD/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/Xl5e/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP81NTX+zs7O+/j4+Pzt7e3/3t7e/729 - vf9OTk7/VFRU/3p6ev5AQED/Ojo6/8zMzP/MzMz/zMzM/8zMzP/MzMz/urq6+CYmJv8BAQH/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD3AAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAzwAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8MDAz/OTk5/zs7O/87Ozv/Ozs7/zs7 - O/47Ozv/Ozs7/zs7O/87Ozv/Ozs7/0JCQv94eHj/mJiY/pmZmf+ZmZn/mZmZ/5mZmf+ZmZn/mZmZ/319 - ff9HR0f+Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/47Ozv/OTk5/xMTE/8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9XV1f+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4+Pj7/kXYh/72RBv+9kQb/vZEG/72RBv+9kQb/vZEF/r2RBv+9kQb/vZEG/72R - Bv+9kQb/vZEG/72RBv+9kQX+vZEG/72RBv+9kQb/vZEG/72RBv+9kQb/vZEG/72RBf69kQb/vZEG/72R - Bv+9kQb/vZEG/72RBv+9kQb/vZEF/r2RBv+9kQb/vZEG/72RBv+9kQb/vZEG/72RBv+9kQX+vZEG/72R - Bv+9kQb/vZEG/72RBv+9kQb/vZEG/72RBf69kQb/vZEG/72RBv+9kQb/vZEG/72RBv+9kQb/vZEF/r2R - Bv+9kQb/vZEG/72RBv+9kQb/vZEG/72RBv+9kQX+vZEG/72RBv+9kQb/vZEG/72RBv+9kQb/vZEG/72R - Bf69kQb/vZEG/72RBv+9kQb/vZEG/72RBv+9kQb/vZEF/r2RBv+9kQb/vZEG/72RBv+9kQb/vZEG/72R - Bv+9kQX+vZEG/72RBv+9kQb/vZEG/72RBv+9kQb/vZEG/72RBf69kQb/vZEG/72RBv+9kQb/vZEG/72R - Bv+9kQb/vZEF/r2RBv+9kQb/vZEG/72RBv+9kQb/nHoQ/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/15eXv4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/PT09/tzc3P76+vr+8PDw/+Li - 4v/AwMD/SUlJ/zExMf8+Pj7+Jycn/4+Pj//MzMz/zMzM/8zMzP/MzMz/zMzM/729vf41NTX/AwMD/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wMDA/8cHBz/NTU1/zk5Of85OTn+MjIy/xMT - E/8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA9wAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAMsAAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/FhYW/3Jycv+Li4v/i4uL/4uL - i/+Li4v+i4uL/4uLi/+Li4v/i4uL/4uLi/+Li4v/kZGR/5iYmP6mpqb/s7Oz/7S0tP+hoaH/mZmZ/5mZ - mf+SkpL/i4uL/ouLi/+Li4v/lpaW/6ioqP+Xl5f/jIyM/4uLi/+Li4v+i4uL/3d3d/8iIiL/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/RkZG/jo6Ov8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+Pj4+/5B0If+8jQb/vI0G/7yNBv+8jQb/vI0G/7yNBf68jQb/vI0G/7yN - Bv+8jQb/vI0G/7yNBv+8jQb/vI0F/ryNBv+8jQb/vI0G/7yNBv+8jQb/vI0G/7yNBv+8jQX+vI0G/7yN - Bv+8jQb/vI0G/7yNBv+8jQb/vI0G/7yNBf68jQb/vI0G/7yNBv+8jQb/vI0G/7yNBv+8jQb/vI0F/ryN - Bv+8jQb/vI0G/7yNBv+8jQb/vI0G/7yNBv+8jQX+vI0G/7yNBv+8jQb/vI0G/7yNBv+8jQb/vI0G/7yN - Bf68jQb/vI0G/7yNBv+8jQb/vI0G/7yNBv+8jQb/vI0F/ryNBv+8jQb/vI0G/7yNBv+8jQb/vI0G/7yN - Bv+8jQX+vI0G/7yNBv+8jQb/vI0G/7yNBv+8jQb/vI0G/7yNBf68jQb/vI0G/7yNBv+8jQb/vI0G/7yN - Bv+8jQb/vI0F/ryNBv+8jQb/vI0G/7yNBv+8jQb/vI0G/7yNBv+8jQX+vI0G/7yNBv+8jQb/vI0G/7yN - Bv+8jQb/vI0G/7yNBf68jQb/vI0G/7yNBv+8jQb/vI0G/5t4EP8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/9eXl7+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/z8/P/7g4OD/+/v7//T0 - 9P/n5+f/xMTE/1NTU/9tbW3/rq6u/kBAQP97e3v/zMzM/8zMzP/MzMz/zMzM/8zMzP++vr7+Ojo6/wQE - BP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/w8PD/9ycnL+pKSk/K+vr/yvr6/8rq6u+6ys - rPubm5v1YmJi4RAQEO8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAPcAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAADLAAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/xcXF/95eXn/mZmZ/5mZ - mf+ZmZn/np6e/q+vr/+/v7//q6ur/5mZmf+ZmZn/mZmZ/5qamv+urq7+z8/P/9bW1v/W1tb/zc3N/6io - qP+ZmZn/mZmZ/5iYmP6ZmZn/mZmZ/6mpqf/Kysr/xcXF/7S0tP+bm5v/mZmZ/pmZmf9/f3//IyMj/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP49PT3/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/j4+Pv+PcSH/uokG/7qJBv+6iQb/uokG/7qJBv+6iQX+uokG/7qJ - Bv+6iQb/uokG/7qJBv+6iQb/uokG/7qJBf66iQb/uokG/7qJBv+6iQb/uokG/7qJBv+6iQb/uokF/rqJ - Bv+6iQb/uokG/7qJBv+6iQb/uokG/7qJBv+6iQX+uokG/7qJBv+6iQb/uokG/7qJBv+6iQb/uokG/7qJ - Bf66iQb/uokG/7qJBv+6iQb/uokG/7qJBv+6iQb/uokF/rqJBv+6iQb/uokG/7qJBv+6iQb/uokG/7qJ - Bv+6iQX+uokG/7qJBv+6iQb/uokG/7qJBv+6iQb/uokG/7qJBf66iQb/uokG/7qJBv+6iQb/uokG/7qJ - Bv+6iQb/uokF/rqJBv+6iQb/uokG/7qJBv+6iQb/uokG/7qJBv+6iQX+uokG/7qJBv+6iQb/uokG/7qJ - Bv+6iQb/uokG/7qJBf66iQb/uokG/7qJBv+6iQb/uokG/7qJBv+6iQb/uokF/rqJBv+6iQb/uokG/7qJ - Bv+6iQb/uokG/7qJBv+6iQX+uokG/7qJBv+6iQb/uokG/7qJBv+ZdBD/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/86Ojr/TExM/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP85OTn+19fX/P39 - /fz4+Pj/7u7u/8vLy/9VVVX/XFxc/3Z2dv4bGxv/j4+P/8zMzP/MzMz/zMzM/8zMzP/MzMz/vr6+/iws - LP8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AQEB/xsbG/6ZmZn80dHR/NDQ0P7MzMz+zMzM/svL - y/7MzMz+y8vL/cPDw/OIiIjBIiIi1gEBAf4AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAADwAAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAywAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8XFxf/eXl5/5mZ - mf+ioqL/t7e3/8jIyP7MzMz/zMzM/7CwsP+ZmZn/mZmZ/5mZmf+jo6P/wsLC/srKyv/Kysr/ysrK/8rK - yv+/v7//n5+f/5mZmf+YmJj+mZmZ/5mZmf+qqqr/zMzM/8zMzP/MzMz/xMTE/6Wlpf6ZmZn/f39//yMj - I/8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9AQED+PT09/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4+Pj7/jm8h/7eFBv+3hQb/t4UG/7eFBv+3hQb/t4UF/reF - Bv+3hQb/t4UG/7eFBv+3hQb/t4UG/7eFBv+3hQX+t4UG/7eFBv+3hQb/t4UG/7aECP+ofBz/o3sl/6R9 - Jf6ogCD/rYMZ/7aFCP+2hgn/rIoa/6yKGv+sihr/s4cM/reFBv+2hgj/sIoV/66LGv+ujBr/sIsW/6+M - Gf+vjBr+sooT/7eFB/+3hQb/t4UG/7OKEv+xjRf/s4sT/7OLEv6xig//qY8Z/6eQG/+nkBv/p5Ab/6yN - Ff+vihD/toYH/reFBv+3hQb/t4UG/7eFBv+3hQb/t4UG/7eFBv+3hQX+t4UG/7eFBv+3hQb/t4UG/7SM - E/+xjxn/sI8Y/6+OGP6ujhj/rY4X/66MFP+1hwn/t4UG/7eFBv+3hQb/toYH/qiNFP+akyD/mZQg/5yS - HP+uiQ3/t4UG/7eFBv+3hQX+t4UG/7eFBv+rig3/qYoO/6mKDv+piQ7/qogN/7SGB/63hQb/t4UG/7eF - Bv+3hQb/t4UG/7eFBv+3hQb/t4UF/reFBv+3hQb/t4UG/7eFBv+3hQb/l3EQ/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/Ozs7/0pKSv4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/IyMj/q2t - rfj5+fn5/Pz8//b29v/d3d3/g4OD/1JSUv9ra2v+eXl5/76+vv/MzMz/zMzM/8zMzP/Nzc3/0NDQ/6+v - r+gTExP/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AwMD/j4+Pv62trb639/f/NTU1P/Nzc3/zMzM/8zM - zP/Ly8v+zMzM/8zMzP/MzMz+zMzM9qqqqsI1NTXXAgIC/QAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA7wAAAF0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAA - AMcAAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+FxcX/nl5 - ef6YmJj+qqqq/sLCwv7Ly8v+y8vL/svLy/6wsLD+mJiY/piYmP6YmJj+o6Oj/ry8vP69vb3+vb29/r29 - vf69vb3+t7e3/qKiov6YmJj+mJiY/piYmP6YmJj+qamp/svLy/7Ly8v+ycnJ/sHBwf6tra3+mJiY/n9/ - f/4jIyP+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+QEBA/j09 - Pf4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+Pj4+/o1sIf62gQX+toEF/raBBf62gQX+toEF/raB - Bf62gQX+toEF/raBBf62gQX+toEF/raBBf62gQX+toEF/raBBf62gQX+toEF/raBBf6KZEP+RkGp/jRC - zf47Uc3+TWS7/mN1oP6TgUv+poci/l+lnf5fqKD+Yqqg/oyWU/6zgwv+rIcY/numfP5ts6D+b7Sg/nix - kP50uJ3+dbqf/oSwf/6pjib+toEF/raBBf6TrGn+hsGV/o66gv6UtHL+gqta/kfOnP491Kn+PdSp/j3U - qf5PyJL+Xb9//nqrV/6Zli3+sYUN/raBBf62gQX+toEF/raBBf62gQX+toEF/raBBf62gQX+toEF/rSE - C/6Yu3f+h86Z/oHMlv56ypL+c8mP/mvHi/5qwH7+h6VK/qiLGP62gQX+toEF/qWJFf5CvHL+Dtae/grW - nP4V0I3+Xa1N/pqPG/6zggf+toEF/raBBf62gQX+VatA/kesR/5GpkX+RqFC/kqbPv6RiRj+tIEG/raB - Bf62gQX+toEF/raBBf62gQX+toEF/raBBf62gQX+toEF/raBBf62gQX+toEF/pZuEP4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/js7O/5KSkr+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gsL - C/5sbGz75eXl+P39/f36+vr+8/Pz/urq6v7h4eH+2tra/tXV1f7T09P+0tLS/tLS0v7T09P+1dXV/tnZ - 2fJtbW3lCQkJ/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/ikpKf6srKz86Ojo/d3d3f7Ozs7+vr6+/sfH - x/7Ly8v+y8vL/svLy/6/v7/+w8PD/svLy/7Ly8v8n5+f0hUVFfYAAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAO8AAABdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAQAAAC9AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/xcX - F/95eXn/mZmZ/5qamv+mpqb/urq6/sjIyP/MzMz/sLCw/5mZmf+ZmZn/mZmZ/56env+tra3+r6+v/6+v - r/+vr6//r6+v/6qqqv+dnZ3/mZmZ/5iYmP6ZmZn/mZmZ/6ampv/CwsL/vLy8/7Gxsf+jo6P/mpqa/pmZ - mf9/f3//IyMj/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zs7 - O/5AQED/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/j4+Pv+LaiH/tH0G/7R9Bv+0fQb/tH0G/7R9 - Bv+zfQX+tH0G/7R9Bv+0fQb/tH0G/7R9Bv+0fQb/tH0G/7N9Bf60fQb/tH0G/7R9Bv+icR7/LSfB/xEi - 9f8pO93/UFiq/lRlrv9BcOD/TYDZ/42IV/9bpKL/Objl/za+8f9Usr3+qoIX/6eFIP9htbH/R8zw/0rP - 8P9UzN//YMbK/1TX7v5d1eH/jaVp/7N+CP+0fQb/jq1y/3Dd1v9u5+X/deTY/n22dv9Wv4b/Cvbv/wD/ - //8A////AP///wD///8F+/f+Odav/5yOJv+0fQb/tH0G/7R9Bv+0fQb/tH0G/7N9Bf60fQb/tH0G/7R9 - Bv+ygQ3/jsuZ/3Pu2f9l8+H/YefL/lzfvf9R3bn/Rd23/zzbs/9tsWT/qIUU/7R9Bv91n0P+C9mo/x7N - kP8/um7/P7lp/xvLgv88umL/iZMl/7N9Bf60fQb/tH0G/zy0T/8Nwmn/Dblm/wyxYv8RqFz/dosl/rF+ - B/+0fQb/tH0G/7R9Bv+0fQb/tH0G/7R9Bv+zfQX+tH0G/7R9Bv+0fQb/tH0G/7R9Bv+VaxD/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/87Ozv/SkpK/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8BAQH+LS0t/6mpqfr09PT5/f39/vn5+f/09PT/7e3t/+fn5/7i4uL/39/f/97e3v/e3t7/39/f/+Li - 4vKzs7POIiIi/AEBAf8AAAD/AAAA/wAAAP8AAAD/AAAA/woKCv9wcHD95ubm/Ovr6/7c3Nz/wcHB/3Fx - cf+Wlpb/zMzM/8vLy/7CwsL/YWFh/6Kiov/MzMz/zMzM/8zMzPdQUFDlAgIC/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAADtAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAuwAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8XFxf/eXl5/5mZmf+ZmZn/mZmZ/56env6tra3/vb29/6urq/+ZmZn/mZmZ/5mZmf+ampr/nZ2d/p+f - n/+goKD/oKCg/5+fn/+dnZ3/mZmZ/5mZmf+YmJj+mZmZ/5mZmf+dnZ3/paWl/5+fn/+ZmZn/mZmZ/5iY - mP6ZmZn/f39//yMjI/8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8vLy/+RkZG/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4+Pj7/imgh/7J6Bv+yegb/snoG/7J6 - Bv+yegb/snoF/rJ6Bv+yegb/snoG/7J6Bv+yegb/snoG/7J6Bv+yegX+snoG/7J6Bv+yegb/eFJT/xUX - 4v8aJuf/clxo/6BzI/6fdSf/gXVk/0uA3f9wiZj/noMp/12mov82vvH/bqGJ/q19EP+ufA7/kJJO/2G4 - t/9Kz/D/dq2P/5SVTP9a0N7+bsGz/6GMMv+phR//oZA3/6eHJP+YoFb/gMqq/3zVvf6lkTP/rnwK/zTX - tf8M9e3/Mti4/0XKnf9ftnf/PdCo/g/z6f9/oEz/snoG/7J6Bv+yegb/snoG/7J6Bv+yegX+snoG/7J6 - Bv+yegb/snsH/6eQLv+OuHj/aevU/33Div6TnUf/kppA/4ubQ/9hunr/Ndaq/4KaQP+wewj/N8CB/hjR - nP9jplD/nIUZ/5yFGP9zmjj/G8p8/zu5Xv+ViRr+snoG/7J6Bv+Oixz/NLBR/xW2YP8XrVz/TJc8/5t/ - Ef6yegb/snoG/7J6Bv+yegb/snoG/7J6Bv+yegb/snoF/rJ6Bv+yegb/snoG/7J6Bv+yegb/k2kQ/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/Pj4+/0NDQ/4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gcHB/9KSkr9xcXF+Pv7+/v9/f3/+vr6//f39//z8/P+8PDw/+3t7f/s7Oz/7Ozs/+3t - 7fjn5+e5U1NT0QQEBP0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8iIiL/r6+v+/T09Pvr6+v/3Nzc/8PD - w/9YWFj/TExM/6ampv+srKz+gICA/x4eHv+vr6//zMzM/8zMzP/MzMz+oqKi5AcHB/4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA6AAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAALsAAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/FxcX/2pqav9ycnL/cnJy/3Jycv9ycnL+c3Nz/3h4eP92dnb/cnJy/3Jycv9ycnL/fn5+/5iY - mP6YmJj/mJiY/5iYmP+YmJj/mZmZ/5mZmf+Dg4P/cnJy/nJycv9ycnL/cnJy/3Jycv9ycnL/cnJy/3Jy - cv9ycnL+cnJy/2xsbP8jIyP/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/Kysr/khISP8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+Pj4+/4lmIf+wdgb/sHYG/7B2 - Bv+wdgb/sHYG/7B2Bf6wdgb/sHYG/7B2Bv+wdgb/sHYG/7B2Bv+wdgb/sHYF/rB2Bv+wdgb/sHYG/1o8 - e/8PEuv/RDun/6lzEP+wdgX+sHYG/6x2Df9rfpr/W47L/6l5F/+Li0v/SbPN/3aaeP6seQ3/sHYG/654 - Cv97o33/Ss/w/4acZ/+qfBX/a76z/nC9rP+mgiH/mZVI/3TJuP+QpWf/rHwS/42zfv990bf+pIwv/7B2 - Bv9bt3z/HejV/4CaSP+hghv/q3oM/52EH/4b6df/cqZd/7B2Bv+wdgb/sHYG/7B2Bv+wdgb/sHYF/rB2 - Bv+wdgb/sHYG/7B2Bv+wdgb/oo8x/3TXsf9+v4b+qYAW/7B2Bv+wdwb/jpE1/zrPoP9bsm7/pn0S/xTU - pf4sxIf/n4AV/7B2Bv+wdgb/rHgJ/3aVMv8aynf/W6VC/ql6Cv+wdgb/sHYG/5ODF/9QnD3/IqpW/32H - If+udwb+sHYG/7B2Bv+wdgb/sHYG/7B2Bv+wdgb/sHYG/7B2Bf6wdgb/sHYG/7B2Bv+wdgb/sHYG/5Jm - EP8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/0NDQ/84ODj+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/DAwM/1tbW/29vb32+fn59/7+/v78/Pz/+vr6/vn5+f/4+Pj/+Pj4/fj4 - +OrX19fHbm5uxREREfEAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/MzMz/9TU1Pz4+Pj87Ozs/97e - 3v/Ozs7/ioqK/xgYGP8iIiL/JCQk/hgYGP9MTEz/ysrK/8zMzP/MzMz/zMzM/76+vvkYGBj+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAOcAAAAuAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAACuAAAA/QAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/xcXF/+IiIj/wsLC/8LCwv/CwsL/wsLC/sLCwv/CwsL/wsLC/8LCwv/CwsL/tra2/3R0 - dP+YmJj+mJiY/5iYmP+YmJj/mJiY/5mZmf+ZmZn/enp6/6urq/7CwsL/wsLC/8LCwv/CwsL/wsLC/8LC - wv/CwsL/wsLC/sLCwv+Tk5P/IyMj/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/ysrK/5ISEj/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/j4+Pv+IZCH/r3MG/69z - Bv+vcwb/r3MG/69zBv+ucwX+r3MG/69zBv+vcwb/r3MG/69zBv+vcwb/r3MG/65zBf6vcwb/r3MG/69z - Bv9iQG7/EBTo/2ZMc/+vcwb/n28h/m1ofv9JcNH/Q4Dt/0yU7v96jYr/qHcU/26bg/9Dut7+SLzb/1e1 - vv9ZuMH/TMjk/0rP8P+WiT//rHUL/4Sic/5jzM7/lZJM/5GbW/9p2dn/bdjU/6OEKf+YnVb/d93O/p2V - Rv+ucwb/hJRB/w/y6P9qqWf/rnMG/6l3Dv+tdAj+loUn/5yBIP+vcwb/r3MG/69zBv+vcwb/r3MG/65z - Bf6vcwb/r3MG/69zBv+vcwb/r3MG/6h+Gf9/wo7/bdav/qKFJP+vcwb/r3MG/5WIKv9DyJT/NsuY/5qB - Hf8Q1qn+M8CB/65zBv+vcwb/r3MG/69zBv+leA3/UqhL/zG7Yf6Mhh3/rnMG/69zBv+ucwb/eogk/xOv - Xv9xiSf/rnMG/q9zBv+vcwb/r3MG/69zBv+vcwb/r3MG/69zBv+ucwX+r3MG/69zBv+vcwb/r3MG/69z - Bv+RYxD/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/9ERET/NjY2/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8GBgb/NDQ0/n19ffq5ubnq29vb2+Li4tXi4uLW4eHh1dDQ - 0MiLi4vONjY26QkJCfoAAAD+AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/z09Pf/o6Oj++fn5/u/v - 7//h4eH/09PT/6+vr/9AQED/cXFx/6ysrP4gICD/i4uL/8zMzP/MzMz/zMzM/8zMzP/CwsL/Li4u/gEB - Af8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAADnAAAAKwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAPcAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8WFhb/goKC/7e3t/+3t7f/t7e3/7e3t/63t7f/t7e3/7e3t/+3t7f/t7e3/6ys - rP90dHT/mJiY/pmZmf+ZmZn/mZmZ/5mZmf+ZmZn/mZmZ/3p6ev+ysrL+zMzM/8zMzP/MzMz/zMzM/8zM - zP/MzMz/zMzM/8vLy/7MzMz/mJiY/yMjI/8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8qKir+SEhI/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4+Pj7/h2Eh/6xv - Bv+sbwb/rG8G/6xvBv+sbwb/rG8F/qxvBv+sbwb/rG8G/6xvBv+sbwb/rG8G/6xvBv+sbwX+rG8G/6xv - Bv+sbwb/c0pV/xUW4v9iSXf/rG8G/6xvBf5/alz/S2/M/0l/3/9Tkt7/bpSp/6B5KP+XfTD/ULHC/j7D - 7/9Iwd//TcDZ/0zI5f9Kz/D/loU6/6xvBv+XiD7+W9bl/4Olev+Eqn7/Zt3j/2jg5P+CupX/mpJH/3nZ - xv6Sp2r/q3MM/5p+IP8P8eb/Os6q/4aPPf8007L/hY8+/qxvBv+sbwb/rG8G/6xvBv+sbwb/rG8G/6xv - Bv+sbwX+rG8G/6xvBv+sbwb/rG8G/6xvBv+sbwb/iaxr/1/p0P6Omk3/nIIl/5iFKf92oVb/Mdeu/0HB - iv+bexn/E9Sl/jHAg/+ncgr/rG8G/6xvBv+sbwb/rG8G/4iFIf8hw2v+X508/6ZyCf+sbwb/rG8G/4SA - Hf8cqlj/TpI6/59zDP6sbwb/rG8G/6xvBv+sbwb/rG8G/6xvBv+sbwb/rG8F/qxvBv+sbwb/rG8G/6xv - Bv+sbwb/j2AQ/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/RERE/zY2Nv4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8EBAT/ICAg/zAwMP8yMjL+MjIy/zEx - Mf8bGxv/AwMD/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8+Pj7/6urq/vv7 - +//09PT/5+fn/9jY2P/Jycn/ampq/1lZWf92dnb+KSkp/8zMzP/MzMz/zMzM/8zMzP/MzMz/wsLC/zAw - MP4BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA4AAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAD3AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/DAwM/zo6Ov9CQkL/QkJC/0JCQv9CQkL+QkJC/0JCQv9CQkL/QkJC/0JC - Qv9HR0f/dHR0/5iYmP6ZmZn/mZmZ/5mZmf+ZmZn/mZmZ/5mZmf96enr/l5eX/qioqP+oqKj/qKio/6io - qP+oqKj/qKio/6ioqP+oqKj+qKio/4ODg/8gICD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/Hx8f/k1NTf8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+Pj4+/4Zf - If+rawb/q2sG/6trBv+rawb/q2sG/6trBf6rawb/q2sG/6trBv+rawb/q2sG/6trBv+rawb/q2sF/qtr - Bv+rawb/q2sG/41ZLv8hHdD/Qjin/6trBv+rawX+pWoR/41sRP+HclX/jHdQ/510Kv+pbQv/q2sG/3CY - gP5Dv+X/cJ2G/4aMWP9mrqj/TM3s/5aBOf+rawb/nnso/mfFwv9yu6r/dL+s/2Tf6P97vqT/c9LG/5Ge - Y/+Bx6j+h7+Y/6Z2GP+edhj/L9W5/wD///8A////AP///1qwev6rawb/q2sG/6trBv+rawb/q2sG/6tr - Bv+rawb/q2sF/qtrBv+rawb/q2sG/6trBv+rawb/q2sG/5KXTP9j38H+VuXI/1TXsv9B377/L+XF/yrd - uP9wm1H/pm8L/y3Biv4jyJD/hoQp/6trBv+rawb/q2sG/6trBv+WeBT/PrBV/j6vU/+XeBP/q2sG/6tr - Bv+Lehj/KqNQ/yefT/+GeBn+qmwG/6trBv+rawb/q2sG/6trBv+rawb/q2sG/6trBf6rawb/q2sG/6tr - Bv+rawb/q2sG/45eEP8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/0VFRf80NDT+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/OTk5/+Li - 4v39/f3++Pj4/+7u7v/g4OD/1dXV/5qamv9OTk7/Kioq/mNjY//MzMz/zMzM/8zMzP/MzMz/zMzM/8PD - w/4kJCT+AQEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAOAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAAAA9gAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/DQ0N/3R0dP+hoaH+sLCw/7Kysv+ysrL/sbGx/6ioqP+ZmZn/enp6/0BAQP4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/jMzM/8uLi7/Dg4O/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/xUVFf5TU1P/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/j4+ - Pv+FXCH/qWcG/6lnBv+pZwb/qWcG/6lnBv+oZwX+qWcG/6lnBv+pZwb/qWcG/6lnBv+pZwb/qWcG/6hn - Bf6pZwb/qWcG/6lnBv+pZwb/SzSR/yYq0v+cYhv/qGcF/qlnBv+pZwb/qWcG/6lnBv+pZwb/qWcG/6ln - Bv+Zcyf+U7DA/26dif+gbxn/caKM/1PE2f+XezL/qWcG/6NuFf57qIj/Y8/U/2TW3P9i4u7/m38y/3y/ - pf+Bu5v/g76b/nzXw/+ieSP/oW4R/025jP8A////Avz6/wH9/P9IvpT+qWcG/6lnBv+pZwb/qWcG/6ln - Bv+pZwb/qWcG/6hnBf6pZwb/qWcG/6lnBv+pZwb/qWcG/6lnBv+bgS7/a9Cq/lDt1v9T1rL/VMib/0DS - qf8v2LH/b5lR/6RrDP9bnlf+EtOg/1ydUv+maQj/qWcG/6lnBv+pZwb/oG0M/1WeQ/4vuF3/jXkY/6ln - Bv+oZwb/en4i/xStXf8MqV//Q409/pdtDv+pZwb/qWcG/6lnBv+pZwb/qWcG/6lnBv+oZwX+qWcG/6ln - Bv+pZwb/qWcG/6lnBv+MWhD/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/9KSkr/KSkp/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yYm - Jv+5ubn6/f39+/z8/P/09PT/6enp/97e3v/FxcX/WVlZ/xEREf6ioqL/zMzM/8zMzP/MzMz/zc3N/8/P - z/+8vLzoCQkJ/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAADMAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaQAAAPEAAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/g0NDf50dHT+o6Oj/sDAwP7Ly8v+y8vL/snJyf6xsbH+mJiY/np6ev4ZGRn+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4VFRX+U1NT/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4+Pj7+g1oh/qZjBf6mYwX+pmMF/qZjBf6mYwX+pmMF/qZjBf6mYwX+pmMF/qZjBf6mYwX+pmMF/qZj - Bf6mYwX+pmMF/qZjBf6mYwX+pmMF/n5NQv4cJuL+eFJT/qZjBf6mYwX+pmMF/qZjBf6mYwX+pmMF/qZj - Bf6mYwX+pmMF/n+GXf5Mu9P+f4tg/myjlP5Yvcr+l3Ut/qZjBf6lZAj+io5Z/l/W4v5f3uz+Ztnf/qJr - FP6TjE7+dtHC/nvNt/5349j+m4Q7/qNmCv5pm1/+E+zi/lGxg/4k28f+aZpf/qZjBf6mYwX+pmMF/qZj - Bf6mYwX+pmMF/qZjBf6mYwX+pmMF/qZjBf6mYwX+pmMF/qZjBf6mYwX+o2kP/nHBlP5T6M/+ho5H/pJ7 - Kv6CiT7+R72K/jTImP6NdyP+i3Yh/h3KlP41uHj+jnUd/qZjBf6mYwX+pmMF/qJlCP5dljz+I79l/oZ5 - HP6mYwX+oGcK/luMNP4Srl/+PZNC/iKWTv5LgjX+pmMF/qZjBf6mYwX+pmMF/qZjBf6mYwX+pmMF/qZj - Bf6mYwX+pmMF/qZjBf6mYwX+ilcQ/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+TU1N/iIi - Iv4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4LCwv+eXl5+fPz8/n9/f3++vr6/vLy8v7o6Oj+39/f/rCwsP6SkpL+ysrK/tHR0f7R0dH+0dHR/tPT - 0/7Y2Nj9f39/yQQEBP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAArgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF0AAADvAAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8NDQ3/dHR0/5qamv6tra3/x8fH/8zMzP/FxcX/oKCg/5mZmf96enr/GRkZ/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/FRUV/lNTU/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+Pj4+/4JYIf+lXwb/pV8G/6VfBv+lXwb/pV8G/6VfBf6lXwb/pV8G/6VfBv+lXwb/pV8G/6Vf - Bv+lXwb/pV8F/qVfBv+lXwb/pV8G/6VfBv+fXA7/Ly7E/1BDlP+hXgz+pV8G/6VfBv+lXwb/nmUZ/3iH - h/+KfVr/pV8G/6VfBf6fZRP/YqSi/1mxuv9iraz/WL3L/5ZyLf+lXwb/pV8F/o+CRv9jz9X/X+Du/23L - xP+iZQ//oGoX/4Sviv9x6OP+c+7p/5GZYf+kYAj/fYVA/x3h0P9tlFj/jXUp/5xnEv6iYQn/i3gs/4l6 - Lv+lXwb/pV8G/6VfBv+lXwb/pV8F/qVfBv+lXwb/pV8G/6VfBv+lXwb/pV8G/6VfBv99qXP+VOXL/4qH - QP+lXwb/o2EI/4CDOP8xyJr/XptZ/51lDv5Unln/ENOc/16WTP+gYwr/pV8G/6VfBv+aZw7/TZ9I/iO+ - Zf+Fdhz/pV8G/5ZoD/80oUz/H6dX/3N4I/9dfS3+GpJP/3NvHv+lXwb/pV8G/6VfBv+lXwb/pV8G/6Vf - Bf6lXwb/pV8G/6VfBv+lXwb/pV8G/4lUEP8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/01N - Tf8iIiL+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/zQ0NP3CwsL3/f39/P39/f/5+fn/8/Pz/+zs7P/l5eX/4ODg/t3d3f/c3Nz/3d3d/97e - 3v/h4eH+39/fuCcnJ+sAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AKkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABaAAAA7wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/DQ0N/3R0dP+YmJj+mpqa/7W1tf/Jycn/srKy/5mZmf+ZmZn/enp6/xkZ - Gf4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xQUFP5UVFT/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/j4+Pv+BVSH/o1sG/6NbBv+jWwb/o1sG/6NbBv+iWwX+o1sG/6NbBv+jWwb/o1sG/6Nb - Bv+jWwb/o1sG/6JbBf6jWwb/o1sG/6NbBv+jWwb/o1sG/3ZLT/8sOdX/clJf/qBbC/+iWwb/o1wG/5hk - I/9gm8z/dpKX/59hE/+iWwX+oF4K/3eLbf9FyO3/Scrs/1i9y/+Uby3/o1sG/6JbBf6VczD/bL62/1/g - 7v9vxr3/oGEP/6JcBv+YeDT/e8u2/nPw7P+FvZr/mWcX/0a3kf8H9/P/TrCG/5llFP+fXwr+mmQT/1en - ef9CvJn/mmQS/6NbBv+jWwb/o1sG/6JbBf6jWwb/o1sG/6NbBv+jWwb/o1sG/6NbBv+iXQf/h5BR/ljf - wf9vq3f/n2EN/59gC/+Idyv/NsOT/zC/jv+eXwv+h3Ii/yq9gf8iw4X/dIAy/51gC/+fXgj/f3ch/yO+ - af4kvGT/hHMc/6NcBv+KbBX/GbFd/y6fTf+EbBf/n10I/kl+Nf8giEj/fmYX/59cB/+iXAb/o1sG/6Nb - Bv+iWwX+o1sG/6NbBv+jWwb/o1sG/6NbBv+IUhD/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/9NTU3/IiIi/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8CAgL+UVFR+tjY2PX9/f39/f39//v7+//39/f/8/Pz/+/v7/7t7e3/7Ozs/+zs - 7P7t7e385ubmxElJSagCAgL4AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAACCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANwAAAOkAAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/w0NDf90dHT/mJiY/pmZmf+cnJz/srKy/5ycnP+ZmZn/mZmZ/3p6 - ev8ZGRn+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8DAwP+W1tb/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4+Pj7/gFMh/6FYBv+hWAb/oVgG/6FYBv+hWAb/oVgF/qFYBv+hWAb/oVgG/6FY - Bv+hWAb/oVgG/6FYBv+hWAX+oVgG/6FYBv+hWAb/oVgG/6FYBv+ZVRP/VEWO/ztKyP5tWG//h11A/4ti - Pf+BcF//WqDf/2yfuf+Wai//oVgF/pFoKv9Ivt3/RMnw/0fM8P9YvMv/k2wt/6FYBv+hWAX+knM1/2rA - vP9e4O7/drWj/59cDf+hWAb/oFsK/4qdcP5159//eeba/4uLUf8vzrX/A/r4/yPbyP9Up3z/XZ5u/lqh - c/8xy7L/Nces/5BpH/+hWAb/oVgG/6FYBv+hWAX+oVgG/6FYBv+hWAb/oVgG/6FYBv+hWAb/m2YZ/2+9 - lf5R69P/T9m5/2WreP9lomn/RL6P/yDZsf9AsHr/nlsK/p9ZB/92fDH/KL19/x3FhP9Smk7/X44+/zur - Wf8N0Hr+OqlS/45nE/+bXQr/SZdA/w25Zv8xnEv/g2kX/6BYBv5ecyr/C49T/yF/RP9jaCL/l1oK/6FY - Bv+hWAb/oVgF/qFYBv+hWAb/oVgG/6FYBv+hWAb/h08Q/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/T09P/x4eHv4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gUFBf9nZ2f8zs7O+vj4+P3+/v7+/f39/vv7+/76+vr++fn5/vn5 - +f3w8PD30dHR5GZmZqsLCwvmAAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4AAADoAAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8NDQ3/dHR0/5iYmP6ZmZn/mZmZ/5mZmf+ZmZn/mZmZ/5mZ - mf96enr/GRkZ/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/l5eXv8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+Pj4+/39RIf+fVAb/n1QG/59UBv+fVAb/n1QG/59UBf6fVAb/n1QG/59U - Bv+fVAb/n1QG/59UBv+fVAb/n1QF/p9UBv+fVAb/n1QG/59UBv+fVAb/n1QG/5FSIP9ZTo/+Nlvj/zVu - 9/8/gfj/SZb4/1Om8v9po8L/kG9A/59UBf6SYyX/SrzZ/0bG6v9RvtX/aKOd/5VjIv+fVAb/n1QF/ol/ - UP9f1eH/X+Du/3ykiP+eWAv/n1QG/59UBv+Yaif+ha6L/33Vwv991b7/bpJf/z67nf8i2cn/Eevi/w7u - 5/4A////AP///zTGrP+PZh//n1QG/59UBv+fVAb/n1QF/p9UBv+fVAb/n1QG/59UBv+fVAb/n1QG/5td - Ev9wuZD+UevU/0Tq0P8558r/MOPD/yzZtf8qzqT/dns4/55VB/6fVAb/nVYI/3d2Lf80sGz/D9CM/wzS - iP8N0ID/HcFt/mmBL/+cVwj/jmER/xm5Yf8NuWb/EK9f/1Z/Mv+YWAr+fGMY/xiJTP8OhE7/KHY+/31d - Ff+fVAb/n1QG/59UBf6fVAb/n1QG/59UBv+fVAb/n1QG/4VMEP8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/1VVVf8RERH+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/zQ0NP+QkJD9vLy8/czMzP3MzMz9zMzM/cvL - y/23t7f7iIiI7TIyMukCAgL7AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAFYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAA5gAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/DQ0N/2xsbP9+fn7+fn5+/35+fv9+fn7/fn5+/35+ - fv9+fn7/b29v/xkZGf4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP5eXl7/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/j4+Pv9+TyH/nlEG/55RBv+eUQb/nlEG/55RBv+dUQX+nlEG/55R - Bv+eUQb/nlEG/55RBv+eUQb/nlEG/51RBf6eUQb/nlEG/55RBv+eUQb/nlEG/55RBv+eUQb/kVEe/nFV - Zf9gYZL/Y22Z/2p6mP91fYP/hnNW/5ddIP+dUQX+nFIJ/3t7Wv9yiXT/gHlT/5BkKv+cUwr/nlEG/51R - Bf6VYSH/golk/3+Vdf+Pcz3/nVII/55RBv+eUQb/nVEF/ppeGP+TeD3/kYZQ/5pdF/+TXBb/fXQ4/2iK - WP9kj1/+UaN9/1Gjff9qiFX/llkS/55RBv+eUQb/nlEG/51RBf6eUQb/nlEG/55RBv+eUQb/nlEG/55R - Bv+eUQb/ins+/nmZZ/9ymmf/bZhk/2mVX/9silH/c34//5ZZD/+dUQX+nlEG/55RBv+bUwj/gGoh/1yL - Q/9XjkT/WY1A/217Lf6SWg7/nlEG/51SBv9meyv/V4I0/1l9Mf92aR7/mFQJ/pxSB/9pZiH/XGgm/2Vh - IP+LVg7/nlEG/55RBv+dUQX+nlEG/55RBv+eUQb/nlEG/55RBv+EShD/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/9XV1f/Dg4O/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/BQUF/ycnJ/85OTn/Ozs7/zo6 - Ov46Ojr/ICAg/wICAv8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA - AOEAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/w0NDf95eXn/qamp/qqqqv+qqqr/qqqq/6qq - qv+qqqr/qqqq/4GBgf8ZGRn+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+Xl5e/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4+Pj7/fU0h/5xOBv+cTgb/nE4G/5xOBv+cTgb/nE0F/pxO - Bv+cTgb/nE4G/5xOBv+cTgb/nE4G/5xOBv+cTQX+nE4G/5xOBv+cTgb/nE4G/5xOBv+cTgb/nE4G/5xN - Bf6bTgj/lVAV/5RRGf+VUxn/mFEQ/5xOBv+cTgb/nE0F/pxOBv+cTgb/m08J/5xOBv+cTgb/nE4G/5xO - Bv+cTQX+nE4G/5xOBv+cTgb/nE4G/5xOBv+cTgb/nE4G/5xNBf6cTgb/nE4G/5xOBv+cTgb/nE4G/5xO - Bv+cTgb/nE0F/pxOBv+cTgb/nE4G/5xOBv+cTgb/nE4G/5xOBv+cTQX+nE4G/5xOBv+cTgb/nE4G/5xO - Bv+cTgb/nE4G/5xNBf6cTgb/nE4G/5xOBv+cTgb/nE4G/5xOBv+cTgb/nE0F/pxOBv+cTgb/nE4G/5xO - Bv+cTgb/nE4G/5xOBv+cTQX+nE4G/5xOBv+cTgb/nE4G/5xOBv+cTgb/nE4G/5xNBf6cTgb/nE4G/5xO - Bv+cTgb/nE4G/5xOBv+cTgb/nE0F/pxOBv+cTgb/nE4G/5xOBv+cTgb/g0cQ/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/V1dX/w4ODv4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAADgAAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8NDQ3/goKC/8vLy/7MzMz/zMzM/8zM - zP/MzMz/zMzM/8zMzP+Ojo7/GRkZ/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/lZW - Vv82Njb/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+Pj4+/3xKIf+aSQb/mkkG/5pJBv+aSQb/mkkG/5pJ - Bf6aSQb/mkkG/5pJBv+aSQb/mkkG/5pJBv+aSQb/mkkF/ppJBv+aSQb/mkkG/5pJBv+aSQb/mkkG/5pJ - Bv+aSQX+mkkG/5pJBv+aSQb/mkkG/5pJBv+aSQb/mkkG/5pJBf6aSQb/mkkG/5pJBv+aSQb/mkkG/5pJ - Bv+aSQb/mkkF/ppJBv+aSQb/mkkG/5pJBv+aSQb/mkkG/5pJBv+aSQX+mkkG/5pJBv+aSQb/mkkG/5pJ - Bv+aSQb/mkkG/5pJBf6aSQb/mkkG/5pJBv+aSQb/mkkG/5pJBv+aSQb/mkkF/ppJBv+aSQb/mkkG/5pJ - Bv+aSQb/mkkG/5pJBv+aSQX+mkkG/5pJBv+aSQb/mkkG/5pJBv+aSQb/mkkG/5pJBf6aSQb/mkkG/5pJ - Bv+aSQb/mkkG/5pJBv+aSQb/mkkF/ppJBv+aSQb/mkkG/5pJBv+aSQb/mkkG/5pJBv+aSQX+mkkG/5pJ - Bv+aSQb/mkkG/5pJBv+aSQb/mkkG/5pJBf6aSQb/mkkG/5pJBv+aSQb/mkkG/4FEEP8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/1dXV/8ODg7+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAwwAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+CwsL/ldXV/5eXl7+X19f/l9f - X/5fX1/+X19f/l9fX/5fX1/+WVlZ/hUVFf4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP5KSkr+Ozs7/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/j4+Pv56SCH+l0UF/pdFBf6XRQX+l0UF/pdF - Bf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdF - Bf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdF - Bf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdF - Bf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdF - Bf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdF - Bf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdF - Bf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdFBf6XRQX+l0UF/pdFBf5/QRD+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jY2Nv5PT0/+DAwM/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAO0AAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAKoAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+SkpK/zs7O/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4+Pj7/eUUh/5VBBv+VQQb/lUEG/5VB - Bv+VQQb/lUEF/pVBBv+VQQb/lUEG/5VBBv+VQQb/lUEG/5VBBv+VQQX+lUEG/5VBBv+VQQb/lUEG/5VB - Bv+VQQb/lUEG/5VBBf6VQQb/lUEG/5VBBv+VQQb/lUEG/5VBBv+VQQb/lUEF/pVBBv+VQQb/lUEG/5VB - Bv+VQQb/lUEG/5VBBv+VQQX+lUEG/5VBBv+VQQb/lUEG/5VBBv+VQQb/lUEG/5VBBf6VQQb/lUEG/5VB - Bv+VQQb/lUEG/5VBBv+VQQb/lUEF/pVBBv+VQQb/lUEG/5VBBv+VQQb/lUEG/5VBBv+VQQX+lUEG/5VB - Bv+VQQb/lUEG/5VBBv+VQQb/lUEG/5VBBf6VQQb/lUEG/5VBBv+VQQb/lUEG/5VBBv+VQQb/lUEF/pVB - Bv+VQQb/lUEG/5VBBv+VQQb/lUEG/5VBBv+VQQX+lUEG/5VBBv+VQQb/lUEG/5VBBv+VQQb/lUEG/5VB - Bf6VQQb/lUEG/5VBBv+VQQb/lUEG/5VBBv+VQQb/lUEF/pVBBv+VQQb/lUEG/5VBBv+VQQb/fj0Q/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/85OTn/SEhI/wsLC/4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAADGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAACZAAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/kpKSv87Ozv/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+Pj4+/3hDIf+UPQb/lD0G/5Q9 - Bv+UPQb/lD0G/5Q9Bf6UPQb/lD0G/5Q9Bv+UPQb/lD0G/5Q9Bv+UPQb/lD0F/pQ9Bv+UPQb/lD0G/5Q9 - Bv+UPQb/lD0G/5Q9Bv+UPQX+lD0G/5Q9Bv+UPQb/lD0G/5Q9Bv+UPQb/lD0G/5Q9Bf6UPQb/lD0G/5Q9 - Bv+UPQb/lD0G/5Q9Bv+UPQb/lD0F/pQ9Bv+UPQb/lD0G/5Q9Bv+UPQb/lD0G/5Q9Bv+UPQX+lD0G/5Q9 - Bv+UPQb/lD0G/5Q9Bv+UPQb/lD0G/5Q9Bf6UPQb/lD0G/5Q9Bv+UPQb/lD0G/5Q9Bv+UPQb/lD0F/pQ9 - Bv+UPQb/lD0G/5Q9Bv+UPQb/lD0G/5Q9Bv+UPQX+lD0G/5Q9Bv+UPQb/lD0G/5Q9Bv+UPQb/lD0G/5Q9 - Bf6UPQb/lD0G/5Q9Bv+UPQb/lD0G/5Q9Bv+UPQb/lD0F/pQ9Bv+UPQb/lD0G/5Q9Bv+UPQb/lD0G/5Q9 - Bv+UPQX+lD0G/5Q9Bv+UPQb/lD0G/5Q9Bv+UPQb/lD0G/5Q9Bf6UPQb/lD0G/5Q9Bv+UPQb/lD0G/3w7 - EP8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/OTk5/0hISP8LCwv+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAArQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP5KSkr/Ozs7/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/j4+Pv93QSH/kjoG/5I6 - Bv+SOgb/kjoG/5I6Bv+SOgX+kjoG/5I6Bv+SOgb/kjoG/5I6Bv+SOgb/kjoG/5I6Bf6SOgb/kjoG/5I6 - Bv+SOgb/kjoG/5I6Bv+SOgb/kjoF/pI6Bv+SOgb/kjoG/5I6Bv+SOgb/kjoG/5I6Bv+SOgX+kjoG/5I6 - Bv+SOgb/kjoG/5I6Bv+SOgb/kjoG/5I6Bf6SOgb/kjoG/5I6Bv+SOgb/kjoG/5I6Bv+SOgb/kjoF/pI6 - Bv+SOgb/kjoG/5I6Bv+SOgb/kjoG/5I6Bv+SOgX+kjoG/5I6Bv+SOgb/kjoG/5I6Bv+SOgb/kjoG/5I6 - Bf6SOgb/kjoG/5I6Bv+SOgb/kjoG/5I6Bv+SOgb/kjoF/pI6Bv+SOgb/kjoG/5I6Bv+SOgb/kjoG/5I6 - Bv+SOgX+kjoG/5I6Bv+SOgb/kjoG/5I6Bv+SOgb/kjoG/5I6Bf6SOgb/kjoG/5I6Bv+SOgb/kjoG/5I6 - Bv+SOgb/kjoF/pI6Bv+SOgb/kjoG/5I6Bv+SOgb/kjoG/5I6Bv+SOgX+kjoG/5I6Bv+SOgb/kjoG/5I6 - Bv97OBD/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zk5Of9ISEj/CwsL/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAI0AAAADAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHMAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+PDw8/0FBQf8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4+Pj7/dj8h/5A2 - Bv+QNgb/kDYG/5A2Bv+QNgb/kDYF/pA2Bv+QNgb/kDYG/5A2Bv+QNgb/kDYG/5A2Bv+QNgX+kDYG/5A2 - Bv+QNgb/kDYG/5A2Bv+QNgb/kDYG/5A2Bf6QNgb/kDYG/5A2Bv+QNgb/kDYG/5A2Bv+QNgb/kDYF/pA2 - Bv+QNgb/kDYG/5A2Bv+QNgb/kDYG/5A2Bv+QNgX+kDYG/5A2Bv+QNgb/kDYG/5A2Bv+QNgb/kDYG/5A2 - Bf6QNgb/kDYG/5A2Bv+QNgb/kDYG/5A2Bv+QNgb/kDYF/pA2Bv+QNgb/kDYG/5A2Bv+QNgb/kDYG/5A2 - Bv+QNgX+kDYG/5A2Bv+QNgb/kDYG/5A2Bv+QNgb/kDYG/5A2Bf6QNgb/kDYG/5A2Bv+QNgb/kDYG/5A2 - Bv+QNgb/kDYF/pA2Bv+QNgb/kDYG/5A2Bv+QNgb/kDYG/5A2Bv+QNgX+kDYG/5A2Bv+QNgb/kDYG/5A2 - Bv+QNgb/kDYG/5A2Bf6QNgb/kDYG/5A2Bv+QNgb/kDYG/5A2Bv+QNgb/kDYF/pA2Bv+QNgb/kDYG/5A2 - Bv+QNgb/ejUQ/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/85OTn/SEhI/wsLC/4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAABsAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/jY2Nv9ERET/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+Pj4+/3U8 - If+PMwb/jzMG/48zBv+PMwb/jzMG/48zBf6PMwb/jzMG/48zBv+PMwb/jzMG/48zBv+PMwb/jzMF/o8z - Bv+PMwb/jzMG/48zBv+PMwb/jzMG/48zBv+PMwX+jzMG/48zBv+PMwb/jzMG/48zBv+PMwb/jzMG/48z - Bf6PMwb/jzMG/48zBv+PMwb/jzMG/48zBv+PMwb/jzMF/o8zBv+PMwb/jzMG/48zBv+PMwb/jzMG/48z - Bv+PMwX+jzMG/48zBv+PMwb/jzMG/48zBv+PMwb/jzMG/48zBf6PMwb/jzMG/48zBv+PMwb/jzMG/48z - Bv+PMwb/jzMF/o8zBv+PMwb/jzMG/48zBv+PMwb/jzMG/48zBv+PMwX+jzMG/48zBv+PMwb/jzMG/48z - Bv+PMwb/jzMG/48zBf6PMwb/jzMG/48zBv+PMwb/jzMG/48zBv+PMwb/jzMF/o8zBv+PMwb/jzMG/48z - Bv+PMwb/jzMG/48zBv+PMwX+jzMG/48zBv+PMwb/jzMG/48zBv+PMwb/jzMG/48zBf6PMwb/jzMG/48z - Bv+PMwb/jzMG/3kzEP8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/Pz8//zw8PP8ICAj+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAAVQAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOQAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP42Njb/RERE/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/j4+ - Pv9zOiH/jC8G/4wvBv+MLwb/jC8G/4wvBv+MLwX+jC8G/4wvBv+MLwb/jC8G/4wvBv+MLwb/jC8G/4wv - Bf6MLwb/jC8G/4wvBv+MLwb/jC8G/4wvBv+MLwb/jC8F/owvBv+MLwb/jC8G/4wvBv+MLwb/jC8G/4wv - Bv+MLwX+jC8G/4wvBv+MLwb/jC8G/4wvBv+MLwb/jC8G/4wvBf6MLwb/jC8G/4wvBv+MLwb/jC8G/4wv - Bv+MLwb/jC8F/owvBv+MLwb/jC8G/4wvBv+MLwb/jC8G/4wvBv+MLwX+jC8G/4wvBv+MLwb/jC8G/4wv - Bv+MLwb/jC8G/4wvBf6MLwb/jC8G/4wvBv+MLwb/jC8G/4wvBv+MLwb/jC8F/owvBv+MLwb/jC8G/4wv - Bv+MLwb/jC8G/4wvBv+MLwX+jC8G/4wvBv+MLwb/jC8G/4wvBv+MLwb/jC8G/4wvBf6MLwb/jC8G/4wv - Bv+MLwb/jC8G/4wvBv+MLwb/jC8F/owvBv+MLwb/jC8G/4wvBv+MLwb/jC8G/4wvBv+MLwX+jC8G/4wv - Bv+MLwb/jC8G/4wvBv93MBD/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/0FBQf86Ojr/BwcH/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/QAAACwAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+NjY2/0RERP8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4+Pj7/cjgh/4srBv+LKwb/iysG/4srBv+LKwb/iysF/osrBv+LKwb/iysG/4srBv+LKwb/iysG/4sr - Bv+LKwX+iysG/4srBv+LKwb/iysG/4srBv+LKwb/iysG/4srBf6LKwb/iysG/4srBv+LKwb/iysG/4sr - Bv+LKwb/iysF/osrBv+LKwb/iysG/4srBv+LKwb/iysG/4srBv+LKwX+iysG/4srBv+LKwb/iysG/4sr - Bv+LKwb/iysG/4srBf6LKwb/iysG/4srBv+LKwb/iysG/4srBv+LKwb/iysF/osrBv+LKwb/iysG/4sr - Bv+LKwb/iysG/4srBv+LKwX+iysG/4srBv+LKwb/iysG/4srBv+LKwb/iysG/4srBf6LKwb/iysG/4sr - Bv+LKwb/iysG/4srBv+LKwb/iysF/osrBv+LKwb/iysG/4srBv+LKwb/iysG/4srBv+LKwX+iysG/4sr - Bv+LKwb/iysG/4srBv+LKwb/iysG/4srBf6LKwb/iysG/4srBv+LKwb/iysG/4srBv+LKwb/iysF/osr - Bv+LKwb/iysG/4srBv+LKwb/di0Q/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/9BQUH/Ojo6/wcH - B/4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAOsAAAAnAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAA7QAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/i8vL/5HR0f+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+Pj4+/nE1If6JJwX+iScF/oknBf6JJwX+iScF/ognBf6JJwX+iScF/oknBf6JJwX+iScF/okn - Bf6JJwX+iCcF/oknBf6JJwX+iScF/oknBf6JJwX+iScF/oknBf6IJwX+iScF/oknBf6JJwX+iScF/okn - Bf6JJwX+iScF/ognBf6JJwX+iScF/oknBf6JJwX+iScF/oknBf6JJwX+iCcF/oknBf6JJwX+iScF/okn - Bf6JJwX+iScF/oknBf6IJwX+iScF/oknBf6JJwX+iScF/oknBf6JJwX+iScF/ognBf6JJwX+iScF/okn - Bf6JJwX+iScF/oknBf6JJwX+iCcF/oknBf6JJwX+iScF/oknBf6JJwX+iScF/oknBf6IJwX+iScF/okn - Bf6JJwX+iScF/oknBf6JJwX+iScF/ognBf6JJwX+iScF/oknBf6JJwX+iScF/oknBf6JJwX+iCcF/okn - Bf6JJwX+iScF/oknBf6JJwX+iScF/oknBf6IJwX+iScF/oknBf6JJwX+iScF/oknBf6JJwX+iScF/ogn - Bf6JJwX+iScF/oknBf6JJwX+iScF/nQqEP4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+QEBA/jo6 - Ov4HBwf+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAADOAAAAHwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAM8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4kJCT/TExM/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/j4+Pv9wMyH/hiMG/4YjBv+GIwb/hiMG/4YjBv+GIwX+hiMG/4YjBv+GIwb/hiMG/4Yj - Bv+GIwb/hiMG/4YjBf6GIwb/hiMG/4YjBv+GIwb/hiMG/4YjBv+GIwb/hiMF/oYjBv+GIwb/hiMG/4Yj - Bv+GIwb/hiMG/4YjBv+GIwX+hiMG/4YjBv+GIwb/hiMG/4YjBv+GIwb/hiMG/4YjBf6GIwb/hiMG/4Yj - Bv+GIwb/hiMG/4YjBv+GIwb/hiMF/oYjBv+GIwb/hiMG/4YjBv+GIwb/hiMG/4YjBv+GIwX+hiMG/4Yj - Bv+GIwb/hiMG/4YjBv+GIwb/hiMG/4YjBf6GIwb/hiMG/4YjBv+GIwb/hiMG/4YjBv+GIwb/hiMF/oYj - Bv+GIwb/hiMG/4YjBv+GIwb/hiMG/4YjBv+GIwX+hiMG/4YjBv+GIwb/hiMG/4YjBv+GIwb/hiMG/4Yj - Bf6GIwb/hiMG/4YjBv+GIwb/hiMG/4YjBv+GIwb/hiMF/oYjBv+GIwb/hiMG/4YjBv+GIwb/hiMG/4Yj - Bv+GIwX+hiMG/4YjBv+GIwb/hiMG/4YjBv9yJxD/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/0RE - RP8zMzP/BQUF/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAAtQAA - ABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAACkAAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+IiIi/01NTf8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4+Pj7/bzAh/4UfBv+FHwb/hR8G/4UfBv+FHwb/hR8F/oUfBv+FHwb/hR8G/4Uf - Bv+FHwb/hR8G/4UfBv+FHwX+hR8G/4UfBv+FHwb/hR8G/4UfBv+FHwb/hR8G/4UfBf6FHwb/hR8G/4Uf - Bv+FHwb/hR8G/4UfBv+FHwb/hR8F/oUfBv+FHwb/hR8G/4UfBv+FHwb/hR8G/4UfBv+FHwX+hR8G/4Uf - Bv+FHwb/hR8G/4UfBv+FHwb/hR8G/4UfBf6FHwb/hR8G/4UfBv+FHwb/hR8G/4UfBv+FHwb/hR8F/oUf - Bv+FHwb/hR8G/4UfBv+FHwb/hR8G/4UfBv+FHwX+hR8G/4UfBv+FHwb/hR8G/4UfBv+FHwb/hR8G/4Uf - Bf6FHwb/hR8G/4UfBv+FHwb/hR8G/4UfBv+FHwb/hR8F/oUfBv+FHwb/hR8G/4UfBv+FHwb/hR8G/4Uf - Bv+FHwX+hR8G/4UfBv+FHwb/hR8G/4UfBv+FHwb/hR8G/4UfBf6FHwb/hR8G/4UfBv+FHwb/hR8G/4Uf - Bv+FHwb/hR8F/oUfBv+FHwb/hR8G/4UfBv+FHwb/cSQQ/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/9HR0f/LCws/wMDA/4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AKAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAlAAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/iIiIv9NTU3/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+Pj4+/20uIf+DHAb/gxwG/4McBv+DHAb/gxwG/4McBf6DHAb/gxwG/4Mc - Bv+DHAb/gxwG/4McBv+DHAb/gxwF/oMcBv+DHAb/gxwG/4McBv+DHAb/gxwG/4McBv+DHAX+gxwG/4Mc - Bv+DHAb/gxwG/4McBv+DHAb/gxwG/4McBf6DHAb/gxwG/4McBv+DHAb/gxwG/4McBv+DHAb/gxwF/oMc - Bv+DHAb/gxwG/4McBv+DHAb/gxwG/4McBv+DHAX+gxwG/4McBv+DHAb/gxwG/4McBv+DHAb/gxwG/4Mc - Bf6DHAb/gxwG/4McBv+DHAb/gxwG/4McBv+DHAb/gxwF/oMcBv+DHAb/gxwG/4McBv+DHAb/gxwG/4Mc - Bv+DHAX+gxwG/4McBv+DHAb/gxwG/4McBv+DHAb/gxwG/4McBf6DHAb/gxwG/4McBv+DHAb/gxwG/4Mc - Bv+DHAb/gxwF/oMcBv+DHAb/gxwG/4McBv+DHAb/gxwG/4McBv+DHAX+gxwG/4McBv+DHAb/gxwG/4Mc - Bv+DHAb/gxwG/4McBf6DHAb/gxwG/4McBv+DHAb/gxwG/28hEP8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/SEhI/ysrK/8DAwP+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAEA/wABAP8AAQD/AAEA/gABAP8AAQD/AAEA/wABAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAACAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA - AF4AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4hISH/Tk5O/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/j4+Pv9sLCH/gRgG/4EYBv+BGAb/gRgG/4EYBv+BGAX+gRgG/4EY - Bv+BGAb/gRgG/4EYBv+BGAb/gRgG/4EYBf6BGAb/gRgG/4EYBv+BGAb/gRgG/4EYBv+BGAb/gRgF/oEY - Bv+BGAb/gRgG/4EYBv+BGAb/gRgG/4EYBv+BGAX+gRgG/4EYBv+BGAb/gRgG/4EYBv+BGAb/gRgG/4EY - Bf6BGAb/gRgG/4EYBv+BGAb/gRgG/4EYBv+BGAb/gRgF/oEYBv+BGAb/gRgG/4EYBv+BGAb/gRgG/4EY - Bv+BGAX+gRgG/4EYBv+BGAb/gRgG/4EYBv+BGAb/gRgG/4EYBf6BGAb/gRgG/4EYBv+BGAb/gRgG/4EY - Bv+BGAb/gRgF/oEYBv+BGAb/gRgG/4EYBv+BGAb/gRgG/4EYBv+BGAX+gRgG/4EYBv+BGAb/gRgG/4EY - Bv+BGAb/gRgG/4EYBf6BGAb/gRgG/4EYBv+BGAb/gRgG/4EYBv+BGAb/gRgF/oEYBv+BGAb/gRgG/4EY - Bv+BGAb/gRgG/4EYBv+BGAX+gRgG/4EYBv+BGAb/gRgG/4EYBv9uHhD/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/0hISP8rKyv/AwMD/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAQD/AAkA/wASAP8AGwD/ACEA/wAjAP4AJAD/ACUA/wAmAP8AJAD/ABwA/wASAP8ABgD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAAbAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABHAAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+GRkZ/1JS - Uv8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4+Pj7/ayoh/38VBv9/FQb/fxUG/38VBv9/FQb/fxUF/n8V - Bv9/FQb/fxUG/38VBv9/FQb/fxUG/38VBv9/FQX+fxUG/38VBv9/FQb/fxUG/38VBv9/FQb/fxUG/38V - Bf5/FQb/fxUG/38VBv9/FQb/fxUG/38VBv9/FQb/fxUF/n8VBv9/FQb/fxUG/38VBv9/FQb/fxUG/38V - Bv9/FQX+fxUG/38VBv9/FQb/fxUG/38VBv9/FQb/fxUG/38VBf5/FQb/fxUG/38VBv9/FQb/fxUG/38V - Bv9/FQb/fxUF/n8VBv9/FQb/fxUG/38VBv9/FQb/fxUG/38VBv9/FQX+fxUG/38VBv9/FQb/fxUG/38V - Bv9/FQb/fxUG/38VBf5/FQb/fxUG/38VBv9/FQb/fxUG/38VBv9/FQb/fxUF/n8VBv9/FQb/fxUG/38V - Bv9/FQb/fxUG/38VBv9/FQX+fxUG/38VBv9/FQb/fxUG/38VBv9/FQb/fxUG/38VBf5/FQb/fxUG/38V - Bv9/FQb/fxUG/38VBv9/FQb/fxUF/n8VBv9/FQb/fxUG/38VBv9/FQb/bRwQ/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/9ISEj/Kioq/wMDA/4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAQD/AAoA/wAYAP8ALAD/AD8A/wBOAP8AVgD+AFsA/wBeAP8AXQD/AFMA/wBBAP8ALAD/ABcA/wAF - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAKAAAAPAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/g4O - Dv9XV1f/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+Pj4+/2ooIf9+EQb/fhEG/34RBv9+EQb/fhEG/34R - Bf5+EQb/fhEG/34RBv9+EQb/fhEG/34RBv9+EQb/fhEF/n4RBv9+EQb/fhEG/34RBv9+EQb/fhEG/34R - Bv9+EQX+fhEG/34RBv9+EQb/fhEG/34RBv9+EQb/fhEG/34RBf5+EQb/fhEG/34RBv9+EQb/fhEG/34R - Bv9+EQb/fhEF/n4RBv9+EQb/fhEG/34RBv9+EQb/fhEG/34RBv9+EQX+fhEG/34RBv9+EQb/fhEG/34R - Bv9+EQb/fhEG/34RBf5+EQb/fhEG/34RBv9+EQb/fhEG/34RBv9+EQb/fhEF/n4RBv9+EQb/fhEG/34R - Bv9+EQb/fhEG/34RBv9+EQX+fhEG/34RBv9+EQb/fhEG/34RBv9+EQb/fhEG/34RBf5+EQb/fhEG/34R - Bv9+EQb/fhEG/34RBv9+EQb/fhEF/n4RBv9+EQb/fhEG/34RBv9+EQb/fhEG/34RBv9+EQX+fhEG/34R - Bv9+EQb/fhEG/34RBv9+EQb/fhEG/34RBf5+EQb/fhEG/34RBv9+EQb/fhEG/2wZEP8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/TExM/yMjI/8BAQH+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAQA/wAUAP8AKwD/AEcA/wBiAP8AfQD/AI0A/gCUAP8AmAD/AJYA/wCEAP8AaAD/AEkA/wAq - AP8ADgD+AAEA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAABRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAB0AAADEAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4UFBT/VFRU/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/j4+Pv9pJSH/ew0G/3sNBv97DQb/ew0G/3sN - Bv97DQX+ew0G/3sNBv97DQb/ew0G/3sNBv97DQb/ew0G/3sNBf57DQb/ew0G/3sNBv97DQb/ew0G/3sN - Bv97DQb/ew0F/nsNBv97DQb/ew0G/3sNBv97DQb/ew0G/3sNBv97DQX+ew0G/3sNBv97DQb/ew0G/3sN - Bv97DQb/ew0G/3sNBf57DQb/ew0G/3sNBv97DQb/ew0G/3sNBv97DQb/ew0F/nsNBv97DQb/ew0G/3sN - Bv97DQb/ew0G/3sNBv97DQX+ew0G/3sNBv97DQb/ew0G/3sNBv97DQb/ew0G/3sNBf57DQb/ew0G/3sN - Bv97DQb/ew0G/3sNBv97DQb/ew0F/nsNBv97DQb/ew0G/3sNBv97DQb/ew0G/3sNBv97DQX+ew0G/3sN - Bv97DQb/ew0G/3sNBv97DQb/ew0G/3sNBf57DQb/ew0G/3sNBv97DQb/ew0G/3sNBv97DQb/ew0F/nsN - Bv97DQb/ew0G/3sNBv97DQb/ew0G/3sNBv97DQX+ew0G/3sNBv97DQb/ew0G/3sNBv9qFhD/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/09PT/8dHR3/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAGAP8AHQD/AD0A/wBiAP8AhgD/AKkA/wDCAP4AzgD/ANIA/wDNAP8AswD/AI4A/wBm - AP8APQD/ABYA/gABAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAOAAAAigAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+GBgY/lNTU/4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4+Pj7+aCMh/noJBf56CQX+egkF/noJ - Bf56CQX+egkF/noJBf56CQX+egkF/noJBf56CQX+egkF/noJBf56CQX+egkF/noJBf56CQX+egkF/noJ - Bf56CQX+egkF/noJBf56CQX+egkF/noJBf56CQX+egkF/noJBf56CQX+egkF/noJBf56CQX+egkF/noJ - Bf56CQX+egkF/noJBf56CQX+egkF/noJBf56CQX+egkF/noJBf56CQX+egkF/noJBf56CQX+egkF/noJ - Bf56CQX+egkF/noJBf56CQX+egkF/noJBf56CQX+egkF/noJBf56CQX+egkF/noJBf56CQX+egkF/noJ - Bf56CQX+egkF/noJBf56CQX+egkF/noJBf56CQX+egkF/noJBf56CQX+egkF/noJBf56CQX+egkF/noJ - Bf56CQX+egkF/noJBf56CQX+egkF/noJBf56CQX+egkF/noJBf56CQX+egkF/noJBf56CQX+egkF/noJ - Bf56CQX+egkF/noJBf56CQX+egkF/noJBf56CQX+egkF/noJBf56CQX+egkF/noJBf56CQX+aRMQ/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv5LS0v+ISEh/gEBAf4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4ACAD+ACQA/gBMAP4AeQD+AKYA/gDPAP4A5QD+APEA/gD3AP4A9AD+AN0A/gCx - AP4AfwD+AE0A/gAaAP4AAgD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAFAAAAD2AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gsLC/9HR0f/Pj4+/zMzM/8zMzP/MzMz/zMzM/8yMjL+Pj4+/2UiIv92CQj/dgkI/3YJ - CP92CQj/dgkI/3YJCP52CQj/dgkI/3YJCP92CQj/dgkI/3YJCP92CQj/dgkI/nYJCP92CQj/dgkI/3YJ - CP92CQj/dgkI/3YJCP92CQj+dgkI/3YJCP92CQj/dgkI/3YJCP92CQj/dgkI/3YJCP52CQj/dgkI/3YJ - CP92CQj/dgkI/3YJCP92CQj/dgkI/nYJCP92CQj/dgkI/3YJCP92CQj/dgkI/3YJCP92CQj+dgkI/3YJ - CP92CQj/dgkI/3YJCP92CQj/dgkI/3YJCP52CQj/dgkI/3YJCP92CQj/dgkI/3YJCP92CQj/dgkI/nYJ - CP92CQj/dgkI/3YJCP92CQj/dgkI/3YJCP92CQj+dgkI/3YJCP92CQj/dgkI/3YJCP92CQj/dgkI/3YJ - CP52CQj/dgkI/3YJCP92CQj/dgkI/3YJCP92CQj/dgkI/nYJCP92CQj/dgkI/3YJCP92CQj/dgkI/3YJ - CP92CQj+dgkI/3YJCP92CQj/dgkI/3YJCP92CQj/dgkI/3YJCP52CQj/dgkI/3YJCP92CQj/dgkI/2YT - Ev8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/TU1N/yEhIf8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAgA/wAlAP8AUQD/AIYA/wC3AP8A3AD/AOwA/gD3AP8A/QD/AP4A/wDx - AP8AwgD/AIoA/wBSAP8AGwD+AAIA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAABRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAAAAvwAAAPEAAADzAAAA+AAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4CAgL/KCgo/01NTf84ODj/MzMz/zMzM/8zMzP/MjIy/jU1Nf86Ojr/PDw8/zw8 - PP88PDz/PDw8/zw8PP88PDz+PDw8/zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8PP48PDz/PDw8/zw8 - PP88PDz/PDw8/zw8PP88PDz/PDw8/jw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8PP88PDz+PDw8/zw8 - PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8PP48PDz/PDw8/zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/jw8 - PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8PP88PDz+PDw8/zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8 - PP48PDz/PDw8/zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/jw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8 - PP88PDz+PDw8/zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8PP48PDz/PDw8/zw8PP88PDz/PDw8/zw8 - PP88PDz/PDw8/jw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8PP88PDz+PDw8/zw8PP88PDz/PDw8/zw8 - PP86Ojr/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/NDQ0/05OTv8cHBz/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAIAP8AJQD/AFEA/wCHAP8AuQD/ANsA/wDoAP4A8gD/APoA/wD9 - AP8A8QD/AMMA/wCKAP8AUAD/ABsA/gACAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9AAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAEEAAAB7AAAAfwAAALwAAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wkJCf83Nzf/SUlJ/zc3N/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zs7O/9DQ0P/ExMT/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8ACAD/ACUA/wBRAP8AhwD/ALcA/wDYAP8A4wD+AOsA/wDy - AP8A9QD/AOoA/wC9AP8AhQD/AE4A/wAaAP4AAgD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA6wAAAL8AAAC/AAAAsAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/Dg4O/zc3N/9JSUn/Ozs7/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zQ0NP9FRUX/NTU1/wcHB/8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAgA/wAlAP8AUQD/AIQA/wC0AP8A1AD/AN0A/gDj - AP8A6AD/AOoA/wDeAP8AsgD/AH8A/wBKAP8AGQD+AAIA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAALoAAAAgAAAAIAAAABMAAAACAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8LCwv/Kioq/0xMTP9HR0f/NTU1/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/88PDz/SUlJ/xwcHP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAIAP8AJAD/AEwA/wB4AP8AoQD/AMMA/wDT - AP4A1wD/ANoA/wDYAP8AwgD/AJoA/wBvAP8AQwD/ABgA/gACAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AHoAAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wQEBP8TExP/QEBA/1JS - Uv5DQ0P/NTU1/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/84ODj/T09P/ywsLP8EBAT/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8ABgD/AB0A/wA+AP8AYQD/AIIA/wCf - AP8ArgD+ALAA/wCxAP8ArQD/AJgA/wB4AP8AVgD/ADUA/wASAP4AAQD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlAAAA5AUF - BeoHBwf0CwsL/wwMDP8HBwf/AgIC/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wUF - Bf8WFhb+Pz8//1JSUv9HR0f/Nzc3/zQ0NP8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/jQ0NP8+Pj7/UVFR/y4uLv8CAgL/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAQA/wAUAP8ALAD/AEUA/wBd - AP8AcAD/AHgA/gB5AP8AeQD/AHcA/wBpAP8AUwD/ADoA/wAjAP8ADAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wEBAf8EBAT/AwMD/wAAAMYAAABGAAAARgAAACwAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVQAA - AONRUVH+fHx8/qurq/66urr+gICA/kZGRv4kJCT+FxcX/gYGBv4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4SEhL+MDAw/k1NTf5ISEj+QUFB/j4+Pv45OTn+Nzc3/jMzM/4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIyMv4yMjL+MjIy/jIy - Mv4yMjL+MjIy/jIyMv4yMjL+MjIy/jMzM/40NDT+ODg4/j4+Pv5ISEj+S0tL/hsbG/4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4ACAD+ABcA/gAp - AP4AOAD+AEMA/gBGAP4ARgD+AEYA/gBFAP4APwD+ADEA/gAhAP4AEQD+AAMA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gYGBv4QEBD+HBwc/iYmJv46Ojr+XFxc/ldXV/4jIyP+GRkZ/gEBAf4AAACzAAAAJAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AB4AAACyS0tL/cLCwv/MzMz/zMzM/8zMzP/Ly8v+srKy/5CQkP9aWlr/Nzc3/xoaGv8EBAT/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8ICAj/Hh4e/y8vL/9AQED/QUFB/kZGRv9HR0f/QkJC/z09 - Pf85OTn/NTU1/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/82Njb/OTk5/z09Pf9CQkL/RERE/0RERP9BQUH+KSkp/wgICP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAEA/wAI - AP8AEAD/ABgA/wAdAP8AHgD+AB4A/wAeAP8AHQD/ABsA/wAVAP8ADAD/AAUA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wIC - Av8VFRX/Kysr/z09Pf9bW1v/enp6/5+fn/68vLz/zMzM/8zMzP/MzMz/qKio/2FhYf8EBAT6AAAAhgAA - AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAADAAAAfBMTE/GlpaX/zMzM/8zMzP/MzMz/y8vL/szMzP/MzMz/ycnJ/7Ozs/+MjIz/ZGRk/z8/ - P/8NDQ3+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BgYG/xISEv4iIiL/MjIy/zk5 - Of89PT3/RUVF/0xMTP9NTU3/RkZG/kNDQ/89PT3/OTk5/zQ0NP8zMzP/MzMz/zMzM/8yMjL+MzMz/zMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMz - M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zc3N/85OTn/Ozs7/z8/ - P/8/Pz//RERE/0ZGRv5GRkb/RkZG/0JCQv8/Pz//Nzc3/ysrK/8YGBj/BwcH/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAIA/wADAP8ABQD/AAUA/gAFAP8ABQD/AAUA/wAEAP8AAwD/AAEA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8LCwv/ISEh/kRE - RP9lZWX/hISE/6Kiov+8vLz/ysrK/8zMzP/Ly8v+zMzM/8zMzP/MzMz/zMzM/4qKiv8cHBz/AAAA3AAA - AE0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAACcAAADRVFRU/8zMzP/MzMz/zMzM/8vLy/7MzMz/zMzM/8zMzP/MzMz/zMzM/8bG - xv+xsbH/jY2N/nJycv8/Pz//Dw8P/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8HBwf/Dg4O/xgYGP8gICD/KSkp/y8vL/43Nzf/Pz8//0hISP9RUVH/VFRU/01NTf9LS0v/R0dH/kND - Q/8+Pj7/Ozs7/zo6Ov81NTX/MzMz/zMzM/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIy - Mv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8yMjL+MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zIyMv4zMzP/MzMz/zMzM/8zMzP/MzMz/zMz - M/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8yMjL+MzMz/zMzM/83Nzf/Ojo6/zw8 - PP9DQ0P/Q0ND/0NDQ/5DQ0P/RkZG/0tLS/9MTEz/UVFR/1RUVP9UVFT/VFRU/lNTU/9JSUn/R0dH/0ND - Q/88PDz/Ozs7/zIyMv8vLy/+Kioq/x0dHf8WFhb/EBAQ/wYGBv8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AwMD/yoqKv9eXl7/g4OD/5yc - nP60tLT/yMjI/8zMzP/MzMz/zMzM/8zMzP/MzMz/y8vL/szMzP/MzMz/zMzM/5aWlv8hISH/AAAA/AAA - AKgAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAAfhAQEPajo6P/zMzM/8zMzP/Ly8v+zMzM/8zMzP/MzMz/zMzM/8zM - zP/MzMz/zMzM/8vLy/7Gxsb/tra2/5ycnP9qamr/KCgo/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAf8FBQX+CAgI/wsLC/8PDw//ExMT/xQUFP8mJib/KSkp/zU1 - Nf44ODj/QUFB/0hISP9JSUn/S0tL/1FRUf9RUVH/T09P/kdHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dH - R/9GRkb+R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0ZGRv5HR0f/R0dH/0dHR/9HR0f/R0dH/0dH - R/9HR0f/RkZG/kdHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9GRkb+R0dH/0dHR/9HR0f/R0dH/0dH - R/9HR0f/TU1N/1FRUf5RUVH/UVFR/1JSUv9YWFj/W1tb/1tbW/9bW1v/W1tb/ltbW/9bW1v/UVFR/0lJ - Sf9FRUX/ODg4/zg4OP83Nzf+ODg4/zExMf8mJib/JCQk/xoaGv8UFBT/FBQU/xQUFP4UFBT/EBAQ/w8P - D/8NDQ3/CgoK/woKCv8GBgb/BAQE/gMDA/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8dHR3/Xl5e/5ubm/+wsLD/wMDA/8jI - yP/Ly8v+zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8vLy/7MzMz/zMzM/5ycnP8qKir/FhYW/wAA - AOUAAABcAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8BAQHDPT09/8XFxf/MzMz/y8vL/szMzP/MzMz/zMzM/8zM - zP/MzMz/zMzM/8zMzP/Ly8v+zMzM/8zMzP/Ly8v/yMjI/8PDw/+Xl5f/TExM/xYWFv4ICAj/AQEB/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/wEB - Af8CAgL+AgIC/wMDA/8DAwP/BgYG/xYWFv8aGhr/Ghoa/x0dHf4tLS3/Ly8v/y8vL/8vLy//Ly8v/y8v - L/8vLy//Ly8v/i8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy/+Ly8v/y8vL/8vLy//Ly8v/y8v - L/8vLy//Ly8v/y8vL/4vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/i8vL/8vLy//Ly8v/y8v - L/8vLy//LS0t/yEhIf8aGhr+Ghoa/xoaGv8XFxf/CwsL/wUFBf8FBQX/BQUF/wUFBf4FBQX/BQUF/wQE - BP8EBAT/AwMD/wICAv8CAgL/AgIC/gICAv8CAgL/AQEB/wEBAf8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wEBAf8KCgr/ICAg/2BgYP6YmJj/vb29/8fHx//Ly8v/zMzM/8zM - zP/MzMz/y8vL/szMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/Ly8v+xsbG/4qKiv8pKSn/Q0ND/xwc - HPoAAAClAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPw8PD+90dHT/xMTE/8vLy/7MzMz/zMzM/8zM - zP/MzMz/zMzM/8zMzP/MzMz/y8vL/szMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP+3t7f+eXl5/zw8 - PP8dHR3/BQUF/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/BQUF/xwcHP8/Pz//hYWF/729vf/Ly8v+zMzM/8zMzP/MzMz/zMzM/8zM - zP/MzMz/zMzM/8vLy/7MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/Ly8v/ubm5/nFxcf8rKyv/bGxs/2pq - av8FBQXcAAAALQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAACJHR0d8nd3d/+zs7P+ycnJ/8zM - zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8vLy/7MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/y8vL/szM - zP/Gxsb/mpqa/1lZWf81NTX/EhIS/wEBAf8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AwMD/wQEBP8EBAT/BAQE/wQEBP4EBAT/BAQE/wQE - BP8EBAT/BAQE/wQEBP8EBAT/BAQE/gQEBP8EBAT/BAQE/wQEBP8EBAT/BAQE/wQEBP8EBAT+BAQE/wQE - BP8EBAT/BAQE/wQEBP8CAgL/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4MDAz/MDAw/1dXV/+Xl5f/x8fH/8zMzP/MzMz/y8vL/szMzP/MzMz/zMzM/8zM - zP/MzMz/zMzM/8zMzP/Ly8v+zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/o6Oj/1NTU/4oKCj/hISE/5yc - nP8bGxv6AAAAbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAKQRERH6QUFB/nZ2 - dv6pqan+y8vL/svLy/7Ly8v+y8vL/svLy/7Ly8v+y8vL/svLy/7Ly8v+y8vL/svLy/7Ly8v+y8vL/svL - y/7Ly8v+y8vL/svLy/7IyMj+rKys/n9/f/5TU1P+Gxsb/gEBAf4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4EBAT+ExMT/h8fH/4gICD+ICAg/iAgIP4gICD+ICAg/iAg - IP4gICD+ICAg/iAgIP4gICD+ICAg/iAgIP4gICD+ICAg/iAgIP4gICD+ICAg/iAgIP4gICD+ICAg/iAg - IP4gICD+ICAg/iAgIP4gICD+Ghoa/gkJCf4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/goKCv45OTn+cXFx/qampv7Gxsb+y8vL/svLy/7Ly8v+y8vL/svLy/7Ly8v+y8vL/svL - y/7Ly8v+y8vL/svLy/7Ly8v+y8vL/svLy/7Ly8v+y8vL/svLy/62trb+f39//jQ0NP49PT3+pKSk/q+v - r/44ODj+AgICpgAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAA6AAAAxQAA - AP4PDw//Li4u/1xcXP+RkZH/v7+//8zMzP/MzMz/y8vL/szMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM - zP/Ly8v+zMzM/8zMzP/MzMz/zMzM/8zMzP/Kysr/u7u7/5qamv5qamr/Kioq/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/EBAQ/ysrK/81NTX/ODg4/zQ0NP83Nzf/PDw8/kRE - RP83Nzf/ODg4/zY2Nv82Njb/NTU1/z09Pf89PT3+MzMz/zMzM/8zMzP/NTU1/zc3N/83Nzf/Nzc3/0ND - Q/5GRkb/Ojo6/zY2Nv84ODj/MzMz/zExMf8cHBz/AwMD/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/BAQE/zY2Nv9+fn7/rKys/sXFxf/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/Ly8v+zMzM/8zM - zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8vLy/7MzMz/ysrK/7S0tP92dnb/Ojo6/yMjI/9+fn7/z8/P/sDA - wP89PT3/BQUFtwAAAC0AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAA - AEQAAADPCQkJ/0ZGRv8aGhr/FBQU/yoqKv9MTEz/goKC/62trf7MzMz/zMzM/8zMzP/MzMz/zMzM/8zM - zP/MzMz/y8vL/szMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/Ly8v+w8PD/62trf9vb2//ICAg/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/xgYGP8yMjL/NTU1/0hISP9CQkL/S0tL/zo6 - Ov5LS0v/ODg4/0FBQf9GRkb/QUFB/zo6Ov9BQUH/PT09/jc3N/9SUlL/S0tL/z09Pf9ISEj/Pz8//0FB - Qf9FRUX+QkJC/z09Pf9JSUn/QEBA/0VFRf8zMzP/JSUl/wgICP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8CAgL/KSkp/4aGhv+2trb/x8fH/8vLy/7MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/y8vL/szM - zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP+zs7P+hISE/01NTf8dHR3/GRkZ/1VVVf/CwsL/7+/v/7q6 - uv42Njb/BAQEvAAAADUAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAAHgAAALIYGBj0kpKS/5iYmP9aWlr/LCws/xsbG/8VFRX+Jycn/0FBQf9XV1f/Y2Nj/4KC - gv+MjIz/q6ur/7Ozs/63t7f/ubm5/7q6uv+/v7//wMDA/8TExP/FxcX/ysrK/szMzP/Ly8v/ysrK/729 - vf+Hh4f/NDQ0/w8PD/8BAQH+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8ZGRn/MjIy/zMzM/9GRkb/UFBQ/0VF - Rf86Ojr+TExM/zk5Of82Njb/Tk5O/0ZGRv8+Pj7/T09P/0JCQv42Njb/S0tL/1BQUP8/Pz//RERE/0ND - Q/9KSkr/Pj4+/k5OTv9DQ0P/R0dH/0NDQ/9HR0f/MzMz/yYmJv8ICAj+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gUF - Bf8lJSX/g4OD/8jIyP/Kysr/zMzM/8zMzP/Ly8v+zMzM/8zMzP/MzMz/zMzM/8jIyP/FxcX/vr6+/7u7 - u/62trb/q6ur/4uLi/9lZWX/UVFR/zAwMP8bGxv/FhYW/hwcHP85OTn/hoaG/9XV1f/z8/P/6Ojo/4CA - gP4EBATwAAAAqgAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAARAAAAfwICAtMlJSX0Y2Nj/5ubm/+goKD/fHx8/mJiYv9YWFj/RERE/0FB - Qf81NTX/MTEx/yUlJf8hISH+LS0t/zY2Nv86Ojr/SkpK/1BQUP9lZWX/cHBw/4yMjP6VlZX/mpqa/6Oj - o/+mpqb/rq6u/7CwsP+AgID/KCgo/g8PD/8DAwP/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/FRUV/zAwMP8zMzP/RERE/01N - Tf8/Pz//QUFB/j4+Pv84ODj/NTU1/0FBQf85OTn/MzMz/0VFRf88PDz+MzMz/zc3N/9CQkL/Ojo6/zs7 - O/89PT3/NjY2/zIyMv40NDT/PT09/zY2Nv87Ozv/Ojo6/zMzM/8lJSX/CAgI/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BQUF/yIi - Iv5ZWVn/vb29/8zMzP/MzMz/zMzM/8zMzP/MzMz/vr6+/rW1tf+rq6v/oaGh/5iYmP99fX3/a2tr/0dH - R/87Ozv+Kioq/yUlJf8xMTH/QEBA/1JSUv98fHz/l5eX/7Kysv7Z2dn/8/Pz/9zc3P/Dw8P/jo6O/zU1 - NfsCAgLWAAAAdQAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAA1AAAAfgAAAKoAAADOHh4e7ExMTP57e3v/pqam/8HB - wf/V1dX/2dnZ/9XV1f+6urr/s7Oz/p6env+Ojo7/hoaG/2lpaf9lZWX/VlZW/09PT/87Ozv+NDQ0/zU1 - Nf83Nzf/ODg4/zo6Ov87Ozv/UFBQ/0pKSv4hISH/BwcH/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wsLC/8nJyf/MjIy/zg4 - OP85OTn/ODg4/zg4OP41NTX/NTU1/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/jMzM/8zMzP/MzMz/zMz - M/8zMzP/MzMz/zMzM/8yMjL+MzMz/zY2Nv80NDT/MzMz/zMzM/8wMDD/Gxsb/wQEBP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/FxcX/1JS - Uv+fn5/+yMjI/8HBwf+ysrL/n5+f/5SUlP+BgYH/eHh4/1lZWf5GRkb/Ojo6/zc3N/81NTX/RUVF/1JS - Uv9ubm7/g4OD/qSkpP+6urr/1tbW//f39///////+fn5/+Hh4f/Dw8P+o6Oj/3t7e/9KSkr6ExMT5QAA - AMYAAACXAAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAPAAAAFwAAAB9AQEBtxER - EeAuLi77S0tL/2tra/+Xl5f/wcHB/+bm5v77+/v/////////////////+vr6/+rq6v/i4uL/zc3N/sbG - xv+7u7v/qqqq/6Ojo/+UlJT/j4+P/3V1df9paWn+WFhY/0dHR/9HR0f/Tk5O/wsLC/8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8CAgL/Dg4O/xkZ - Gf8jIyP/JCQk/yQkJP8kJCT+JCQk/yQkJP8kJCT/JCQk/yQkJP8kJCT/JCQk/yQkJP4kJCT/JCQk/yQk - JP8kJCT/JCQk/yQkJP8kJCT/JCQk/iQkJP8kJCT/JCQk/yQkJP8gICD/FhYW/wcHB/8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/Ghoa/1tb - W/95eXn/eHh4/l9fX/9OTk7/Pj4+/y0tLf80NDT/QEBA/0ZGRv9ra2v+gYGB/5qamv+urq7/wMDA/9jY - 2P/m5ub///////7+/v7//////////+/v7//Dw8P/mpqa/3Nzc/9RUVH/MDAw/hAQEN0AAACwAAAAggAA - AFQAAAA0AAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA - ACUAAAA6AAAAVAAAAIAAAACzFBQU6ioqKv89PT3+W1tb/3x8fP+qqqr/4uLi//////////////////7+ - /v7////////////////////////////////x8fH/6+vr/uLi4v/Z2dn/2dnZ/93d3f+np6f/Ozs7/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8CAgL/BwcH/wcHB/8HBwf/BwcH/gcHB/8HBwf/BwcH/wcHB/8HBwf/BwcH/wcHB/8HBwf+BwcH/wcH - B/8HBwf/BwcH/wcHB/8HBwf/BwcH/wcHB/4HBwf/BwcH/wcHB/8HBwf/BQUF/wEBAf8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/w0N - Df8iIiL/KCgo/zg4OP5TU1P/cHBw/5GRkf+2trb/wMDA/9DQ0P/Y2Nj/7Ozs/vj4+P////////////// - //////////////X19f/ExMT+l5eX/21tbf9FRUX/Kysr/xYWFvEEBAS9AAAAiQAAAFUAAAA5AAAAIQAA - AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAIAAAALAAAAFQAAACQAAABLAAAAfwMDA7YKCgrlExMT/R8fH/4xMTH+X19f/qen - p/7IyMj++fn5/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7++vr6/t/f - 3/6JiYn+GRkZ/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA - AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP5CQkL+bGxs/m9v - b/6lpaX+vr6+/t3d3f7h4eH+6urq/vDw8P739/f+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+ - /v719fX+t7e3/lZWVv4sLCz+GRkZ/g8PD/4HBwfXAAAAmAAAAFIAAAAiAAAAFwAAAAwAAAACAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAABjAAAAhgAA - ALgAAADcAAAA5gICAvA/Pz/7bGxs/4aGhv/FxcX/2dnZ/+Li4v/s7Oz+8fHx//b29v/8/Pz///////// - /////////////+Hh4f5qamr/Ghoa/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AgIC/yEhIf6MjIz/7+/v//// - /////////////////////////v7+/v/////+/v7/9fX1/+/v7//m5ub/4eHh/8/Pz/+jo6P+h4eH/0hI - SPsSEhLwAAAA7AAAAOQAAACvAAAAhgAAAEEAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAPAAAAKAAAAD0AAABtAAAAoQAAALUAAADBAAAA1AAAAN0sLCzwXFxc/nFxcf+MjIz/qKio/7e3 - t//FxcX/yMjI/9PT0//Z2dn+29vb/56env8oKCj/AwMD/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/zs7O/+urq7++fn5//// - ///39/f/7Ozs/93d3f/Z2dn/0NDQ/8bGxv64uLj/sLCw/4SEhP9qamr/PDw89SQkJOwGBgbdAAAAxwAA - AMIAAACiAAAAbgAAAFkAAAAzAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAGQAAAD0AAABOAAAAcgAAAJAAAACdAAAArgAA - AL8GBgbSISEh4icnJ+Y8PDz2R0dH/llZWf9paWn/SEhI/wYGBv8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/w4ODv91dXX/nJyc/o6O - jv+Ojo7/gYGB/2tra/9OTk7/R0dH/zU1NfQjIyPlBwcHzAAAAMQAAACqAAAAoAAAAHwAAABqAAAATQAA - ACQAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADQAA - AB0AAAAtAAAAPwAAAE4AAABSAAAAYQAAAGkAAAB8AAAAjAAAAI4AAACOAAAAlgAAAMsAAAD5AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/BAQE/ygoKP82Njb/Ozs7/zs7 - O/47Ozv/Ozs7/zk5Of8uLi7/Hh4e/wYGBv8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/w8PD/9CQkL/QkJC/kJCQv9CQkL/QkJC/0JC - Qv9CQkL/QkJC/0JCQv9CQkL+QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/x8fH/4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wIC - Av8VFRX/MDAw/zo6Ov87Ozv/Ozs7/zs7O/47Ozv/NDQ0/yoqKv8RERH/AAAA/wAAAP8AAAD/AAAA/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA7gAAANwLCwvZGBgY1w0N - DcYAAACzAAAAswAAAKUAAACOAAAAcAAAAGkAAABfAAAAUQAAADoAAAAyAAAAGgAAABAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABAAAAAQAAAAEAAAABQAAAAsAAAAYgAA - AMIAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/y0tLf9dXV3/Y2Nj/2Zm - Zv9lZWX+ZmZm/2ZmZv9kZGT/YGBg/1hYWP8hISH/AQEB/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8iIiL/jo6O/46Ojv6Ojo7/jo6O/46O - jv+Ojo7/jo6O/46Ojv+Ojo7/jo6O/o6Ojv+Ojo7/jo6O/46Ojv+Ojo7/jo6O/46Ojv9CQkL+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA - AP8NDQ3/Tk5O/2BgYP9lZWX/ZmZm/2ZmZv9lZWX+ZmZm/2JiYv9eXl7/S0tL/wMDA/8AAAD/AAAA/wAA - AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAPkAAADHAAAAewAAAEUAAAA0AAAAMgAA - ADIAAAAqAAAAIQAAACEAAAAbAAAAEAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAUAAAAUAAAASAAAAL4AAAD6AAAA/QAAAP4AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP9DQ0P/ZmZm/2Zm - Zv9mZmb/ZWVl/mZmZv9mZmb/ZmZm/2ZmZv9lZWX/NDQ0/wUFBf8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/JCQk/5mZmf+YmJj+mZmZ/5mZ - mf+ZmZn/mZmZ/5mZmf+ZmZn/mZmZ/5iYmP6ZmZn/mZmZ/5mZmf+ZmZn/mZmZ/5mZmf+ZmZn/MDAw/gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP4AAAD/EhIS/2RkZP9mZmb/ZmZm/2ZmZv9mZmb/ZWVl/mZmZv9mZmb/ZmZm/2NjY/8JCQn/AAAA/wAA - AP8AAAD+AAAA/wAAAP8AAAD/AAAA/gAAAP0AAAD6AAAA5QAAAJYAAAA0AAAAFQAAAAkAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAHAAAAPAAAAKAAAADcAAAA9wAAAP8AAAD+AAAA/wAAAP8AAAD/Ghoa/1ZW - Vv9XV1f/VVVV/1RUVP5UVFT/VFRU/1RUVP9UVFT/S0tL/xkZGf8AAAD/AAAA/gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/x8fH/+FhYX/hISE/oWF - hf+FhYX/hYWF/4WFhf+FhYX/hYWF/4WFhf+EhIT+hYWF/4WFhf+FhYX/hYWF/4WFhf+FhYX/hYWF/yEh - If4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAA/wgICP88PDz/WFhY/1ZWVv9UVFT/VFRU/1RUVP5UVFT/VFRU/1RUVP86Ojr/AgIC/wAA - AP8AAAD/AAAA/gAAAP8AAAD6AAAA6QAAANEAAACcAAAASQAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAMgAAAI0AAACtAAAArQAAAK0AAACtAAAArQAA - AK0JCQmtDQ0NrQQEBK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAA - AK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAA - AK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAA - AK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0FBQWtGRkZrRkZ - Ga0ZGRmtGRkZrRkZGa0ZGRmtGRkZrRkZGa0ZGRmtGRkZrRkZGa0ZGRmtGRkZrRkZGa0ZGRmtGRkZrRkZ - Ga0GBgatAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAA - AK0AAACtAAAArQAAAK0AAACtBAQErQ4ODq0ICAitAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAA - AK0AAACtAAAArQAAAK0AAACtAAAAmwAAAFoAAAAXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////AAAB////// - //////////////////////////////4AAAAAAAD///////////////////////////////8AAAAAAAAA - AAAB////////////////////////////wAAAAAAAAAAAAAAH//////////////////////////gAAAAA - AAAAAAAAAAA/////////////////////////gAAAAAAAAAAAAAAAAAH///////////////////////gA - AAAAAAAAAAAAAAAAAD//////////////////////AAAAAAAAAAAAAAAAAAAAAf////////////////// - /+AAAAAAAAAAAAAAAAAAAAAAB///////////////////AAAAAAAAAAAAAAAAAAAAAAAB//////////// - //////gAAAAAAAAAAAAAAAAAAAAAAAA/////////////////4AAAAAAAAAAAAAAAAAAAAAAAAA////// - //////////8AAAAAAAAAAAAAAAAAAAAAAAAAAf//////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAA - D/////////////+AAAAAAAAAAAAAAAAAAAAAAAAAAAAB/////////////AAAAAAAAAAAAAAAAAAAAAAA - AAAAAAA////////////gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//////////4AAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAf/////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////4AAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAD///////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//////8AAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAA/////+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf////gAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB////A - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - B///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/+AAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf4AAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AB/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAf4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/AA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/gAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAH/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf+AAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/gA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AD/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAA/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+AAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAB//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//gAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//g - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - B///4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAB//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//AAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//4AAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAP//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///AAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///4AAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAH///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf///AAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///8 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - f////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAA//////+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf///////AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAP/////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///////////gAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAA////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAB//////////////gAAAAAAAAAA - AAAAAAAAAAAAAAAAD////////////////wAAAAAAAAAAAAAAAAAAAAAAAAf//////////////////AAA - AAAAAAAAAAAAAAAAAAAP////////////////////gAAAAAAAAAAAAAAAAAAAAf////////////////// - ///gAAAAAAAAAAAAAAAAAAAP//////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////MzUzMTE4 - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/GBA/MobileDetailView.cs b/BizHawk.Client.EmuHawk/tools/GBA/MobileDetailView.cs index 6fc671fd5d..b0780f6a61 100644 --- a/BizHawk.Client.EmuHawk/tools/GBA/MobileDetailView.cs +++ b/BizHawk.Client.EmuHawk/tools/GBA/MobileDetailView.cs @@ -1,10 +1,4 @@ using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; using System.Windows.Forms; namespace BizHawk.Client.EmuHawk @@ -16,25 +10,13 @@ namespace BizHawk.Client.EmuHawk InitializeComponent(); } - public BmpView BmpView { get { return bmpView1; } } - - [Browsable(false)] - public bool ShouldDraw { get { return this.Visible; } } + public BmpView BmpView => bmpView1; public override string ToString() { return Text; } - public void SetDetails(IList> details) - { - listView1.Items.Clear(); - foreach (var t in details) - { - listView1.Items.Add(new ListViewItem(new string[] { t.Item1, t.Item2 })); - } - } - private void MobileDetailView_SizeChanged(object sender, EventArgs e) { // bmp view is always square diff --git a/BizHawk.Client.EmuHawk/tools/GameShark.Designer.cs b/BizHawk.Client.EmuHawk/tools/GameShark.Designer.cs index ff1555837a..fcfc1ebf06 100644 --- a/BizHawk.Client.EmuHawk/tools/GameShark.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/GameShark.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GameShark)); this.mnuGameShark = new System.Windows.Forms.MenuStrip(); this.btnClear = new System.Windows.Forms.Button(); this.lblCheat = new System.Windows.Forms.Label(); @@ -118,7 +117,7 @@ this.Controls.Add(this.txtCheat); this.Controls.Add(this.btnGo); this.Controls.Add(this.mnuGameShark); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.Shark_MultiSize; this.MainMenuStrip = this.mnuGameShark; this.MaximizeBox = false; this.MinimumSize = new System.Drawing.Size(230, 155); diff --git a/BizHawk.Client.EmuHawk/tools/GameShark.resx b/BizHawk.Client.EmuHawk/tools/GameShark.resx index f91b356cc7..224207cc10 100644 --- a/BizHawk.Client.EmuHawk/tools/GameShark.resx +++ b/BizHawk.Client.EmuHawk/tools/GameShark.resx @@ -120,100 +120,4 @@ 17, 17 - - - - AAABAAIAEBAAAAAAIABoBAAAJgAAACAgAAAAACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAEAE - AAAAAAAAAAAAAAAAAAAAAAAA////Af///wEjIyMvVlZWpXFxcedycnL/bW1t8UtLS8EXFxdxFhYWE/// - /wH///8B////Af///wH///8B////Af///wFTU1NNi4uL92ZmZv84ODj/Jycn/zk5Of9lZWX/mpqa/2xs - bPEdHR15CwsLBf///wH///8B////Af///wEuLi4Rf39/6xYWFv8AAAD/AAAA/wAAAP8AAAD/AAAA/wEB - Af9GRkb/np6e/0RERMUVFRUZCAgIA////wH///8Bg4ODbyoqKv8AAAD/UFBQ/5qamv+Xl5f/YmJi/x8f - H/8AAAD/AAAA/wsLC/+Li4v/WFhY7R0dHTH///8B////AW1tba8HBwf/WFhY/+Li4v/e3t7/2tra/9bW - 1v/R0dH/l5eX/zAwMP8EBAT/UlJS/7S0tP9PT0/FBgYGBf///wFbW1vHKScm/5qZmf/j4+P/3t7e/9ra - 2v+6urr/bGtr/3t6ev+dnJz/ioqK/729vf9nZmb/oaGh/ywsLHf///8BZGNjx0tJSP+amZj/4+Pj/97e - 3v/a2tr/1dXV/66urv9qamr/NDIv/1dTUP+4uLf/XVxb/11ZVf+JiYnzEhISE56enoenpqT/2tnZ/+Li - 4f/e3t7/2tra/9bW1v/S0tL/zc3N/6enp/9LSEL/j4yH/6mpqf9GQz3/pqOf/zQ0NHVdXV01WlhU/3Rs - XP+wrKX/3t7e/9ra2v/W1tb/0tLS/83Nzf/CwsD/iYN2/3VtXf+in5j/kZGQ/2RgW/+BgYG/////AXNz - c8FjWkr/jIBp/8/NyP/a2tr/1tbW/76+vv9uamP/gHdl/2FaTv9sZVf/bmhZ/46GdP+GgXb/g4KB8f// - /wFzc3MzYV9d/Yt9X/+gl4P/2tra/9bW1v/S0tL/vr6+/4mIh/+Xl5f/g4KA/398d/9qY1P/mopo/6im - of////8B////AYqKin9iX1n/zs7M/9ra2v/W1tb/0tLS/83Nzf/IyMj/xMTE/729vf+np6f/iIiG/5uJ - Xf+vrqvp////AQgICAN9fX2b1NTU/97e3v/Z2dn/z8ay/8rBq//Mzcz/yMjI/8TExP+/v7//urq6/7Oz - s/+CfG3/tra2qf///wEfHx8Jv7+/acrKypG+vr6pk5OS/2VXNv+3m1X/y7V//8jDt//CwsL/m5ub/7q6 - uv+0tLT/gICA/3t7e0n///8B////Af///wH///8B////AZSUlE2oqKjdbm1r/19VOv9xXy//gHVU/3x6 - d/+6urr/uLi4/5ycnO81NTVL////Af///wH///8B////Af///wH///8BFBQUB6CgoFu3t7e1xMTE88fH - x//T09P3xMTEv6Ojo03///8B////AQAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA - //8AAP//AAD//wAA//8AAP//AAD//wAA//8oAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAA - AAAAAAAA////Af///wH///8B////Af///wH///8BDw8PHxYWFnsaGhq5ISEh5ykpKf8hISH/ISEh+RQU - FNEVFRWfGRkZZxERERv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8BCQkJFScnJ6NRUVH9hISE/7Gxsf+7u7v/vr6+/8DA - wP+/v7//sbGx/4GBgf9MTEz/Ghoa/RUVFa0WFhZH////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////ARUVFTNRUVHjoKCg/7a2tv+np6f/f39//2Fh - Yf9PT0//UFBQ/2NjY/+CgoL/q6ur/8fHx//CwsL/hISE/ysrK/8XFxfHFxcXRf///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEODg4fa2tr5ampqf+Pj4//Ojo6/wQE - BP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/JCQk/2dnZ/+7u7v/zs7O/46Ojv8jIyP/GBgYowsL - CxX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AWNjY7Gjo6P/WFhY/wIC - Av8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wUFBf9UVFT/u7u7/87O - zv9oaGj/EBAQ4RAQEDv///8B////Af///wH///8B////Af///wH///8B////Af///wEuLi5Bnp6e/1FR - Uf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8JCQn/cHBw/9LS0v+kpKT/HR0d9xUVFV////8BCAgICf///wH///8B////Af///wH///8B////AXFx - cbN8fHz/AQEB/wAAAP8AAAD/AAAA/w0NDf9FRUX/aWlp/2hoaP9CQkL/EhIS/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/Li4u/7y8vP/AwMD/Kysr/SUlJbciIiJd////Af///wH///8B////Af// - /wELCwsPmJiY+S4uLv8AAAD/AAAA/wEBAf9jY2P/0tLS/9/f3//d3d3/29vb/9jY2P/U1NT/pKSk/2Vl - Zf8YGBj/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/EhIS/56env9xcXH/kpKS/xoaGmX///8B////Af// - /wH///8B////AS8vL0mQkJD/AgIC/wEBAf8AAAD/bm5u/+Pj4//i4uL/4ODg/93d3f/b29v/2dnZ/9fX - 1//W1tb/0tLS/87Ozv+RkZH/NDQ0/wAAAP8AAAD/AQEB/wAAAP8AAAD/SkpK/7m5uf+qqqr/JiYm+xAQ - EDf///8B////Af///wH///8BSkpKc25ubv8NDQ3/Dg4O/xcXF//c3Nz/5OTk/+Li4v/g4OD/3d3d/9vb - 2//Z2dn/19fX/9bW1v/T09P/0dHR/87Ozv/MzMz/mJiY/yoqKv8EBAT/DAwM/0VFRf+8vLz/vLy8/7Ky - sv+4uLj/FxcX4QYGBg////8B////Af///wFYWFiJX19f/yEfH/8iICD/TEtL/+Xl5f/k5OT/4uLi/+Dg - 4P/d3d3/29vb/9nZ2f/X19f/0tHR/8LBwf+9vb3/wL+//8jIyP/Kysr/xcXF/3l5ef8yMjL/uLi4/76+ - vv+ysbH/MzEx/8nJyf+Ghob/FhYWn////wH///8B////AWBgYJNXV1f/MS4u/zEvLv9TUVD/5eXm/+Tk - 5P/i4uL/4ODg/93d3f/b29v/2dnZ/9fX1/9qamr/EhIS/x8dHf8vLCz/ODY2/1xaWf+KiYn/vLu7/8LC - wv/AwMD/vr6+/4iIiP8xLy7/V1ZV/+Dg4P9AQED/FRUVQf///wH///8BUFBQoyUkJP8uKyr/NjMx/zYz - Mf/b2tr/5OTk/+Li4v/g4OD/3d3d/9vb2//Z2dn/19fX/9PT0/+vr6//ampq/y4uLv8ZFxf/OTYz/0A9 - Ov9GQkD/f317/8DAwP++vr7/bm5u/zQxLv9BPDn/l5WT/8HBwf8fHx/P////Af///wFra2t9ra2t/21t - bf9bWlr/f35+/9nZ2f/k5OT/4uLi/+Dg4P/d3d3/29vb/9nZ2f/X19f/1tbW/9LS0v/Q0ND/zs7O/5WV - lf8mJSX/MjAt/01IQ/9NSEP/pqWj/76+vv+xsbH/IyIh/0xHQv9STkj/1NTT/11dXf8SEhJH////ASYm - JjO7u7v/3Nzc/+bm5v/m5ub/5eXl/+Pj4//i4uL/4ODg/93d3f/b29v/2dnZ/9fX1//W1tb/09PT/9HR - 0f/Ozs7/zMzM/8PDw/9KSkr/MC4p/1pUS/95dW7/vr6+/7y8vP92dnb/MS8r/1pUS/+QjIf/yMjJ/xYW - FrcCAgIDAgICA5ubm+c2NTP/paKc/8TCwP/a2tn/4eHh/+Li4f/g4OD/3d3d/9vb2//Z2dn/19fX/9bW - 1v/T09P/0dHR/87Ozv/MzMz/ysrK/8bGxv9ZWFj/TEc//2VfVP+ioJ3/vLy8/7i4uP9GRkb/R0M7/2dh - Vv/Z2Nf/T09P/Q8PDx3///8BcHBwn1BQUP9ZU0j/cGhZ/3BoWv+emZD/4eHi/+Dg4P/d3d3/29vb/9nZ - 2f/X19f/1tbW/9PT0//R0dH/zs7O/8zMzP/Kysr/x8fH/7q5t/9ya1z/cWha/3VuYP+urKn/ubm5/7Gx - sf81NDT/T0pA/62qo/+bm5v/DAwMYf///wEpKSk3mpqa/yglIf95cV//eXFf/3pxYf/KyMP/4ODg/93d - 3f/b29v/2dnZ/9fX1//W1tb/09PT/9HR0f/Ozs7/zMzM/8nJyf+xr6n/gXlq/3hwXv95cV//eHBe/312 - Zf+lopz/t7a2/6ipqP82NTX/XlpU/9ra2v8VFRWh////Af///wGQkJDFQUFB/2NaS/+FeGT/hXlj/5KI - dv/c29r/3d3d/9vb2//Z2dn/19fX/9bW1v/S0tL/kJCQ/46MiP+noZT/k4l3/29lU/+Ge2f/XVVH/4d8 - aP9aU0T/hntm/1VPQv+VjHz/pqOd/6alpf9TUlH/kI+P/z09PdP///8B////ATAwMD+goKD/HhwY/4d7 - Y/+NgGf/jIBm/6qhkP/c3Nz/29vb/9nZ2f/X19f/1tbW/9LS0v/FxcX/S0pK/zgzKf+AdV7/f3lu/1FM - Qf9QTkz/i4Nw/0ZFQv+KgGj/VlZW/3JpVP+MgGb/j4Rs/5OLeP/Jx8T/ampq8f///wH///8B////AYKC - gq9mZmb/QDku/5WGaP+Vhmf/lIdm/7OtoP/b29v/2dnZ/9fX1//W1tb/09PT/9HR0f/Ozs7/kZGR/ywr - Kf+Bf33/T05O/5+fn/9NSEH/lJSU/1ZPPv+ura3/ODQt/5WGZ/+Vh2f/lYdn/83Jv/99fX3/////Af// - /wH///8BFxcXHbS0tPUwMDD/ZltF/5+OaP+LfV7/r62r/9vb2//Z2dn/19fX/9bW1v/T09P/0dHR/87O - zv/MzMz/x8fH/7CwsP+6urr/t7e3/25ubv++vr7/RkRB/7KxsP9vb2//b2NK/6CNaf+gjmn/0MrA/4mJ - if////8B////Af///wH///8BTExMYaysrP8cGxv/ZltC/6Gemf/d3d3/29vb/9nZ2f/X19f/1tbW/9PT - 0//R0dH/zs7O/8zMzP/Kysr/x8fH/8XFxf/Dw8P/urq6/76+vv+SkpL/nZ2d/7S0tP88OTL/ppNm/6eU - Zv/Z1cz/fn5+4////wH///8B////Af///wH///8Benp6nXt7e/+NjY3/4ODg/93d3f/b29v/2dnZ/9fX - 1//W1tb/09PT/9HR0f/Ozs7/zMzM/8rKyv/Hx8f/xcXF/8PDw//AwMD/vr6+/7y8vP+0tLT/tra2/319 - ff9wY0P/sJto/+Pi3/9xcXHB////Af///wH///8B////AQcHBwsxMTGTqqqq/+Hh4f/g4OD/3d3d/9vb - 2//Z2dn/19fX/9PSz//OzMb/0NDR/87Ozv/MzMz/ysrK/8fHx//FxcX/w8PD/8DAwP++vr7/vLy8/7m5 - uf+3t7f/sLCw/0E9Nv+/rYL/5ubm/0NDQ3////8B////Af///wEICAgLXV1dzcnJyf/j4+P/4uLi/+Dg - 4P/d3d3/29vb/9jY2P/Qx7H/wqpx/8Cnav/Lwaz/zc7N/8zMzP/Kysr/x8fH/8XFxf/Dw8P/wMDA/76+ - vv+8vLz/ubm5/7e3t/+xsbH/d3d3/5KPh//c29z/FBQUK////wH///8B////AR8fHyGioqKz1dXV7ePj - 4//h4eH/39/f/9nZ2f+5ubn/ODYx/4JwQf/EqF7/xqhe/8apXv/JtYP/yse//8nJyv/Hx8f/xcXF/8HB - wf9ra2v/jY2N/7y8vP+5ubn/t7e3/7Gxsf+mpqf/S0tL/52dnbUGBgYD////Af///wH///8B////Af// - /wH///8BHx8fIx8fHyMZGRkdcnJyi8rKyv2VlZX/JCMk/yskFv+JdUD/x6lZ/82sW//NrmD/y7qP/8fE - vf/ExMX/v7+//7e3t/++vr7/vLy8/7m5uf+3t7f/sbGx/6ioqP9nZ2f/RUVFazk5OQP///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8BOzs7R7e3t+HMzMz/hISE/yYlJv8bFw7/X1Ap/6CJ - RP/KqlL/0rJY/825fP/Gvqb/wsC9/76+vv+8vLz/ubm5/7a2tv+wsLD/qKio/5ubm/8qKirB////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BCQkJC3BwcIXKysrz09PT/6Wl - pf9eXl7/ICAg/woIBv8eGQ3/Ni4X/zowGP8lIRj/TUxM/6urq//Jycn/wsLC/7q6uv+mpqbvh4eH0UlJ - SWv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////ARQU - FBdra2t/wsLC5djY2P/a2tr/yMnI/7W1tf+rq6v/r6+v/8LCwv/e3t7/5ubm/+bm5v/Hx8fbTk5OVf// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wEFBQUHPj4+R3l5eY2ysrLN4ODg/+Hh4f/i4uL/5eXl/8nJyd+cnJyrS0tLUwUF - BQX///8B////Af///wH///8B////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.Designer.cs b/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.Designer.cs index 3aaed85d29..0a18d999b3 100644 --- a/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HexEditor)); this.HexMenuStrip = new MenuStripEx(); this.FileSubMenu = new System.Windows.Forms.ToolStripMenuItem(); this.SaveMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -645,7 +644,7 @@ this.Controls.Add(this.Header); this.Controls.Add(this.MemoryViewerBox); this.Controls.Add(this.HexMenuStrip); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.poke_MultiSize; this.MainMenuStrip = this.HexMenuStrip; this.MinimumSize = new System.Drawing.Size(360, 180); this.Name = "HexEditor"; diff --git a/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.cs b/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.cs index 2d09218f5b..32dab44a7a 100644 --- a/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.cs +++ b/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.cs @@ -129,6 +129,11 @@ namespace BizHawk.Client.EmuHawk public void NewUpdate(ToolFormUpdateType type) { } public void UpdateValues() + { + AddressesLabel.Text = GenerateMemoryViewString(true); + } + + public void FullUpdate() { AddressesLabel.Text = GenerateMemoryViewString(true); AddressLabel.Text = GenerateAddressString(); @@ -173,8 +178,7 @@ namespace BizHawk.Client.EmuHawk SetDataSize(DataSize); SetHeader(); - UpdateValues(); - AddressLabel.Text = GenerateAddressString(); + FullUpdate(); } public void SetToAddresses(IEnumerable addresses, MemoryDomain domain, WatchSize size) @@ -189,9 +193,8 @@ namespace BizHawk.Client.EmuHawk _secondaryHighlightedAddresses.Clear(); _secondaryHighlightedAddresses.AddRange(addrList.Where(addr => addr != addrList[0])); ClearNibbles(); - UpdateValues(); + FullUpdate(); MemoryViewerBox.Refresh(); - AddressLabel.Text = GenerateAddressString(); } } @@ -452,7 +455,7 @@ namespace BizHawk.Client.EmuHawk LoadFileFromRecent(RecentTables[0]); } - UpdateValues(); + FullUpdate(); } private void LoadConfigSettings() @@ -616,7 +619,7 @@ namespace BizHawk.Client.EmuHawk UpdateGroupBoxTitle(); SetHeader(); - UpdateValues(); + FullUpdate(); LastDomain = _domain.Name; } @@ -657,9 +660,8 @@ namespace BizHawk.Client.EmuHawk SetHighlighted(address); ClearNibbles(); - UpdateValues(); + FullUpdate(); MemoryViewerBox.Refresh(); - AddressLabel.Text = GenerateAddressString(); } private void SetHighlighted(long address) @@ -737,7 +739,7 @@ namespace BizHawk.Client.EmuHawk _digitFormatString = $"{{0:X{DataSize * 2}}} "; SetHeader(); UpdateGroupBoxTitle(); - UpdateValues(); + FullUpdate(); _secondaryHighlightedAddresses.Clear(); } } @@ -1298,7 +1300,7 @@ namespace BizHawk.Client.EmuHawk { LoadTable(ofd.FileName); RecentTables.Add(ofd.FileName); - UpdateValues(); + FullUpdate(); } } @@ -1318,7 +1320,7 @@ namespace BizHawk.Client.EmuHawk else { RecentTables.Add(path); - UpdateValues(); + FullUpdate(); } } @@ -1449,7 +1451,7 @@ namespace BizHawk.Client.EmuHawk } } - UpdateValues(); + FullUpdate(); } private bool _lastSearchWasText; @@ -1559,7 +1561,7 @@ namespace BizHawk.Client.EmuHawk private void BigEndianMenuItem_Click(object sender, EventArgs e) { BigEndian ^= true; - UpdateValues(); + FullUpdate(); } private void GoToAddressMenuItem_Click(object sender, EventArgs e) @@ -1664,7 +1666,7 @@ namespace BizHawk.Client.EmuHawk poke.SetWatch(watches); poke.ShowHawkDialog(); - UpdateValues(); + FullUpdate(); } } @@ -1700,7 +1702,7 @@ namespace BizHawk.Client.EmuHawk private void HexEditor_Resize(object sender, EventArgs e) { SetUpScrollBar(); - UpdateValues(); + FullUpdate(); } private void HexEditor_ResizeEnd(object sender, EventArgs e) @@ -1952,12 +1954,12 @@ namespace BizHawk.Client.EmuHawk ClearNibbles(); SetHighlighted(currentAddress + DataSize); - UpdateValues(); + FullUpdate(); Refresh(); } UpdateGroupBoxTitle(); - UpdateValues(); + FullUpdate(); } private void ViewerContextMenuStrip_Opening(object sender, CancelEventArgs e) @@ -2013,7 +2015,7 @@ namespace BizHawk.Client.EmuHawk _secondaryHighlightedAddresses.ForEach(IncrementAddress); - UpdateValues(); + FullUpdate(); } private void DecrementContextItem_Click(object sender, EventArgs e) @@ -2030,7 +2032,7 @@ namespace BizHawk.Client.EmuHawk _secondaryHighlightedAddresses.ForEach(DecrementAddress); - UpdateValues(); + FullUpdate(); } #endregion @@ -2233,7 +2235,7 @@ namespace BizHawk.Client.EmuHawk _programmaticallyChangingValue = false; } - UpdateValues(); + FullUpdate(); } } diff --git a/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.resx b/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.resx index c54246e288..0adb1899f0 100644 --- a/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.resx +++ b/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.resx @@ -123,543 +123,4 @@ 126, 17 - - - - AAABAAQAQEAAAAAAIAAoQgAARgAAADAwAAAAACAAqCUAAG5CAAAgIAAAAAAgAKgQAAAWaAAAEBAAAAAA - IABoBAAAvngAACgAAABAAAAAgAAAAAEAIAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBHh4PQx4eJAAA - AAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAaUNDO2A+P5AAAAAtAAAAEwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIZoaHOAaGjfGA0NYwAAAEQAAAAoAAAADwAAAAIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgEAweXf3+xkX9//UIsLIQAAABXAAAAVAAA - ADkAAAAVAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6UFAnq5ma4paI - if9mSkupAQAAQwAAAFkAAABWAAAAPAAAABUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAi2tsXruvsPyajI3/cFVW2jYcHDUAAAA9AAAAVgAAAFQAAAA5AAAAFAAAAAIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAA5h+f6DFvb3/nZCR/25XWPpcNzdcAAAAEwAAADwAAABSAAAATwAA - ADcAAAAUAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFYiIhSij4/QysPD/6CTlP9sWFn/WTc3oCMC - AQYAAAAYAAAAOwAAAE8AAABMAAAANAAAABMAAAAFAAAABAAAAAMAAAACAAAAAQAAAAEAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYKSkZppSU18vE - xP+hlJX/bVhZ/1IzNLsNBAQkAAAAJgAAADgAAABLAAAATgAAAEcAAAA1AAAAJQAAACEAAAAfAAAAGwAA - ABYAAAATAAAADwAAAAsAAAAIAAAABQAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAADMxgYK6aUlNzLxMX/oJSV/21ZWv9MLzDCBAEBTwAAAEwAAABNAAAATQAAAEwAAABJAAAARQAA - AEEAAAA+AAAAOwAAADcAAAAzAAAALwAAACsAAAAmAAAAIQAAABsAAAAUAAAADQAAAAcAAAADAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABnPT0prJuc58zFxf+gk5T/bFhZ/1k4OJgAAAAAAAAAAAAAAAAAAAAAAAAAAgAA - ABMAAAArAAAAMQAAAC8AAAAsAAAAKgAAACcAAAAkAAAAIQAAAB8AAAAcAAAAGgAAABcAAAAVAAAAEgAA - ABAAAAAMAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZzw9KaybnOfMxcX/oJOU/21YWf9aODmOAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAFAAAAGQAAACwAAAAtAAAAKgAAACgAAAAlAAAAIgAAAB8AAAAdAAAAGgAA - ABgAAAAVAAAAEwAAABEAAAAOAAAADAAAAAkAAAAFAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGk/Pymunp7nycPD/5qO - j/9nU1T/WDc3jQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAABoAAAAqAAAAKwAAACgAAAAlAAAAIwAA - ACAAAAAdAAAAGwAAABgAAAAWAAAAEwAAABEAAAAPAAAADQAAAAsAAAAJAAAABwAAAAQAAAACAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABmPT4tk4WG6pSPkf9rY2T/SDo7/0ssLY0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAfAAAAKgAA - ACkAAAAmAAAAIwAAACAAAAAeAAAAGwAAABkAAAAWAAAAFAAAABEAAAAPAAAADQAAAAsAAAAJAAAABwAA - AAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/y - 3AX/79QV/+zKK//ov0L/6b1V3b+dg7CbhvSnloL/m4hz/4x1Yf+nhWy1/9elTf/ToDn/0J0i/86aDv/Q - mgIAAAAAAAAACwAAAB0AAAAkAAAAIwAAACEAAAAeAAAAHAAAABkAAAAXAAAAFAAAABIAAAAQAAAADQAA - AAsAAAAKAAAACAAAAAYAAAAEAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// - /wH//PYU//rvQ//353z/89+u//DV0v/sy+n/6cD2/+a7/P/juP7/4bT//9+x///drv//2qr//9em/v/V - o/r/0qDx/9Cd4v/Omcb/zJie/86ZafXHljSNdFcUAAAADgAAABUAAAAZAAAAGQAAABgAAAAWAAAAFAAA - ABIAAAAQAAAADgAAAAwAAAAKAAAACAAAAAYAAAAFAAAAAwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA//frAv/8+Cz//vyB//34zP/68PT/9+j///Pf///w1f//7Mv//+nA///mu///47j//+G0///f - sf//3K3//9qq///Xp///1aP//9Kg///QnP//zZn//8yY///Omf7/z5zs/9Gfu/vQn27eu5AkIR0XBgAA - AAgAAAALAAAACwAAAAsAAAALAAAACgAAAAkAAAAIAAAABwAAAAUAAAAEAAAAAwAAAAEAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA//DdG//26ob/+/bj//78///9+P//+vD///fo///z3///8NX//+zL///p - wP//5rv//+O3///htP//3rH//9yt///aqv//16f//9Wj///SoP//0Jz//82Z///MmP//zpn//8+c///S - n///1KP9/9em1//aqnP82qwVAAAAAAAAAAEAAAABAAAAAgAAAAIAAAACAAAAAgAAAAIAAAABAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+fKM//u2MP/9ej+//v1///+/P///fj///rw///3 - 6P//89////DV///sy///6cD//+a6///jt///4bT//96w///crf//2an//9em///Uo///0qD//9Cc///N - mf//zJj//86Z///PnP//0p///9Si///Xpv//2qv8/92vuv/gszAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9+2Jv/lxM3/7db///Xo///7 - 9f///vz///34///68P//9+j///Tf///w1f//7Mv//+nC///nv///5b7//+O8///iuv//4Lf//960///b - sP//2Kr//9Sk///Rnv//zZn//8yX///NmP//z5z//9Kf///Uov//16b//9qr///esP//4bTQ/+S4LwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/d - so//5ML//+3W///16P//+/b///79///9+P//+e3///Tj///w2v//7tX//+zS///r0P//6s///+nP///p - zv//6c7//+jO///ozv//6M7//+jO///nzP//5Mf//9++///asv//1Kf//9Gg///Sn///1KL//9em///a - q///3rD//+K1///kua3/5r0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP/VnwX/3bG2/+TC///t1///9ej///rz///58f//9OT//+/a///t1P//69H//+rO///o - zP//58n//+bF///kw///48H//+K////hvf//4Lz//+C8///gvP//4b///+PE///my///6dH//+rT///n - zf//4b///9qw///YqP//2qr//96w///itf//5bru/+a8NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/1Z8F/92xtv/kwf//7db///Pi///z3///79n//+3V///s - 0v//69D//+rO///ozP//58n//+bH///lxP//5MH//+K////hvf//4Lv//9+5///etv//3LT//9uy///a - sP//2a///9qx///duP//48X//+rU///t2f//6M3//+C5///esP//4bT//+W6+v/nvUkAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9afBf/csLb/5cT///DZ///x - 2///8Nj//+7W///t1P//7NL//+vQ///qzv//6cz//+fK///mx///5cT//+TB///iv///4b3//+C7///f - uf//3rf//920///bs///2rD//9mu///YrP//1qn//9Wo///XrP//373//+rV///v3v//6Mv//+O4///l - ufr/571JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/P - kgX/4Le2/+7U///y3f//8dv///DZ///u1v//7dT//+zS///r0P//6s7//+nM///nyf//5sf//+XE///k - wf//47///+G9///gu///37n//963///dtf//3LP//9qw///Zrv//2Kz//9eq///VqP//1KX//9Oj///V - qf//48b///Dh///t1f//5r36/+a8SQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD/2KYF/+3Stv/z3///89////Ld///x2v//79f//+3V///s0v//69D//+rO///o - y///58n//+fI///lxP//47///+C6///dtv//27L//9qx///asP//27H//9uy///asf//2a7//9is///X - qv//1aj//9Sm///To///0qH//9Gh///fvf//8eT//+3T+v/nvUkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//XhBf/04bb/9OL///Th///z3v//8dz///DZ///u - 1v//7dP//+vQ///qz///7db///DZ///t0///5sf//+C6///ar///1af//9Kh///Pnf//zpv//86b///Q - n///1KX//9eq///Xqv//1qr//9ao///Upv//06T//9Ki///Qn///0J7//+PH///z5fr/7tNJAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/13wX/9eK2//Xk///1 - 4///8+D///Le///x2///79j//+7V///u1v//9ur///v1///36P//79f//+bH///fuf//2a///9Wn///R - oP//z5z//82Z///Ml///zJf//86a///Tof//1aT//86d///Pnv//0aH//9Ki///Sof//0Z///8+c///V - qf//8eL3//XqRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD/9N4E//Xisf/25v//9eX///Ti///z4P//8d3///Da///v2P//9uj///78///9+P//9+j//+/X///m - x///37n//9mu///Vpv//0aD//8+c///Nmf//zJf//8yX///Omv//06H//9ur///Wpf//wor//8ON///H - k///y5f//82a///Om///0KD//+zY6v/48jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/04WP/9eT3//bm///15P//8+H///Lf///x3P//8dz///nt///+ - +////ff///fn///u1v//5sb//9+5///Zrv//1Kb//9Gg///PnP//zZn//8yX///Ml///zpr//9Oh///b - rP//47f//8qV//++hf//wYr//8SO///Hkv//y5b//9Gi///s2K3///8KAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/898J//Tgi//15Pj/9eX///Tj///z - 4f//8t7///Ld///57f///vz///z3///25///7tb//+bG///fuP//2a7//9Sm///RoP//z5z//82Z///M - l///zJf//86a///Tof//26z//+S5///Rn///v4j//8KM///Ej///yJL//8uW///WrNX/798yAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/y - 3Ar/8t5w//Ph5P/04///9OP///Lh///y3v//+e7///78///89///9ub//+7W///mxv//37j//9mu///U - pv//0aD//8+c///Nmf//zJf//8yX///Omv//1KH//9us///luf//1aT//8GL///Ej///yJP//8uX/f/O - m7//1qs1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/+/WAv/x2jP/8dya//Le6P/y3/7/8t7///nu///+/P///Pb///bm///u - 1f//5cX//9+4///Zrv//1Kb//9Gg///PnP//zZn//8yX///Ml///zpr//9Si///brP//5br//9qr///H - kv//y5f8/82b1v/PnXf/0J4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+3TBf/u1TD/7tZ///Ha5v/5 - 7////vz///z2///25v//7dX//+XF///euP//2a3//9Sm///RoP//zpz//82Z///Ml///zJf//86a///U - ov//263//+W6///gtPT/z563/9Cfaf/SoR//2KoBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/+rEC//x2cD/+u////78///89v//9uX//+3V///lxf//3rf//9mt///Upv//0aD//86c///N - mf//zJf//8yX///Pm///1KL//9yt///luf//573E/9+zEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/rxhb/8dnT//rw///+/P///PX///bl///t1P//5cT//963///Z - rf//1KX//9Gg///Om///zZn//8yX///Ml///z5v//9Si///crf//5br//+i+zP/ovhIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/6sUl//HY5P/68P///vz///z1///2 - 5P//7dT//+XE///et///2K3//9Sl///RoP//zpv//82Z///Ml///zJf//8+b///Uov//3K7//+W6///o - vtv/6L4bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+rDOP/x - 1/D/+vH////8///89f//9eT//+3T///lw///3rf//9it///Upf//0Z///8+b///Nmf//zJf//8yX///P - m///1KP//9yu///luv//6L7n/+i+KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP/pw03/8df6//vx/////P///PT///Xk///t0///5MP//922///Xq///06P//9Ce///O - mv//zJj//8yX///Ml///z5v//9Wj///crv//5br//+i+8P/ovjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/6cJn//HX///78v////z///z0///14///6s3//963///W - qP//0J7//8uX///Ikv//xo7//8SM///EjP//xY7//8qU///Sn///3K3//+a7///ovvn/6L5IAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+nBgP/x1///+/P///78///4 - 7P//6Mn//9qu///Sn///zJb//8eP///Cif//v4T//72B//+7fv//unz//7p8//+9gP//xIn//9CY///f - r///5739/+i+XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/p - wZn/8dj///ry///47f//6s3//+O7///gtP//3q///9ys///Zqf//1qT//9Og///Pm///y5T//8WN///A - hf//vH///719///Cgf//zI3//9um///mu3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP/ltwX/68ez//Xj///78v//9+j///Pe///w1P//7Mj//+e9///kuf//4bX//96x///b - rP//2Kj//9Wk///SoP//z5z//8yX///KlP//yZH//8mL///Pkv//4rOEAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/r1Aj/8+Rc//nu5f/9+////Pb///ns///14f//8NX//+vI///n - vv//5bv//+K4///ftP//3bD//9qs///Xp///06H//8+b///Ml///zZj//9Cc///SoP//1aL//9yttf/d - rxoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/huw3/6tCK//Li9f/79P///vz///v0///2 - 5///8dz//+7V///s0f//68///+rQ///qz///6c///+nP///ozv//58v//+TH///gv///2rT//9Wp///S - ov//06D//9ak///Zqv3/3a/C/+C0NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4Lh3/+jL+//y - 4f//+e////fr///y3v//7tf//+zU///r0f//6c7//+jL///nyP//5cb//+XF///kxP//5MX//+XH///n - zP//6dH//+vW///r1v//6ND//+LC///csv//2qv//92v///itc3/5bkmAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD/16cY/9600//oy///8d3///Hd///v2P//7dT//+zR///qzv//6Mz//+fJ///lxf//5MH//+K////h - vP//4Lr//963///dtP//27P//9uz///dt///4cD//+jP///t2///7tv//+jN///huf//4rb//+W6hQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/9elKP/gt+f/7tb///Hc///w2f//79f//+3U///s0v//6s///+nM///n - yf//5cX//+TC///jv///4b3//+C6///et///3bX//9uy///ar///2Kz//9eq///Xqv//27X//+fN///w - 4P//793//+fF///mu7P/6cAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/brin/687n//Pf///y3v//8t3///Da///v - 1///7dT//+vR///pzf//6Mr//+bG///kwv//47///+G8///guv//3rf//921///bsv//2q///9it///X - qv//1af//9Ok///Upf//3rz//+/g///x4f//6si2/+GoBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/79Uq//Pf6P/0 - 4v//9OL///Pg///x3f//8Nr//+7X///s0///69D//+nN///nyf//5cX//+PA///hvf//4Lr//963///d - tf//27L//9qv///Yrf//16r//9Wo///Upf//0qL//9Gg///duf//8uX///Lgtv/muQUAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA//XiJ//14uX/9ub///Xk///z4v//8t////Hc///v2f//7tb//+zT///q0P//6M3//+fJ///l - xf//48D//+G9///fuf//3bb//9uy///asP//2K3//9eq///VqP//1KX//9Kj///RoP//0J///+jR///2 - 7Kv/9OYDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/14Qr/9eGw//bm///25v//9OT///Ph///y3///8Nz//+/Z///t - 1v//7NP//+rQ///ozf//58n//+XF///jwf//4b3//9+6///dtv//27L//9mu///Xq///1qj//9Sl///S - ov//0aD//8+c///hwv//9u18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//TfN//149f/9uf///Xm///0 - 5P//8+H///He///w3P//7tn//+3W///r0///6tD//+jN///myv//5cb//+PB///hvv//37r//923///b - s///2a///9ap///Upf//0qL//9Gg///Qnv//4cLE//n0HwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD/8t01//Pguf/05Pr/9eX///Tk///z4f//8d////Dc///u2f//7db//+vT///q0P//6M3//+fK///l - xv//48L//+G+///gu///3bf//9qx///Wqf//1KX//9Ki///RoPr/0Z+0/9+8KwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/w2RL/8dtl//Hdwv/y3/T/8uD///Lg///x3///8Nz//+7a///t - 1///7NT//+rS///pz///58v//+XI///jwv//4Lz//9y0///XrP//1aj//9Sl9//So8f/0aBo/9CeEQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/s0hD/7dRE/+3VhP/t - 1rv/7dbe/+3V8v/s1Pv/69P+/+rQ///ozf//5sr//+TF///hv/7/3rj8/9ux9P/YreP/16rC/9Wojv/U - pUv/06MTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD/5scM/+fJJf/nyUb/5sZk/+XDff/jwI7/4b6R/+C7kf/et5D/3LSC/9uxa//a - r0z/2K0r/9erD//WqAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////D// - ///////8H/////////wH////////+AP////////4Af////////gA////////8AB////////wAAD///// - //AAAAf/////4AAAAP/////gAAAAf////+AAAAA/////4AAAAB/////wAAAAH/////AAAAAf////8AAA - AD/////wAAAAf/////A8AAA/////8D4AAA/////wPgAAB/////A+AAAH///+AAEAAA///+AAAAAAH/// - gAAAAAAf//8AAAACAP///gAAAAH////8AAAAAP////wAAAAAf///+AAAAAB////4AAAAAH////gAAAAA - f///+AAAAAB////4AAAAAH////gAAAAAf///+AAAAAB////4AAAAAH////wAAAAAf////AAAAAD////+ - AAAAAf////8AAAAD/////8AAAAf/////8AAAP//////wAAA///////AAAD//////8AAAP//////wAAA/ - //////AAAD//////8AAAP//////wAAA//////+AAAD//////wAAAH/////+AAAAP/////4AAAAf///// - AAAAB/////8AAAAD/////wAAAAP/////AAAAA/////8AAAAD/////wAAAAf/////gAAAB//////AAAAP - /////+AAAB//////+AAAf///////AAH///8oAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE0nKAhOKSk1CgUFDQAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHhUVR9yVVanFg4OSQAA - AB4AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI9y - c06Pe3zsNycnegAAAFEAAAA2AAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAKSNjo6djo//YUhJlwAAAEgAAABXAAAAOgAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAZjg5ErKhocukmJn/blRVySURESsAAABEAAAAUwAAADYAAAAOAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/PkQL/5sZq/+/a7//47////vv///z3///5 - 7P//9OH//+/T///rxf//5rz//+S5///htf//3rH//9us///Xp///06H//8+b///Ml///zZj//9Cc///T - of//16b//9us/v/fsbn/47YkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/csDP/48Dn/+7Z///4 - 7////vz///z2///36P//8t3//+7U///rzv//6cz//+jL///nyv//58n//+bI///lxv//48P//9+8///Z - sf//1Kf//9Kg///ToP//1qX//9us///gsv//5Lip/+e9CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/c - rlX/4779/+7Z///37P//+Oz///Lf///u1v//69H//+nO///oyv//5sb//+TD///jwP//4b7//+C8///g - vP//4L3//+LB///kx///5sz//+bL///hwP//3LH//9us///fsv//5Lnt/+a8MgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP/brlb/47/9/+/Z///y3f//79f//+3U///r0f//6s7//+jL///nyP//5cT//+TB///i - vv//4Lv//9+4///dtf//27L//9qv///Yrf//2a7//9y3///kyP//69X//+fK///it///5Lj1/+e8PQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/dslb/6cv9//Lc///x2v//79f//+3U///r0f//6s7//+jL///n - yP//5cT//+TB///ivv//4bz//9+5///dtv//3LP//9qw///Yrf//16r//9Wn///Upf//2bD//+jP///t - 2P//58D1/+a7PQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/t0lb/8t39//Pf///x3P//79j//+3U///s - 0f//6s7//+nM///oy///5sb//+G9///dtf//2a///9is///YrP//2a7//9mv///Yrf//16v//9Wo///U - pP//0qH//9Ok///mzP//79r1/+nDPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/14lb/9eP9//Ti///y - 3v//8Nv//+7X///s0///79r///Xl///x3P//6Mr//963///Xq///0qH//86b///Nmf//zZn//9Gg///V - p///06T//9Ok///TpP//0qL//9Ce///Upv//7tv0//PjPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/1 - 4VL/9uX8//Xk///z4P//8d3//+/Z///x3f///PX///z2///z3///58n//963///Xqv//0qH//86b///N - mP//zJf//8+b///Wpf//1aT//8WP///Ik///zJn//86b///PnP//5svq//n0LQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP/04B//9ePL//bl///04///8uD///Hc///15P///fn///z0///z3///58n//963///X - qv//0qH//86b///NmP//zJf//8+b///Xpv//4bT//8iU//+/iP//w43//8iT///OnP//5Mip////CgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8983//TiyP/05P7/9OL///Lf///15f///fn///v0///y - 3v//58j//962///Xqv//0qH//86b///NmP//zJf//8+b///Xpv//4rb//8+c///Bi///xZD//8qV/v/Q - n73/5MknAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//HbHf/y3oT/8t/e//Le/f/2 - 5f///fr///v0///y3v//58j//962///Xqv//0qH//86b///MmP//zJf//8+b///Xp///47f//9Sk///H - kv7/zJjg/86bg//PnBoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/s - zwL/7tYj/+/Wff/15PX//vr///vz///y3f//58j//922///Xqf//0aH//86b///MmP//zJf//8+c///Y - p///47f//96x1//PnXL/0aAn/9WmAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/+7PNv/25fD//vr///vz///y3f//5sf//921///Wqf//0aH//86b///M - mP//zJf//8+c///Yp///47f//+i+nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+3NTP/25Pr//vv///vy///x3P//5sf//921///W - qf//0aD//86b///MmP//zJf//8+c///YqP//47j//+i+rv/ovgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+zLZP/25P///vv///vy///x - 3P//5sb//921///Wqf//0aD//86b///NmP//zJj//9Cc///YqP//5Lj//+i+wP/ovgoAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+zJf//2 - 5f///vv///vy///x2///5ML//9mu///Sof//zZn//8qU///Jkv//yZP//86a///YqP//5Ln//+i+0P/o - vhMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/+vImf/25f///vv///bn///kwf//1qf//82Z///Hj///won//7+E//+8gP//vH///8CF///M - lP//3q3//+e93v/ovx4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD/4akF/+vHsf/25v//+O3//+zQ///kvf//4LP//92u///YqP//1KL//9Cc///K - lP//xIv//8CE///Bg///yov//9ql6v/ovSsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8d0j//Th0v/78///+ez///Te///uz///6L///+S5///g - tP//3K7//9io///Uov//z5z//8yX///NmP//zpb//9Se9f/hs0UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/nyjn/8eDH//z2/v/9+f//9+r///Hc///t - 0v//6sz//+nL///nyf//5sj//+XG///iwf//3bn//9et///TpP//06H//9al///brMz/37JBAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9qtG//kwsr/8N3///fq///z - 4v//7tf//+zS///qzv//6Mv//+bH///kxP//48P//+PD///kxf//5sn//+jP///p0f//5cn//9+6///d - sP//4bTa/+W6LwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9mrS//l - wvn/8Nv///Da///u1f//7NL//+rO///oyv//5sb//+TB///ivf//4Lr//962///cs///2rD//9qw///d - t///5Mf//+zZ///r0///5b7//+W6fQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/+G6U//u1fz/8t7///Hc///v2P//7dT//+vQ///oy///5sf//+TB///ivv//4Lr//963///c - s///2rD//9is///WqP//1Kb//9mw///p0///8N3//+nHjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA//LbVf/04fz/9OP///Pf///x3P//7tf//+zT///qz///6Mr//+XF///j - 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 - nv9lTU+8RBESCAAAAAAAAAAEAAAAIgAAACsAAAAlAAAAIAAAABoAAAAVAAAAEQAAAAwAAAAHAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9OAK/+3OH//o - vDG2oZCmmYt//4NqW8vrv5M2/9OeGrGOaQsAAAAYAAAAIgAAACEAAAAcAAAAFwAAABIAAAANAAAACQAA - AAYAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/47gX//vs4//vzhP/1 - 47//7s/f/+e+7/zfs/r416r/+dOk/P/Toe3/z5vb/82Zt/fJmH7KqIE8NCwjEgAAAA8AAAAPAAAADAAA - AAkAAAAGAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/58gX//Pkkv/8 - +O3/+/T///Xk///u0P//577//+K2///er///2aj//9Oh///Omv//zZj//9Gd///Wpej+26yL+NquFwAA - AAAAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8+SBP/k - wZf/8d////z4///68v//8+D//+3R///px///5sT//+TB///hvv//3rj//9mw///Upv//06L//9ak///c - rf//4rWg/+i+CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD/2KUP/+K9zP/w3P//9ef///Db///s0v//6cz//+bH///kwv//4r///+C8///fu///37z//+HA///i - w///4b7//9+0///jtur/5rwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP/YphD/5sbN//Da///v1///7dP//+rP///oyv//5cX//+PA///hvP//3rj//9y0///Z - r///16v//9es///duf//6M3//+jE7//mujIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/+3QEP/y3c3/89////Da///t1P//69H//+zS///oyf//37n//9it///V - p///1af//9er///Wqv//1ab//9Ki///Xrf//69Pv/+7TMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9eEP//Xkyv/04///8t3//+/Y///26P//+O3//+vP///c - tP//06P//86a///Ml///0Z///9Wk///Ll///zZr//86b///fvuj/9+8qAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/y1gH/9eN5//Xk+P/z4f//8t7///vz///5 - 7///6s7//9yz///To///zpr//8yX///Rnv//3a7//8iT///DjP//ypb//9qzov///wkAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/z3Qn/8+Bm//Pg0v/z - 4Pv/+/P///nu///qzv//3LP//9Oj///Omv//zJf//9Ge///fsf//0J7//8iT6P/MmY3/1qoYAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD/7tYY//LclP/79P//+e7//+nN///cs///06P//86a///Ml///0Z7//+Cz///dsKT/zZot/9OjBAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD/8tp8//v0///57f//6cz//9uy///To///zpr//8yX///Sn///4LP//+i+dgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/x15f/+/T///nt///py///2rD//9Gh///Nmf//zJf//9Kf///h - tP//6L6LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/2pYE//DUsP/79P//8+H//962///Qnv//x5H//8KJ///A - hv//x47//9up///nvKD//+0BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/ovQ7/8trH//jt///t0f//47j//92u///W - pf//0Jz//8iR///Eif//yo///9mks//32AUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/37kJ//Heev/78/P/+e3///Ha///r - yv//58T//+TA///gu///27P//9Wo///Tof//16Xl/96vT//xzAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/fuFz/7dX4//Tk///v - 2f//69D//+jK///lxf//48H//+K////iwP//48X//+XI///jwv//4bfk/+S4NQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+bEhv/w - 2f//8Nr//+3U///qzv//5sf//+PA///gu///3bX//9qw///YrP//2a///+LE///s1P//6cZiAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD/9N+E//Xj///y3///79n//+zT///pzf//5cX//+G9///et///27H//9is///Upv//0qL//+LE///z - 5WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP/14kX/9eXp//Tk///y3///79n//+vT///ozf//5cX//+G9///dtv//2a///9Wn///R - oP//2K/h//LlMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA//LaAv/z4Uj/8+K6//Lg8f/w3f7/7tn//+vT///ozv//5cb//+C9///a - sf//1afz/9KhvP/TpUX///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/u1g//79hG/+3XhP/s07H/6c3J/+bIz//i - v8v/3bW0/9itiP/Vp0r/0qMRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD//D////wf///8D////AD///wAD//4AAf//AAD//wAB//8AAf//CAD/+AAA/8AAAP+AACP/AAAf/wA - AH/8AAB//AAAf/wAAH/8AAB//gAA//+AAf//wAf//8AH//+AA///gAP//wAB//8AAf//AAH//wAB//8A - Af//AAH//8AH/ygAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAeWJjQDsvLzsAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ6NjZJYSUl4AAAAJwAAAAcAAAADAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFZDQwmfkZK8WkpKmAAAAEQAAAA2AAAAKAAAABsAAAANAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+ZWUHpJWWul5NTZAAAAA3AAAAOQAAAC4AAAAjAAAAFgAA - AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnn+AB5+Rkrp1YGFsAAAABAAAACYAAAAlAAAAGgAA - AA8AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAD//Pgc//jpWv3oxYnUu5zj2bWPvP7NmG++nHVJOzInGwAA - AA8AAAAJAAAAAwAAAAAAAAAAAAAAAAAAAAD/5sY1//fszv/36fz/68r//+O7///csP//06X//9Wl7v3b - rYrZxaAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+fGcP/w3P//7dX//+fJ///iv///3rj//9y0///d - t///477l/+e/JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/z327/8t3///Db///t1P//2rH//9Kh///U - pf//0J///9u05f/u2CUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9eQr//Phvf/36vn/8d7//9is///N - mf//1aT//8uY7//Onon/8uMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/u1BX/+ezA//Hd///Y - q///zZn//9io+v/esWP/tXsEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/57wM//fpxf/s - 0///0qH//8iQ///Uofz/5blTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+/ZNv/2 - 6OT/683//960///Upv//0Z7//9qpgf/1ywIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9KYBP/t - 1Kn/8Nz//+nN///jwf//37n//923///jwej/6ccwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/s - zQP/9OGe//Le///s0///5cX//963///Wqf//2bDm/+zWLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA//TjIv/y4I7/7tnS/+nO6P/hvuL/2Ky6/9KjVv/ixQQAAAAAAAAAAAAAAAAAAAAA/j8AAP4H - AAD8AQAA/AEAAPwBAADwAQAA4AcAAOAHAADgBwAA4AcAAPAPAADwHwAA8A8AAOAPAADgDwAA8A8AAA== - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaButton.cs b/BizHawk.Client.EmuHawk/tools/Lua/LuaButton.cs index eab3a6accc..fd1f578b93 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaButton.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaButton.cs @@ -5,15 +5,9 @@ namespace BizHawk.Client.EmuHawk { internal class LuaButton : Button { - private void DoLuaClick(object sender, EventArgs e) - { - LuaWinform parent = Parent as LuaWinform; - parent?.DoLuaEvent(Handle); - } - protected override void OnClick(EventArgs e) { - DoLuaClick(this, e); + (Parent as LuaWinform)?.DoLuaEvent(Handle); base.OnClick(e); } } diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaCanvas.Designer.cs b/BizHawk.Client.EmuHawk/tools/Lua/LuaCanvas.Designer.cs index eb602c90ef..4588e01d9c 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaCanvas.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaCanvas.Designer.cs @@ -28,14 +28,13 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LuaCanvas)); this.luaPictureBox = new BizHawk.Client.EmuHawk.LuaPictureBox(); ((System.ComponentModel.ISupportInitialize)(this.luaPictureBox)).BeginInit(); this.SuspendLayout(); // // luaPictureBox // - this.luaPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("luaPictureBox.Image"))); + this.luaPictureBox.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.luaPictureBox; this.luaPictureBox.Location = new System.Drawing.Point(0, 0); this.luaPictureBox.Margin = new System.Windows.Forms.Padding(0); this.luaPictureBox.Name = "luaPictureBox"; diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaCanvas.cs b/BizHawk.Client.EmuHawk/tools/Lua/LuaCanvas.cs index b3d0f5f424..38c0e7c4cf 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaCanvas.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaCanvas.cs @@ -1,3 +1,4 @@ +using System; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; @@ -5,16 +6,13 @@ using System.IO; using BizHawk.Client.Common; using NLua; -using System; -using System.Collections.Generic; +// ReSharper disable UnusedMember.Global namespace BizHawk.Client.EmuHawk { [Description("Represents a canvas object returned by the gui.createcanvas() method")] public partial class LuaCanvas : Form { - //public List ControlEvents { get; } = new List(); - public LuaCanvas(int width, int height, int? x = null, int? y = null) { InitializeComponent(); @@ -24,7 +22,7 @@ namespace BizHawk.Client.EmuHawk if (x.HasValue) { - StartPosition = System.Windows.Forms.FormStartPosition.Manual; + StartPosition = FormStartPosition.Manual; Left = (int)x; if (y.HasValue) { @@ -50,9 +48,9 @@ namespace BizHawk.Client.EmuHawk "Sets the location of the canvas window")] public void SetLocation(int x, int y) { - StartPosition = System.Windows.Forms.FormStartPosition.Manual; - Left = (int)x; - Top = (int)y; + StartPosition = FormStartPosition.Manual; + Left = x; + Top = y; } [LuaMethodExample( @@ -99,7 +97,7 @@ namespace BizHawk.Client.EmuHawk "LuaCanvas.setDefaultTextBackground( 0x000000FF );")] [LuaMethod( "setDefaultTextBackground", - "Sets the default backgroiund color to use in text drawing methods, half-transparent black by default")] + "Sets the default background color to use in text drawing methods, half-transparent black by default")] public void SetDefaultTextBackground(Color color) { luaPictureBox.SetDefaultTextBackground(color); @@ -119,7 +117,6 @@ namespace BizHawk.Client.EmuHawk catch (Exception ex) { ConsoleLuaLibrary.Log(ex.Message); - return; } } @@ -137,7 +134,6 @@ namespace BizHawk.Client.EmuHawk catch (Exception ex) { ConsoleLuaLibrary.Log(ex.Message); - return; } } @@ -155,7 +151,6 @@ namespace BizHawk.Client.EmuHawk catch (Exception ex) { ConsoleLuaLibrary.Log(ex.Message); - return; } } @@ -173,7 +168,6 @@ namespace BizHawk.Client.EmuHawk catch (Exception ex) { ConsoleLuaLibrary.Log(ex.Message); - return; } } @@ -208,7 +202,7 @@ namespace BizHawk.Client.EmuHawk [LuaMethod( "drawImageRegion", "draws a given region of an image file from the given path at the given coordinate, and optionally with the given size")] - public void DrawImageRegion(string path, int source_x, int source_y, int source_width, int source_height, int dest_x, int dest_y, int? dest_width = null, int? dest_height = null) + public void DrawImageRegion(string path, int sourceX, int sourceY, int sourceWidth, int sourceHeight, int destX, int destY, int? destWidth = null, int? destHeight = null) { if (!File.Exists(path)) { @@ -216,7 +210,7 @@ namespace BizHawk.Client.EmuHawk return; } - luaPictureBox.DrawImageRegion(path, source_x, source_y, source_width, source_height, dest_x, dest_y, dest_width, dest_height); + luaPictureBox.DrawImageRegion(path, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight); } [LuaMethodExample( @@ -245,9 +239,9 @@ namespace BizHawk.Client.EmuHawk "drawArc", "draws a Arc shape at the given coordinates and the given width and height" )] - public void DrawArc(int x, int y, int width, int height, int startangle, int sweepangle, Color? line = null) + public void DrawArc(int x, int y, int width, int height, int startAngle, int sweepAngle, Color? line = null) { - luaPictureBox.DrawArc(x, y, width, height, startangle, sweepangle, line); + luaPictureBox.DrawArc(x, y, width, height, startAngle, sweepAngle, line); } [LuaMethodExample( @@ -260,12 +254,12 @@ namespace BizHawk.Client.EmuHawk int y, int width, int height, - int startangle, - int sweepangle, + int startAngle, + int sweepAngle, Color? line = null, Color? background = null) { - luaPictureBox.DrawPie(x, y, width, height, startangle, sweepangle, line, background); + luaPictureBox.DrawPie(x, y, width, height, startAngle, sweepAngle, line, background); } [LuaMethodExample( @@ -282,7 +276,6 @@ namespace BizHawk.Client.EmuHawk catch (Exception ex) { ConsoleLuaLibrary.Log(ex.Message); - return; } } @@ -300,7 +293,6 @@ namespace BizHawk.Client.EmuHawk catch (Exception ex) { ConsoleLuaLibrary.Log(ex.Message); - return; } } @@ -324,15 +316,15 @@ namespace BizHawk.Client.EmuHawk int x, int y, string message, - Color? forecolor = null, - Color? backcolor = null, - int? fontsize = null, - string fontfamily = null, - string fontstyle = null, - string horizalign = null, - string vertalign = null) + Color? foreColor = null, + Color? backColor = null, + int? fontSize = null, + string fontFamily = null, + string fontStyle = null, + string horizontalAlign = null, + string verticalAlign = null) { - luaPictureBox.DrawText(x, y, message, forecolor, backcolor, fontsize, fontfamily, fontstyle, horizalign, vertalign); + luaPictureBox.DrawText(x, y, message, foreColor, backColor, fontSize, fontFamily, fontStyle, horizontalAlign, verticalAlign); } [LuaMethodExample( @@ -344,15 +336,15 @@ namespace BizHawk.Client.EmuHawk int x, int y, string message, - Color? forecolor = null, - Color? backcolor = null, - int? fontsize = null, - string fontfamily = null, - string fontstyle = null, - string horizalign = null, - string vertalign = null) + Color? foreColor = null, + Color? backColor = null, + int? fontSize = null, + string fontFamily = null, + string fontStyle = null, + string horizontalAlign = null, + string verticalAlign = null) { - luaPictureBox.DrawText(x, y, message, forecolor, backcolor, fontsize, fontfamily, fontstyle, horizalign, vertalign); + luaPictureBox.DrawText(x, y, message, foreColor, backColor, fontSize, fontFamily, fontStyle, horizontalAlign, verticalAlign); } diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaCanvas.resx b/BizHawk.Client.EmuHawk/tools/Lua/LuaCanvas.resx index c86561be75..29dcb1b3a3 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaCanvas.resx +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaCanvas.resx @@ -117,12 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - iVBORw0KGgoAAAANSUhEUgAAAGQAAAAyCAYAAACqNX6+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAArSURBVHhe7cEBDQAAAMKg909tDjcgAAAAAAAAAAAAAAAA - AAAAAAAAAC7VAE5SAAHx0pUgAAAAAElFTkSuQmCC - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.Designer.cs b/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.Designer.cs index b7ca3c0698..c46f8cbb4d 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LuaConsole)); this.ScriptListContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components); this.ToggleScriptContextItem = new System.Windows.Forms.ToolStripMenuItem(); this.PauseScriptContextItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -85,7 +84,9 @@ this.ClearConsoleContextItem = new System.Windows.Forms.ToolStripMenuItem(); this.SelectAllContextItem = new System.Windows.Forms.ToolStripMenuItem(); this.CopyContextItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); this.RegisteredFunctionsContextItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ClearRegisteredFunctionsLogContextItem = new System.Windows.Forms.ToolStripMenuItem(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.InputBox = new System.Windows.Forms.TextBox(); this.NumberOfScripts = new System.Windows.Forms.Label(); @@ -107,8 +108,6 @@ this.EraseToolbarItem = new System.Windows.Forms.ToolStripButton(); this.LuaListView = new BizHawk.Client.EmuHawk.InputRoll(); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); - this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); - this.ClearRegisteredFunctionsLogContextItem = new System.Windows.Forms.ToolStripMenuItem(); this.ScriptListContextMenu.SuspendLayout(); this.menuStrip1.SuspendLayout(); this.ConsoleContextMenu.SuspendLayout(); @@ -132,14 +131,14 @@ this.StopAllScriptsContextItem, this.ClearRegisteredFunctionsContextItem}); this.ScriptListContextMenu.Name = "contextMenuStrip1"; - this.ScriptListContextMenu.Size = new System.Drawing.Size(215, 164); + this.ScriptListContextMenu.Size = new System.Drawing.Size(204, 164); this.ScriptListContextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.ScriptListContextMenu_Opening); // // ToggleScriptContextItem // this.ToggleScriptContextItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Refresh1; this.ToggleScriptContextItem.Name = "ToggleScriptContextItem"; - this.ToggleScriptContextItem.Size = new System.Drawing.Size(214, 22); + this.ToggleScriptContextItem.Size = new System.Drawing.Size(203, 22); this.ToggleScriptContextItem.Text = "&Toggle"; this.ToggleScriptContextItem.Click += new System.EventHandler(this.ToggleScriptMenuItem_Click); // @@ -147,7 +146,7 @@ // this.PauseScriptContextItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Pause; this.PauseScriptContextItem.Name = "PauseScriptContextItem"; - this.PauseScriptContextItem.Size = new System.Drawing.Size(214, 22); + this.PauseScriptContextItem.Size = new System.Drawing.Size(203, 22); this.PauseScriptContextItem.Text = "Pause or Resume"; this.PauseScriptContextItem.Click += new System.EventHandler(this.PauseScriptMenuItem_Click); // @@ -155,7 +154,7 @@ // this.EditScriptContextItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.CutHS; this.EditScriptContextItem.Name = "EditScriptContextItem"; - this.EditScriptContextItem.Size = new System.Drawing.Size(214, 22); + this.EditScriptContextItem.Size = new System.Drawing.Size(203, 22); this.EditScriptContextItem.Text = "&Edit"; this.EditScriptContextItem.Click += new System.EventHandler(this.EditScriptMenuItem_Click); // @@ -163,7 +162,7 @@ // this.RemoveScriptContextItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Close; this.RemoveScriptContextItem.Name = "RemoveScriptContextItem"; - this.RemoveScriptContextItem.Size = new System.Drawing.Size(214, 22); + this.RemoveScriptContextItem.Size = new System.Drawing.Size(203, 22); this.RemoveScriptContextItem.Text = "&Remove"; this.RemoveScriptContextItem.Click += new System.EventHandler(this.RemoveScriptMenuItem_Click); // @@ -171,20 +170,20 @@ // this.InsertSeperatorContextItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.InsertSeparator; this.InsertSeperatorContextItem.Name = "InsertSeperatorContextItem"; - this.InsertSeperatorContextItem.Size = new System.Drawing.Size(214, 22); + this.InsertSeperatorContextItem.Size = new System.Drawing.Size(203, 22); this.InsertSeperatorContextItem.Text = "Insert Seperator"; this.InsertSeperatorContextItem.Click += new System.EventHandler(this.InsertSeparatorMenuItem_Click); // // ScriptContextSeparator // this.ScriptContextSeparator.Name = "ScriptContextSeparator"; - this.ScriptContextSeparator.Size = new System.Drawing.Size(211, 6); + this.ScriptContextSeparator.Size = new System.Drawing.Size(200, 6); // // StopAllScriptsContextItem // this.StopAllScriptsContextItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Stop; this.StopAllScriptsContextItem.Name = "StopAllScriptsContextItem"; - this.StopAllScriptsContextItem.Size = new System.Drawing.Size(214, 22); + this.StopAllScriptsContextItem.Size = new System.Drawing.Size(203, 22); this.StopAllScriptsContextItem.Text = "Stop All Scripts"; this.StopAllScriptsContextItem.Click += new System.EventHandler(this.StopAllScriptsMenuItem_Click); // @@ -192,7 +191,7 @@ // this.ClearRegisteredFunctionsContextItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Delete; this.ClearRegisteredFunctionsContextItem.Name = "ClearRegisteredFunctionsContextItem"; - this.ClearRegisteredFunctionsContextItem.Size = new System.Drawing.Size(214, 22); + this.ClearRegisteredFunctionsContextItem.Size = new System.Drawing.Size(203, 22); this.ClearRegisteredFunctionsContextItem.Text = "Clear Registered Functions"; this.ClearRegisteredFunctionsContextItem.Click += new System.EventHandler(this.ClearRegisteredFunctionsContextMenuItem_Click); // @@ -223,7 +222,7 @@ this.toolStripSeparator1, this.ExitMenuItem}); this.FileSubMenu.Name = "FileSubMenu"; - this.FileSubMenu.Size = new System.Drawing.Size(37, 20); + this.FileSubMenu.Size = new System.Drawing.Size(35, 20); this.FileSubMenu.Text = "&File"; this.FileSubMenu.DropDownOpened += new System.EventHandler(this.FileSubMenu_DropDownOpened); // @@ -233,7 +232,7 @@ this.NewSessionMenuItem.Name = "NewSessionMenuItem"; this.NewSessionMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) | System.Windows.Forms.Keys.N))); - this.NewSessionMenuItem.Size = new System.Drawing.Size(237, 22); + this.NewSessionMenuItem.Size = new System.Drawing.Size(232, 22); this.NewSessionMenuItem.Text = "&New Session"; this.NewSessionMenuItem.Click += new System.EventHandler(this.NewSessionMenuItem_Click); // @@ -243,7 +242,7 @@ this.OpenSessionMenuItem.Name = "OpenSessionMenuItem"; this.OpenSessionMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) | System.Windows.Forms.Keys.O))); - this.OpenSessionMenuItem.Size = new System.Drawing.Size(237, 22); + this.OpenSessionMenuItem.Size = new System.Drawing.Size(232, 22); this.OpenSessionMenuItem.Text = "&Open Session..."; this.OpenSessionMenuItem.Click += new System.EventHandler(this.OpenSessionMenuItem_Click); // @@ -252,7 +251,7 @@ this.SaveSessionMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.SaveAs; this.SaveSessionMenuItem.Name = "SaveSessionMenuItem"; this.SaveSessionMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S))); - this.SaveSessionMenuItem.Size = new System.Drawing.Size(237, 22); + this.SaveSessionMenuItem.Size = new System.Drawing.Size(232, 22); this.SaveSessionMenuItem.Text = "&Save Session"; this.SaveSessionMenuItem.Click += new System.EventHandler(this.SaveSessionMenuItem_Click); // @@ -261,21 +260,21 @@ this.SaveSessionAsMenuItem.Name = "SaveSessionAsMenuItem"; this.SaveSessionAsMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) | System.Windows.Forms.Keys.S))); - this.SaveSessionAsMenuItem.Size = new System.Drawing.Size(237, 22); + this.SaveSessionAsMenuItem.Size = new System.Drawing.Size(232, 22); this.SaveSessionAsMenuItem.Text = "Save Session &As..."; this.SaveSessionAsMenuItem.Click += new System.EventHandler(this.SaveSessionAsMenuItem_Click); // // toolStripSeparator9 // this.toolStripSeparator9.Name = "toolStripSeparator9"; - this.toolStripSeparator9.Size = new System.Drawing.Size(234, 6); + this.toolStripSeparator9.Size = new System.Drawing.Size(229, 6); // // RecentSessionsSubMenu // this.RecentSessionsSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripSeparator8}); this.RecentSessionsSubMenu.Name = "RecentSessionsSubMenu"; - this.RecentSessionsSubMenu.Size = new System.Drawing.Size(237, 22); + this.RecentSessionsSubMenu.Size = new System.Drawing.Size(232, 22); this.RecentSessionsSubMenu.Text = "Recent Sessions"; this.RecentSessionsSubMenu.DropDownOpened += new System.EventHandler(this.RecentSessionsSubMenu_DropDownOpened); // @@ -290,7 +289,7 @@ this.toolStripSeparator3}); this.RecentScriptsSubMenu.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Recent; this.RecentScriptsSubMenu.Name = "RecentScriptsSubMenu"; - this.RecentScriptsSubMenu.Size = new System.Drawing.Size(237, 22); + this.RecentScriptsSubMenu.Size = new System.Drawing.Size(232, 22); this.RecentScriptsSubMenu.Text = "Recent Scripts"; this.RecentScriptsSubMenu.DropDownOpened += new System.EventHandler(this.RecentScriptsSubMenu_DropDownOpened); // @@ -302,13 +301,13 @@ // toolStripSeparator1 // this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(234, 6); + this.toolStripSeparator1.Size = new System.Drawing.Size(229, 6); // // ExitMenuItem // this.ExitMenuItem.Name = "ExitMenuItem"; this.ExitMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4))); - this.ExitMenuItem.Size = new System.Drawing.Size(237, 22); + this.ExitMenuItem.Size = new System.Drawing.Size(232, 22); this.ExitMenuItem.Text = "E&xit"; this.ExitMenuItem.Click += new System.EventHandler(this.ExitMenuItem_Click); // @@ -332,7 +331,7 @@ this.StopAllScriptsMenuItem, this.RegisteredFunctionsMenuItem}); this.ScriptSubMenu.Name = "ScriptSubMenu"; - this.ScriptSubMenu.Size = new System.Drawing.Size(49, 20); + this.ScriptSubMenu.Size = new System.Drawing.Size(46, 20); this.ScriptSubMenu.Text = "&Script"; this.ScriptSubMenu.DropDownOpened += new System.EventHandler(this.ScriptSubMenu_DropDownOpened); // @@ -341,7 +340,7 @@ this.NewScriptMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.NewFile; this.NewScriptMenuItem.Name = "NewScriptMenuItem"; this.NewScriptMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N))); - this.NewScriptMenuItem.Size = new System.Drawing.Size(218, 22); + this.NewScriptMenuItem.Size = new System.Drawing.Size(212, 22); this.NewScriptMenuItem.Text = "New Script"; this.NewScriptMenuItem.Click += new System.EventHandler(this.NewScriptMenuItem_Click); // @@ -350,7 +349,7 @@ this.OpenScriptMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.OpenFile; this.OpenScriptMenuItem.Name = "OpenScriptMenuItem"; this.OpenScriptMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O))); - this.OpenScriptMenuItem.Size = new System.Drawing.Size(218, 22); + this.OpenScriptMenuItem.Size = new System.Drawing.Size(212, 22); this.OpenScriptMenuItem.Text = "&Open Script..."; this.OpenScriptMenuItem.Click += new System.EventHandler(this.OpenScriptMenuItem_Click); // @@ -359,7 +358,7 @@ this.RefreshScriptMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Refresh1; this.RefreshScriptMenuItem.Name = "RefreshScriptMenuItem"; this.RefreshScriptMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F5; - this.RefreshScriptMenuItem.Size = new System.Drawing.Size(218, 22); + this.RefreshScriptMenuItem.Size = new System.Drawing.Size(212, 22); this.RefreshScriptMenuItem.Text = "&Re&fresh"; this.RefreshScriptMenuItem.Click += new System.EventHandler(this.RefreshScriptMenuItem_Click); // @@ -368,7 +367,7 @@ this.ToggleScriptMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.checkbox; this.ToggleScriptMenuItem.Name = "ToggleScriptMenuItem"; this.ToggleScriptMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.T))); - this.ToggleScriptMenuItem.Size = new System.Drawing.Size(218, 22); + this.ToggleScriptMenuItem.Size = new System.Drawing.Size(212, 22); this.ToggleScriptMenuItem.Text = "&Toggle"; this.ToggleScriptMenuItem.Click += new System.EventHandler(this.ToggleScriptMenuItem_Click); // @@ -376,7 +375,7 @@ // this.PauseScriptMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Pause; this.PauseScriptMenuItem.Name = "PauseScriptMenuItem"; - this.PauseScriptMenuItem.Size = new System.Drawing.Size(218, 22); + this.PauseScriptMenuItem.Size = new System.Drawing.Size(212, 22); this.PauseScriptMenuItem.Text = "Pause or Resume"; this.PauseScriptMenuItem.Click += new System.EventHandler(this.PauseScriptMenuItem_Click); // @@ -385,7 +384,7 @@ this.EditScriptMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.CutHS; this.EditScriptMenuItem.Name = "EditScriptMenuItem"; this.EditScriptMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.E))); - this.EditScriptMenuItem.Size = new System.Drawing.Size(218, 22); + this.EditScriptMenuItem.Size = new System.Drawing.Size(212, 22); this.EditScriptMenuItem.Text = "&Edit Script"; this.EditScriptMenuItem.Click += new System.EventHandler(this.EditScriptMenuItem_Click); // @@ -394,28 +393,28 @@ this.RemoveScriptMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Delete; this.RemoveScriptMenuItem.Name = "RemoveScriptMenuItem"; this.RemoveScriptMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Delete; - this.RemoveScriptMenuItem.Size = new System.Drawing.Size(218, 22); + this.RemoveScriptMenuItem.Size = new System.Drawing.Size(212, 22); this.RemoveScriptMenuItem.Text = "&Remove Script"; this.RemoveScriptMenuItem.Click += new System.EventHandler(this.RemoveScriptMenuItem_Click); // // DuplicateScriptMenuItem // this.DuplicateScriptMenuItem.Name = "DuplicateScriptMenuItem"; - this.DuplicateScriptMenuItem.Size = new System.Drawing.Size(218, 22); + this.DuplicateScriptMenuItem.Size = new System.Drawing.Size(212, 22); this.DuplicateScriptMenuItem.Text = "&Duplicate Script"; this.DuplicateScriptMenuItem.Click += new System.EventHandler(this.DuplicateScriptMenuItem_Click); // // toolStripSeparator7 // this.toolStripSeparator7.Name = "toolStripSeparator7"; - this.toolStripSeparator7.Size = new System.Drawing.Size(215, 6); + this.toolStripSeparator7.Size = new System.Drawing.Size(209, 6); // // InsertSeparatorMenuItem // this.InsertSeparatorMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.InsertSeparator; this.InsertSeparatorMenuItem.Name = "InsertSeparatorMenuItem"; this.InsertSeparatorMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.I))); - this.InsertSeparatorMenuItem.Size = new System.Drawing.Size(218, 22); + this.InsertSeparatorMenuItem.Size = new System.Drawing.Size(212, 22); this.InsertSeparatorMenuItem.Text = "Insert Separator"; this.InsertSeparatorMenuItem.Click += new System.EventHandler(this.InsertSeparatorMenuItem_Click); // @@ -424,7 +423,7 @@ this.MoveUpMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.MoveUp; this.MoveUpMenuItem.Name = "MoveUpMenuItem"; this.MoveUpMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.U))); - this.MoveUpMenuItem.Size = new System.Drawing.Size(218, 22); + this.MoveUpMenuItem.Size = new System.Drawing.Size(212, 22); this.MoveUpMenuItem.Text = "Move &Up"; this.MoveUpMenuItem.Click += new System.EventHandler(this.MoveUpMenuItem_Click); // @@ -433,7 +432,7 @@ this.MoveDownMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.MoveDown; this.MoveDownMenuItem.Name = "MoveDownMenuItem"; this.MoveDownMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D))); - this.MoveDownMenuItem.Size = new System.Drawing.Size(218, 22); + this.MoveDownMenuItem.Size = new System.Drawing.Size(212, 22); this.MoveDownMenuItem.Text = "Move &Down"; this.MoveDownMenuItem.Click += new System.EventHandler(this.MoveDownMenuItem_Click); // @@ -441,20 +440,20 @@ // this.SelectAllMenuItem.Name = "SelectAllMenuItem"; this.SelectAllMenuItem.ShortcutKeyDisplayString = "Ctrl+A"; - this.SelectAllMenuItem.Size = new System.Drawing.Size(218, 22); + this.SelectAllMenuItem.Size = new System.Drawing.Size(212, 22); this.SelectAllMenuItem.Text = "Select &All"; this.SelectAllMenuItem.Click += new System.EventHandler(this.SelectAllMenuItem_Click); // // toolStripSeparator6 // this.toolStripSeparator6.Name = "toolStripSeparator6"; - this.toolStripSeparator6.Size = new System.Drawing.Size(215, 6); + this.toolStripSeparator6.Size = new System.Drawing.Size(209, 6); // // StopAllScriptsMenuItem // this.StopAllScriptsMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Stop; this.StopAllScriptsMenuItem.Name = "StopAllScriptsMenuItem"; - this.StopAllScriptsMenuItem.Size = new System.Drawing.Size(218, 22); + this.StopAllScriptsMenuItem.Size = new System.Drawing.Size(212, 22); this.StopAllScriptsMenuItem.Text = "Stop All Scripts"; this.StopAllScriptsMenuItem.Click += new System.EventHandler(this.StopAllScriptsMenuItem_Click); // @@ -462,7 +461,7 @@ // this.RegisteredFunctionsMenuItem.Name = "RegisteredFunctionsMenuItem"; this.RegisteredFunctionsMenuItem.ShortcutKeyDisplayString = "F12"; - this.RegisteredFunctionsMenuItem.Size = new System.Drawing.Size(218, 22); + this.RegisteredFunctionsMenuItem.Size = new System.Drawing.Size(212, 22); this.RegisteredFunctionsMenuItem.Text = "&Registered Functions..."; this.RegisteredFunctionsMenuItem.Click += new System.EventHandler(this.RegisteredFunctionsMenuItem_Click); // @@ -475,35 +474,35 @@ this.toolStripSeparator4, this.RegisterToTextEditorsSubMenu}); this.SettingsSubMenu.Name = "SettingsSubMenu"; - this.SettingsSubMenu.Size = new System.Drawing.Size(61, 20); + this.SettingsSubMenu.Size = new System.Drawing.Size(58, 20); this.SettingsSubMenu.Text = "&Settings"; this.SettingsSubMenu.DropDownOpened += new System.EventHandler(this.OptionsSubMenu_DropDownOpened); // // DisableScriptsOnLoadMenuItem // this.DisableScriptsOnLoadMenuItem.Name = "DisableScriptsOnLoadMenuItem"; - this.DisableScriptsOnLoadMenuItem.Size = new System.Drawing.Size(247, 22); + this.DisableScriptsOnLoadMenuItem.Size = new System.Drawing.Size(232, 22); this.DisableScriptsOnLoadMenuItem.Text = "Disable Scripts on Load"; this.DisableScriptsOnLoadMenuItem.Click += new System.EventHandler(this.DisableScriptsOnLoadMenuItem_Click); // // ReturnAllIfNoneSelectedMenuItem // this.ReturnAllIfNoneSelectedMenuItem.Name = "ReturnAllIfNoneSelectedMenuItem"; - this.ReturnAllIfNoneSelectedMenuItem.Size = new System.Drawing.Size(247, 22); + this.ReturnAllIfNoneSelectedMenuItem.Size = new System.Drawing.Size(232, 22); this.ReturnAllIfNoneSelectedMenuItem.Text = "Toggle All if None Selected"; this.ReturnAllIfNoneSelectedMenuItem.Click += new System.EventHandler(this.ToggleAllIfNoneSelectedMenuItem_Click); // // ReloadWhenScriptFileChangesMenuItem // this.ReloadWhenScriptFileChangesMenuItem.Name = "ReloadWhenScriptFileChangesMenuItem"; - this.ReloadWhenScriptFileChangesMenuItem.Size = new System.Drawing.Size(247, 22); + this.ReloadWhenScriptFileChangesMenuItem.Size = new System.Drawing.Size(232, 22); this.ReloadWhenScriptFileChangesMenuItem.Text = "Reload When Script File Changes"; this.ReloadWhenScriptFileChangesMenuItem.Click += new System.EventHandler(this.ReloadWhenScriptFileChangesMenuItem_Click); // // toolStripSeparator4 // this.toolStripSeparator4.Name = "toolStripSeparator4"; - this.toolStripSeparator4.Size = new System.Drawing.Size(244, 6); + this.toolStripSeparator4.Size = new System.Drawing.Size(229, 6); // // RegisterToTextEditorsSubMenu // @@ -511,7 +510,7 @@ this.RegisterSublimeText2MenuItem, this.RegisterNotePadMenuItem}); this.RegisterToTextEditorsSubMenu.Name = "RegisterToTextEditorsSubMenu"; - this.RegisterToTextEditorsSubMenu.Size = new System.Drawing.Size(247, 22); + this.RegisterToTextEditorsSubMenu.Size = new System.Drawing.Size(232, 22); this.RegisterToTextEditorsSubMenu.Text = "Register To Text Editors"; this.RegisterToTextEditorsSubMenu.DropDownOpened += new System.EventHandler(this.RegisterToTextEditorsSubMenu_DropDownOpened); // @@ -519,14 +518,14 @@ // this.RegisterSublimeText2MenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.GreenCheck; this.RegisterSublimeText2MenuItem.Name = "RegisterSublimeText2MenuItem"; - this.RegisterSublimeText2MenuItem.Size = new System.Drawing.Size(150, 22); + this.RegisterSublimeText2MenuItem.Size = new System.Drawing.Size(144, 22); this.RegisterSublimeText2MenuItem.Text = "&Sublime Text 2"; this.RegisterSublimeText2MenuItem.Click += new System.EventHandler(this.RegisterSublimeText2MenuItem_Click); // // RegisterNotePadMenuItem // this.RegisterNotePadMenuItem.Name = "RegisterNotePadMenuItem"; - this.RegisterNotePadMenuItem.Size = new System.Drawing.Size(150, 22); + this.RegisterNotePadMenuItem.Size = new System.Drawing.Size(144, 22); this.RegisterNotePadMenuItem.Text = "Notepad++"; this.RegisterNotePadMenuItem.Click += new System.EventHandler(this.RegisterNotePadMenuItem_Click); // @@ -536,21 +535,21 @@ this.FunctionsListMenuItem, this.OnlineDocsMenuItem}); this.HelpSubMenu.Name = "HelpSubMenu"; - this.HelpSubMenu.Size = new System.Drawing.Size(44, 20); + this.HelpSubMenu.Size = new System.Drawing.Size(40, 20); this.HelpSubMenu.Text = "&Help"; // // FunctionsListMenuItem // this.FunctionsListMenuItem.Name = "FunctionsListMenuItem"; this.FunctionsListMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F1; - this.FunctionsListMenuItem.Size = new System.Drawing.Size(202, 22); + this.FunctionsListMenuItem.Size = new System.Drawing.Size(189, 22); this.FunctionsListMenuItem.Text = "&Lua Functions List"; this.FunctionsListMenuItem.Click += new System.EventHandler(this.FunctionsListMenuItem_Click); // // OnlineDocsMenuItem // this.OnlineDocsMenuItem.Name = "OnlineDocsMenuItem"; - this.OnlineDocsMenuItem.Size = new System.Drawing.Size(202, 22); + this.OnlineDocsMenuItem.Size = new System.Drawing.Size(189, 22); this.OnlineDocsMenuItem.Text = "Documentation online..."; this.OnlineDocsMenuItem.Click += new System.EventHandler(this.OnlineDocsMenuItem_Click); // @@ -573,44 +572,57 @@ // ConsoleContextMenu // this.ConsoleContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.ClearConsoleContextItem, - this.SelectAllContextItem, - this.CopyContextItem, - this.toolStripSeparator5, - this.RegisteredFunctionsContextItem, - this.ClearRegisteredFunctionsLogContextItem}); + this.CopyContextItem, + this.SelectAllContextItem, + this.ClearConsoleContextItem, + this.toolStripSeparator5, + this.RegisteredFunctionsContextItem, + this.ClearRegisteredFunctionsLogContextItem}); this.ConsoleContextMenu.Name = "contextMenuStrip2"; - this.ConsoleContextMenu.Size = new System.Drawing.Size(215, 142); + this.ConsoleContextMenu.Size = new System.Drawing.Size(204, 142); this.ConsoleContextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.ConsoleContextMenu_Opening); // // ClearConsoleContextItem // this.ClearConsoleContextItem.Name = "ClearConsoleContextItem"; - this.ClearConsoleContextItem.Size = new System.Drawing.Size(214, 22); + this.ClearConsoleContextItem.Size = new System.Drawing.Size(203, 22); this.ClearConsoleContextItem.Text = "&Clear"; this.ClearConsoleContextItem.Click += new System.EventHandler(this.ClearConsoleContextItem_Click); // // SelectAllContextItem // this.SelectAllContextItem.Name = "SelectAllContextItem"; - this.SelectAllContextItem.Size = new System.Drawing.Size(214, 22); + this.SelectAllContextItem.Size = new System.Drawing.Size(203, 22); this.SelectAllContextItem.Text = "Select &All"; this.SelectAllContextItem.Click += new System.EventHandler(this.SelectAllContextItem_Click); // // CopyContextItem // this.CopyContextItem.Name = "CopyContextItem"; - this.CopyContextItem.Size = new System.Drawing.Size(214, 22); + this.CopyContextItem.Size = new System.Drawing.Size(203, 22); this.CopyContextItem.Text = "Copy"; this.CopyContextItem.Click += new System.EventHandler(this.CopyContextItem_Click); // + // toolStripSeparator5 + // + this.toolStripSeparator5.Name = "toolStripSeparator5"; + this.toolStripSeparator5.Size = new System.Drawing.Size(200, 6); + // // RegisteredFunctionsContextItem // this.RegisteredFunctionsContextItem.Name = "RegisteredFunctionsContextItem"; - this.RegisteredFunctionsContextItem.Size = new System.Drawing.Size(214, 22); + this.RegisteredFunctionsContextItem.Size = new System.Drawing.Size(203, 22); this.RegisteredFunctionsContextItem.Text = "&Registered Functions"; this.RegisteredFunctionsContextItem.Click += new System.EventHandler(this.RegisteredFunctionsMenuItem_Click); // + // ClearRegisteredFunctionsLogContextItem + // + this.ClearRegisteredFunctionsLogContextItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Delete; + this.ClearRegisteredFunctionsLogContextItem.Name = "ClearRegisteredFunctionsLogContextItem"; + this.ClearRegisteredFunctionsLogContextItem.Size = new System.Drawing.Size(203, 22); + this.ClearRegisteredFunctionsLogContextItem.Text = "Clear Registered Functions"; + this.ClearRegisteredFunctionsLogContextItem.Click += new System.EventHandler(this.ClearRegisteredFunctionsContextMenuItem_Click); + // // groupBox1 // this.groupBox1.Controls.Add(this.InputBox); @@ -692,7 +704,7 @@ // OpenScriptToolbarItem // this.OpenScriptToolbarItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.OpenScriptToolbarItem.Image = ((System.Drawing.Image)(resources.GetObject("OpenScriptToolbarItem.Image"))); + this.OpenScriptToolbarItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.OpenFile; this.OpenScriptToolbarItem.ImageTransparentColor = System.Drawing.Color.Magenta; this.OpenScriptToolbarItem.Name = "OpenScriptToolbarItem"; this.OpenScriptToolbarItem.Size = new System.Drawing.Size(23, 22); @@ -826,7 +838,6 @@ this.LuaListView.HorizontalOrientation = false; this.LuaListView.LetKeysModifySelection = false; this.LuaListView.Location = new System.Drawing.Point(4, 21); - this.LuaListView.MultiSelect = true; this.LuaListView.Name = "LuaListView"; this.LuaListView.RowCount = 0; this.LuaListView.ScrollSpeed = 1; @@ -855,19 +866,6 @@ this.splitContainer1.SplitterDistance = 280; this.splitContainer1.TabIndex = 7; // - // toolStripSeparator5 - // - this.toolStripSeparator5.Name = "toolStripSeparator5"; - this.toolStripSeparator5.Size = new System.Drawing.Size(211, 6); - // - // ClearRegisteredFunctionsLogContextItem - // - this.ClearRegisteredFunctionsLogContextItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Delete; - this.ClearRegisteredFunctionsLogContextItem.Name = "ClearRegisteredFunctionsLogContextItem"; - this.ClearRegisteredFunctionsLogContextItem.Size = new System.Drawing.Size(214, 22); - this.ClearRegisteredFunctionsLogContextItem.Text = "Clear Registered Functions"; - this.ClearRegisteredFunctionsLogContextItem.Click += new System.EventHandler(this.ClearRegisteredFunctionsContextMenuItem_Click); - // // LuaConsole // this.AllowDrop = true; @@ -878,7 +876,7 @@ this.Controls.Add(this.OutputMessages); this.Controls.Add(this.toolStrip1); this.Controls.Add(this.menuStrip1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.textdoc_MultiSize; this.MainMenuStrip = this.menuStrip1; this.MinimumSize = new System.Drawing.Size(400, 180); this.Name = "LuaConsole"; diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs b/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs index 861df0181c..bd3d9cde22 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs @@ -279,7 +279,25 @@ namespace BizHawk.Client.EmuHawk { var processedPath = PathManager.TryMakeRelative(path); - if (LuaAlreadyInSession(processedPath) == false) + var alreadyInSession = LuaImp.ScriptList.Any(t => processedPath == t.Path); + if (alreadyInSession) + { + foreach (var file in LuaImp.ScriptList + .Where(file => processedPath == file.Path + && file.Enabled == false + && !Global.Config.DisableLuaScriptsOnLoad)) + { + if (file.Thread != null) + { + file.Toggle(); + } + + break; + } + + RunLuaScripts(); + } + else { var luaFile = new LuaFile("", processedPath); @@ -302,16 +320,6 @@ namespace BizHawk.Client.EmuHawk CreateFileWatcher(processedPath); } } - else - { - foreach (var file in LuaImp.ScriptList.Where(file => processedPath == file.Path && file.Enabled == false && !Global.Config.DisableLuaScriptsOnLoad)) - { - file.Toggle(); - break; - } - - RunLuaScripts(); - } UpdateDialog(); } @@ -454,11 +462,6 @@ namespace BizHawk.Client.EmuHawk NumberOfScripts.Text = message; } - private bool LuaAlreadyInSession(string path) - { - return LuaImp.ScriptList.Any(t => path == t.Path); - } - private int _messageCount; private const int MaxCount = 50; public void WriteToOutputWindow(string message) @@ -474,10 +477,9 @@ namespace BizHawk.Client.EmuHawk if (_messageCount <= MaxCount) { - OutputBox.Text += message; + OutputBox.Text += message + "\n"; OutputBox.SelectionStart = OutputBox.Text.Length; OutputBox.ScrollToCaret(); - } }); } @@ -1029,6 +1031,7 @@ namespace BizHawk.Client.EmuHawk private void StopAllScriptsMenuItem_Click(object sender, EventArgs e) { LuaImp.ScriptList.StopAllScripts(); + UpdateDialog(); } private void RegisteredFunctionsMenuItem_Click(object sender, EventArgs e) diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.resx b/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.resx index 4b0fdcdf07..7143fee061 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.resx +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.resx @@ -129,418 +129,4 @@ 228, 17 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJHSURBVDhPxZBdSNNhFMb/F110ZZEVhVBgeeHNICiiuggp - olAUyyxI0oSaH1QYC3N+tKnp5ubm1JUua5uuqdNKMwr7kApFItTUkWZqVhSVYmao5Nevvy7UoYR3HXh4 - 4XCe33nOKyy3lAY7l9RWMo0O/raWXxEyo5spVYTNvOGyfIRPfW+ptOkXqaPl6T83hcRmExSdgzAz3NVm - YWyoYla/B+1M9JtxWLPpaH22JORIjI6gKAMB0jyEimIdo4OlbuaprwVMOOMovammpDADc34qppwUrmnl - 5Kni3aFlFg2j3y1z5mnRTJccnNIltQhwq0jFry+mOXNtpWZWDx1Z1NhV3C3JwGFOw25SYjVe5oYhiUKd - HKMmwQUrMWUw/CF3NnZvvYKqUh1TvUroS3fXe7HXkwidMngTS2t5KLbregSzMY2f3Wr4qKW6LJvGR1rX - 0MLor8OhKYTJBn/GHvvxrliCTBrsOqXIoOBHh5K+hmSq7FqmexTQHuUytkaKxuNMNgYyVneA4Qd7GKjc - hjLaRzxH7gIU6JIZaEvgtk1D8wsxSWecCDgNzWFMvwxm/PkhRmr3Mli1nW9lvjRdWc0Jf+/5jzRmyWmv - S+GOLQu6U6BFjPvqKOP1AYw88WOoZif9DgmfLVtxaj1RSLdwNvrkPCA3M54KqxrnvRia9MKcGrUrqFOt - 5H7qKsqT1mGO9+Lqhc2ELdw+U/r0i+gVZ8hMiCDx3DHORwZyKnQ/hw/uYt9uCTskPvh6e7Fp41rWr/Fg - g6eHO+A/lyD8ARfG3mk9fv1YAAAAAElFTkSuQmCC - - - - - AAABAAgAICAQAAAAAADoAgAAhgAAABAQEAAAAAAAKAEAAG4DAAAwMAAAAQAIAKgOAACWBAAAICAAAAEA - CACoCAAAPhMAABAQAAABAAgAaAUAAOYbAAAwMAAAAQAgAKglAABOIQAAICAAAAEAIACoEAAA9kYAABAQ - AAABACAAaAQAAJ5XAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAAAAAAA//8A/wAAAP8A/wD//wAA////AKqq - AAAAAAAAAAAAAAAKqqqqp4iIiIiIiIiIiIiAgKqqqn//////////////+AgKqqp///////////////gI - Cqqqf/AAAA/////////4CAqqqn//////////////+AgKqqp/8AAAD/////////gICqqqf/////////// - ///4CAqqqn//////////////+AgKqqp/8AAAAAAAAAAAD/gICqqqf//////////////4CAqqqn/wAAAA - AAAAAAAP+AgKqqp///////////////gICqqqf/AAAAAAAAAAAA/4CAqqqn//////////////+AgKqqp/ - 8AAAAAAAAAAAD/gICqqqf//////////////4CAqqqn//////////////+AgKqqp/8AAAD/////////gI - Cqqqf//////////////4CAqqqn//////////////+AgKqqp///////////////gICqqqf/AAAA////// - ///4CAqqqn//////////////+AgKqqp/8AAAD////w8AD/gICqqqf//////////////4CAqqqn////// - ////////+AgKqqp///////////////gICqqqfw/w/w/w/w/w/w/3CAqqqn8P8P8P8P8P8P8P9wgKqqqn - 939393939393939wqqqqqgCgCgCgCgCgCgCgqqqq8AAAH+AAAA/AAAAHwAAAB8AAAAfAAAAHwAAAB8AA - AAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AA - AAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAH4AAAD/JJJL8oAAAAEAAAACAAAAABAAQAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAAA - AAAA//8A/wAAAP8A/wD//wAA////AKAAAAAAAKqqeIiIiIiICqp///////gKqn//////+Aqqf/AAAA/4 - Cqp///////gKqn/wAAAP+Aqqf//////4Cqp/8AAAD/gKqn//////+Aqqf/AA8A/4Cqp///////gKqn// - ////+Aqqfw8PDw8PCqqg9/f39/CqqqoKCgoKCqqqgA///wAH//8AB///AAcKqgAH8AAABwAAAAcADwAH - CqoAB///AAf//wAH//8ABwqqAAfwAAAHAACADwAP1V8KqigAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AJKPngC8uMEAcWd5AI+GlgBsXG0AAAAAAJ6SngC2qbMAlHeEAI5q - dgCKY28Al2RuAL+jqQCRV2EAq3h/AK19gwC+nKAAy6WoAL2GiQDDl5kAt15eALliYgC9bGwAv29vAMB0 - dADAd3cAwXh4AL54eADGiIgAzZCQANSengDPmpoA2qysANOnpwDbrq4Aw56eAM2npwDguroAyKenAOK+ - vgDmxsYA5cXFALCZmQDq0dEA8d/fAPXo6AD05+cA9uvrAPjv7wDW0dEA2q2sANqurQDhvbwA1qakAOC8 - ugDPqqYA7tvZAO/e3ADMraUA9u3qAPXs6QDIsKQAxbOkABAQDwDFxbsAtratAGpqZQDHx74A1tbOAE1N - SgA+PjwAPT07AB8fHgBtbWoAICAfAMzMxwC7u7YAubm0AKSkoACbm5cAfX16AHx8eQCAgH0AXl5cAC4u - LQC+vrsAvLy5AJ6emwB/f30Afn58AH19ewBvb20APz8+AD4+PQD9/foA/Pz5AOzs6QCenpwAjY2LAISE - ggCBgX8AT09OAE1NTAD9/fsAvr68AL29uwB/f34Ad3d2AJ6enQDw8eIA8fLkAPDx4wDy8+YA8fLlAPDx - 5ADn6NwA8vPnAPP06QD09esA8/TqANXWzQD09ewAt7iwALO0rADV1s4A9vfvAPX27gC4ubIAtrewAMnK - wwD5+vMA+PnyAPf48QD29/AA8vToAPL06QCYmZMAo6SeAJmalAC7vLYA09TOAMjJwwDHyMIA+fr0APj5 - 8wD3+PIA9vfxAOnq5ADn6OIA5ObcAPT27ADz9esAent2AKuspwCkpaAAu7y3ALm6tQD6+/YA+fr1ANrb - 1gDc3tUA9PbtAOXn3gBMTUkAtriwAHx9eQB6e3cAjI2JAIuMiAC7vLgAubq2AKusqAD7/PgA+vv3ANvc - 2AC3ubIAXV5bAFxdWgC8vboAu7y5AKytqgCdnpsA+/z5AB4fHQAtLiwAPj89AD0+PABeX10A+vz4AH1+ - fAD9/vwAuLq3AP7//gD9/v0A3d7dAAi1zgALutIAJrjOAACz0gAAss8AHqnBAAymxgANpMQALp20AD6s - wgAqnbcALpmyADWnwAAAm8UAAJnEAACcxAAQo8kAAI25AAyTuwBBi6EAXqK2AEulwwBKj6YAaK/HAGmj - uwBWiqAAaKK9AH2nuQCIoq4ASoOfAGOLngBfhJcAXICSAE6FowBqlKoAXH2QAJOptwB4i5wAm6i5AFZk - fABWXHYAf4GUAKurtwD+/v4A09PTAM/PzwC/v78Ar6+vAH9/fwBycnIAcXFxAHBwcABqamoAaGhoAGZm - ZgBAQEAAPz8/AC8vLwAAAAAABwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwf4+Pj4BwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHB/v7+/v7+Pj4+Pj4+AcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHHSZvcXBzdUV9i1Rb+vf4+Pj4+PgHBwcHBwcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHHSNxdHNycnZ2iHd5maKDm5xmWvr2+Pj4+AcHBwcHBwcHBwcHBwcHBwcHBwcH - BwcHHTxxc3JydnaIiXmZmXh7o4CAf3+OTVBZZW35+AcHBwcHBwcHBwcHBwcHBwcHBwcHGzxzc3JCQ4iJ - eZmZeHijgIB/f4eGk4SEkZ+vwfgHBwcHBwcHBwcHBwcHBwcHBwcHGyNzcnJEugAAAEmKeKOjgH9/h5ST - koSRoK++8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyNycnZ2iHl5l3xGo6OAgH+Hh5OFhJGRr6++8fgHBwcH - BwcHBwcHBwcHBwcHBwcHG0BydnaId3mZmXiYo4CAf4eHk5OEhJGfr76u8fgHBwcHBwcHBwcHBwcHBwcH - BwcHGyN2doi5SUmlmpqxgIB/f4eGk4SEkZ+vvr5h8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyN2iIh6gqaK - mqixgH9/h5STkoSRoK++vmFh8fgHBwcHBwcHBwcHBwcHBwcHBwcHGzx2iHl5mZl4o6OAgH+Hh5OFhJGR - r6++uGFg8fgHBwcHBwcHBwcHBwcHBwcHBwcHG0CId3mZmXiYo4CAf4eHk5OEkZGfr764YWBp8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGyOJeZmZeHujgIB/f4eGk4SEkZ+vvq5hYGDA8fgHBwcHBwcHBwcHBwcHBwcH - BwcHGyN5eZl4eKOjgH9/h5STkoSRoK++vmFhYMDD8fgHBwcHBwcHBwcHBwcHBwcHBwcHG0B5mX6amoyB - kH+Hh5OFhJGgr6++YWFgacMB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOZmUaaqEe8SgAASF+yUqm1WL64 - YWBpw8IB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOZeHujgIB/f4eWrE6pUlVe/gAATGPD8AEB8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGzx4eKOxgH9/h5STkoSRoK++vmFhasTDAQEB8fgHBwcHBwcHBwcHBwcHBwcH - BwcHGzx4o6RWAABKSGhTUq2dsK++YWFgacMBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOYo4CAf4eP - nlFSUrteQQAAXl5d9fMBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOjgIB/f4eGk4SEkZ+vvq5iV2r1 - 9fMBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGzyjgH9ISLNTp42doa++vmFhYMDDAQEBAQEB8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGyOAf39PT6qnS7u7QQAA/l5nbPX08/IBAQEB8fgHBwcHBwcHBwcHBwcHBwcH - BwcHGyOAf4eHk4WEkZGvr764a1du9fX8/PgBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGzx/f4eGk4SE - kZ+vvq5hYGDD8AEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGzx/h5SThISRoK++vmFhYMDDAQEB - AQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOHlJOShJGgr76+YWFgwMMBAQEBAQEBAQEB8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGzmHk4WEkZGvr764YWBpw8IBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcH - BwcHG0CTk6m7u7u/v7dhYGDD8AEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOThJWdq7a/ - v2NhYMDDAQEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOShJGgr76+YWFgwMMBAQEBAQEB - AQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGz+EkZ1cZLS0a2Bpw8IBAQEBAQEBAQEBAQEB8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGzmEkbW/vV5e/v3D8AEBAQEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcH - BwcHGyORn6++vmFgYMDDAQEBAQEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOgr76+YWFg - wMMBAQEBAQEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOvFQg+YWA6NcIBAQEBAQEBAQEB - AQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOvD9PiPWka1uYuASTs3zABLxADMgEBJy8B8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGyE4NwLLNDs279QOASsE1QUBLQbS7gEt7dcJ8fgHBwcHBwcHBwcHBwcHBwcH - BwcHHBcWFwzIGBkZGcgKICAg0eMpKSLc2yoxE9reM/gHBwcHBwcHBwcHBwcHBwcHBwcHHevgKOrFEgsf - FMkNFxcWzeUWFxfo0BkZGeTPLAcHBwcHBwcHBwcHBwcHBwcHBwcHBwfZx8bZB9nOytkHzN3h2Qfn6SXZ - B9kRHtgHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH2dkHBwfZ2QcHB9nZBwcH2dkHBwfZ2QcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH////////AAD///////8AAP// - /////wAA/+H/////AAD/wAP///8AAP+AAAf//wAA/4AAAD//AAD/gAAAB/8AAP+AAAAD/wAA/4AAAAP/ - AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+A - AAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/ - AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+A - AAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/ - AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAB/8AAP/hCEIf/wAA//Oc5z//AAD///////8AAP// - /////wAAKAAAACAAAABAAAAAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AioWTAAAA - AADo5egAtqmzAIFsewCWfYoAj216ALuboQCtfYMAvJeaANnHyAC9hokAv29vAMF0dADCd3cAyIyMAMmP - jwDQlZUAyZCQANCXlwDSm5sA0ZubAOrR0QDv3NwA8d/fAPXo6AD68/MA+/f3AObMygDozswA8ObjAPDl - 4QDw5uIA7+XgAO7k3wDt494A7eLcAOzh2gDs4tsA7OLaAOvh2QDq39UA6uDXAOrg1gDq4dgA6d/UAOnf - 0wCZmZMAenp1AIqKhQBra2cAe3t3AGxsaQCampYAfX16AHx8eQC7u7cA29vXAL29ugC8vLkAbW1rAPz8 - +QD7+/gA7e3qAMzMyQCdnZsAjY2LAP39+wD8/PoAvb27AK6urAB/f34Afn59AG9vbgD///4A/v79APLz - 5QDx8uQA8vPmAPP06QDl5twA5OXbANDRyAD19uwA9PXrAPP06gDW184A9fbtALe4sAD29+8A9fbuAHl6 - cwDy9OcAt7ixAPf48QD29/AA8vToAHl6dADy9OkAysvFAPn69AD4+fMA9/jyAPb38QBqa2YAeXp1ALu8 - twD6+/YA+fr1AMfJwAB7fHgA+/z4APr79wDb3NgAbG1qAHx9egB7fHkAjI2KALy9ugCsraoAnJ2aAP3+ - +wD8/foAy8zJAHV2dAD9/vwAfn9+AP7//gD9/v0A3d7dAEnM2wAcwNUADrXPAA6uyQAPrsoAPMHWADys - vwBKv9QAF6K9ACywygBjvM8AAJ7BABmUuAArpMUAM5ezAFSRogBHosAAXqK2AFOOoAAxiqkAUJiyAGmg - tABAiqkAWpKqAF+ElwCKorIAQWiGAHeDkAC1wc4ArrjDAN/f3wCfn58Aj4+PAH9/fwBwcHAAb29vAGtr - awAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMDAwMD - AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD - A6amfqampgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUME9PVFRvS0tLS6imAwMDAwMDAwMDAwMDAwMD - AwMDAxQvT1BQYlFXVlZZVGWmp6enpwMDAwMDAwMDAwMDAwMDEitOXWpjMjRWWVlhaWhnVGVlpgMDAwMD - AwMDAwMDAwMSLVBeYldXVlVZW2FoZ2Ztcj+mAwMDAwMDAwMDAwMDAxItXmNrMjQxWVthaGhmbnJxP6YD - AwMDAwMDAwMDAwMDEixiUVdWVllcYWBoZm5yQD9FpgMDAwMDAwMDAwMDAwMSLmRXVlZZWWFpaGdmbXI/ - fH+mAwMDAwMDAwMDAwMDAxIuV1dWVVlbYWhnZm1yP0Z/TaYDAwMDAwMDAwMDAwMDEipTWlhZW2FoaGZu - cnE/f00BpgMDAwMDAwMDAwMDAwMSKlJfMzU2djk+OHp4R0V/AQGmAwMDAwMDAwMDAwMDAxInVllcYWlo - Z2ZyQkdISUwBAaYDAwMDAwMDAwMDAwMDEilVNTZwdnQ4dz1HQX+BAQEBpgMDAwMDAwMDAwMDAwMSKFlb - YWhoZm5zPEdJpaaiAQGmAwMDAwMDAwMDAwMDAxImXDd2dHU4eXhHe38BAQEBAaYDAwMDAwMDAwMDAwMD - EiZhaWhnZnJ4R0hJpaajAQEBpgMDAwMDAwMDAwMDAwMSJWFoZ2Ztcj98f4EBAQEBAQGmAwMDAwMDAwMD - AwMDAxIlaGhmbXI/P39NAQEBAQEBAaYDAwMDAwMDAwMDAwMDEiRoOmx9cT97fwEBAQEBAQEBpgMDAwMD - AwMDAwMDAwMSJGZsPUNKgINMAQEBAQEBAQGmAwMDAwMDAwMDAwMDAxIjZjtyP3x/gQEBAQEBAQEBAaYD - AwMDAwMDAwMDAwMDEiFtREpKSaQBAQEBAQEBAQEBpgMDAwMDAwMDAwMDAwMSInJxP3uCAQEBAQEBAQEB - AQGmAwMDAwMDAwMDAwMDAxIgAqFFDKAdHBgBARsBAQEBAaYDAwMDAwMDAwMDAwMDER6ekB+ekQUZnpsB - BpoanpQEpgMDAwMDAwMDAwMDAwMXDQ+PDg6cCBANlxMVkgkWmJ2mAwMDAwMDAwMDAwMDA5WIiZWVi4WV - lZmKnwuMBwqWkwMDAwMDAwMDAwMDAwMDA5WVAwOGlQMDhIYDjY4DhocDAwMDAwMDAwMDAwMDAwMDAwMD - AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD//////// - ///+B////AAf//wAAP/8AAB//AAAf/wAAH/8AAB//AAAf/wAAH/8AAB//AAAf/wAAH/8AAB//AAAf/wA - AH/8AAB//AAAf/wAAH/8AAB//AAAf/wAAH/8AAB//AAAf/wAAH/8AAB//AAAf/wAAP/+Zkn///////// - //8oAAAAEAAAACAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wCSj54AvLjBAHFn - eQCPhpYAbFxtAAAAAACekp4AtqmzAJR3hACOanYAimNvAJdkbgC/o6kAkVdhAKt4fwCtfYMAvpygAMul - qAC9hokAw5eZALdeXgC5YmIAvWxsAL9vbwDAdHQAwHd3AMF4eAC+eHgAxoiIAM2QkADUnp4Az5qaANqs - rADTp6cA266uAMOengDNp6cA4Lq6AMinpwDivr4A5sbGAOXFxQCwmZkA6tHRAPHf3wD16OgA9OfnAPbr - 6wD47+8A1tHRANqtrADarq0A4b28ANampADgvLoAz6qmAO7b2QDv3twAzK2lAPbt6gD17OkAyLCkAMWz - pAAQEA8AxcW7ALa2rQBqamUAx8e+ANbWzgBNTUoAPj48AD09OwAfHx4AbW1qACAgHwDMzMcAu7u2ALm5 - tACkpKAAm5uXAH19egB8fHkAgIB9AF5eXAAuLi0Avr67ALy8uQCenpsAf399AH5+fAB9fXsAb29tAD8/ - PgA+Pj0A/f36APz8+QDs7OkAnp6cAI2NiwCEhIIAgYF/AE9PTgBNTUwA/f37AL6+vAC9vbsAf39+AHd3 - dgCenp0A8PHiAPHy5ADw8eMA8vPmAPHy5QDw8eQA5+jcAPLz5wDz9OkA9PXrAPP06gDV1s0A9PXsALe4 - sACztKwA1dbOAPb37wD19u4AuLmyALa3sADJysMA+frzAPj58gD3+PEA9vfwAPL06ADy9OkAmJmTAKOk - ngCZmpQAu7y2ANPUzgDIycMAx8jCAPn69AD4+fMA9/jyAPb38QDp6uQA5+jiAOTm3AD09uwA8/XrAHp7 - dgCrrKcApKWgALu8twC5urUA+vv2APn69QDa29YA3N7VAPT27QDl594ATE1JALa4sAB8fXkAent3AIyN - iQCLjIgAu7y4ALm6tgCrrKgA+/z4APr79wDb3NgAt7myAF1eWwBcXVoAvL26ALu8uQCsraoAnZ6bAPv8 - +QAeHx0ALS4sAD4/PQA9PjwAXl9dAPr8+AB9fnwA/f78ALi6twD+//4A/f79AN3e3QAItc4AC7rSACa4 - zgAAs9IAALLPAB6pwQAMpsYADaTEAC6dtAA+rMIAKp23AC6ZsgA1p8AAAJvFAACZxAAAnMQAEKPJAACN - uQAMk7sAQYuhAF6itgBLpcMASo+mAGivxwBpo7sAVoqgAGiivQB9p7kAiKKuAEqDnwBji54AX4SXAFyA - kgBOhaMAapSqAFx9kACTqbcAeIucAJuouQBWZHwAVlx2AH+BlACrq7cA/v7+ANPT0wDPz88Av7+/AK+v - rwB/f38AcnJyAHFxcQBwcHAAampqAGhoaABmZmYAQEBAAD8/PwAvLy8AAAAAAAcHBwcHBwcHBwcHBwcH - BwcHBwddXV0HBwcHBwcHBwcHBwcbg4ODXfltXQcHBwcHBwcHG0Vyd5l7g/NdXQcHBwcHBxpFdltrmIav - aQH4BwcHBwcaRYmJiZiGr2kB+AcHBwcHG0WIW1tbW2sBAfgHBwcHBxtFcneJmIavaQH4BwcHBwcaRXZb - W1tbawEB+AcHBwcHGkWJiYmYhq9pAfgHBwcHBxtFiL+/v7Sgw8L4BwcHBwcbRYmJiZmUvrjC+AcHBwcH - G0WJYpmjlL7Dw/gHBwcHBx1F7GLsYuy+7PD4BwcHBwcaHBzs4O4n5wPk+AcHBwcHB9rO4tjO5M4E3gcH - Bwf//wMD4/8SLMA/V1bAD1xhwAdmbsAHP0XABwMDwAcDA8AHAwPABxIuwAdWVsAHYWnAB2ZtwAd8f8AH - AwPgDwMDKAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADAAA - ABMAAAAQAAAACgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAQAAAAOAAAAFMAAABQAAAAQwAAADQAAAArAAAAJAAAAB0AAAAWAAAADgAAAAcAAAACAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAASLbm5hpaWbu2ZmYL1UVFC4AAAAmQAAAJEAAACGAAAAeQAAAGsAAABcAAAATAAA - AD4AAAAyAAAAKQAAACIAAAAcAAAAFQAAAA4AAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXJn5/q8PHi//Dx4//x8uT/8fLl/+fo2/vDw7nuqqui45GS - i9ZTU0+8Q0NArwAAAJcAAACOAAAAgwAAAHYAAABoAAAAWwAAAEwAAAA+AAAAMQAAACgAAAAhAAAAGQAA - ABMAAAANAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI5OTn3Tp6f/8PHj//Dx5P/x8uX/8vPm//Lz - 5v/y8+f/8vPn//L06P/z9On/8/Tq//P16//b3dT3xca+7Z6fmd2SlI7WVFRRvEREQq8AAACXAAAAjQAA - AIAAAABzAAAAZAAAAFYAAABJAAAAOwAAAC4AAAAaAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALtxcfPMraX/8PHj//Hy - 5f/y8+b/8vPm//Lz5//y8+f/8vTo//L06f/z9Or/8/Xr//P16//09ev/9PXs//T27f/19u7/9fbu//b3 - 7//29+//0dLM88jIw+2Tk4/Yh4eEz1ZWVLowMC+oAAAAlQAAAIUAAABTAAAAFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//MraX/8fLl//Hy5f/y8+b/xcW7/7a2rf/y9Oj/8vTp//P06v/z9ev/8/Xr//T16//09ev/9Pbt//X2 - 7v/19u7/9vfv//b37//29/D/9/jx//f48v/5+vP/+frz//n69P/6+/b/+vv3/6+xruIAAAB0AAAAIgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//Tp6f/8fLl//Lz5v/y8+b/ampl/y0uLP8AAAD/AAAA/wAAAP89PTv/mJmT//T1 - 6//09u3/9Pbt//X27v/29+//9vfv//b38P/29/H/9/jy//j58//5+vP/+fr0//n69f/6+/f/+vz4/8rM - yOwAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8vPm//Lz5v/y8+f/8vPn//L06P/z9Or/8/Tq/+Tm - 3P+3uLD/1tbO//T27f/09u3/9fbu//X27v/29+//9vfw//b38P/3+PL/+Pny//n68//5+vT/+fr0//r7 - 9//6+/f/+vz4//Dx7voAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Fs6T/8vPm//Lz5//y8+f/8vTo//P0 - 6f/z9Or/8/Xr//P16//09ev/9Pbs//T27f/19u7/9fbu//b37//29/D/9vfw//f48v/3+PL/+frz//n6 - 8//5+vT/+vv2//r79//6/Pj/+/z4/+bs4/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8vPn//Lz - 5//y9Oj/Hh8d/z09O/89PTv/TE1J/3p7dv96e3b/t7my//X27v/19u7/9vfv//b37//29/D/9/jx//f4 - 8v/5+vP/+frz//n69P/6+/b/+vv3//r8+P/6/Pj//Pz5/+7w6/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//Tp6f/8vPn//L06P/y9Oj/1dbN/7a3sP+2uLD/mJmT/3p7dv96e3f/t7my//X27v/29+//9vfv//b3 - 8P/29/H/9/jy//j58//5+vP/+fr0//n69f/6+/f/+vz4//r8+P/8/Pn//Pz5//Hx7/oAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//MraX/8vPn//L06P/z9Or/8/Tq//P16//z9ev/9PXr//T27f/09u3/9fbu//X2 - 7v/29+//9vfw//b38P/3+PL/+Pny//n68//5+vT/+fr0//r79//6+/f/+vz4//v8+f/8/Pn//f36/+ju - 5voAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Fs6T/8vTo//P06f/z9Or/8/Xr//P16//09ev/9Pbs//T2 - 7f/19u7/9fbu//b37//29/D/9vfw//f48v/3+PL/+frz//n69P/5+vT/+vv2//r79//6/Pj/+/z5//z8 - +f/9/fr//f37/+7x7voAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8vTp//P06v/z9ev/8/Xr//T1 - 6//09ez/9Pbt//X27v/19u7/9vfv//b37//29/D/9/jx//f48v/5+vP/+frz//n69P/6+/b/+vv3//r8 - +P/7/Pj//Pz5//39+v/9/fr//f78//Hy8foAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8/Tq//P0 - 6v/z9ev/9PXr//T16//09u3/9Pbt//X27v/29+//9vfv//b38P/29/H/9/jy//j58//5+vP/+fr0//n6 - 9f/6+/f/+vz4//r8+P/8/Pn//Pz5//39+v/9/vz//f79/+3x7foAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//Fs6T/8/Tq//P16//V1s7/ent2/3p7dv+ZmpT/uLmy/8fIwv/29+//9vfw//b38P/3+PL/+Pny//n6 - 8//5+vT/+fr1//r79//6+/f/+vz4//z8+f/8/Pn//f36//39+//9/v3//////+3x7foAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//Tp6f/8/Xr//P16//W1s7/ent2/3p7d/9NTUr/PT48/x8fHv8AAAD/AAAA/z4+ - PP8+Pj3/XV5b/319ev+MjYn/u7y5/7y8uf/6/Pj/+/z5//z8+f/9/fr//f37//3+/f/+//7///////Pz - 8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8/Xr//T16//09ez/9Pbt//X27v/19u7/9vfv//b3 - 7//29/D/5+ji/7m6tv+7u7b/jI2J/319ev9eXlz/Pz8+/y8vL/8AAAD/AAAA/yAgH/+enpz//f79//7+ - /v///////////+/y7/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//MraX/9PXr//T16//09u3/t7my//X2 - 7v/29+//9vfv//b38P/29/H/9/jy//j58//5+vP/+fr0//n69f/6+/f/+vz4//r8+P/8/Pn//Pz5/76+ - vP/d3t3//f79/////////////////+jv6PoAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//MraX/9PXr//T2 - 7f/l597/Li4t/wAAAP8AAAD/Hx8e/z4+PP9NTUz/fHx5/319ev+rrKj/u7y3/9vc2P/6+/f/+vz4//z8 - +f/8/Pn//f36//39+//9/v3///////////////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//Tp6f/9Pbs//T27f/19u7/9fbu//b37//29/D/yMnD/7m6tf+bm5f/fX16/319ev8+Pz3/Pz8+/xAQ - D/8AAAD/AAAA/z8/Pv8/Pz7/b29t/39/f/+/v7////////////////////////Pz8/oAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//Tp6f/9Pbt//X27v/19u7/9vfv//b37//29/D/9/jx//f48v/5+vP/+frz//n6 - 9P/6+/b/+vv3//r8+P/7/Pj/7Ozp/76+u/++vrz/f39//39/f/+/v7///////////////////////+fu - 5/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//MraX/9Pbt//X27v/29+//Pj48/z4+PP9cXVr/fHx5/3x9 - ef+7vLb/u7y3/9rb1v/6+/f/+vz4//r8+P/8/Pn//Pz5//39+v/9/vz//f79//////////////////// - //////////////Dy8PoAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/9fbu//b37//29+//ubm0/7m5 - tP+LjIj/fH15/21tav8+Pz3/Pj89/xAQD/8AAAD/AAAA/y8vL/8/Pz7/T09O/39/fv9/f3//r6+v/7+/ - v//Pz8////////////////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/9fbu//b3 - 7//29/D/9vfw//f48v/4+fL/+frz//n69P/5+vT/+vv3//r79//6/Pj/+/z5/729u/++vrv/np6d/39/ - f/9/f3//QEBA/0BAQP9wcHD//////////////////////+Xu5foAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//MraX/9vfv//b37//29/D/9/jx//f48v/5+vP/+frz//n69P/6+/b/+vv3//r8+P/7/Pj//Pz5//39 - +v/9/fr//f79//7+/v///////////////////////////////////////////+/y7/oAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//MraX/9vfv//b38P/29/H/9/jy//n68//5+vP/+fr0//n69f/6+/f/+vz4//r8 - +P/8/Pn//Pz5//39+v/9/vz//f79//////////////////////////////////////////////////Pz - 8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/9vfw//b38f/3+PL/+Pnz//n68//5+vT/+fr1//r7 - 9//6/Pj/+vz4//z8+f/8/Pn//f36//3+/P/9/v3///////////////////////////////////////// - /////////////+vw6/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Pqqb/9vfw//f48v/4+fL/+frz//n6 - 9P/5+vT/+vv3//r79//6/Pj/+/z5//z8+f/9/fr//f37//3+/f/+//7///////////////////////// - /////////////////////////////+fu5/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Fs6T/9/jy//f4 - 8v+MjYn/Pj89/z4/Pf8+Pz3/fX58/31+fP+dnpv//Pz5//39+v/9/fr//f79//7+/v////////////// - //////////////////////////////////////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//Tp6f/9/jy//n68//p6uT/u7y3/7u8uP+srar/fX58/31+fP+enpz//Pz5//39+v/9/vz//f79//// - //////////////////////////////////////////////////////////////Pz8/oAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//Tp6f/+Pnz//n68//5+vT/+fr1//r79//6/Pj/+vz4//z8+f/8/Pn//f36//3+ - /P/9/v3//////////////////////////////////////////////////////////////////////+Pt - 4/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//IsKT/+frz//n69P+7vLf/fX17/42Ni/+8vbr/vL26/729 - u//9/fr//f37//3+/f/+//7///////////////////////////////////////////////////////// - //////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Pqqb/+frz//n69P+7vLn/fX58/15f - Xf8/Pz7/Pz8+/y8vL/8/Pz///f79//7+/v////////////////////////////////////////////// - //////////////////////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/+fr0//r7 - 9v/6+/f/+vz4//r8+P/8/Pn//f36//39+v/9/vz//f79//////////////////////////////////// - /////////////////////////////////////////////+Xu5foAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//Tp6f/+fr1//r79//6/Pj/+vz4//z8+f/8/Pn//f36//3+/P/9/v3///////////////////////// - /////////////////////////////////////////////////////////////+/y7/oAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//Tp6f/+vv3/8OXmf+ekp7/9ezp//z8+f/9/fr/7tvZ/9qurf/+//7///////// - //////////////////////////////////////////////////////////////////////////////Pz - 8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/+vv3/5FXYf8AmcT/SoOf//bt6v/9/fv/wHR0/wCN - uf9OhaP/8d/f///////brq7/VmR8/2iivf/05+f///////Xo6P+reH//vLjB//jv7////////////+C6 - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmPj//q4Nb/8vPm//L0 - 5//y9Oj/8/Tq//P06v/09ev/9fbs//X27f/29+//9vfw//f48v/4+fP/+fr0//r79v/6+/f//Pz5/wAA - AI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyY+P/+rg - 1v/y9Of/eXp0/3l6df96enX/a2tn/5mZk//19u3/9vfv//b38P/3+PL/9/jy//n69P/5+vX/+vv3//v8 - +P/8/Pn/AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADJj4//6uDX//L06P/z9On/8/Tq//T16//09ev/9fbt//X27v/29/D/9/jx//f48v/5+vT/+fr1//r7 - 9//7+/j//Pz5//39+/8AAACPAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMmPj//q4dj/8vTp//P06v/09ev/9PXr//X27f/19u3/9vfw//b38f/3+PL/+Pnz//n6 - 9P/6+/b/+vv3//z8+f/8/fr//f78/wAAAI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAyY+P/+rh2P/z9Or/8/Tq//T16//19uz/9fbt//b37//29/D/9/jy//j5 - 8//5+vT/+vv2//r79//8/Pn//Pz6//3+/P/+/v3/AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJj4//6+HZ/+Tl2/+3uLD/1tfO//X27f/29+//9vfw//f4 - 8v/3+PL/+fr0//n69f/6+/f/+/z4//z8+f/9/vz//v79//////8AAACPAAAALwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmPj//r4dn/5ebc/7e4sf+KioX/e3t3/2xs - af97fHn/fHx5/21ta/99fXr/nJ2a/7y9uv+9vbv//f37//3+/P///////////wAAAI8AAAAvAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyY+P/+zh2v/09ev/9fbt//X2 - 7v/29/D/9vfx//f48v/4+fP/+fr0//r79//MzMn/vb27/66urP9/f37////+////////////AAAAjwAA - AC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJj4//7OLa//X2 - 7P97e3f/bGxp/3t8eP97fHn/bG1q/319ev+MjYr/vLy5/729u//t7er//f78//7//v////////////// - //8AAACPAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmP - j//s4tv/9fbt//b37//29/D/9/jy//f48v/5+vT/+fr1/9vc2P+9vbr/vb27/39/fv9/f3//cHBw/9/f - 3////////////wAAAI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAyY+P/+3i3P/19u7/mpqW/3t8ef9sbWr/fH16/319ev+srar/vL26/729u//9/vv//f78//// - ////////////////////////AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADJj4//7eLc//b38P/29/H/9/jy//j58//5+vT/+vv3/7y9uv+9vbv/rq6s/39/ - fv9/f3//cHBw/5+fn/////////////////8AAACPAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmPj//t497/9vfw//f48v/4+fP/+fr0//r79v/6+/f//Pz5//z9 - +v/9/vz//v/+/////////////////////////////////wAAAI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyY+P/+3j3v/3+PL/9/jy//n69P/6+/b/+vv3//z8 - +f/8/Pn//f78//7+/f//////////////////////////////////////AAAAjwAAAC8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJj4//7uTf//f48v+7u7f/u7y3/8vM - yf/7/Pj//Pz5//3++//9/vz///////////////////////////////////////////8AAACPAAAALwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmPj//u5N//+fr0/7u8 - t/+8vLn/nZ2b/35+ff9+f37/3d7d/////v///////////////////////////////////////////wAA - AI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyY+P/+/l - 4P/5+vT/29vX//r79//8/Pn//P36//3+/P/+//7///////////////////////////////////////// - ////////AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADJj4//8OXh//r79v+NjYv/fn59/35+ff9/f37/j4+P//////////////////////////////////// - //////////////////8AAACPAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMmPj//w5uL/+vv3//v8+P/8/Pn//f77//3+/f////////////////////////////// - /////////////////////////////wAAAI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAyY+P//Dm4/+KhZP/rrjD//39+//Zx8j/tcHO//v39//68/P/6tHR//// - ////////9ejo////////////////////////////AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIjIz/5szK/0Fohv8ZlLj/6M7M/0Fohv8rpMX/tqmz/+/c - 3P9BaIb/WpKq//////+BbHv/QIqp//Hf3/9BaIb/R6LA/+jl6P8AAACDAAAAKQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGbm/+9hon/wXR0/wCewf+/b2//v29v/1+E - l/+PbXr/wnd3/72Gif8xiqn/0JWV/9CXl/8zl7P/u5uh/9Kbm/9QmLL/iqKy/wAAAGAAAAAYAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACpx/AyvtTyAK3EzhWV - tL41uM/lHMDV/1l6k8RFnrPzXJet6iuluutxfYv0soiL3xeivf+WfYr/rX2D/1OOoP8RZn63AAAAMQAA - AAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGOUIQBg - kEQAR2oXAE50FQCWuHQAiKhaAAAADQCtx5MAt822AGaBRACWs2oAoL/TAJGxnAB9mmIAsczxAKnG8QAi - MzAAAAAMAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////4P///8AB///AAAP/wA - AD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wA - AD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/+AAA//gAAP/////8oAAAAEAAAACAA - AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAEkAAABTAAAARgAA - ADgAAAAuAAAAJQAAAB8AAAAXAAAADQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAD7Ggm6N/f3e3VFRPuRkZ - F6AAAACUAAAAigAAAHwAAABuAAAAXAAAADgAAAAQAAAAAAAAAAAAAAAAAAAAAMB3d//Oyrb/8vTp//L0 - 6f/z9ev/9PXs/8XGv+67u7bolJWR12xsarwAAABnAAAAHgAAAAAAAAAAAAAAAAAAAADAd3f/1My8//L0 - 6f9+fn3/vb27//T27P/3+PH/+vv3//39/P//////cHBw/wAAACMAAAAAAAAAAAAAAAAAAAAAwHd3/9nO - wf/y9On/8vTp//L06f/09uz/9/jx//r79//9/fz//////3BwcP8AAAAjAAAAAAAAAAAAAAAAAAAAAMB3 - d//Yyr//8vTp/35+ff9+fn3/fn59/35+ff+9vbv///////////9wcHD/AAAAIwAAAAAAAAAAAAAAAAAA - AADAd3f/1M2+//L06f/y9On/8vTp//T27P/3+PH/+vv3//39/P//////cHBw/wAAACMAAAAAAAAAAAAA - AAAAAAAAwHd3/9HQvv/y9On/fn59/35+ff9+fn3/fn59/729u////////////3BwcP8AAAAjAAAAAAAA - AAAAAAAAAAAAAMB3d//Vzb//8vTp//L06f/y9On/9Pbs//f48f/6+/f//f38//////9wcHD/AAAAIwAA - AAAAAAAAAAAAAAAAAADAd3f/1c6///L06f9+fn3/fn59/35+ff+9vbv/+vv3//39/P//////cHBw/wAA - ACMAAAAAAAAAAAAAAAAAAAAAwHd3/9bPwf/y9On/8vTp//L06f/09uz/9/jx//r79//9/fz//////3Bw - cP8AAAAjAAAAAAAAAAAAAAAAAAAAAMB3d//Qzbv/8vTp//L06f/y9On/9Pbs//f48f/6+/f//f38//// - //9wcHD/AAAAIwAAAAAAAAAAAAAAAAAAAADAd3f/4sbE/0Fohv/y9On/QWiG//T27P9BaIb/+vv3/0Fo - hv//////cHBw/wAAACIAAAAAAAAAAAAAAAAAAAAAz56ehMF3d//Bd3f/MGqQ/5GqvP9ueI3/07a5/26Q - qf+6tL7/XIKd/wAAAFgAAAAYAAAAAAAAAAAAAAAAAAAAAPf39yEnhq/RSr/U/zBqkP8Zb5TXSr/U/1p2 - jvJKv9T/bG2E/1yCnf8AAAAjAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj - lCEAXYwjAFiFJQBfjkUAR2oXAAAABAAAAAEAAAAAAAAAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMAD - j//AA9b/wAPn/8ADdP/AA3X/wAN1/8ADZ//AA5P/wAPt//4D7/8= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaDropDown.cs b/BizHawk.Client.EmuHawk/tools/Lua/LuaDropDown.cs index d74f41429f..98e3ae72b8 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaDropDown.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaDropDown.cs @@ -6,14 +6,14 @@ namespace BizHawk.Client.EmuHawk { public class LuaDropDown : ComboBox { - public LuaDropDown(List items) + public LuaDropDown(ICollection items) { Items.AddRange(items.Cast().ToArray()); SelectedIndex = 0; DropDownStyle = ComboBoxStyle.DropDownList; } - public void SetItems(List items) + public void SetItems(ICollection items) { Items.Clear(); Items.AddRange(items.Cast().ToArray()); diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaFunctionsForm.Designer.cs b/BizHawk.Client.EmuHawk/tools/Lua/LuaFunctionsForm.Designer.cs index 9c559ab2a4..5f28ecbf4c 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaFunctionsForm.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaFunctionsForm.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LuaFunctionsForm)); this.OK = new System.Windows.Forms.Button(); this.directoryEntry1 = new System.DirectoryServices.DirectoryEntry(); this.FilterBox = new System.Windows.Forms.TextBox(); @@ -152,7 +151,7 @@ this.Controls.Add(this.FilterBox); this.Controls.Add(this.FunctionView); this.Controls.Add(this.OK); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.textdoc_MultiSize; this.MinimumSize = new System.Drawing.Size(200, 50); this.Name = "LuaFunctionsForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaFunctionsForm.cs b/BizHawk.Client.EmuHawk/tools/Lua/LuaFunctionsForm.cs index a815c21846..c30ec46136 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaFunctionsForm.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaFunctionsForm.cs @@ -12,21 +12,20 @@ namespace BizHawk.Client.EmuHawk { private readonly Sorting _columnSort = new Sorting(); - private List FunctionList = new List(); - + private List _functionList = new List(); private List _filteredList = new List(); private void GenerateFilteredList() { if (!string.IsNullOrWhiteSpace(FilterBox.Text)) { - _filteredList = FunctionList + _filteredList = _functionList .Where(f => $"{f.Library}.{f.Name}".ToLowerInvariant().Contains(FilterBox.Text.ToLowerInvariant())) .ToList(); } else { - _filteredList = FunctionList.ToList(); + _filteredList = _functionList.ToList(); } } @@ -38,7 +37,7 @@ namespace BizHawk.Client.EmuHawk private void LuaFunctionList_Load(object sender, EventArgs e) { - FunctionList = GlobalWin.Tools.LuaConsole.LuaImp.Docs + _functionList = GlobalWin.Tools.LuaConsole.LuaImp.Docs .OrderBy(l => l.Library) .ThenBy(l => l.Name) .ToList(); @@ -66,19 +65,19 @@ namespace BizHawk.Client.EmuHawk switch (column) { case 0: // Return - FunctionList = FunctionList.OrderByDescending(x => x.ReturnType).ToList(); + _functionList = _functionList.OrderByDescending(x => x.ReturnType).ToList(); break; case 1: // Library - FunctionList = FunctionList.OrderByDescending(x => x.Library).ToList(); + _functionList = _functionList.OrderByDescending(x => x.Library).ToList(); break; case 2: // Name - FunctionList = FunctionList.OrderByDescending(x => x.Name).ToList(); + _functionList = _functionList.OrderByDescending(x => x.Name).ToList(); break; case 3: // Parameters - FunctionList = FunctionList.OrderByDescending(x => x.ParameterList).ToList(); + _functionList = _functionList.OrderByDescending(x => x.ParameterList).ToList(); break; case 4: // Description - FunctionList = FunctionList.OrderByDescending(x => x.Description).ToList(); + _functionList = _functionList.OrderByDescending(x => x.Description).ToList(); break; } } @@ -87,19 +86,19 @@ namespace BizHawk.Client.EmuHawk switch (column) { case 0: // Return - FunctionList = FunctionList.OrderBy(x => x.ReturnType).ToList(); + _functionList = _functionList.OrderBy(x => x.ReturnType).ToList(); break; case 1: // Library - FunctionList = FunctionList.OrderBy(x => x.Library).ToList(); + _functionList = _functionList.OrderBy(x => x.Library).ToList(); break; case 2: // Name - FunctionList = FunctionList.OrderBy(x => x.Name).ToList(); + _functionList = _functionList.OrderBy(x => x.Name).ToList(); break; case 3: // Parameters - FunctionList = FunctionList.OrderBy(x => x.ParameterList).ToList(); + _functionList = _functionList.OrderBy(x => x.ParameterList).ToList(); break; case 4: // Description - FunctionList = FunctionList.OrderBy(x => x.Description).ToList(); + _functionList = _functionList.OrderBy(x => x.Description).ToList(); break; } } diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaFunctionsForm.resx b/BizHawk.Client.EmuHawk/tools/Lua/LuaFunctionsForm.resx index 2bd9a30155..72bd54f82e 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaFunctionsForm.resx +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaFunctionsForm.resx @@ -120,402 +120,4 @@ 17, 17 - - - - AAABAAgAICAQAAAAAADoAgAAhgAAABAQEAAAAAAAKAEAAG4DAAAwMAAAAQAIAKgOAACWBAAAICAAAAEA - CACoCAAAPhMAABAQAAABAAgAaAUAAOYbAAAwMAAAAQAgAKglAABOIQAAICAAAAEAIACoEAAA9kYAABAQ - AAABACAAaAQAAJ5XAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAAAAAAA//8A/wAAAP8A/wD//wAA////AKqq - AAAAAAAAAAAAAAAKqqqqp4iIiIiIiIiIiIiAgKqqqn//////////////+AgKqqp///////////////gI - Cqqqf/AAAA/////////4CAqqqn//////////////+AgKqqp/8AAAD/////////gICqqqf/////////// - ///4CAqqqn//////////////+AgKqqp/8AAAAAAAAAAAD/gICqqqf//////////////4CAqqqn/wAAAA - AAAAAAAP+AgKqqp///////////////gICqqqf/AAAAAAAAAAAA/4CAqqqn//////////////+AgKqqp/ - 8AAAAAAAAAAAD/gICqqqf//////////////4CAqqqn//////////////+AgKqqp/8AAAD/////////gI - Cqqqf//////////////4CAqqqn//////////////+AgKqqp///////////////gICqqqf/AAAA////// - ///4CAqqqn//////////////+AgKqqp/8AAAD////w8AD/gICqqqf//////////////4CAqqqn////// - ////////+AgKqqp///////////////gICqqqfw/w/w/w/w/w/w/3CAqqqn8P8P8P8P8P8P8P9wgKqqqn - 939393939393939wqqqqqgCgCgCgCgCgCgCgqqqq8AAAH+AAAA/AAAAHwAAAB8AAAAfAAAAHwAAAB8AA - AAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AA - AAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAH4AAAD/JJJL8oAAAAEAAAACAAAAABAAQAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAAA - AAAA//8A/wAAAP8A/wD//wAA////AKAAAAAAAKqqeIiIiIiICqp///////gKqn//////+Aqqf/AAAA/4 - Cqp///////gKqn/wAAAP+Aqqf//////4Cqp/8AAAD/gKqn//////+Aqqf/AA8A/4Cqp///////gKqn// - ////+Aqqfw8PDw8PCqqg9/f39/CqqqoKCgoKCqqqgA///wAH//8AB///AAcKqgAH8AAABwAAAAcADwAH - CqoAB///AAf//wAH//8ABwqqAAfwAAAHAACADwAP1V8KqigAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AJKPngC8uMEAcWd5AI+GlgBsXG0AAAAAAJ6SngC2qbMAlHeEAI5q - dgCKY28Al2RuAL+jqQCRV2EAq3h/AK19gwC+nKAAy6WoAL2GiQDDl5kAt15eALliYgC9bGwAv29vAMB0 - dADAd3cAwXh4AL54eADGiIgAzZCQANSengDPmpoA2qysANOnpwDbrq4Aw56eAM2npwDguroAyKenAOK+ - vgDmxsYA5cXFALCZmQDq0dEA8d/fAPXo6AD05+cA9uvrAPjv7wDW0dEA2q2sANqurQDhvbwA1qakAOC8 - ugDPqqYA7tvZAO/e3ADMraUA9u3qAPXs6QDIsKQAxbOkABAQDwDFxbsAtratAGpqZQDHx74A1tbOAE1N - SgA+PjwAPT07AB8fHgBtbWoAICAfAMzMxwC7u7YAubm0AKSkoACbm5cAfX16AHx8eQCAgH0AXl5cAC4u - LQC+vrsAvLy5AJ6emwB/f30Afn58AH19ewBvb20APz8+AD4+PQD9/foA/Pz5AOzs6QCenpwAjY2LAISE - ggCBgX8AT09OAE1NTAD9/fsAvr68AL29uwB/f34Ad3d2AJ6enQDw8eIA8fLkAPDx4wDy8+YA8fLlAPDx - 5ADn6NwA8vPnAPP06QD09esA8/TqANXWzQD09ewAt7iwALO0rADV1s4A9vfvAPX27gC4ubIAtrewAMnK - wwD5+vMA+PnyAPf48QD29/AA8vToAPL06QCYmZMAo6SeAJmalAC7vLYA09TOAMjJwwDHyMIA+fr0APj5 - 8wD3+PIA9vfxAOnq5ADn6OIA5ObcAPT27ADz9esAent2AKuspwCkpaAAu7y3ALm6tQD6+/YA+fr1ANrb - 1gDc3tUA9PbtAOXn3gBMTUkAtriwAHx9eQB6e3cAjI2JAIuMiAC7vLgAubq2AKusqAD7/PgA+vv3ANvc - 2AC3ubIAXV5bAFxdWgC8vboAu7y5AKytqgCdnpsA+/z5AB4fHQAtLiwAPj89AD0+PABeX10A+vz4AH1+ - fAD9/vwAuLq3AP7//gD9/v0A3d7dAAi1zgALutIAJrjOAACz0gAAss8AHqnBAAymxgANpMQALp20AD6s - wgAqnbcALpmyADWnwAAAm8UAAJnEAACcxAAQo8kAAI25AAyTuwBBi6EAXqK2AEulwwBKj6YAaK/HAGmj - uwBWiqAAaKK9AH2nuQCIoq4ASoOfAGOLngBfhJcAXICSAE6FowBqlKoAXH2QAJOptwB4i5wAm6i5AFZk - fABWXHYAf4GUAKurtwD+/v4A09PTAM/PzwC/v78Ar6+vAH9/fwBycnIAcXFxAHBwcABqamoAaGhoAGZm - ZgBAQEAAPz8/AC8vLwAAAAAABwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwf4+Pj4BwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHB/v7+/v7+Pj4+Pj4+AcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHHSZvcXBzdUV9i1Rb+vf4+Pj4+PgHBwcHBwcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHHSNxdHNycnZ2iHd5maKDm5xmWvr2+Pj4+AcHBwcHBwcHBwcHBwcHBwcHBwcH - BwcHHTxxc3JydnaIiXmZmXh7o4CAf3+OTVBZZW35+AcHBwcHBwcHBwcHBwcHBwcHBwcHGzxzc3JCQ4iJ - eZmZeHijgIB/f4eGk4SEkZ+vwfgHBwcHBwcHBwcHBwcHBwcHBwcHGyNzcnJEugAAAEmKeKOjgH9/h5ST - koSRoK++8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyNycnZ2iHl5l3xGo6OAgH+Hh5OFhJGRr6++8fgHBwcH - BwcHBwcHBwcHBwcHBwcHG0BydnaId3mZmXiYo4CAf4eHk5OEhJGfr76u8fgHBwcHBwcHBwcHBwcHBwcH - BwcHGyN2doi5SUmlmpqxgIB/f4eGk4SEkZ+vvr5h8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyN2iIh6gqaK - mqixgH9/h5STkoSRoK++vmFh8fgHBwcHBwcHBwcHBwcHBwcHBwcHGzx2iHl5mZl4o6OAgH+Hh5OFhJGR - r6++uGFg8fgHBwcHBwcHBwcHBwcHBwcHBwcHG0CId3mZmXiYo4CAf4eHk5OEkZGfr764YWBp8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGyOJeZmZeHujgIB/f4eGk4SEkZ+vvq5hYGDA8fgHBwcHBwcHBwcHBwcHBwcH - BwcHGyN5eZl4eKOjgH9/h5STkoSRoK++vmFhYMDD8fgHBwcHBwcHBwcHBwcHBwcHBwcHG0B5mX6amoyB - kH+Hh5OFhJGgr6++YWFgacMB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOZmUaaqEe8SgAASF+yUqm1WL64 - YWBpw8IB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOZeHujgIB/f4eWrE6pUlVe/gAATGPD8AEB8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGzx4eKOxgH9/h5STkoSRoK++vmFhasTDAQEB8fgHBwcHBwcHBwcHBwcHBwcH - BwcHGzx4o6RWAABKSGhTUq2dsK++YWFgacMBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOYo4CAf4eP - nlFSUrteQQAAXl5d9fMBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOjgIB/f4eGk4SEkZ+vvq5iV2r1 - 9fMBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGzyjgH9ISLNTp42doa++vmFhYMDDAQEBAQEB8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGyOAf39PT6qnS7u7QQAA/l5nbPX08/IBAQEB8fgHBwcHBwcHBwcHBwcHBwcH - BwcHGyOAf4eHk4WEkZGvr764a1du9fX8/PgBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGzx/f4eGk4SE - kZ+vvq5hYGDD8AEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGzx/h5SThISRoK++vmFhYMDDAQEB - AQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOHlJOShJGgr76+YWFgwMMBAQEBAQEBAQEB8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGzmHk4WEkZGvr764YWBpw8IBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcH - BwcHG0CTk6m7u7u/v7dhYGDD8AEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOThJWdq7a/ - v2NhYMDDAQEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOShJGgr76+YWFgwMMBAQEBAQEB - AQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGz+EkZ1cZLS0a2Bpw8IBAQEBAQEBAQEBAQEB8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGzmEkbW/vV5e/v3D8AEBAQEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcH - BwcHGyORn6++vmFgYMDDAQEBAQEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOgr76+YWFg - wMMBAQEBAQEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOvFQg+YWA6NcIBAQEBAQEBAQEB - AQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOvD9PiPWka1uYuASTs3zABLxADMgEBJy8B8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGyE4NwLLNDs279QOASsE1QUBLQbS7gEt7dcJ8fgHBwcHBwcHBwcHBwcHBwcH - BwcHHBcWFwzIGBkZGcgKICAg0eMpKSLc2yoxE9reM/gHBwcHBwcHBwcHBwcHBwcHBwcHHevgKOrFEgsf - FMkNFxcWzeUWFxfo0BkZGeTPLAcHBwcHBwcHBwcHBwcHBwcHBwcHBwfZx8bZB9nOytkHzN3h2Qfn6SXZ - B9kRHtgHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH2dkHBwfZ2QcHB9nZBwcH2dkHBwfZ2QcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH////////AAD///////8AAP// - /////wAA/+H/////AAD/wAP///8AAP+AAAf//wAA/4AAAD//AAD/gAAAB/8AAP+AAAAD/wAA/4AAAAP/ - AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+A - AAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/ - AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+A - AAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/ - AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAB/8AAP/hCEIf/wAA//Oc5z//AAD///////8AAP// - /////wAAKAAAACAAAABAAAAAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AioWTAAAA - AADo5egAtqmzAIFsewCWfYoAj216ALuboQCtfYMAvJeaANnHyAC9hokAv29vAMF0dADCd3cAyIyMAMmP - jwDQlZUAyZCQANCXlwDSm5sA0ZubAOrR0QDv3NwA8d/fAPXo6AD68/MA+/f3AObMygDozswA8ObjAPDl - 4QDw5uIA7+XgAO7k3wDt494A7eLcAOzh2gDs4tsA7OLaAOvh2QDq39UA6uDXAOrg1gDq4dgA6d/UAOnf - 0wCZmZMAenp1AIqKhQBra2cAe3t3AGxsaQCampYAfX16AHx8eQC7u7cA29vXAL29ugC8vLkAbW1rAPz8 - +QD7+/gA7e3qAMzMyQCdnZsAjY2LAP39+wD8/PoAvb27AK6urAB/f34Afn59AG9vbgD///4A/v79APLz - 5QDx8uQA8vPmAPP06QDl5twA5OXbANDRyAD19uwA9PXrAPP06gDW184A9fbtALe4sAD29+8A9fbuAHl6 - cwDy9OcAt7ixAPf48QD29/AA8vToAHl6dADy9OkAysvFAPn69AD4+fMA9/jyAPb38QBqa2YAeXp1ALu8 - twD6+/YA+fr1AMfJwAB7fHgA+/z4APr79wDb3NgAbG1qAHx9egB7fHkAjI2KALy9ugCsraoAnJ2aAP3+ - +wD8/foAy8zJAHV2dAD9/vwAfn9+AP7//gD9/v0A3d7dAEnM2wAcwNUADrXPAA6uyQAPrsoAPMHWADys - vwBKv9QAF6K9ACywygBjvM8AAJ7BABmUuAArpMUAM5ezAFSRogBHosAAXqK2AFOOoAAxiqkAUJiyAGmg - tABAiqkAWpKqAF+ElwCKorIAQWiGAHeDkAC1wc4ArrjDAN/f3wCfn58Aj4+PAH9/fwBwcHAAb29vAGtr - awAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMDAwMD - AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD - A6amfqampgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUME9PVFRvS0tLS6imAwMDAwMDAwMDAwMDAwMD - AwMDAxQvT1BQYlFXVlZZVGWmp6enpwMDAwMDAwMDAwMDAwMDEitOXWpjMjRWWVlhaWhnVGVlpgMDAwMD - AwMDAwMDAwMSLVBeYldXVlVZW2FoZ2Ztcj+mAwMDAwMDAwMDAwMDAxItXmNrMjQxWVthaGhmbnJxP6YD - AwMDAwMDAwMDAwMDEixiUVdWVllcYWBoZm5yQD9FpgMDAwMDAwMDAwMDAwMSLmRXVlZZWWFpaGdmbXI/ - fH+mAwMDAwMDAwMDAwMDAxIuV1dWVVlbYWhnZm1yP0Z/TaYDAwMDAwMDAwMDAwMDEipTWlhZW2FoaGZu - cnE/f00BpgMDAwMDAwMDAwMDAwMSKlJfMzU2djk+OHp4R0V/AQGmAwMDAwMDAwMDAwMDAxInVllcYWlo - Z2ZyQkdISUwBAaYDAwMDAwMDAwMDAwMDEilVNTZwdnQ4dz1HQX+BAQEBpgMDAwMDAwMDAwMDAwMSKFlb - YWhoZm5zPEdJpaaiAQGmAwMDAwMDAwMDAwMDAxImXDd2dHU4eXhHe38BAQEBAaYDAwMDAwMDAwMDAwMD - EiZhaWhnZnJ4R0hJpaajAQEBpgMDAwMDAwMDAwMDAwMSJWFoZ2Ztcj98f4EBAQEBAQGmAwMDAwMDAwMD - AwMDAxIlaGhmbXI/P39NAQEBAQEBAaYDAwMDAwMDAwMDAwMDEiRoOmx9cT97fwEBAQEBAQEBpgMDAwMD - AwMDAwMDAwMSJGZsPUNKgINMAQEBAQEBAQGmAwMDAwMDAwMDAwMDAxIjZjtyP3x/gQEBAQEBAQEBAaYD - AwMDAwMDAwMDAwMDEiFtREpKSaQBAQEBAQEBAQEBpgMDAwMDAwMDAwMDAwMSInJxP3uCAQEBAQEBAQEB - AQGmAwMDAwMDAwMDAwMDAxIgAqFFDKAdHBgBARsBAQEBAaYDAwMDAwMDAwMDAwMDER6ekB+ekQUZnpsB - BpoanpQEpgMDAwMDAwMDAwMDAwMXDQ+PDg6cCBANlxMVkgkWmJ2mAwMDAwMDAwMDAwMDA5WIiZWVi4WV - lZmKnwuMBwqWkwMDAwMDAwMDAwMDAwMDA5WVAwOGlQMDhIYDjY4DhocDAwMDAwMDAwMDAwMDAwMDAwMD - AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD//////// - ///+B////AAf//wAAP/8AAB//AAAf/wAAH/8AAB//AAAf/wAAH/8AAB//AAAf/wAAH/8AAB//AAAf/wA - AH/8AAB//AAAf/wAAH/8AAB//AAAf/wAAH/8AAB//AAAf/wAAH/8AAB//AAAf/wAAP/+Zkn///////// - //8oAAAAEAAAACAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wCSj54AvLjBAHFn - eQCPhpYAbFxtAAAAAACekp4AtqmzAJR3hACOanYAimNvAJdkbgC/o6kAkVdhAKt4fwCtfYMAvpygAMul - qAC9hokAw5eZALdeXgC5YmIAvWxsAL9vbwDAdHQAwHd3AMF4eAC+eHgAxoiIAM2QkADUnp4Az5qaANqs - rADTp6cA266uAMOengDNp6cA4Lq6AMinpwDivr4A5sbGAOXFxQCwmZkA6tHRAPHf3wD16OgA9OfnAPbr - 6wD47+8A1tHRANqtrADarq0A4b28ANampADgvLoAz6qmAO7b2QDv3twAzK2lAPbt6gD17OkAyLCkAMWz - pAAQEA8AxcW7ALa2rQBqamUAx8e+ANbWzgBNTUoAPj48AD09OwAfHx4AbW1qACAgHwDMzMcAu7u2ALm5 - tACkpKAAm5uXAH19egB8fHkAgIB9AF5eXAAuLi0Avr67ALy8uQCenpsAf399AH5+fAB9fXsAb29tAD8/ - PgA+Pj0A/f36APz8+QDs7OkAnp6cAI2NiwCEhIIAgYF/AE9PTgBNTUwA/f37AL6+vAC9vbsAf39+AHd3 - dgCenp0A8PHiAPHy5ADw8eMA8vPmAPHy5QDw8eQA5+jcAPLz5wDz9OkA9PXrAPP06gDV1s0A9PXsALe4 - sACztKwA1dbOAPb37wD19u4AuLmyALa3sADJysMA+frzAPj58gD3+PEA9vfwAPL06ADy9OkAmJmTAKOk - ngCZmpQAu7y2ANPUzgDIycMAx8jCAPn69AD4+fMA9/jyAPb38QDp6uQA5+jiAOTm3AD09uwA8/XrAHp7 - dgCrrKcApKWgALu8twC5urUA+vv2APn69QDa29YA3N7VAPT27QDl594ATE1JALa4sAB8fXkAent3AIyN - iQCLjIgAu7y4ALm6tgCrrKgA+/z4APr79wDb3NgAt7myAF1eWwBcXVoAvL26ALu8uQCsraoAnZ6bAPv8 - +QAeHx0ALS4sAD4/PQA9PjwAXl9dAPr8+AB9fnwA/f78ALi6twD+//4A/f79AN3e3QAItc4AC7rSACa4 - zgAAs9IAALLPAB6pwQAMpsYADaTEAC6dtAA+rMIAKp23AC6ZsgA1p8AAAJvFAACZxAAAnMQAEKPJAACN - uQAMk7sAQYuhAF6itgBLpcMASo+mAGivxwBpo7sAVoqgAGiivQB9p7kAiKKuAEqDnwBji54AX4SXAFyA - kgBOhaMAapSqAFx9kACTqbcAeIucAJuouQBWZHwAVlx2AH+BlACrq7cA/v7+ANPT0wDPz88Av7+/AK+v - rwB/f38AcnJyAHFxcQBwcHAAampqAGhoaABmZmYAQEBAAD8/PwAvLy8AAAAAAAcHBwcHBwcHBwcHBwcH - BwcHBwddXV0HBwcHBwcHBwcHBwcbg4ODXfltXQcHBwcHBwcHG0Vyd5l7g/NdXQcHBwcHBxpFdltrmIav - aQH4BwcHBwcaRYmJiZiGr2kB+AcHBwcHG0WIW1tbW2sBAfgHBwcHBxtFcneJmIavaQH4BwcHBwcaRXZb - W1tbawEB+AcHBwcHGkWJiYmYhq9pAfgHBwcHBxtFiL+/v7Sgw8L4BwcHBwcbRYmJiZmUvrjC+AcHBwcH - G0WJYpmjlL7Dw/gHBwcHBx1F7GLsYuy+7PD4BwcHBwcaHBzs4O4n5wPk+AcHBwcHB9rO4tjO5M4E3gcH - Bwf//wMD4/8SLMA/V1bAD1xhwAdmbsAHP0XABwMDwAcDA8AHAwPABxIuwAdWVsAHYWnAB2ZtwAd8f8AH - AwPgDwMDKAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADAAA - ABMAAAAQAAAACgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAQAAAAOAAAAFMAAABQAAAAQwAAADQAAAArAAAAJAAAAB0AAAAWAAAADgAAAAcAAAACAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAASLbm5hpaWbu2ZmYL1UVFC4AAAAmQAAAJEAAACGAAAAeQAAAGsAAABcAAAATAAA - AD4AAAAyAAAAKQAAACIAAAAcAAAAFQAAAA4AAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXJn5/q8PHi//Dx4//x8uT/8fLl/+fo2/vDw7nuqqui45GS - i9ZTU0+8Q0NArwAAAJcAAACOAAAAgwAAAHYAAABoAAAAWwAAAEwAAAA+AAAAMQAAACgAAAAhAAAAGQAA - ABMAAAANAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI5OTn3Tp6f/8PHj//Dx5P/x8uX/8vPm//Lz - 5v/y8+f/8vPn//L06P/z9On/8/Tq//P16//b3dT3xca+7Z6fmd2SlI7WVFRRvEREQq8AAACXAAAAjQAA - AIAAAABzAAAAZAAAAFYAAABJAAAAOwAAAC4AAAAaAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALtxcfPMraX/8PHj//Hy - 5f/y8+b/8vPm//Lz5//y8+f/8vTo//L06f/z9Or/8/Xr//P16//09ev/9PXs//T27f/19u7/9fbu//b3 - 7//29+//0dLM88jIw+2Tk4/Yh4eEz1ZWVLowMC+oAAAAlQAAAIUAAABTAAAAFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//MraX/8fLl//Hy5f/y8+b/xcW7/7a2rf/y9Oj/8vTp//P06v/z9ev/8/Xr//T16//09ev/9Pbt//X2 - 7v/19u7/9vfv//b37//29/D/9/jx//f48v/5+vP/+frz//n69P/6+/b/+vv3/6+xruIAAAB0AAAAIgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//Tp6f/8fLl//Lz5v/y8+b/ampl/y0uLP8AAAD/AAAA/wAAAP89PTv/mJmT//T1 - 6//09u3/9Pbt//X27v/29+//9vfv//b38P/29/H/9/jy//j58//5+vP/+fr0//n69f/6+/f/+vz4/8rM - yOwAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8vPm//Lz5v/y8+f/8vPn//L06P/z9Or/8/Tq/+Tm - 3P+3uLD/1tbO//T27f/09u3/9fbu//X27v/29+//9vfw//b38P/3+PL/+Pny//n68//5+vT/+fr0//r7 - 9//6+/f/+vz4//Dx7voAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Fs6T/8vPm//Lz5//y8+f/8vTo//P0 - 6f/z9Or/8/Xr//P16//09ev/9Pbs//T27f/19u7/9fbu//b37//29/D/9vfw//f48v/3+PL/+frz//n6 - 8//5+vT/+vv2//r79//6/Pj/+/z4/+bs4/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8vPn//Lz - 5//y9Oj/Hh8d/z09O/89PTv/TE1J/3p7dv96e3b/t7my//X27v/19u7/9vfv//b37//29/D/9/jx//f4 - 8v/5+vP/+frz//n69P/6+/b/+vv3//r8+P/6/Pj//Pz5/+7w6/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//Tp6f/8vPn//L06P/y9Oj/1dbN/7a3sP+2uLD/mJmT/3p7dv96e3f/t7my//X27v/29+//9vfv//b3 - 8P/29/H/9/jy//j58//5+vP/+fr0//n69f/6+/f/+vz4//r8+P/8/Pn//Pz5//Hx7/oAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//MraX/8vPn//L06P/z9Or/8/Tq//P16//z9ev/9PXr//T27f/09u3/9fbu//X2 - 7v/29+//9vfw//b38P/3+PL/+Pny//n68//5+vT/+fr0//r79//6+/f/+vz4//v8+f/8/Pn//f36/+ju - 5voAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Fs6T/8vTo//P06f/z9Or/8/Xr//P16//09ev/9Pbs//T2 - 7f/19u7/9fbu//b37//29/D/9vfw//f48v/3+PL/+frz//n69P/5+vT/+vv2//r79//6/Pj/+/z5//z8 - +f/9/fr//f37/+7x7voAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8vTp//P06v/z9ev/8/Xr//T1 - 6//09ez/9Pbt//X27v/19u7/9vfv//b37//29/D/9/jx//f48v/5+vP/+frz//n69P/6+/b/+vv3//r8 - +P/7/Pj//Pz5//39+v/9/fr//f78//Hy8foAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8/Tq//P0 - 6v/z9ev/9PXr//T16//09u3/9Pbt//X27v/29+//9vfv//b38P/29/H/9/jy//j58//5+vP/+fr0//n6 - 9f/6+/f/+vz4//r8+P/8/Pn//Pz5//39+v/9/vz//f79/+3x7foAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//Fs6T/8/Tq//P16//V1s7/ent2/3p7dv+ZmpT/uLmy/8fIwv/29+//9vfw//b38P/3+PL/+Pny//n6 - 8//5+vT/+fr1//r79//6+/f/+vz4//z8+f/8/Pn//f36//39+//9/v3//////+3x7foAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//Tp6f/8/Xr//P16//W1s7/ent2/3p7d/9NTUr/PT48/x8fHv8AAAD/AAAA/z4+ - PP8+Pj3/XV5b/319ev+MjYn/u7y5/7y8uf/6/Pj/+/z5//z8+f/9/fr//f37//3+/f/+//7///////Pz - 8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8/Xr//T16//09ez/9Pbt//X27v/19u7/9vfv//b3 - 7//29/D/5+ji/7m6tv+7u7b/jI2J/319ev9eXlz/Pz8+/y8vL/8AAAD/AAAA/yAgH/+enpz//f79//7+ - /v///////////+/y7/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//MraX/9PXr//T16//09u3/t7my//X2 - 7v/29+//9vfv//b38P/29/H/9/jy//j58//5+vP/+fr0//n69f/6+/f/+vz4//r8+P/8/Pn//Pz5/76+ - vP/d3t3//f79/////////////////+jv6PoAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//MraX/9PXr//T2 - 7f/l597/Li4t/wAAAP8AAAD/Hx8e/z4+PP9NTUz/fHx5/319ev+rrKj/u7y3/9vc2P/6+/f/+vz4//z8 - +f/8/Pn//f36//39+//9/v3///////////////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//Tp6f/9Pbs//T27f/19u7/9fbu//b37//29/D/yMnD/7m6tf+bm5f/fX16/319ev8+Pz3/Pz8+/xAQ - D/8AAAD/AAAA/z8/Pv8/Pz7/b29t/39/f/+/v7////////////////////////Pz8/oAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//Tp6f/9Pbt//X27v/19u7/9vfv//b37//29/D/9/jx//f48v/5+vP/+frz//n6 - 9P/6+/b/+vv3//r8+P/7/Pj/7Ozp/76+u/++vrz/f39//39/f/+/v7///////////////////////+fu - 5/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//MraX/9Pbt//X27v/29+//Pj48/z4+PP9cXVr/fHx5/3x9 - ef+7vLb/u7y3/9rb1v/6+/f/+vz4//r8+P/8/Pn//Pz5//39+v/9/vz//f79//////////////////// - //////////////Dy8PoAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/9fbu//b37//29+//ubm0/7m5 - tP+LjIj/fH15/21tav8+Pz3/Pj89/xAQD/8AAAD/AAAA/y8vL/8/Pz7/T09O/39/fv9/f3//r6+v/7+/ - v//Pz8////////////////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/9fbu//b3 - 7//29/D/9vfw//f48v/4+fL/+frz//n69P/5+vT/+vv3//r79//6/Pj/+/z5/729u/++vrv/np6d/39/ - f/9/f3//QEBA/0BAQP9wcHD//////////////////////+Xu5foAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//MraX/9vfv//b37//29/D/9/jx//f48v/5+vP/+frz//n69P/6+/b/+vv3//r8+P/7/Pj//Pz5//39 - +v/9/fr//f79//7+/v///////////////////////////////////////////+/y7/oAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//MraX/9vfv//b38P/29/H/9/jy//n68//5+vP/+fr0//n69f/6+/f/+vz4//r8 - +P/8/Pn//Pz5//39+v/9/vz//f79//////////////////////////////////////////////////Pz - 8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/9vfw//b38f/3+PL/+Pnz//n68//5+vT/+fr1//r7 - 9//6/Pj/+vz4//z8+f/8/Pn//f36//3+/P/9/v3///////////////////////////////////////// - /////////////+vw6/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Pqqb/9vfw//f48v/4+fL/+frz//n6 - 9P/5+vT/+vv3//r79//6/Pj/+/z5//z8+f/9/fr//f37//3+/f/+//7///////////////////////// - /////////////////////////////+fu5/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Fs6T/9/jy//f4 - 8v+MjYn/Pj89/z4/Pf8+Pz3/fX58/31+fP+dnpv//Pz5//39+v/9/fr//f79//7+/v////////////// - //////////////////////////////////////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//Tp6f/9/jy//n68//p6uT/u7y3/7u8uP+srar/fX58/31+fP+enpz//Pz5//39+v/9/vz//f79//// - //////////////////////////////////////////////////////////////Pz8/oAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//Tp6f/+Pnz//n68//5+vT/+fr1//r79//6/Pj/+vz4//z8+f/8/Pn//f36//3+ - /P/9/v3//////////////////////////////////////////////////////////////////////+Pt - 4/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//IsKT/+frz//n69P+7vLf/fX17/42Ni/+8vbr/vL26/729 - u//9/fr//f37//3+/f/+//7///////////////////////////////////////////////////////// - //////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Pqqb/+frz//n69P+7vLn/fX58/15f - Xf8/Pz7/Pz8+/y8vL/8/Pz///f79//7+/v////////////////////////////////////////////// - //////////////////////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/+fr0//r7 - 9v/6+/f/+vz4//r8+P/8/Pn//f36//39+v/9/vz//f79//////////////////////////////////// - /////////////////////////////////////////////+Xu5foAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//Tp6f/+fr1//r79//6/Pj/+vz4//z8+f/8/Pn//f36//3+/P/9/v3///////////////////////// - /////////////////////////////////////////////////////////////+/y7/oAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//Tp6f/+vv3/8OXmf+ekp7/9ezp//z8+f/9/fr/7tvZ/9qurf/+//7///////// - //////////////////////////////////////////////////////////////////////////////Pz - 8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/+vv3/5FXYf8AmcT/SoOf//bt6v/9/fv/wHR0/wCN - uf9OhaP/8d/f///////brq7/VmR8/2iivf/05+f///////Xo6P+reH//vLjB//jv7////////////+C6 - uv/16Oj//////87OzuwAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Pmpr/4Ly6/9ampP+Sj57/DKbG/9qt - rP/v3tz/4b28/6urt/8AnMT/v6Op///////lxcX/cWd5/xCjyf+Phpb//////+rR0f9sXG3/AJvF/3+B - lP//////6tHR/1Zcdv8Mk7v/tqmz/8/Pz+sAAABvAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMF4eP+5YmL/t15e/7li - Yv+KY2//ALPS/71sbP+/b2//v29v/79vb/8As9L/lHeE/9Senv/Unp7/1J6e/zWnwP9ji57/4r6+/+K+ - vv/arKz/aK/H/0qPpv/mxsb/9uvr/8ulqP9LpcP/Voqg/9HMzOUAAABQAAAAEwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu4 - uIR9j6TFd6O287+amt1whJbxALPM97WPk+GOanb/zZCQ/72Gif8Ass//l2Ru/7liYv+5YmL/t15e/y6d - tP9cgJL/t15e/7liYv+5YmL/XH2Q/y6Zsv+/b2//v29v/79vb/9fhJf/JZu1+Yppaa0AAAAnAAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAY5QhALXR/wCsxtkAt9D0AGuLoQAkNS4AqcfwAJGvwQCdueEAnrzrmZmZawCf - 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 - 6v/09ev/9PXr//X27f/19u7/xsfB7rq7teiTlJDXd3h1yVZXVbkZGhmgAAAAcAAAACQAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJj4//6t/V//Lz5f95enP/amtm/3l6 - dP96enX/a2tn//T16//19u3/9fbt//b38P/29/H/9/jy//j58//5+vT/+vv2//r79/8AAACPAAAALwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmPj//q4Nb/8vPm//L0 - 5//y9Oj/8/Tq//P06v/09ev/9fbs//X27f/29+//9vfw//f48v/4+fP/+fr0//r79v/6+/f//Pz5/wAA - AI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyY+P/+rg - 1v/y9Of/eXp0/3l6df96enX/a2tn/5mZk//19u3/9vfv//b38P/3+PL/9/jy//n69P/5+vX/+vv3//v8 - +P/8/Pn/AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADJj4//6uDX//L06P/z9On/8/Tq//T16//09ev/9fbt//X27v/29/D/9/jx//f48v/5+vT/+fr1//r7 - 9//7+/j//Pz5//39+/8AAACPAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMmPj//q4dj/8vTp//P06v/09ev/9PXr//X27f/19u3/9vfw//b38f/3+PL/+Pnz//n6 - 9P/6+/b/+vv3//z8+f/8/fr//f78/wAAAI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAyY+P/+rh2P/z9Or/8/Tq//T16//19uz/9fbt//b37//29/D/9/jy//j5 - 8//5+vT/+vv2//r79//8/Pn//Pz6//3+/P/+/v3/AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJj4//6+HZ/+Tl2/+3uLD/1tfO//X27f/29+//9vfw//f4 - 8v/3+PL/+fr0//n69f/6+/f/+/z4//z8+f/9/vz//v79//////8AAACPAAAALwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmPj//r4dn/5ebc/7e4sf+KioX/e3t3/2xs - af97fHn/fHx5/21ta/99fXr/nJ2a/7y9uv+9vbv//f37//3+/P///////////wAAAI8AAAAvAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyY+P/+zh2v/09ev/9fbt//X2 - 7v/29/D/9vfx//f48v/4+fP/+fr0//r79//MzMn/vb27/66urP9/f37////+////////////AAAAjwAA - AC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJj4//7OLa//X2 - 7P97e3f/bGxp/3t8eP97fHn/bG1q/319ev+MjYr/vLy5/729u//t7er//f78//7//v////////////// - //8AAACPAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmP - j//s4tv/9fbt//b37//29/D/9/jy//f48v/5+vT/+fr1/9vc2P+9vbr/vb27/39/fv9/f3//cHBw/9/f - 3////////////wAAAI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAyY+P/+3i3P/19u7/mpqW/3t8ef9sbWr/fH16/319ev+srar/vL26/729u//9/vv//f78//// - ////////////////////////AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADJj4//7eLc//b38P/29/H/9/jy//j58//5+vT/+vv3/7y9uv+9vbv/rq6s/39/ - fv9/f3//cHBw/5+fn/////////////////8AAACPAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmPj//t497/9vfw//f48v/4+fP/+fr0//r79v/6+/f//Pz5//z9 - +v/9/vz//v/+/////////////////////////////////wAAAI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyY+P/+3j3v/3+PL/9/jy//n69P/6+/b/+vv3//z8 - +f/8/Pn//f78//7+/f//////////////////////////////////////AAAAjwAAAC8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJj4//7uTf//f48v+7u7f/u7y3/8vM - yf/7/Pj//Pz5//3++//9/vz///////////////////////////////////////////8AAACPAAAALwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmPj//u5N//+fr0/7u8 - t/+8vLn/nZ2b/35+ff9+f37/3d7d/////v///////////////////////////////////////////wAA - AI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyY+P/+/l - 4P/5+vT/29vX//r79//8/Pn//P36//3+/P/+//7///////////////////////////////////////// - ////////AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADJj4//8OXh//r79v+NjYv/fn59/35+ff9/f37/j4+P//////////////////////////////////// - //////////////////8AAACPAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMmPj//w5uL/+vv3//v8+P/8/Pn//f77//3+/f////////////////////////////// - /////////////////////////////wAAAI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAyY+P//Dm4/+KhZP/rrjD//39+//Zx8j/tcHO//v39//68/P/6tHR//// - ////////9ejo////////////////////////////AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIjIz/5szK/0Fohv8ZlLj/6M7M/0Fohv8rpMX/tqmz/+/c - 3P9BaIb/WpKq//////+BbHv/QIqp//Hf3/9BaIb/R6LA/+jl6P8AAACDAAAAKQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGbm/+9hon/wXR0/wCewf+/b2//v29v/1+E - l/+PbXr/wnd3/72Gif8xiqn/0JWV/9CXl/8zl7P/u5uh/9Kbm/9QmLL/iqKy/wAAAGAAAAAYAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACpx/AyvtTyAK3EzhWV - tL41uM/lHMDV/1l6k8RFnrPzXJet6iuluutxfYv0soiL3xeivf+WfYr/rX2D/1OOoP8RZn63AAAAMQAA - AAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGOUIQBg - kEQAR2oXAE50FQCWuHQAiKhaAAAADQCtx5MAt822AGaBRACWs2oAoL/TAJGxnAB9mmIAsczxAKnG8QAi - MzAAAAAMAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////4P///8AB///AAAP/wA - AD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wA - AD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/+AAA//gAAP/////8oAAAAEAAAACAA - AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAEkAAABTAAAARgAA - ADgAAAAuAAAAJQAAAB8AAAAXAAAADQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAD7Ggm6N/f3e3VFRPuRkZ - F6AAAACUAAAAigAAAHwAAABuAAAAXAAAADgAAAAQAAAAAAAAAAAAAAAAAAAAAMB3d//Oyrb/8vTp//L0 - 6f/z9ev/9PXs/8XGv+67u7bolJWR12xsarwAAABnAAAAHgAAAAAAAAAAAAAAAAAAAADAd3f/1My8//L0 - 6f9+fn3/vb27//T27P/3+PH/+vv3//39/P//////cHBw/wAAACMAAAAAAAAAAAAAAAAAAAAAwHd3/9nO - wf/y9On/8vTp//L06f/09uz/9/jx//r79//9/fz//////3BwcP8AAAAjAAAAAAAAAAAAAAAAAAAAAMB3 - d//Yyr//8vTp/35+ff9+fn3/fn59/35+ff+9vbv///////////9wcHD/AAAAIwAAAAAAAAAAAAAAAAAA - AADAd3f/1M2+//L06f/y9On/8vTp//T27P/3+PH/+vv3//39/P//////cHBw/wAAACMAAAAAAAAAAAAA - AAAAAAAAwHd3/9HQvv/y9On/fn59/35+ff9+fn3/fn59/729u////////////3BwcP8AAAAjAAAAAAAA - AAAAAAAAAAAAAMB3d//Vzb//8vTp//L06f/y9On/9Pbs//f48f/6+/f//f38//////9wcHD/AAAAIwAA - AAAAAAAAAAAAAAAAAADAd3f/1c6///L06f9+fn3/fn59/35+ff+9vbv/+vv3//39/P//////cHBw/wAA - ACMAAAAAAAAAAAAAAAAAAAAAwHd3/9bPwf/y9On/8vTp//L06f/09uz/9/jx//r79//9/fz//////3Bw - cP8AAAAjAAAAAAAAAAAAAAAAAAAAAMB3d//Qzbv/8vTp//L06f/y9On/9Pbs//f48f/6+/f//f38//// - //9wcHD/AAAAIwAAAAAAAAAAAAAAAAAAAADAd3f/4sbE/0Fohv/y9On/QWiG//T27P9BaIb/+vv3/0Fo - hv//////cHBw/wAAACIAAAAAAAAAAAAAAAAAAAAAz56ehMF3d//Bd3f/MGqQ/5GqvP9ueI3/07a5/26Q - qf+6tL7/XIKd/wAAAFgAAAAYAAAAAAAAAAAAAAAAAAAAAPf39yEnhq/RSr/U/zBqkP8Zb5TXSr/U/1p2 - jvJKv9T/bG2E/1yCnf8AAAAjAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj - lCEAXYwjAFiFJQBfjkUAR2oXAAAABAAAAAEAAAAAAAAAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMAD - j//AA9b/wAPn/8ADdP/AA3X/wAN1/8ADZ//AA5P/wAPt//4D7/8= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaPictureBox.cs b/BizHawk.Client.EmuHawk/tools/Lua/LuaPictureBox.cs index be641ceccb..fcb85b0fa9 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaPictureBox.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaPictureBox.cs @@ -17,8 +17,7 @@ namespace BizHawk.Client.EmuHawk private SolidBrush GetBrush(Color color) { - SolidBrush b; - if (!_solidBrushes.TryGetValue(color, out b)) + if (!_solidBrushes.TryGetValue(color, out var b)) { b = new SolidBrush(color); _solidBrushes[color] = b; @@ -29,8 +28,7 @@ namespace BizHawk.Client.EmuHawk private Pen GetPen(Color color) { - Pen p; - if (!_pens.TryGetValue(color, out p)) + if (!_pens.TryGetValue(color, out var p)) { p = new Pen(color); _pens[color] = p; @@ -190,7 +188,7 @@ namespace BizHawk.Client.EmuHawk _imageCache.Clear(); } - public void DrawImageRegion(string path, int source_x, int source_y, int source_width, int source_height, int dest_x, int dest_y, int? dest_width = null, int? dest_height = null) + public void DrawImageRegion(string path, int sourceX, int sourceY, int sourceWidth, int sourceHeight, int destX, int destY, int? destWidth = null, int? destHeight = null) { Image img; if (_imageCache.ContainsKey(path)) @@ -203,10 +201,10 @@ namespace BizHawk.Client.EmuHawk _imageCache.Add(path, img); } - var destRect = new Rectangle(dest_x, dest_y, dest_width ?? source_width, dest_height ?? source_height); + var destRect = new Rectangle(destX, destY, destWidth ?? sourceWidth, destHeight ?? sourceHeight); var boxBackground = Graphics.FromImage(Image); - boxBackground.DrawImage(img, destRect, source_x, source_y, source_width, source_height, GraphicsUnit.Pixel); + boxBackground.DrawImage(img, destRect, sourceX, sourceY, sourceWidth, sourceHeight, GraphicsUnit.Pixel); } public void DrawLine(int x1, int y1, int x2, int y2, Color? color = null) @@ -221,10 +219,10 @@ namespace BizHawk.Client.EmuHawk DrawLine(x, y + size, x, y - size, color); } - public void DrawArc(int x, int y, int width, int height, int startangle, int sweepangle, Color? line = null) + public void DrawArc(int x, int y, int width, int height, int startAngle, int sweepAngle, Color? line = null) { var boxBackground = Graphics.FromImage(Image); - boxBackground.DrawArc(GetPen(line ?? _defaultForeground), x, y, width, height, startangle, sweepangle); + boxBackground.DrawArc(GetPen(line ?? _defaultForeground), x, y, width, height, startAngle, sweepAngle); } public void DrawPie( @@ -232,8 +230,8 @@ namespace BizHawk.Client.EmuHawk int y, int width, int height, - int startangle, - int sweepangle, + int startAngle, + int sweepAngle, Color? line = null, Color? background = null) { @@ -242,11 +240,11 @@ namespace BizHawk.Client.EmuHawk if (bg.HasValue) { var brush = GetBrush(bg.Value); - boxBackground.FillPie(brush, x, y, width, height, startangle, sweepangle); + boxBackground.FillPie(brush, x, y, width, height, startAngle, sweepAngle); boxBackground = Graphics.FromImage(Image); } - boxBackground.DrawPie(GetPen(line ?? _defaultForeground), x + 1, y + 1, width - 1, height - 1, startangle, sweepangle); + boxBackground.DrawPie(GetPen(line ?? _defaultForeground), x + 1, y + 1, width - 1, height - 1, startAngle, sweepAngle); } public void DrawPixel(int x, int y, Color? color = null) @@ -292,52 +290,52 @@ namespace BizHawk.Client.EmuHawk int x, int y, string message, - Color? forecolor = null, - Color? backcolor = null, - int? fontsize = null, - string fontfamily = null, - string fontstyle = null, - string horizalign = null, - string vertalign = null) + Color? foreColor = null, + Color? backColor = null, + int? fontSize = null, + string fontFamily = null, + string fontStyle = null, + string horizAlign = null, + string vertAlign = null) { var family = FontFamily.GenericMonospace; - if (fontfamily != null) + if (fontFamily != null) { - family = new FontFamily(fontfamily); + family = new FontFamily(fontFamily); } - var fstyle = FontStyle.Regular; - if (fontstyle != null) + var fStyle = FontStyle.Regular; + if (fontStyle != null) { - switch (fontstyle.ToLower()) + switch (fontStyle.ToLower()) { default: case "regular": break; case "bold": - fstyle = FontStyle.Bold; + fStyle = FontStyle.Bold; break; case "italic": - fstyle = FontStyle.Italic; + fStyle = FontStyle.Italic; break; case "strikethrough": - fstyle = FontStyle.Strikeout; + fStyle = FontStyle.Strikeout; break; case "underline": - fstyle = FontStyle.Underline; + fStyle = FontStyle.Underline; break; } } var f = new StringFormat(StringFormat.GenericDefault); - var font = new Font(family, fontsize ?? 12, fstyle, GraphicsUnit.Pixel); + var font = new Font(family, fontSize ?? 12, fStyle, GraphicsUnit.Pixel); var boxBackground = Graphics.FromImage(Image); Size sizeOfText = boxBackground.MeasureString(message, font, 0, f).ToSize(); - if (horizalign != null) + if (horizAlign != null) { - switch (horizalign.ToLower()) + switch (horizAlign.ToLower()) { default: case "left": @@ -352,9 +350,9 @@ namespace BizHawk.Client.EmuHawk } } - if (vertalign != null) + if (vertAlign != null) { - switch (vertalign.ToLower()) + switch (vertAlign.ToLower()) { default: case "top": @@ -370,15 +368,15 @@ namespace BizHawk.Client.EmuHawk } Rectangle rect = new Rectangle(new Point(x, y), sizeOfText); boxBackground = Graphics.FromImage(Image); - boxBackground.FillRectangle(GetBrush(backcolor ?? _defaultTextBackground.Value), rect); + boxBackground.FillRectangle(GetBrush(backColor ?? _defaultTextBackground.Value), rect); boxBackground = Graphics.FromImage(Image); boxBackground.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit; - boxBackground.DrawString(message, font, new SolidBrush(forecolor ?? Color.Black), x, y); + boxBackground.DrawString(message, font, new SolidBrush(foreColor ?? Color.Black), x, y); } public Point GetMouse() { - var p = PointToClient(Control.MousePosition); + var p = PointToClient(MousePosition); return p; } diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaRegisteredFunctionsList.Designer.cs b/BizHawk.Client.EmuHawk/tools/Lua/LuaRegisteredFunctionsList.Designer.cs index ab44204bea..db68b4d387 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaRegisteredFunctionsList.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaRegisteredFunctionsList.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LuaRegisteredFunctionsList)); this.FunctionView = new System.Windows.Forms.ListView(); this.FunctionsEvent = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.FunctionsName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); @@ -162,7 +161,7 @@ this.Controls.Add(this.CallButton); this.Controls.Add(this.FunctionView); this.Controls.Add(this.OK); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.textdoc_MultiSize; this.MinimumSize = new System.Drawing.Size(360, 150); this.Name = "LuaRegisteredFunctionsList"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaRegisteredFunctionsList.resx b/BizHawk.Client.EmuHawk/tools/Lua/LuaRegisteredFunctionsList.resx index a7d415082b..661dc11261 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaRegisteredFunctionsList.resx +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaRegisteredFunctionsList.resx @@ -120,402 +120,4 @@ 17, 17 - - - - AAABAAgAICAQAAAAAADoAgAAhgAAABAQEAAAAAAAKAEAAG4DAAAwMAAAAQAIAKgOAACWBAAAICAAAAEA - CACoCAAAPhMAABAQAAABAAgAaAUAAOYbAAAwMAAAAQAgAKglAABOIQAAICAAAAEAIACoEAAA9kYAABAQ - AAABACAAaAQAAJ5XAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAAAAAAA//8A/wAAAP8A/wD//wAA////AKqq - AAAAAAAAAAAAAAAKqqqqp4iIiIiIiIiIiIiAgKqqqn//////////////+AgKqqp///////////////gI - Cqqqf/AAAA/////////4CAqqqn//////////////+AgKqqp/8AAAD/////////gICqqqf/////////// - ///4CAqqqn//////////////+AgKqqp/8AAAAAAAAAAAD/gICqqqf//////////////4CAqqqn/wAAAA - AAAAAAAP+AgKqqp///////////////gICqqqf/AAAAAAAAAAAA/4CAqqqn//////////////+AgKqqp/ - 8AAAAAAAAAAAD/gICqqqf//////////////4CAqqqn//////////////+AgKqqp/8AAAD/////////gI - Cqqqf//////////////4CAqqqn//////////////+AgKqqp///////////////gICqqqf/AAAA////// - ///4CAqqqn//////////////+AgKqqp/8AAAD////w8AD/gICqqqf//////////////4CAqqqn////// - ////////+AgKqqp///////////////gICqqqfw/w/w/w/w/w/w/3CAqqqn8P8P8P8P8P8P8P9wgKqqqn - 939393939393939wqqqqqgCgCgCgCgCgCgCgqqqq8AAAH+AAAA/AAAAHwAAAB8AAAAfAAAAHwAAAB8AA - AAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AA - AAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAH4AAAD/JJJL8oAAAAEAAAACAAAAABAAQAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAAA - AAAA//8A/wAAAP8A/wD//wAA////AKAAAAAAAKqqeIiIiIiICqp///////gKqn//////+Aqqf/AAAA/4 - Cqp///////gKqn/wAAAP+Aqqf//////4Cqp/8AAAD/gKqn//////+Aqqf/AA8A/4Cqp///////gKqn// - ////+Aqqfw8PDw8PCqqg9/f39/CqqqoKCgoKCqqqgA///wAH//8AB///AAcKqgAH8AAABwAAAAcADwAH - CqoAB///AAf//wAH//8ABwqqAAfwAAAHAACADwAP1V8KqigAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AJKPngC8uMEAcWd5AI+GlgBsXG0AAAAAAJ6SngC2qbMAlHeEAI5q - dgCKY28Al2RuAL+jqQCRV2EAq3h/AK19gwC+nKAAy6WoAL2GiQDDl5kAt15eALliYgC9bGwAv29vAMB0 - dADAd3cAwXh4AL54eADGiIgAzZCQANSengDPmpoA2qysANOnpwDbrq4Aw56eAM2npwDguroAyKenAOK+ - vgDmxsYA5cXFALCZmQDq0dEA8d/fAPXo6AD05+cA9uvrAPjv7wDW0dEA2q2sANqurQDhvbwA1qakAOC8 - ugDPqqYA7tvZAO/e3ADMraUA9u3qAPXs6QDIsKQAxbOkABAQDwDFxbsAtratAGpqZQDHx74A1tbOAE1N - SgA+PjwAPT07AB8fHgBtbWoAICAfAMzMxwC7u7YAubm0AKSkoACbm5cAfX16AHx8eQCAgH0AXl5cAC4u - LQC+vrsAvLy5AJ6emwB/f30Afn58AH19ewBvb20APz8+AD4+PQD9/foA/Pz5AOzs6QCenpwAjY2LAISE - ggCBgX8AT09OAE1NTAD9/fsAvr68AL29uwB/f34Ad3d2AJ6enQDw8eIA8fLkAPDx4wDy8+YA8fLlAPDx - 5ADn6NwA8vPnAPP06QD09esA8/TqANXWzQD09ewAt7iwALO0rADV1s4A9vfvAPX27gC4ubIAtrewAMnK - wwD5+vMA+PnyAPf48QD29/AA8vToAPL06QCYmZMAo6SeAJmalAC7vLYA09TOAMjJwwDHyMIA+fr0APj5 - 8wD3+PIA9vfxAOnq5ADn6OIA5ObcAPT27ADz9esAent2AKuspwCkpaAAu7y3ALm6tQD6+/YA+fr1ANrb - 1gDc3tUA9PbtAOXn3gBMTUkAtriwAHx9eQB6e3cAjI2JAIuMiAC7vLgAubq2AKusqAD7/PgA+vv3ANvc - 2AC3ubIAXV5bAFxdWgC8vboAu7y5AKytqgCdnpsA+/z5AB4fHQAtLiwAPj89AD0+PABeX10A+vz4AH1+ - fAD9/vwAuLq3AP7//gD9/v0A3d7dAAi1zgALutIAJrjOAACz0gAAss8AHqnBAAymxgANpMQALp20AD6s - wgAqnbcALpmyADWnwAAAm8UAAJnEAACcxAAQo8kAAI25AAyTuwBBi6EAXqK2AEulwwBKj6YAaK/HAGmj - uwBWiqAAaKK9AH2nuQCIoq4ASoOfAGOLngBfhJcAXICSAE6FowBqlKoAXH2QAJOptwB4i5wAm6i5AFZk - fABWXHYAf4GUAKurtwD+/v4A09PTAM/PzwC/v78Ar6+vAH9/fwBycnIAcXFxAHBwcABqamoAaGhoAGZm - ZgBAQEAAPz8/AC8vLwAAAAAABwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwf4+Pj4BwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHB/v7+/v7+Pj4+Pj4+AcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHHSZvcXBzdUV9i1Rb+vf4+Pj4+PgHBwcHBwcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHHSNxdHNycnZ2iHd5maKDm5xmWvr2+Pj4+AcHBwcHBwcHBwcHBwcHBwcHBwcH - BwcHHTxxc3JydnaIiXmZmXh7o4CAf3+OTVBZZW35+AcHBwcHBwcHBwcHBwcHBwcHBwcHGzxzc3JCQ4iJ - eZmZeHijgIB/f4eGk4SEkZ+vwfgHBwcHBwcHBwcHBwcHBwcHBwcHGyNzcnJEugAAAEmKeKOjgH9/h5ST - koSRoK++8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyNycnZ2iHl5l3xGo6OAgH+Hh5OFhJGRr6++8fgHBwcH - BwcHBwcHBwcHBwcHBwcHG0BydnaId3mZmXiYo4CAf4eHk5OEhJGfr76u8fgHBwcHBwcHBwcHBwcHBwcH - BwcHGyN2doi5SUmlmpqxgIB/f4eGk4SEkZ+vvr5h8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyN2iIh6gqaK - mqixgH9/h5STkoSRoK++vmFh8fgHBwcHBwcHBwcHBwcHBwcHBwcHGzx2iHl5mZl4o6OAgH+Hh5OFhJGR - r6++uGFg8fgHBwcHBwcHBwcHBwcHBwcHBwcHG0CId3mZmXiYo4CAf4eHk5OEkZGfr764YWBp8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGyOJeZmZeHujgIB/f4eGk4SEkZ+vvq5hYGDA8fgHBwcHBwcHBwcHBwcHBwcH - BwcHGyN5eZl4eKOjgH9/h5STkoSRoK++vmFhYMDD8fgHBwcHBwcHBwcHBwcHBwcHBwcHG0B5mX6amoyB - kH+Hh5OFhJGgr6++YWFgacMB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOZmUaaqEe8SgAASF+yUqm1WL64 - YWBpw8IB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOZeHujgIB/f4eWrE6pUlVe/gAATGPD8AEB8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGzx4eKOxgH9/h5STkoSRoK++vmFhasTDAQEB8fgHBwcHBwcHBwcHBwcHBwcH - BwcHGzx4o6RWAABKSGhTUq2dsK++YWFgacMBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOYo4CAf4eP - nlFSUrteQQAAXl5d9fMBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOjgIB/f4eGk4SEkZ+vvq5iV2r1 - 9fMBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGzyjgH9ISLNTp42doa++vmFhYMDDAQEBAQEB8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGyOAf39PT6qnS7u7QQAA/l5nbPX08/IBAQEB8fgHBwcHBwcHBwcHBwcHBwcH - BwcHGyOAf4eHk4WEkZGvr764a1du9fX8/PgBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGzx/f4eGk4SE - kZ+vvq5hYGDD8AEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGzx/h5SThISRoK++vmFhYMDDAQEB - AQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOHlJOShJGgr76+YWFgwMMBAQEBAQEBAQEB8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGzmHk4WEkZGvr764YWBpw8IBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcH - BwcHG0CTk6m7u7u/v7dhYGDD8AEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOThJWdq7a/ - v2NhYMDDAQEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOShJGgr76+YWFgwMMBAQEBAQEB - AQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGz+EkZ1cZLS0a2Bpw8IBAQEBAQEBAQEBAQEB8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGzmEkbW/vV5e/v3D8AEBAQEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcH - BwcHGyORn6++vmFgYMDDAQEBAQEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOgr76+YWFg - wMMBAQEBAQEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOvFQg+YWA6NcIBAQEBAQEBAQEB - AQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOvD9PiPWka1uYuASTs3zABLxADMgEBJy8B8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGyE4NwLLNDs279QOASsE1QUBLQbS7gEt7dcJ8fgHBwcHBwcHBwcHBwcHBwcH - BwcHHBcWFwzIGBkZGcgKICAg0eMpKSLc2yoxE9reM/gHBwcHBwcHBwcHBwcHBwcHBwcHHevgKOrFEgsf - FMkNFxcWzeUWFxfo0BkZGeTPLAcHBwcHBwcHBwcHBwcHBwcHBwcHBwfZx8bZB9nOytkHzN3h2Qfn6SXZ - B9kRHtgHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH2dkHBwfZ2QcHB9nZBwcH2dkHBwfZ2QcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH////////AAD///////8AAP// - /////wAA/+H/////AAD/wAP///8AAP+AAAf//wAA/4AAAD//AAD/gAAAB/8AAP+AAAAD/wAA/4AAAAP/ - AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+A - AAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/ - AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+A - AAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/ - AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAB/8AAP/hCEIf/wAA//Oc5z//AAD///////8AAP// - /////wAAKAAAACAAAABAAAAAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AioWTAAAA - AADo5egAtqmzAIFsewCWfYoAj216ALuboQCtfYMAvJeaANnHyAC9hokAv29vAMF0dADCd3cAyIyMAMmP - jwDQlZUAyZCQANCXlwDSm5sA0ZubAOrR0QDv3NwA8d/fAPXo6AD68/MA+/f3AObMygDozswA8ObjAPDl - 4QDw5uIA7+XgAO7k3wDt494A7eLcAOzh2gDs4tsA7OLaAOvh2QDq39UA6uDXAOrg1gDq4dgA6d/UAOnf - 0wCZmZMAenp1AIqKhQBra2cAe3t3AGxsaQCampYAfX16AHx8eQC7u7cA29vXAL29ugC8vLkAbW1rAPz8 - +QD7+/gA7e3qAMzMyQCdnZsAjY2LAP39+wD8/PoAvb27AK6urAB/f34Afn59AG9vbgD///4A/v79APLz - 5QDx8uQA8vPmAPP06QDl5twA5OXbANDRyAD19uwA9PXrAPP06gDW184A9fbtALe4sAD29+8A9fbuAHl6 - cwDy9OcAt7ixAPf48QD29/AA8vToAHl6dADy9OkAysvFAPn69AD4+fMA9/jyAPb38QBqa2YAeXp1ALu8 - twD6+/YA+fr1AMfJwAB7fHgA+/z4APr79wDb3NgAbG1qAHx9egB7fHkAjI2KALy9ugCsraoAnJ2aAP3+ - +wD8/foAy8zJAHV2dAD9/vwAfn9+AP7//gD9/v0A3d7dAEnM2wAcwNUADrXPAA6uyQAPrsoAPMHWADys - vwBKv9QAF6K9ACywygBjvM8AAJ7BABmUuAArpMUAM5ezAFSRogBHosAAXqK2AFOOoAAxiqkAUJiyAGmg - tABAiqkAWpKqAF+ElwCKorIAQWiGAHeDkAC1wc4ArrjDAN/f3wCfn58Aj4+PAH9/fwBwcHAAb29vAGtr - awAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMDAwMD - AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD - A6amfqampgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUME9PVFRvS0tLS6imAwMDAwMDAwMDAwMDAwMD - AwMDAxQvT1BQYlFXVlZZVGWmp6enpwMDAwMDAwMDAwMDAwMDEitOXWpjMjRWWVlhaWhnVGVlpgMDAwMD - AwMDAwMDAwMSLVBeYldXVlVZW2FoZ2Ztcj+mAwMDAwMDAwMDAwMDAxItXmNrMjQxWVthaGhmbnJxP6YD - AwMDAwMDAwMDAwMDEixiUVdWVllcYWBoZm5yQD9FpgMDAwMDAwMDAwMDAwMSLmRXVlZZWWFpaGdmbXI/ - fH+mAwMDAwMDAwMDAwMDAxIuV1dWVVlbYWhnZm1yP0Z/TaYDAwMDAwMDAwMDAwMDEipTWlhZW2FoaGZu - cnE/f00BpgMDAwMDAwMDAwMDAwMSKlJfMzU2djk+OHp4R0V/AQGmAwMDAwMDAwMDAwMDAxInVllcYWlo - Z2ZyQkdISUwBAaYDAwMDAwMDAwMDAwMDEilVNTZwdnQ4dz1HQX+BAQEBpgMDAwMDAwMDAwMDAwMSKFlb - YWhoZm5zPEdJpaaiAQGmAwMDAwMDAwMDAwMDAxImXDd2dHU4eXhHe38BAQEBAaYDAwMDAwMDAwMDAwMD - EiZhaWhnZnJ4R0hJpaajAQEBpgMDAwMDAwMDAwMDAwMSJWFoZ2Ztcj98f4EBAQEBAQGmAwMDAwMDAwMD - AwMDAxIlaGhmbXI/P39NAQEBAQEBAaYDAwMDAwMDAwMDAwMDEiRoOmx9cT97fwEBAQEBAQEBpgMDAwMD - AwMDAwMDAwMSJGZsPUNKgINMAQEBAQEBAQGmAwMDAwMDAwMDAwMDAxIjZjtyP3x/gQEBAQEBAQEBAaYD - AwMDAwMDAwMDAwMDEiFtREpKSaQBAQEBAQEBAQEBpgMDAwMDAwMDAwMDAwMSInJxP3uCAQEBAQEBAQEB - AQGmAwMDAwMDAwMDAwMDAxIgAqFFDKAdHBgBARsBAQEBAaYDAwMDAwMDAwMDAwMDER6ekB+ekQUZnpsB - BpoanpQEpgMDAwMDAwMDAwMDAwMXDQ+PDg6cCBANlxMVkgkWmJ2mAwMDAwMDAwMDAwMDA5WIiZWVi4WV - lZmKnwuMBwqWkwMDAwMDAwMDAwMDAwMDA5WVAwOGlQMDhIYDjY4DhocDAwMDAwMDAwMDAwMDAwMDAwMD - AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD//////// - ///+B////AAf//wAAP/8AAB//AAAf/wAAH/8AAB//AAAf/wAAH/8AAB//AAAf/wAAH/8AAB//AAAf/wA - AH/8AAB//AAAf/wAAH/8AAB//AAAf/wAAH/8AAB//AAAf/wAAH/8AAB//AAAf/wAAP/+Zkn///////// - //8oAAAAEAAAACAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wCSj54AvLjBAHFn - eQCPhpYAbFxtAAAAAACekp4AtqmzAJR3hACOanYAimNvAJdkbgC/o6kAkVdhAKt4fwCtfYMAvpygAMul - qAC9hokAw5eZALdeXgC5YmIAvWxsAL9vbwDAdHQAwHd3AMF4eAC+eHgAxoiIAM2QkADUnp4Az5qaANqs - rADTp6cA266uAMOengDNp6cA4Lq6AMinpwDivr4A5sbGAOXFxQCwmZkA6tHRAPHf3wD16OgA9OfnAPbr - 6wD47+8A1tHRANqtrADarq0A4b28ANampADgvLoAz6qmAO7b2QDv3twAzK2lAPbt6gD17OkAyLCkAMWz - pAAQEA8AxcW7ALa2rQBqamUAx8e+ANbWzgBNTUoAPj48AD09OwAfHx4AbW1qACAgHwDMzMcAu7u2ALm5 - tACkpKAAm5uXAH19egB8fHkAgIB9AF5eXAAuLi0Avr67ALy8uQCenpsAf399AH5+fAB9fXsAb29tAD8/ - PgA+Pj0A/f36APz8+QDs7OkAnp6cAI2NiwCEhIIAgYF/AE9PTgBNTUwA/f37AL6+vAC9vbsAf39+AHd3 - dgCenp0A8PHiAPHy5ADw8eMA8vPmAPHy5QDw8eQA5+jcAPLz5wDz9OkA9PXrAPP06gDV1s0A9PXsALe4 - sACztKwA1dbOAPb37wD19u4AuLmyALa3sADJysMA+frzAPj58gD3+PEA9vfwAPL06ADy9OkAmJmTAKOk - ngCZmpQAu7y2ANPUzgDIycMAx8jCAPn69AD4+fMA9/jyAPb38QDp6uQA5+jiAOTm3AD09uwA8/XrAHp7 - dgCrrKcApKWgALu8twC5urUA+vv2APn69QDa29YA3N7VAPT27QDl594ATE1JALa4sAB8fXkAent3AIyN - iQCLjIgAu7y4ALm6tgCrrKgA+/z4APr79wDb3NgAt7myAF1eWwBcXVoAvL26ALu8uQCsraoAnZ6bAPv8 - +QAeHx0ALS4sAD4/PQA9PjwAXl9dAPr8+AB9fnwA/f78ALi6twD+//4A/f79AN3e3QAItc4AC7rSACa4 - zgAAs9IAALLPAB6pwQAMpsYADaTEAC6dtAA+rMIAKp23AC6ZsgA1p8AAAJvFAACZxAAAnMQAEKPJAACN - uQAMk7sAQYuhAF6itgBLpcMASo+mAGivxwBpo7sAVoqgAGiivQB9p7kAiKKuAEqDnwBji54AX4SXAFyA - kgBOhaMAapSqAFx9kACTqbcAeIucAJuouQBWZHwAVlx2AH+BlACrq7cA/v7+ANPT0wDPz88Av7+/AK+v - rwB/f38AcnJyAHFxcQBwcHAAampqAGhoaABmZmYAQEBAAD8/PwAvLy8AAAAAAAcHBwcHBwcHBwcHBwcH - BwcHBwddXV0HBwcHBwcHBwcHBwcbg4ODXfltXQcHBwcHBwcHG0Vyd5l7g/NdXQcHBwcHBxpFdltrmIav - aQH4BwcHBwcaRYmJiZiGr2kB+AcHBwcHG0WIW1tbW2sBAfgHBwcHBxtFcneJmIavaQH4BwcHBwcaRXZb - W1tbawEB+AcHBwcHGkWJiYmYhq9pAfgHBwcHBxtFiL+/v7Sgw8L4BwcHBwcbRYmJiZmUvrjC+AcHBwcH - G0WJYpmjlL7Dw/gHBwcHBx1F7GLsYuy+7PD4BwcHBwcaHBzs4O4n5wPk+AcHBwcHB9rO4tjO5M4E3gcH - Bwf//wMD4/8SLMA/V1bAD1xhwAdmbsAHP0XABwMDwAcDA8AHAwPABxIuwAdWVsAHYWnAB2ZtwAd8f8AH - AwPgDwMDKAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADAAA - ABMAAAAQAAAACgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAQAAAAOAAAAFMAAABQAAAAQwAAADQAAAArAAAAJAAAAB0AAAAWAAAADgAAAAcAAAACAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAASLbm5hpaWbu2ZmYL1UVFC4AAAAmQAAAJEAAACGAAAAeQAAAGsAAABcAAAATAAA - AD4AAAAyAAAAKQAAACIAAAAcAAAAFQAAAA4AAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXJn5/q8PHi//Dx4//x8uT/8fLl/+fo2/vDw7nuqqui45GS - i9ZTU0+8Q0NArwAAAJcAAACOAAAAgwAAAHYAAABoAAAAWwAAAEwAAAA+AAAAMQAAACgAAAAhAAAAGQAA - ABMAAAANAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI5OTn3Tp6f/8PHj//Dx5P/x8uX/8vPm//Lz - 5v/y8+f/8vPn//L06P/z9On/8/Tq//P16//b3dT3xca+7Z6fmd2SlI7WVFRRvEREQq8AAACXAAAAjQAA - AIAAAABzAAAAZAAAAFYAAABJAAAAOwAAAC4AAAAaAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALtxcfPMraX/8PHj//Hy - 5f/y8+b/8vPm//Lz5//y8+f/8vTo//L06f/z9Or/8/Xr//P16//09ev/9PXs//T27f/19u7/9fbu//b3 - 7//29+//0dLM88jIw+2Tk4/Yh4eEz1ZWVLowMC+oAAAAlQAAAIUAAABTAAAAFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//MraX/8fLl//Hy5f/y8+b/xcW7/7a2rf/y9Oj/8vTp//P06v/z9ev/8/Xr//T16//09ev/9Pbt//X2 - 7v/19u7/9vfv//b37//29/D/9/jx//f48v/5+vP/+frz//n69P/6+/b/+vv3/6+xruIAAAB0AAAAIgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//Tp6f/8fLl//Lz5v/y8+b/ampl/y0uLP8AAAD/AAAA/wAAAP89PTv/mJmT//T1 - 6//09u3/9Pbt//X27v/29+//9vfv//b38P/29/H/9/jy//j58//5+vP/+fr0//n69f/6+/f/+vz4/8rM - yOwAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8vPm//Lz5v/y8+f/8vPn//L06P/z9Or/8/Tq/+Tm - 3P+3uLD/1tbO//T27f/09u3/9fbu//X27v/29+//9vfw//b38P/3+PL/+Pny//n68//5+vT/+fr0//r7 - 9//6+/f/+vz4//Dx7voAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Fs6T/8vPm//Lz5//y8+f/8vTo//P0 - 6f/z9Or/8/Xr//P16//09ev/9Pbs//T27f/19u7/9fbu//b37//29/D/9vfw//f48v/3+PL/+frz//n6 - 8//5+vT/+vv2//r79//6/Pj/+/z4/+bs4/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8vPn//Lz - 5//y9Oj/Hh8d/z09O/89PTv/TE1J/3p7dv96e3b/t7my//X27v/19u7/9vfv//b37//29/D/9/jx//f4 - 8v/5+vP/+frz//n69P/6+/b/+vv3//r8+P/6/Pj//Pz5/+7w6/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//Tp6f/8vPn//L06P/y9Oj/1dbN/7a3sP+2uLD/mJmT/3p7dv96e3f/t7my//X27v/29+//9vfv//b3 - 8P/29/H/9/jy//j58//5+vP/+fr0//n69f/6+/f/+vz4//r8+P/8/Pn//Pz5//Hx7/oAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//MraX/8vPn//L06P/z9Or/8/Tq//P16//z9ev/9PXr//T27f/09u3/9fbu//X2 - 7v/29+//9vfw//b38P/3+PL/+Pny//n68//5+vT/+fr0//r79//6+/f/+vz4//v8+f/8/Pn//f36/+ju - 5voAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Fs6T/8vTo//P06f/z9Or/8/Xr//P16//09ev/9Pbs//T2 - 7f/19u7/9fbu//b37//29/D/9vfw//f48v/3+PL/+frz//n69P/5+vT/+vv2//r79//6/Pj/+/z5//z8 - +f/9/fr//f37/+7x7voAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8vTp//P06v/z9ev/8/Xr//T1 - 6//09ez/9Pbt//X27v/19u7/9vfv//b37//29/D/9/jx//f48v/5+vP/+frz//n69P/6+/b/+vv3//r8 - +P/7/Pj//Pz5//39+v/9/fr//f78//Hy8foAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8/Tq//P0 - 6v/z9ev/9PXr//T16//09u3/9Pbt//X27v/29+//9vfv//b38P/29/H/9/jy//j58//5+vP/+fr0//n6 - 9f/6+/f/+vz4//r8+P/8/Pn//Pz5//39+v/9/vz//f79/+3x7foAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//Fs6T/8/Tq//P16//V1s7/ent2/3p7dv+ZmpT/uLmy/8fIwv/29+//9vfw//b38P/3+PL/+Pny//n6 - 8//5+vT/+fr1//r79//6+/f/+vz4//z8+f/8/Pn//f36//39+//9/v3//////+3x7foAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//Tp6f/8/Xr//P16//W1s7/ent2/3p7d/9NTUr/PT48/x8fHv8AAAD/AAAA/z4+ - PP8+Pj3/XV5b/319ev+MjYn/u7y5/7y8uf/6/Pj/+/z5//z8+f/9/fr//f37//3+/f/+//7///////Pz - 8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8/Xr//T16//09ez/9Pbt//X27v/19u7/9vfv//b3 - 7//29/D/5+ji/7m6tv+7u7b/jI2J/319ev9eXlz/Pz8+/y8vL/8AAAD/AAAA/yAgH/+enpz//f79//7+ - /v///////////+/y7/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//MraX/9PXr//T16//09u3/t7my//X2 - 7v/29+//9vfv//b38P/29/H/9/jy//j58//5+vP/+fr0//n69f/6+/f/+vz4//r8+P/8/Pn//Pz5/76+ - vP/d3t3//f79/////////////////+jv6PoAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//MraX/9PXr//T2 - 7f/l597/Li4t/wAAAP8AAAD/Hx8e/z4+PP9NTUz/fHx5/319ev+rrKj/u7y3/9vc2P/6+/f/+vz4//z8 - +f/8/Pn//f36//39+//9/v3///////////////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//Tp6f/9Pbs//T27f/19u7/9fbu//b37//29/D/yMnD/7m6tf+bm5f/fX16/319ev8+Pz3/Pz8+/xAQ - D/8AAAD/AAAA/z8/Pv8/Pz7/b29t/39/f/+/v7////////////////////////Pz8/oAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//Tp6f/9Pbt//X27v/19u7/9vfv//b37//29/D/9/jx//f48v/5+vP/+frz//n6 - 9P/6+/b/+vv3//r8+P/7/Pj/7Ozp/76+u/++vrz/f39//39/f/+/v7///////////////////////+fu - 5/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//MraX/9Pbt//X27v/29+//Pj48/z4+PP9cXVr/fHx5/3x9 - ef+7vLb/u7y3/9rb1v/6+/f/+vz4//r8+P/8/Pn//Pz5//39+v/9/vz//f79//////////////////// - //////////////Dy8PoAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/9fbu//b37//29+//ubm0/7m5 - tP+LjIj/fH15/21tav8+Pz3/Pj89/xAQD/8AAAD/AAAA/y8vL/8/Pz7/T09O/39/fv9/f3//r6+v/7+/ - v//Pz8////////////////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/9fbu//b3 - 7//29/D/9vfw//f48v/4+fL/+frz//n69P/5+vT/+vv3//r79//6/Pj/+/z5/729u/++vrv/np6d/39/ - f/9/f3//QEBA/0BAQP9wcHD//////////////////////+Xu5foAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//MraX/9vfv//b37//29/D/9/jx//f48v/5+vP/+frz//n69P/6+/b/+vv3//r8+P/7/Pj//Pz5//39 - +v/9/fr//f79//7+/v///////////////////////////////////////////+/y7/oAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//MraX/9vfv//b38P/29/H/9/jy//n68//5+vP/+fr0//n69f/6+/f/+vz4//r8 - +P/8/Pn//Pz5//39+v/9/vz//f79//////////////////////////////////////////////////Pz - 8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/9vfw//b38f/3+PL/+Pnz//n68//5+vT/+fr1//r7 - 9//6/Pj/+vz4//z8+f/8/Pn//f36//3+/P/9/v3///////////////////////////////////////// - /////////////+vw6/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Pqqb/9vfw//f48v/4+fL/+frz//n6 - 9P/5+vT/+vv3//r79//6/Pj/+/z5//z8+f/9/fr//f37//3+/f/+//7///////////////////////// - /////////////////////////////+fu5/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Fs6T/9/jy//f4 - 8v+MjYn/Pj89/z4/Pf8+Pz3/fX58/31+fP+dnpv//Pz5//39+v/9/fr//f79//7+/v////////////// - //////////////////////////////////////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//Tp6f/9/jy//n68//p6uT/u7y3/7u8uP+srar/fX58/31+fP+enpz//Pz5//39+v/9/vz//f79//// - //////////////////////////////////////////////////////////////Pz8/oAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//Tp6f/+Pnz//n68//5+vT/+fr1//r79//6/Pj/+vz4//z8+f/8/Pn//f36//3+ - /P/9/v3//////////////////////////////////////////////////////////////////////+Pt - 4/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//IsKT/+frz//n69P+7vLf/fX17/42Ni/+8vbr/vL26/729 - u//9/fr//f37//3+/f/+//7///////////////////////////////////////////////////////// - //////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Pqqb/+frz//n69P+7vLn/fX58/15f - Xf8/Pz7/Pz8+/y8vL/8/Pz///f79//7+/v////////////////////////////////////////////// - //////////////////////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/+fr0//r7 - 9v/6+/f/+vz4//r8+P/8/Pn//f36//39+v/9/vz//f79//////////////////////////////////// - /////////////////////////////////////////////+Xu5foAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//Tp6f/+fr1//r79//6/Pj/+vz4//z8+f/8/Pn//f36//3+/P/9/v3///////////////////////// - /////////////////////////////////////////////////////////////+/y7/oAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//Tp6f/+vv3/8OXmf+ekp7/9ezp//z8+f/9/fr/7tvZ/9qurf/+//7///////// - //////////////////////////////////////////////////////////////////////////////Pz - 8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/+vv3/5FXYf8AmcT/SoOf//bt6v/9/fv/wHR0/wCN - uf9OhaP/8d/f///////brq7/VmR8/2iivf/05+f///////Xo6P+reH//vLjB//jv7////////////+C6 - uv/16Oj//////87OzuwAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Pmpr/4Ly6/9ampP+Sj57/DKbG/9qt - rP/v3tz/4b28/6urt/8AnMT/v6Op///////lxcX/cWd5/xCjyf+Phpb//////+rR0f9sXG3/AJvF/3+B - lP//////6tHR/1Zcdv8Mk7v/tqmz/8/Pz+sAAABvAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMF4eP+5YmL/t15e/7li - Yv+KY2//ALPS/71sbP+/b2//v29v/79vb/8As9L/lHeE/9Senv/Unp7/1J6e/zWnwP9ji57/4r6+/+K+ - vv/arKz/aK/H/0qPpv/mxsb/9uvr/8ulqP9LpcP/Voqg/9HMzOUAAABQAAAAEwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu4 - uIR9j6TFd6O287+amt1whJbxALPM97WPk+GOanb/zZCQ/72Gif8Ass//l2Ru/7liYv+5YmL/t15e/y6d - tP9cgJL/t15e/7liYv+5YmL/XH2Q/y6Zsv+/b2//v29v/79vb/9fhJf/JZu1+Yppaa0AAAAnAAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAY5QhALXR/wCsxtkAt9D0AGuLoQAkNS4AqcfwAJGvwQCdueEAnrzrmZmZawCf - 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 - 6v/09ev/9PXr//X27f/19u7/xsfB7rq7teiTlJDXd3h1yVZXVbkZGhmgAAAAcAAAACQAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJj4//6t/V//Lz5f95enP/amtm/3l6 - dP96enX/a2tn//T16//19u3/9fbt//b38P/29/H/9/jy//j58//5+vT/+vv2//r79/8AAACPAAAALwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmPj//q4Nb/8vPm//L0 - 5//y9Oj/8/Tq//P06v/09ev/9fbs//X27f/29+//9vfw//f48v/4+fP/+fr0//r79v/6+/f//Pz5/wAA - AI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyY+P/+rg - 1v/y9Of/eXp0/3l6df96enX/a2tn/5mZk//19u3/9vfv//b38P/3+PL/9/jy//n69P/5+vX/+vv3//v8 - +P/8/Pn/AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADJj4//6uDX//L06P/z9On/8/Tq//T16//09ev/9fbt//X27v/29/D/9/jx//f48v/5+vT/+fr1//r7 - 9//7+/j//Pz5//39+/8AAACPAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMmPj//q4dj/8vTp//P06v/09ev/9PXr//X27f/19u3/9vfw//b38f/3+PL/+Pnz//n6 - 9P/6+/b/+vv3//z8+f/8/fr//f78/wAAAI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAyY+P/+rh2P/z9Or/8/Tq//T16//19uz/9fbt//b37//29/D/9/jy//j5 - 8//5+vT/+vv2//r79//8/Pn//Pz6//3+/P/+/v3/AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJj4//6+HZ/+Tl2/+3uLD/1tfO//X27f/29+//9vfw//f4 - 8v/3+PL/+fr0//n69f/6+/f/+/z4//z8+f/9/vz//v79//////8AAACPAAAALwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmPj//r4dn/5ebc/7e4sf+KioX/e3t3/2xs - af97fHn/fHx5/21ta/99fXr/nJ2a/7y9uv+9vbv//f37//3+/P///////////wAAAI8AAAAvAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyY+P/+zh2v/09ev/9fbt//X2 - 7v/29/D/9vfx//f48v/4+fP/+fr0//r79//MzMn/vb27/66urP9/f37////+////////////AAAAjwAA - AC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJj4//7OLa//X2 - 7P97e3f/bGxp/3t8eP97fHn/bG1q/319ev+MjYr/vLy5/729u//t7er//f78//7//v////////////// - //8AAACPAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmP - j//s4tv/9fbt//b37//29/D/9/jy//f48v/5+vT/+fr1/9vc2P+9vbr/vb27/39/fv9/f3//cHBw/9/f - 3////////////wAAAI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAyY+P/+3i3P/19u7/mpqW/3t8ef9sbWr/fH16/319ev+srar/vL26/729u//9/vv//f78//// - ////////////////////////AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADJj4//7eLc//b38P/29/H/9/jy//j58//5+vT/+vv3/7y9uv+9vbv/rq6s/39/ - fv9/f3//cHBw/5+fn/////////////////8AAACPAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmPj//t497/9vfw//f48v/4+fP/+fr0//r79v/6+/f//Pz5//z9 - +v/9/vz//v/+/////////////////////////////////wAAAI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyY+P/+3j3v/3+PL/9/jy//n69P/6+/b/+vv3//z8 - +f/8/Pn//f78//7+/f//////////////////////////////////////AAAAjwAAAC8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJj4//7uTf//f48v+7u7f/u7y3/8vM - yf/7/Pj//Pz5//3++//9/vz///////////////////////////////////////////8AAACPAAAALwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmPj//u5N//+fr0/7u8 - t/+8vLn/nZ2b/35+ff9+f37/3d7d/////v///////////////////////////////////////////wAA - AI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyY+P/+/l - 4P/5+vT/29vX//r79//8/Pn//P36//3+/P/+//7///////////////////////////////////////// - ////////AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADJj4//8OXh//r79v+NjYv/fn59/35+ff9/f37/j4+P//////////////////////////////////// - //////////////////8AAACPAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMmPj//w5uL/+vv3//v8+P/8/Pn//f77//3+/f////////////////////////////// - /////////////////////////////wAAAI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAyY+P//Dm4/+KhZP/rrjD//39+//Zx8j/tcHO//v39//68/P/6tHR//// - ////////9ejo////////////////////////////AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIjIz/5szK/0Fohv8ZlLj/6M7M/0Fohv8rpMX/tqmz/+/c - 3P9BaIb/WpKq//////+BbHv/QIqp//Hf3/9BaIb/R6LA/+jl6P8AAACDAAAAKQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGbm/+9hon/wXR0/wCewf+/b2//v29v/1+E - l/+PbXr/wnd3/72Gif8xiqn/0JWV/9CXl/8zl7P/u5uh/9Kbm/9QmLL/iqKy/wAAAGAAAAAYAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACpx/AyvtTyAK3EzhWV - tL41uM/lHMDV/1l6k8RFnrPzXJet6iuluutxfYv0soiL3xeivf+WfYr/rX2D/1OOoP8RZn63AAAAMQAA - AAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGOUIQBg - kEQAR2oXAE50FQCWuHQAiKhaAAAADQCtx5MAt822AGaBRACWs2oAoL/TAJGxnAB9mmIAsczxAKnG8QAi - MzAAAAAMAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////4P///8AB///AAAP/wA - AD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wA - AD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/+AAA//gAAP/////8oAAAAEAAAACAA - AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAEkAAABTAAAARgAA - ADgAAAAuAAAAJQAAAB8AAAAXAAAADQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAD7Ggm6N/f3e3VFRPuRkZ - F6AAAACUAAAAigAAAHwAAABuAAAAXAAAADgAAAAQAAAAAAAAAAAAAAAAAAAAAMB3d//Oyrb/8vTp//L0 - 6f/z9ev/9PXs/8XGv+67u7bolJWR12xsarwAAABnAAAAHgAAAAAAAAAAAAAAAAAAAADAd3f/1My8//L0 - 6f9+fn3/vb27//T27P/3+PH/+vv3//39/P//////cHBw/wAAACMAAAAAAAAAAAAAAAAAAAAAwHd3/9nO - wf/y9On/8vTp//L06f/09uz/9/jx//r79//9/fz//////3BwcP8AAAAjAAAAAAAAAAAAAAAAAAAAAMB3 - d//Yyr//8vTp/35+ff9+fn3/fn59/35+ff+9vbv///////////9wcHD/AAAAIwAAAAAAAAAAAAAAAAAA - AADAd3f/1M2+//L06f/y9On/8vTp//T27P/3+PH/+vv3//39/P//////cHBw/wAAACMAAAAAAAAAAAAA - AAAAAAAAwHd3/9HQvv/y9On/fn59/35+ff9+fn3/fn59/729u////////////3BwcP8AAAAjAAAAAAAA - AAAAAAAAAAAAAMB3d//Vzb//8vTp//L06f/y9On/9Pbs//f48f/6+/f//f38//////9wcHD/AAAAIwAA - AAAAAAAAAAAAAAAAAADAd3f/1c6///L06f9+fn3/fn59/35+ff+9vbv/+vv3//39/P//////cHBw/wAA - ACMAAAAAAAAAAAAAAAAAAAAAwHd3/9bPwf/y9On/8vTp//L06f/09uz/9/jx//r79//9/fz//////3Bw - cP8AAAAjAAAAAAAAAAAAAAAAAAAAAMB3d//Qzbv/8vTp//L06f/y9On/9Pbs//f48f/6+/f//f38//// - //9wcHD/AAAAIwAAAAAAAAAAAAAAAAAAAADAd3f/4sbE/0Fohv/y9On/QWiG//T27P9BaIb/+vv3/0Fo - hv//////cHBw/wAAACIAAAAAAAAAAAAAAAAAAAAAz56ehMF3d//Bd3f/MGqQ/5GqvP9ueI3/07a5/26Q - qf+6tL7/XIKd/wAAAFgAAAAYAAAAAAAAAAAAAAAAAAAAAPf39yEnhq/RSr/U/zBqkP8Zb5TXSr/U/1p2 - jvJKv9T/bG2E/1yCnf8AAAAjAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj - lCEAXYwjAFiFJQBfjkUAR2oXAAAABAAAAAEAAAAAAAAAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMAD - j//AA9b/wAPn/8ADdP/AA3X/wAN1/8ADZ//AA5P/wAPt//4D7/8= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaWinform.Designer.cs b/BizHawk.Client.EmuHawk/tools/Lua/LuaWinform.Designer.cs index 6450110c66..5fdb649fa1 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaWinform.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaWinform.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LuaWinform)); this.SuspendLayout(); // // LuaWinform @@ -36,7 +35,7 @@ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(284, 262); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.textdoc_MultiSize; this.Name = "LuaWinform"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Lua Dialog"; diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaWinform.resx b/BizHawk.Client.EmuHawk/tools/Lua/LuaWinform.resx index 9b4e47966b..29dcb1b3a3 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaWinform.resx +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaWinform.resx @@ -117,402 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAgAICAQAAAAAADoAgAAhgAAABAQEAAAAAAAKAEAAG4DAAAwMAAAAQAIAKgOAACWBAAAICAAAAEA - CACoCAAAPhMAABAQAAABAAgAaAUAAOYbAAAwMAAAAQAgAKglAABOIQAAICAAAAEAIACoEAAA9kYAABAQ - AAABACAAaAQAAJ5XAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAAAAAAA//8A/wAAAP8A/wD//wAA////AKqq - AAAAAAAAAAAAAAAKqqqqp4iIiIiIiIiIiIiAgKqqqn//////////////+AgKqqp///////////////gI - Cqqqf/AAAA/////////4CAqqqn//////////////+AgKqqp/8AAAD/////////gICqqqf/////////// - ///4CAqqqn//////////////+AgKqqp/8AAAAAAAAAAAD/gICqqqf//////////////4CAqqqn/wAAAA - AAAAAAAP+AgKqqp///////////////gICqqqf/AAAAAAAAAAAA/4CAqqqn//////////////+AgKqqp/ - 8AAAAAAAAAAAD/gICqqqf//////////////4CAqqqn//////////////+AgKqqp/8AAAD/////////gI - Cqqqf//////////////4CAqqqn//////////////+AgKqqp///////////////gICqqqf/AAAA////// - ///4CAqqqn//////////////+AgKqqp/8AAAD////w8AD/gICqqqf//////////////4CAqqqn////// - ////////+AgKqqp///////////////gICqqqfw/w/w/w/w/w/w/3CAqqqn8P8P8P8P8P8P8P9wgKqqqn - 939393939393939wqqqqqgCgCgCgCgCgCgCgqqqq8AAAH+AAAA/AAAAHwAAAB8AAAAfAAAAHwAAAB8AA - AAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AA - AAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAH4AAAD/JJJL8oAAAAEAAAACAAAAABAAQAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAAA - AAAA//8A/wAAAP8A/wD//wAA////AKAAAAAAAKqqeIiIiIiICqp///////gKqn//////+Aqqf/AAAA/4 - Cqp///////gKqn/wAAAP+Aqqf//////4Cqp/8AAAD/gKqn//////+Aqqf/AA8A/4Cqp///////gKqn// - ////+Aqqfw8PDw8PCqqg9/f39/CqqqoKCgoKCqqqgA///wAH//8AB///AAcKqgAH8AAABwAAAAcADwAH - CqoAB///AAf//wAH//8ABwqqAAfwAAAHAACADwAP1V8KqigAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AJKPngC8uMEAcWd5AI+GlgBsXG0AAAAAAJ6SngC2qbMAlHeEAI5q - dgCKY28Al2RuAL+jqQCRV2EAq3h/AK19gwC+nKAAy6WoAL2GiQDDl5kAt15eALliYgC9bGwAv29vAMB0 - dADAd3cAwXh4AL54eADGiIgAzZCQANSengDPmpoA2qysANOnpwDbrq4Aw56eAM2npwDguroAyKenAOK+ - vgDmxsYA5cXFALCZmQDq0dEA8d/fAPXo6AD05+cA9uvrAPjv7wDW0dEA2q2sANqurQDhvbwA1qakAOC8 - ugDPqqYA7tvZAO/e3ADMraUA9u3qAPXs6QDIsKQAxbOkABAQDwDFxbsAtratAGpqZQDHx74A1tbOAE1N - SgA+PjwAPT07AB8fHgBtbWoAICAfAMzMxwC7u7YAubm0AKSkoACbm5cAfX16AHx8eQCAgH0AXl5cAC4u - LQC+vrsAvLy5AJ6emwB/f30Afn58AH19ewBvb20APz8+AD4+PQD9/foA/Pz5AOzs6QCenpwAjY2LAISE - ggCBgX8AT09OAE1NTAD9/fsAvr68AL29uwB/f34Ad3d2AJ6enQDw8eIA8fLkAPDx4wDy8+YA8fLlAPDx - 5ADn6NwA8vPnAPP06QD09esA8/TqANXWzQD09ewAt7iwALO0rADV1s4A9vfvAPX27gC4ubIAtrewAMnK - wwD5+vMA+PnyAPf48QD29/AA8vToAPL06QCYmZMAo6SeAJmalAC7vLYA09TOAMjJwwDHyMIA+fr0APj5 - 8wD3+PIA9vfxAOnq5ADn6OIA5ObcAPT27ADz9esAent2AKuspwCkpaAAu7y3ALm6tQD6+/YA+fr1ANrb - 1gDc3tUA9PbtAOXn3gBMTUkAtriwAHx9eQB6e3cAjI2JAIuMiAC7vLgAubq2AKusqAD7/PgA+vv3ANvc - 2AC3ubIAXV5bAFxdWgC8vboAu7y5AKytqgCdnpsA+/z5AB4fHQAtLiwAPj89AD0+PABeX10A+vz4AH1+ - fAD9/vwAuLq3AP7//gD9/v0A3d7dAAi1zgALutIAJrjOAACz0gAAss8AHqnBAAymxgANpMQALp20AD6s - wgAqnbcALpmyADWnwAAAm8UAAJnEAACcxAAQo8kAAI25AAyTuwBBi6EAXqK2AEulwwBKj6YAaK/HAGmj - uwBWiqAAaKK9AH2nuQCIoq4ASoOfAGOLngBfhJcAXICSAE6FowBqlKoAXH2QAJOptwB4i5wAm6i5AFZk - fABWXHYAf4GUAKurtwD+/v4A09PTAM/PzwC/v78Ar6+vAH9/fwBycnIAcXFxAHBwcABqamoAaGhoAGZm - ZgBAQEAAPz8/AC8vLwAAAAAABwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwf4+Pj4BwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHB/v7+/v7+Pj4+Pj4+AcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHHSZvcXBzdUV9i1Rb+vf4+Pj4+PgHBwcHBwcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHHSNxdHNycnZ2iHd5maKDm5xmWvr2+Pj4+AcHBwcHBwcHBwcHBwcHBwcHBwcH - BwcHHTxxc3JydnaIiXmZmXh7o4CAf3+OTVBZZW35+AcHBwcHBwcHBwcHBwcHBwcHBwcHGzxzc3JCQ4iJ - eZmZeHijgIB/f4eGk4SEkZ+vwfgHBwcHBwcHBwcHBwcHBwcHBwcHGyNzcnJEugAAAEmKeKOjgH9/h5ST - koSRoK++8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyNycnZ2iHl5l3xGo6OAgH+Hh5OFhJGRr6++8fgHBwcH - BwcHBwcHBwcHBwcHBwcHG0BydnaId3mZmXiYo4CAf4eHk5OEhJGfr76u8fgHBwcHBwcHBwcHBwcHBwcH - BwcHGyN2doi5SUmlmpqxgIB/f4eGk4SEkZ+vvr5h8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyN2iIh6gqaK - mqixgH9/h5STkoSRoK++vmFh8fgHBwcHBwcHBwcHBwcHBwcHBwcHGzx2iHl5mZl4o6OAgH+Hh5OFhJGR - r6++uGFg8fgHBwcHBwcHBwcHBwcHBwcHBwcHG0CId3mZmXiYo4CAf4eHk5OEkZGfr764YWBp8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGyOJeZmZeHujgIB/f4eGk4SEkZ+vvq5hYGDA8fgHBwcHBwcHBwcHBwcHBwcH - BwcHGyN5eZl4eKOjgH9/h5STkoSRoK++vmFhYMDD8fgHBwcHBwcHBwcHBwcHBwcHBwcHG0B5mX6amoyB - kH+Hh5OFhJGgr6++YWFgacMB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOZmUaaqEe8SgAASF+yUqm1WL64 - YWBpw8IB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOZeHujgIB/f4eWrE6pUlVe/gAATGPD8AEB8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGzx4eKOxgH9/h5STkoSRoK++vmFhasTDAQEB8fgHBwcHBwcHBwcHBwcHBwcH - BwcHGzx4o6RWAABKSGhTUq2dsK++YWFgacMBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOYo4CAf4eP - nlFSUrteQQAAXl5d9fMBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOjgIB/f4eGk4SEkZ+vvq5iV2r1 - 9fMBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGzyjgH9ISLNTp42doa++vmFhYMDDAQEBAQEB8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGyOAf39PT6qnS7u7QQAA/l5nbPX08/IBAQEB8fgHBwcHBwcHBwcHBwcHBwcH - BwcHGyOAf4eHk4WEkZGvr764a1du9fX8/PgBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGzx/f4eGk4SE - kZ+vvq5hYGDD8AEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGzx/h5SThISRoK++vmFhYMDDAQEB - AQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOHlJOShJGgr76+YWFgwMMBAQEBAQEBAQEB8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGzmHk4WEkZGvr764YWBpw8IBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcH - BwcHG0CTk6m7u7u/v7dhYGDD8AEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOThJWdq7a/ - v2NhYMDDAQEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOShJGgr76+YWFgwMMBAQEBAQEB - AQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGz+EkZ1cZLS0a2Bpw8IBAQEBAQEBAQEBAQEB8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGzmEkbW/vV5e/v3D8AEBAQEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcH - BwcHGyORn6++vmFgYMDDAQEBAQEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOgr76+YWFg - wMMBAQEBAQEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOvFQg+YWA6NcIBAQEBAQEBAQEB - AQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOvD9PiPWka1uYuASTs3zABLxADMgEBJy8B8fgHBwcH - BwcHBwcHBwcHBwcHBwcHGyE4NwLLNDs279QOASsE1QUBLQbS7gEt7dcJ8fgHBwcHBwcHBwcHBwcHBwcH - BwcHHBcWFwzIGBkZGcgKICAg0eMpKSLc2yoxE9reM/gHBwcHBwcHBwcHBwcHBwcHBwcHHevgKOrFEgsf - FMkNFxcWzeUWFxfo0BkZGeTPLAcHBwcHBwcHBwcHBwcHBwcHBwcHBwfZx8bZB9nOytkHzN3h2Qfn6SXZ - B9kRHtgHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH2dkHBwfZ2QcHB9nZBwcH2dkHBwfZ2QcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH - BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH////////AAD///////8AAP// - /////wAA/+H/////AAD/wAP///8AAP+AAAf//wAA/4AAAD//AAD/gAAAB/8AAP+AAAAD/wAA/4AAAAP/ - AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+A - AAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/ - AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+A - AAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/ - AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAB/8AAP/hCEIf/wAA//Oc5z//AAD///////8AAP// - /////wAAKAAAACAAAABAAAAAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AioWTAAAA - AADo5egAtqmzAIFsewCWfYoAj216ALuboQCtfYMAvJeaANnHyAC9hokAv29vAMF0dADCd3cAyIyMAMmP - jwDQlZUAyZCQANCXlwDSm5sA0ZubAOrR0QDv3NwA8d/fAPXo6AD68/MA+/f3AObMygDozswA8ObjAPDl - 4QDw5uIA7+XgAO7k3wDt494A7eLcAOzh2gDs4tsA7OLaAOvh2QDq39UA6uDXAOrg1gDq4dgA6d/UAOnf - 0wCZmZMAenp1AIqKhQBra2cAe3t3AGxsaQCampYAfX16AHx8eQC7u7cA29vXAL29ugC8vLkAbW1rAPz8 - +QD7+/gA7e3qAMzMyQCdnZsAjY2LAP39+wD8/PoAvb27AK6urAB/f34Afn59AG9vbgD///4A/v79APLz - 5QDx8uQA8vPmAPP06QDl5twA5OXbANDRyAD19uwA9PXrAPP06gDW184A9fbtALe4sAD29+8A9fbuAHl6 - cwDy9OcAt7ixAPf48QD29/AA8vToAHl6dADy9OkAysvFAPn69AD4+fMA9/jyAPb38QBqa2YAeXp1ALu8 - twD6+/YA+fr1AMfJwAB7fHgA+/z4APr79wDb3NgAbG1qAHx9egB7fHkAjI2KALy9ugCsraoAnJ2aAP3+ - +wD8/foAy8zJAHV2dAD9/vwAfn9+AP7//gD9/v0A3d7dAEnM2wAcwNUADrXPAA6uyQAPrsoAPMHWADys - vwBKv9QAF6K9ACywygBjvM8AAJ7BABmUuAArpMUAM5ezAFSRogBHosAAXqK2AFOOoAAxiqkAUJiyAGmg - tABAiqkAWpKqAF+ElwCKorIAQWiGAHeDkAC1wc4ArrjDAN/f3wCfn58Aj4+PAH9/fwBwcHAAb29vAGtr - awAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMDAwMD - AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD - A6amfqampgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUME9PVFRvS0tLS6imAwMDAwMDAwMDAwMDAwMD - AwMDAxQvT1BQYlFXVlZZVGWmp6enpwMDAwMDAwMDAwMDAwMDEitOXWpjMjRWWVlhaWhnVGVlpgMDAwMD - AwMDAwMDAwMSLVBeYldXVlVZW2FoZ2Ztcj+mAwMDAwMDAwMDAwMDAxItXmNrMjQxWVthaGhmbnJxP6YD - AwMDAwMDAwMDAwMDEixiUVdWVllcYWBoZm5yQD9FpgMDAwMDAwMDAwMDAwMSLmRXVlZZWWFpaGdmbXI/ - fH+mAwMDAwMDAwMDAwMDAxIuV1dWVVlbYWhnZm1yP0Z/TaYDAwMDAwMDAwMDAwMDEipTWlhZW2FoaGZu - cnE/f00BpgMDAwMDAwMDAwMDAwMSKlJfMzU2djk+OHp4R0V/AQGmAwMDAwMDAwMDAwMDAxInVllcYWlo - Z2ZyQkdISUwBAaYDAwMDAwMDAwMDAwMDEilVNTZwdnQ4dz1HQX+BAQEBpgMDAwMDAwMDAwMDAwMSKFlb - YWhoZm5zPEdJpaaiAQGmAwMDAwMDAwMDAwMDAxImXDd2dHU4eXhHe38BAQEBAaYDAwMDAwMDAwMDAwMD - EiZhaWhnZnJ4R0hJpaajAQEBpgMDAwMDAwMDAwMDAwMSJWFoZ2Ztcj98f4EBAQEBAQGmAwMDAwMDAwMD - AwMDAxIlaGhmbXI/P39NAQEBAQEBAaYDAwMDAwMDAwMDAwMDEiRoOmx9cT97fwEBAQEBAQEBpgMDAwMD - AwMDAwMDAwMSJGZsPUNKgINMAQEBAQEBAQGmAwMDAwMDAwMDAwMDAxIjZjtyP3x/gQEBAQEBAQEBAaYD - AwMDAwMDAwMDAwMDEiFtREpKSaQBAQEBAQEBAQEBpgMDAwMDAwMDAwMDAwMSInJxP3uCAQEBAQEBAQEB - AQGmAwMDAwMDAwMDAwMDAxIgAqFFDKAdHBgBARsBAQEBAaYDAwMDAwMDAwMDAwMDER6ekB+ekQUZnpsB - BpoanpQEpgMDAwMDAwMDAwMDAwMXDQ+PDg6cCBANlxMVkgkWmJ2mAwMDAwMDAwMDAwMDA5WIiZWVi4WV - lZmKnwuMBwqWkwMDAwMDAwMDAwMDAwMDA5WVAwOGlQMDhIYDjY4DhocDAwMDAwMDAwMDAwMDAwMDAwMD - AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD//////// - ///+B////AAf//wAAP/8AAB//AAAf/wAAH/8AAB//AAAf/wAAH/8AAB//AAAf/wAAH/8AAB//AAAf/wA - AH/8AAB//AAAf/wAAH/8AAB//AAAf/wAAH/8AAB//AAAf/wAAH/8AAB//AAAf/wAAP/+Zkn///////// - //8oAAAAEAAAACAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wCSj54AvLjBAHFn - eQCPhpYAbFxtAAAAAACekp4AtqmzAJR3hACOanYAimNvAJdkbgC/o6kAkVdhAKt4fwCtfYMAvpygAMul - qAC9hokAw5eZALdeXgC5YmIAvWxsAL9vbwDAdHQAwHd3AMF4eAC+eHgAxoiIAM2QkADUnp4Az5qaANqs - rADTp6cA266uAMOengDNp6cA4Lq6AMinpwDivr4A5sbGAOXFxQCwmZkA6tHRAPHf3wD16OgA9OfnAPbr - 6wD47+8A1tHRANqtrADarq0A4b28ANampADgvLoAz6qmAO7b2QDv3twAzK2lAPbt6gD17OkAyLCkAMWz - pAAQEA8AxcW7ALa2rQBqamUAx8e+ANbWzgBNTUoAPj48AD09OwAfHx4AbW1qACAgHwDMzMcAu7u2ALm5 - tACkpKAAm5uXAH19egB8fHkAgIB9AF5eXAAuLi0Avr67ALy8uQCenpsAf399AH5+fAB9fXsAb29tAD8/ - PgA+Pj0A/f36APz8+QDs7OkAnp6cAI2NiwCEhIIAgYF/AE9PTgBNTUwA/f37AL6+vAC9vbsAf39+AHd3 - dgCenp0A8PHiAPHy5ADw8eMA8vPmAPHy5QDw8eQA5+jcAPLz5wDz9OkA9PXrAPP06gDV1s0A9PXsALe4 - sACztKwA1dbOAPb37wD19u4AuLmyALa3sADJysMA+frzAPj58gD3+PEA9vfwAPL06ADy9OkAmJmTAKOk - ngCZmpQAu7y2ANPUzgDIycMAx8jCAPn69AD4+fMA9/jyAPb38QDp6uQA5+jiAOTm3AD09uwA8/XrAHp7 - dgCrrKcApKWgALu8twC5urUA+vv2APn69QDa29YA3N7VAPT27QDl594ATE1JALa4sAB8fXkAent3AIyN - iQCLjIgAu7y4ALm6tgCrrKgA+/z4APr79wDb3NgAt7myAF1eWwBcXVoAvL26ALu8uQCsraoAnZ6bAPv8 - +QAeHx0ALS4sAD4/PQA9PjwAXl9dAPr8+AB9fnwA/f78ALi6twD+//4A/f79AN3e3QAItc4AC7rSACa4 - zgAAs9IAALLPAB6pwQAMpsYADaTEAC6dtAA+rMIAKp23AC6ZsgA1p8AAAJvFAACZxAAAnMQAEKPJAACN - uQAMk7sAQYuhAF6itgBLpcMASo+mAGivxwBpo7sAVoqgAGiivQB9p7kAiKKuAEqDnwBji54AX4SXAFyA - kgBOhaMAapSqAFx9kACTqbcAeIucAJuouQBWZHwAVlx2AH+BlACrq7cA/v7+ANPT0wDPz88Av7+/AK+v - rwB/f38AcnJyAHFxcQBwcHAAampqAGhoaABmZmYAQEBAAD8/PwAvLy8AAAAAAAcHBwcHBwcHBwcHBwcH - BwcHBwddXV0HBwcHBwcHBwcHBwcbg4ODXfltXQcHBwcHBwcHG0Vyd5l7g/NdXQcHBwcHBxpFdltrmIav - aQH4BwcHBwcaRYmJiZiGr2kB+AcHBwcHG0WIW1tbW2sBAfgHBwcHBxtFcneJmIavaQH4BwcHBwcaRXZb - W1tbawEB+AcHBwcHGkWJiYmYhq9pAfgHBwcHBxtFiL+/v7Sgw8L4BwcHBwcbRYmJiZmUvrjC+AcHBwcH - G0WJYpmjlL7Dw/gHBwcHBx1F7GLsYuy+7PD4BwcHBwcaHBzs4O4n5wPk+AcHBwcHB9rO4tjO5M4E3gcH - Bwf//wMD4/8SLMA/V1bAD1xhwAdmbsAHP0XABwMDwAcDA8AHAwPABxIuwAdWVsAHYWnAB2ZtwAd8f8AH - AwPgDwMDKAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADAAA - ABMAAAAQAAAACgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAQAAAAOAAAAFMAAABQAAAAQwAAADQAAAArAAAAJAAAAB0AAAAWAAAADgAAAAcAAAACAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAASLbm5hpaWbu2ZmYL1UVFC4AAAAmQAAAJEAAACGAAAAeQAAAGsAAABcAAAATAAA - AD4AAAAyAAAAKQAAACIAAAAcAAAAFQAAAA4AAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXJn5/q8PHi//Dx4//x8uT/8fLl/+fo2/vDw7nuqqui45GS - i9ZTU0+8Q0NArwAAAJcAAACOAAAAgwAAAHYAAABoAAAAWwAAAEwAAAA+AAAAMQAAACgAAAAhAAAAGQAA - ABMAAAANAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI5OTn3Tp6f/8PHj//Dx5P/x8uX/8vPm//Lz - 5v/y8+f/8vPn//L06P/z9On/8/Tq//P16//b3dT3xca+7Z6fmd2SlI7WVFRRvEREQq8AAACXAAAAjQAA - AIAAAABzAAAAZAAAAFYAAABJAAAAOwAAAC4AAAAaAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALtxcfPMraX/8PHj//Hy - 5f/y8+b/8vPm//Lz5//y8+f/8vTo//L06f/z9Or/8/Xr//P16//09ev/9PXs//T27f/19u7/9fbu//b3 - 7//29+//0dLM88jIw+2Tk4/Yh4eEz1ZWVLowMC+oAAAAlQAAAIUAAABTAAAAFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//MraX/8fLl//Hy5f/y8+b/xcW7/7a2rf/y9Oj/8vTp//P06v/z9ev/8/Xr//T16//09ev/9Pbt//X2 - 7v/19u7/9vfv//b37//29/D/9/jx//f48v/5+vP/+frz//n69P/6+/b/+vv3/6+xruIAAAB0AAAAIgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//Tp6f/8fLl//Lz5v/y8+b/ampl/y0uLP8AAAD/AAAA/wAAAP89PTv/mJmT//T1 - 6//09u3/9Pbt//X27v/29+//9vfv//b38P/29/H/9/jy//j58//5+vP/+fr0//n69f/6+/f/+vz4/8rM - yOwAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8vPm//Lz5v/y8+f/8vPn//L06P/z9Or/8/Tq/+Tm - 3P+3uLD/1tbO//T27f/09u3/9fbu//X27v/29+//9vfw//b38P/3+PL/+Pny//n68//5+vT/+fr0//r7 - 9//6+/f/+vz4//Dx7voAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Fs6T/8vPm//Lz5//y8+f/8vTo//P0 - 6f/z9Or/8/Xr//P16//09ev/9Pbs//T27f/19u7/9fbu//b37//29/D/9vfw//f48v/3+PL/+frz//n6 - 8//5+vT/+vv2//r79//6/Pj/+/z4/+bs4/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8vPn//Lz - 5//y9Oj/Hh8d/z09O/89PTv/TE1J/3p7dv96e3b/t7my//X27v/19u7/9vfv//b37//29/D/9/jx//f4 - 8v/5+vP/+frz//n69P/6+/b/+vv3//r8+P/6/Pj//Pz5/+7w6/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//Tp6f/8vPn//L06P/y9Oj/1dbN/7a3sP+2uLD/mJmT/3p7dv96e3f/t7my//X27v/29+//9vfv//b3 - 8P/29/H/9/jy//j58//5+vP/+fr0//n69f/6+/f/+vz4//r8+P/8/Pn//Pz5//Hx7/oAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//MraX/8vPn//L06P/z9Or/8/Tq//P16//z9ev/9PXr//T27f/09u3/9fbu//X2 - 7v/29+//9vfw//b38P/3+PL/+Pny//n68//5+vT/+fr0//r79//6+/f/+vz4//v8+f/8/Pn//f36/+ju - 5voAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Fs6T/8vTo//P06f/z9Or/8/Xr//P16//09ev/9Pbs//T2 - 7f/19u7/9fbu//b37//29/D/9vfw//f48v/3+PL/+frz//n69P/5+vT/+vv2//r79//6/Pj/+/z5//z8 - +f/9/fr//f37/+7x7voAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8vTp//P06v/z9ev/8/Xr//T1 - 6//09ez/9Pbt//X27v/19u7/9vfv//b37//29/D/9/jx//f48v/5+vP/+frz//n69P/6+/b/+vv3//r8 - +P/7/Pj//Pz5//39+v/9/fr//f78//Hy8foAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8/Tq//P0 - 6v/z9ev/9PXr//T16//09u3/9Pbt//X27v/29+//9vfv//b38P/29/H/9/jy//j58//5+vP/+fr0//n6 - 9f/6+/f/+vz4//r8+P/8/Pn//Pz5//39+v/9/vz//f79/+3x7foAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//Fs6T/8/Tq//P16//V1s7/ent2/3p7dv+ZmpT/uLmy/8fIwv/29+//9vfw//b38P/3+PL/+Pny//n6 - 8//5+vT/+fr1//r79//6+/f/+vz4//z8+f/8/Pn//f36//39+//9/v3//////+3x7foAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//Tp6f/8/Xr//P16//W1s7/ent2/3p7d/9NTUr/PT48/x8fHv8AAAD/AAAA/z4+ - PP8+Pj3/XV5b/319ev+MjYn/u7y5/7y8uf/6/Pj/+/z5//z8+f/9/fr//f37//3+/f/+//7///////Pz - 8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8/Xr//T16//09ez/9Pbt//X27v/19u7/9vfv//b3 - 7//29/D/5+ji/7m6tv+7u7b/jI2J/319ev9eXlz/Pz8+/y8vL/8AAAD/AAAA/yAgH/+enpz//f79//7+ - /v///////////+/y7/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//MraX/9PXr//T16//09u3/t7my//X2 - 7v/29+//9vfv//b38P/29/H/9/jy//j58//5+vP/+fr0//n69f/6+/f/+vz4//r8+P/8/Pn//Pz5/76+ - vP/d3t3//f79/////////////////+jv6PoAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//MraX/9PXr//T2 - 7f/l597/Li4t/wAAAP8AAAD/Hx8e/z4+PP9NTUz/fHx5/319ev+rrKj/u7y3/9vc2P/6+/f/+vz4//z8 - +f/8/Pn//f36//39+//9/v3///////////////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//Tp6f/9Pbs//T27f/19u7/9fbu//b37//29/D/yMnD/7m6tf+bm5f/fX16/319ev8+Pz3/Pz8+/xAQ - D/8AAAD/AAAA/z8/Pv8/Pz7/b29t/39/f/+/v7////////////////////////Pz8/oAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//Tp6f/9Pbt//X27v/19u7/9vfv//b37//29/D/9/jx//f48v/5+vP/+frz//n6 - 9P/6+/b/+vv3//r8+P/7/Pj/7Ozp/76+u/++vrz/f39//39/f/+/v7///////////////////////+fu - 5/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//MraX/9Pbt//X27v/29+//Pj48/z4+PP9cXVr/fHx5/3x9 - ef+7vLb/u7y3/9rb1v/6+/f/+vz4//r8+P/8/Pn//Pz5//39+v/9/vz//f79//////////////////// - //////////////Dy8PoAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/9fbu//b37//29+//ubm0/7m5 - tP+LjIj/fH15/21tav8+Pz3/Pj89/xAQD/8AAAD/AAAA/y8vL/8/Pz7/T09O/39/fv9/f3//r6+v/7+/ - v//Pz8////////////////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/9fbu//b3 - 7//29/D/9vfw//f48v/4+fL/+frz//n69P/5+vT/+vv3//r79//6/Pj/+/z5/729u/++vrv/np6d/39/ - f/9/f3//QEBA/0BAQP9wcHD//////////////////////+Xu5foAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//MraX/9vfv//b37//29/D/9/jx//f48v/5+vP/+frz//n69P/6+/b/+vv3//r8+P/7/Pj//Pz5//39 - +v/9/fr//f79//7+/v///////////////////////////////////////////+/y7/oAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//MraX/9vfv//b38P/29/H/9/jy//n68//5+vP/+fr0//n69f/6+/f/+vz4//r8 - +P/8/Pn//Pz5//39+v/9/vz//f79//////////////////////////////////////////////////Pz - 8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/9vfw//b38f/3+PL/+Pnz//n68//5+vT/+fr1//r7 - 9//6/Pj/+vz4//z8+f/8/Pn//f36//3+/P/9/v3///////////////////////////////////////// - /////////////+vw6/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Pqqb/9vfw//f48v/4+fL/+frz//n6 - 9P/5+vT/+vv3//r79//6/Pj/+/z5//z8+f/9/fr//f37//3+/f/+//7///////////////////////// - /////////////////////////////+fu5/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Fs6T/9/jy//f4 - 8v+MjYn/Pj89/z4/Pf8+Pz3/fX58/31+fP+dnpv//Pz5//39+v/9/fr//f79//7+/v////////////// - //////////////////////////////////////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//Tp6f/9/jy//n68//p6uT/u7y3/7u8uP+srar/fX58/31+fP+enpz//Pz5//39+v/9/vz//f79//// - //////////////////////////////////////////////////////////////Pz8/oAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//Tp6f/+Pnz//n68//5+vT/+fr1//r79//6/Pj/+vz4//z8+f/8/Pn//f36//3+ - /P/9/v3//////////////////////////////////////////////////////////////////////+Pt - 4/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//IsKT/+frz//n69P+7vLf/fX17/42Ni/+8vbr/vL26/729 - u//9/fr//f37//3+/f/+//7///////////////////////////////////////////////////////// - //////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Pqqb/+frz//n69P+7vLn/fX58/15f - Xf8/Pz7/Pz8+/y8vL/8/Pz///f79//7+/v////////////////////////////////////////////// - //////////////////////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/+fr0//r7 - 9v/6+/f/+vz4//r8+P/8/Pn//f36//39+v/9/vz//f79//////////////////////////////////// - /////////////////////////////////////////////+Xu5foAAAB3AAAAIwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 - d//Tp6f/+fr1//r79//6/Pj/+vz4//z8+f/8/Pn//f36//3+/P/9/v3///////////////////////// - /////////////////////////////////////////////////////////////+/y7/oAAAB3AAAAIwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMB3d//Tp6f/+vv3/8OXmf+ekp7/9ezp//z8+f/9/fr/7tvZ/9qurf/+//7///////// - //////////////////////////////////////////////////////////////////////////////Pz - 8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/+vv3/5FXYf8AmcT/SoOf//bt6v/9/fv/wHR0/wCN - uf9OhaP/8d/f///////brq7/VmR8/2iivf/05+f///////Xo6P+reH//vLjB//jv7////////////+C6 - uv/16Oj//////87OzuwAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Pmpr/4Ly6/9ampP+Sj57/DKbG/9qt - rP/v3tz/4b28/6urt/8AnMT/v6Op///////lxcX/cWd5/xCjyf+Phpb//////+rR0f9sXG3/AJvF/3+B - lP//////6tHR/1Zcdv8Mk7v/tqmz/8/Pz+sAAABvAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMF4eP+5YmL/t15e/7li - Yv+KY2//ALPS/71sbP+/b2//v29v/79vb/8As9L/lHeE/9Senv/Unp7/1J6e/zWnwP9ji57/4r6+/+K+ - vv/arKz/aK/H/0qPpv/mxsb/9uvr/8ulqP9LpcP/Voqg/9HMzOUAAABQAAAAEwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu4 - uIR9j6TFd6O287+amt1whJbxALPM97WPk+GOanb/zZCQ/72Gif8Ass//l2Ru/7liYv+5YmL/t15e/y6d - tP9cgJL/t15e/7liYv+5YmL/XH2Q/y6Zsv+/b2//v29v/79vb/9fhJf/JZu1+Yppaa0AAAAnAAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAY5QhALXR/wCsxtkAt9D0AGuLoQAkNS4AqcfwAJGvwQCdueEAnrzrmZmZawCf - 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 - 6v/09ev/9PXr//X27f/19u7/xsfB7rq7teiTlJDXd3h1yVZXVbkZGhmgAAAAcAAAACQAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJj4//6t/V//Lz5f95enP/amtm/3l6 - dP96enX/a2tn//T16//19u3/9fbt//b38P/29/H/9/jy//j58//5+vT/+vv2//r79/8AAACPAAAALwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmPj//q4Nb/8vPm//L0 - 5//y9Oj/8/Tq//P06v/09ev/9fbs//X27f/29+//9vfw//f48v/4+fP/+fr0//r79v/6+/f//Pz5/wAA - AI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyY+P/+rg - 1v/y9Of/eXp0/3l6df96enX/a2tn/5mZk//19u3/9vfv//b38P/3+PL/9/jy//n69P/5+vX/+vv3//v8 - +P/8/Pn/AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADJj4//6uDX//L06P/z9On/8/Tq//T16//09ev/9fbt//X27v/29/D/9/jx//f48v/5+vT/+fr1//r7 - 9//7+/j//Pz5//39+/8AAACPAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMmPj//q4dj/8vTp//P06v/09ev/9PXr//X27f/19u3/9vfw//b38f/3+PL/+Pnz//n6 - 9P/6+/b/+vv3//z8+f/8/fr//f78/wAAAI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAyY+P/+rh2P/z9Or/8/Tq//T16//19uz/9fbt//b37//29/D/9/jy//j5 - 8//5+vT/+vv2//r79//8/Pn//Pz6//3+/P/+/v3/AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJj4//6+HZ/+Tl2/+3uLD/1tfO//X27f/29+//9vfw//f4 - 8v/3+PL/+fr0//n69f/6+/f/+/z4//z8+f/9/vz//v79//////8AAACPAAAALwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmPj//r4dn/5ebc/7e4sf+KioX/e3t3/2xs - af97fHn/fHx5/21ta/99fXr/nJ2a/7y9uv+9vbv//f37//3+/P///////////wAAAI8AAAAvAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyY+P/+zh2v/09ev/9fbt//X2 - 7v/29/D/9vfx//f48v/4+fP/+fr0//r79//MzMn/vb27/66urP9/f37////+////////////AAAAjwAA - AC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJj4//7OLa//X2 - 7P97e3f/bGxp/3t8eP97fHn/bG1q/319ev+MjYr/vLy5/729u//t7er//f78//7//v////////////// - //8AAACPAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmP - j//s4tv/9fbt//b37//29/D/9/jy//f48v/5+vT/+fr1/9vc2P+9vbr/vb27/39/fv9/f3//cHBw/9/f - 3////////////wAAAI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAyY+P/+3i3P/19u7/mpqW/3t8ef9sbWr/fH16/319ev+srar/vL26/729u//9/vv//f78//// - ////////////////////////AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADJj4//7eLc//b38P/29/H/9/jy//j58//5+vT/+vv3/7y9uv+9vbv/rq6s/39/ - fv9/f3//cHBw/5+fn/////////////////8AAACPAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmPj//t497/9vfw//f48v/4+fP/+fr0//r79v/6+/f//Pz5//z9 - +v/9/vz//v/+/////////////////////////////////wAAAI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyY+P/+3j3v/3+PL/9/jy//n69P/6+/b/+vv3//z8 - +f/8/Pn//f78//7+/f//////////////////////////////////////AAAAjwAAAC8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJj4//7uTf//f48v+7u7f/u7y3/8vM - yf/7/Pj//Pz5//3++//9/vz///////////////////////////////////////////8AAACPAAAALwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmPj//u5N//+fr0/7u8 - t/+8vLn/nZ2b/35+ff9+f37/3d7d/////v///////////////////////////////////////////wAA - AI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyY+P/+/l - 4P/5+vT/29vX//r79//8/Pn//P36//3+/P/+//7///////////////////////////////////////// - ////////AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADJj4//8OXh//r79v+NjYv/fn59/35+ff9/f37/j4+P//////////////////////////////////// - //////////////////8AAACPAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMmPj//w5uL/+vv3//v8+P/8/Pn//f77//3+/f////////////////////////////// - /////////////////////////////wAAAI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAyY+P//Dm4/+KhZP/rrjD//39+//Zx8j/tcHO//v39//68/P/6tHR//// - ////////9ejo////////////////////////////AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIjIz/5szK/0Fohv8ZlLj/6M7M/0Fohv8rpMX/tqmz/+/c - 3P9BaIb/WpKq//////+BbHv/QIqp//Hf3/9BaIb/R6LA/+jl6P8AAACDAAAAKQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGbm/+9hon/wXR0/wCewf+/b2//v29v/1+E - l/+PbXr/wnd3/72Gif8xiqn/0JWV/9CXl/8zl7P/u5uh/9Kbm/9QmLL/iqKy/wAAAGAAAAAYAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACpx/AyvtTyAK3EzhWV - tL41uM/lHMDV/1l6k8RFnrPzXJet6iuluutxfYv0soiL3xeivf+WfYr/rX2D/1OOoP8RZn63AAAAMQAA - AAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGOUIQBg - kEQAR2oXAE50FQCWuHQAiKhaAAAADQCtx5MAt822AGaBRACWs2oAoL/TAJGxnAB9mmIAsczxAKnG8QAi - MzAAAAAMAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////4P///8AB///AAAP/wA - AD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wA - AD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/+AAA//gAAP/////8oAAAAEAAAACAA - AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAEkAAABTAAAARgAA - ADgAAAAuAAAAJQAAAB8AAAAXAAAADQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAD7Ggm6N/f3e3VFRPuRkZ - F6AAAACUAAAAigAAAHwAAABuAAAAXAAAADgAAAAQAAAAAAAAAAAAAAAAAAAAAMB3d//Oyrb/8vTp//L0 - 6f/z9ev/9PXs/8XGv+67u7bolJWR12xsarwAAABnAAAAHgAAAAAAAAAAAAAAAAAAAADAd3f/1My8//L0 - 6f9+fn3/vb27//T27P/3+PH/+vv3//39/P//////cHBw/wAAACMAAAAAAAAAAAAAAAAAAAAAwHd3/9nO - wf/y9On/8vTp//L06f/09uz/9/jx//r79//9/fz//////3BwcP8AAAAjAAAAAAAAAAAAAAAAAAAAAMB3 - d//Yyr//8vTp/35+ff9+fn3/fn59/35+ff+9vbv///////////9wcHD/AAAAIwAAAAAAAAAAAAAAAAAA - AADAd3f/1M2+//L06f/y9On/8vTp//T27P/3+PH/+vv3//39/P//////cHBw/wAAACMAAAAAAAAAAAAA - AAAAAAAAwHd3/9HQvv/y9On/fn59/35+ff9+fn3/fn59/729u////////////3BwcP8AAAAjAAAAAAAA - AAAAAAAAAAAAAMB3d//Vzb//8vTp//L06f/y9On/9Pbs//f48f/6+/f//f38//////9wcHD/AAAAIwAA - AAAAAAAAAAAAAAAAAADAd3f/1c6///L06f9+fn3/fn59/35+ff+9vbv/+vv3//39/P//////cHBw/wAA - ACMAAAAAAAAAAAAAAAAAAAAAwHd3/9bPwf/y9On/8vTp//L06f/09uz/9/jx//r79//9/fz//////3Bw - cP8AAAAjAAAAAAAAAAAAAAAAAAAAAMB3d//Qzbv/8vTp//L06f/y9On/9Pbs//f48f/6+/f//f38//// - //9wcHD/AAAAIwAAAAAAAAAAAAAAAAAAAADAd3f/4sbE/0Fohv/y9On/QWiG//T27P9BaIb/+vv3/0Fo - hv//////cHBw/wAAACIAAAAAAAAAAAAAAAAAAAAAz56ehMF3d//Bd3f/MGqQ/5GqvP9ueI3/07a5/26Q - qf+6tL7/XIKd/wAAAFgAAAAYAAAAAAAAAAAAAAAAAAAAAPf39yEnhq/RSr/U/zBqkP8Zb5TXSr/U/1p2 - jvJKv9T/bG2E/1yCnf8AAAAjAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj - lCEAXYwjAFiFJQBfjkUAR2oXAAAABAAAAAEAAAAAAAAAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMAD - j//AA9b/wAPn/8ADdP/AA3X/wAN1/8ADZ//AA5P/wAPt//4D7/8= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/Lua/SyncTextBox.cs b/BizHawk.Client.EmuHawk/tools/Lua/SyncTextBox.cs deleted file mode 100644 index 8359c1109c..0000000000 --- a/BizHawk.Client.EmuHawk/tools/Lua/SyncTextBox.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Windows.Forms; -using System.Runtime.InteropServices; - -internal class SyncTextBox : RichTextBox -{ - public SyncTextBox() - { - this.Multiline = true; - this.ScrollBars = RichTextBoxScrollBars.Vertical; - } - - public Control Buddy { get; set; } - - private static bool scrolling; // In case buddy tries to scroll us - protected override void WndProc(ref Message m) - { - base.WndProc(ref m); - - // Trap WM_VSCROLL message and pass to buddy - if ((m.Msg == 0x115 || m.Msg == 0x20a) && !scrolling && Buddy != null && Buddy.IsHandleCreated) - { - scrolling = true; - SendMessage(Buddy.Handle, m.Msg, m.WParam, m.LParam); - scrolling = false; - } - } - - [DllImport("user32.dll", CharSet = CharSet.Auto)] - private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp); -} \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/MultiDiskBundler/MultiDiskBundler.Designer.cs b/BizHawk.Client.EmuHawk/tools/MultiDiskBundler/MultiDiskBundler.Designer.cs index 9ba8014437..9c8aac3757 100644 --- a/BizHawk.Client.EmuHawk/tools/MultiDiskBundler/MultiDiskBundler.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/MultiDiskBundler/MultiDiskBundler.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MultiDiskBundler)); this.MultiDiskMenuStrip = new System.Windows.Forms.MenuStrip(); this.SaveRunButton = new System.Windows.Forms.Button(); this.CancelBtn = new System.Windows.Forms.Button(); @@ -190,7 +189,7 @@ this.Controls.Add(this.CancelBtn); this.Controls.Add(this.SaveRunButton); this.Controls.Add(this.MultiDiskMenuStrip); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.dual_MultiSize; this.MainMenuStrip = this.MultiDiskMenuStrip; this.Name = "MultiDiskBundler"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; diff --git a/BizHawk.Client.EmuHawk/tools/MultiDiskBundler/MultiDiskBundler.cs b/BizHawk.Client.EmuHawk/tools/MultiDiskBundler/MultiDiskBundler.cs index 7f8887e6bc..57329728f3 100644 --- a/BizHawk.Client.EmuHawk/tools/MultiDiskBundler/MultiDiskBundler.cs +++ b/BizHawk.Client.EmuHawk/tools/MultiDiskBundler/MultiDiskBundler.cs @@ -31,7 +31,7 @@ namespace BizHawk.Client.EmuHawk AddButton_Click(null, null); AddButton_Click(null, null); - if (!Global.Game.IsNullInstance && !GlobalWin.MainForm.CurrentlyOpenRom.EndsWith(".xml")) + if (!Global.Game.IsNullInstance() && !GlobalWin.MainForm.CurrentlyOpenRom.EndsWith(".xml")) { if (GlobalWin.MainForm.CurrentlyOpenRom.Contains("|")) { @@ -240,7 +240,7 @@ namespace BizHawk.Client.EmuHawk string filename = ""; string initialDirectory = PathManager.MakeAbsolutePath(Global.Config.PathEntries.MultiDiskBundlesFragment, "Global_NULL"); - if (!Global.Game.IsNullInstance) + if (!Global.Game.IsNullInstance()) { filename = NameBox.Text; if (string.IsNullOrWhiteSpace(filename)) diff --git a/BizHawk.Client.EmuHawk/tools/MultiDiskBundler/MultiDiskBundler.resx b/BizHawk.Client.EmuHawk/tools/MultiDiskBundler/MultiDiskBundler.resx index da41b4f952..c0d291f3d3 100644 --- a/BizHawk.Client.EmuHawk/tools/MultiDiskBundler/MultiDiskBundler.resx +++ b/BizHawk.Client.EmuHawk/tools/MultiDiskBundler/MultiDiskBundler.resx @@ -120,384 +120,4 @@ 17, 17 - - - - AAABAAYAMDAAAAEAIACoJQAAZgAAADAwAAABAAgAqA4AAA4mAAAgIAAAAQAgAKgQAAC2NAAAICAAAAEA - CACoCAAAXkUAABAQAAABACAAaAQAAAZOAAAQEAAAAQAIAGgFAABuUgAAKAAAADAAAABgAAAAAQAgAAAA - AAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACAgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgID/gICA/4CA - gP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CA - gP+AgID/gICA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACAgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgID/gICA/4CA - gP+AgID/gICA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgID/gICA/4CAgP+AgID/gICA/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACAgID/gICA/4CAgP+AgID/gICA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgID/gICA/4CAgP+AgID/gICA/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACAgID/gICA/4CAgP+AgID/gICA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgID/gICA/4CA - gP+AgID/gICA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDg4P/iYmJ/46O - jv+UlJT/mZmZ/56env+kpKT/qamp/6+vr/+0tLT/ubm5/7+/v//AwMD/wMDA/8DAwP/AwMD/wMDA/8DA - wP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAAAACDg4P/iYmJ/46Ojv+UlJT/mZmZ/56env+kpKT/qamp/6+v - r/+0tLT/ubm5/7+/v//AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAA - AACFhYX/ioqK/5CQkP+VlZX/mpqa/6CgoP+lpaX/q6ur/7CwsP+1tbX/u7u7/8DAwP/AwMD/wMDA/8DA - wP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAAAACFhYX/ioqK/5CQkP+VlZX/mpqa/6Cg - oP+lpaX/q6ur/7CwsP+1tbX/u7u7/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DA - wP/AwMD/wMDA/wAAAACGhob/jIyM/zAwMP8wMDD/QEBA/zAwMP8wMDD/QEBA/zAwMP8wMDD/QEBA/zAw - MP8wMDD/QEBA/zAwMP8wMDD/QEBA/zAwMP8wMDD/QEBA/zAwMP/AwMD/wMDA/wAAAACGhob/jIyM//8+ - I///PiP//z4j//8+I///PiP//z4j//8+I///PiP//z4j//8+I///PiP//z4j//8+I///PiP//z4j//8+ - I///PiP//z4j//8+I//AwMD/wMDA/wAAAACIiIj/jY2N/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BA - QP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP/AwMD/wMDA/wAA - AACIiIj/jY2N//9BKf//QSn//0Ep//9BKf//QSn//0Ep//9BKf//QSn//0Ep//9BKf//QSn//0Ep//9B - Kf//QSn//0Ep//9BKf//QSn//0Ep//9BKf/AwMD/wMDA/wAAAACJiYn/j4+P//9FLv//RS7//0Uu//9F - Lv//RS7//0Uu//9FLv//RS7//0Uu//9FLv//RS7//0Uu//9FLv//RS7//0Uu//9FLv//RS7//0Uu//9F - Lv/AwMD/wMDA/wAAAACJiYn/j4+P//9FLv//RS7//0Uu//9FLv//RS7//0Uu//9FLv//RS7//0Uu//9F - Lv//RS7//0Uu//9FLv//RS7//0Uu//9FLv//RS7//0Uu//9FLv/AwMD/wMDA/wAAAACLi4v/kJCQ//9I - M///SDP//0gz//9IM///SDP//0gz//9IM///SDP//0gz//9IM///SDP//0gz//9IM///SDP//0gz//9I - M///SDP//0gz//9IM//AwMD/wMDA/wAAAACLi4v/kJCQ//9IM///SDP//0gz//9IM///SDP//0gz//9I - M///SDP//0gz//9IM///SDP//0gz//9IM///SDP//0gz//9IM///SDP//0gz//9IM//AwMD/wMDA/wAA - AACMjIz/kpKS//9MOP//TDj//0w4//9MOP//TDj//0w4//9MOP//TDj//0w4//9MOP//TDj//0w4//9M - OP//TDj//0w4//9MOP//TDj//0w4//9MOP/AwMD/wMDA/wAAAACMjIz/kpKS//9MOP//TDj//0w4//9M - OP//TDj//0w4//9MOP//TDj//0w4//9MOP//TDj//0w4//9MOP//TDj//0w4//9MOP//TDj//0w4//9M - OP/AwMD/wMDA/wAAAACOjo7/k5OT//9QPv//UD7//1A+//9QPv//UD7//1A+//9QPv//UD7//1A+//9Q - Pv//UD7//1A+//9QPv//UD7//1A+//9QPv//UD7//1A+//9QPv/AwMD/wMDA/wAAAACOjo7/k5OT//9Q - Pv//UD7//1A+//9QPv//UD7//1A+//9QPv//UD7//1A+//9QPv//UD7//1A+//9QPv//UD7//1A+//9Q - Pv//UD7//1A+//9QPv/AwMD/wMDA/wAAAACPj4//lZWV//9TQ///U0P//1ND//9TQ///U0P//1ND//9T - Q///U0P//1ND//9TQ///U0P//1ND//9TQ///U0P//1ND//9TQ///U0P//1ND//9TQ//AwMD/wMDA/wAA - AACPj4//lZWV//9TQ///U0P//1ND//9TQ///U0P//1ND//9TQ///U0P//1ND//9TQ///U0P//1ND//9T - Q///U0P//1ND//9TQ///U0P//1ND//9TQ//AwMD/wMDA/wAAAACRkZH/lpaW//9XSP//V0j//1dI//9X - SP//V0j//1dI//9XSP//V0j//1dI//9XSP//V0j//1dI//9XSP//V0j//1dI//9XSP//V0j//1dI//9X - SP/AwMD/wMDA/wAAAACRkZH/lpaW//9XSP//V0j//1dI//9XSP//V0j//1dI//9XSP//V0j//1dI//9X - SP//V0j//1dI//9XSP//V0j//1dI//9XSP//V0j//1dI//9XSP/AwMD/wMDA/wAAAACSkpL/mJiY//9a - Tf//Wk3//1pN//9aTf//Wk3//1pN//9aTf//Wk3//1pN//9aTf//Wk3//1pN//9aTf//Wk3//1pN//9a - Tf//Wk3//1pN//9aTf/AwMD/wMDA/wAAAACSkpL/mJiY//9aTf//Wk3//1pN//9aTf//Wk3//1pN//9a - Tf//Wk3//1pN//9aTf//Wk3//1pN//9aTf//Wk3//1pN//9aTf//Wk3//1pN//9aTf/AwMD/wMDA/wAA - AACUlJT/mZmZ//9eUv//XlL//15S//9eUv//XlL//15S//9eUv//XlL//15S//9eUv//XlL//15S//9e - Uv//XlL//15S//9eUv//XlL//15S//9eUv/AwMD/wMDA/wAAAACUlJT/mZmZ//9eUv//XlL//15S//9e - Uv//XlL//15S//9eUv//XlL//15S//9eUv//XlL//15S//9eUv//XlL//15S//9eUv//XlL//15S//9e - Uv/AwMD/wMDA/wAAAACVlZX/mpqa//9hV///YVf//2FX//9hV///YVf//2FX//9hV///YVf//2FX//9h - V///YVf//2FX//9hV///YVf//2FX//9hV///YVf//2FX//9hV//AwMD/wMDA/wAAAACVlZX/mpqa//9h - V///YVf//2FX//9hV///YVf//2FX//9hV///YVf//2FX//9hV///YVf//2FX//9hV///YVf//2FX//9h - V///YVf//2FX//9hV//AwMD/wMDA/wAAAACXl5f/nJyc//9lXP//ZVz//2Vc//9lXP//ZVz//2Vc//9l - XP//ZVz//2Vc//9lXP//ZVz//2Vc//9lXP//ZVz//2Vc//9lXP//ZVz//2Vc//9lXP/AwMD/wMDA/wAA - AACXl5f/nJyc//9lXP//ZVz//2Vc//9lXP//ZVz//2Vc//9lXP//ZVz//2Vc//9lXP//ZVz//2Vc//9l - XP//ZVz//2Vc//9lXP//ZVz//2Vc//9lXP/AwMD/wMDA/wAAAACYmJj/nZ2d//9oYv//aGL//2hi//9o - Yv//aGL//2hi//9oYv//aGL//2hi//9oYv//aGL//2hi//9oYv//aGL//2hi//9oYv//aGL//2hi//9o - Yv/AwMD/wMDA/wAAAACYmJj/nZ2d//9oYv//aGL//2hi//9oYv//aGL//2hi//9oYv//aGL//2hi//9o - Yv//aGL//2hi//9oYv//aGL//2hi//9oYv//aGL//2hi//9oYv/AwMD/wMDA/wAAAACZmZn/n5+f//9s - Z///bGf//2xn//9sZ///bGf//2xn//9sZ///bGf//2xn//9sZ///bGf//2xn//9sZ///bGf//2xn//9s - Z///bGf//2xn//9sZ//AwMD/wMDA/wAAAACZmZn/n5+f//9sZ///bGf//2xn//9sZ///bGf//2xn//9s - Z///bGf//2xn//9sZ///bGf//2xn//9sZ///bGf//2xn//9sZ///bGf//2xn//9sZ//AwMD/wMDA/wAA - AACbm5v/oKCg//9vbP//b2z//29s//9vbP//b2z//29s//9vbP//b2z//29s//9vbP//b2z//29s//9v - bP//b2z//29s//9vbP//b2z//29s//9vbP/AwMD/wMDA/wAAAACbm5v/oKCg//9vbP//b2z//29s//9v - bP//b2z//29s//9vbP//b2z//29s//9vbP//b2z//29s//9vbP//b2z//29s//9vbP//b2z//29s//9v - bP/AwMD/wMDA/wAAAACcnJz/oqKi/6enp/+tra3/srKy/7e3t/+9vb3/wMDA/8DAwP/AwMD/wMDA/8DA - wP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAAAACcnJz/oqKi/6en - p/+tra3/srKy/7e3t/+9vb3/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DA - wP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAAAACenp7/o6Oj/6mpqf+urq7/s7Oz/7m5uf++vr7/wMDA/8DA - wP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAA - AACenp7/o6Oj/6mpqf+urq7/s7Oz/7m5uf++vr7/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DA - wP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA////////AAD///////8AAP4AP/4APwAA/gA//gA/AAD/wf//wf8AAP/B - ///B/wAA/8H//8H/AACAAACAAAAAAIAAAIAAAAAAgAAAgAAAAACAAACAAAAAAIAAAIAAAAAAgAAAgAAA - AACAAACAAAAAAIAAAIAAAAAAgAAAgAAAAACAAACAAAAAAIAAAIAAAAAAgAAAgAAAAACAAACAAAAAAIAA - AIAAAAAAgAAAgAAAAACAAACAAAAAAIAAAIAAAAAAgAAAgAAAAACAAACAAAAAAP///////wAA//////// - AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AACgAAAAwAAAAYAAAAAEACAAAAAAAABIAAAAAAAAAAAAAAAAAAAAA - AAAAAAD/MDAw/0BAQP//PiP//0Ep//9FLv//SDP//0w4//9QPv//U0P//1dI//9aTf//XlL//2FX//9l - XP//aGL//2xn//9vbP+AgID/g4OD/4WFhf+Ghob/iIiI/4mJif+Kior/i4uL/4yMjP+NjY3/jo6O/4+P - j/+QkJD/kZGR/5KSkv+Tk5P/lJSU/5WVlf+Wlpb/l5eX/5iYmP+ZmZn/mpqa/5ubm/+cnJz/nZ2d/56e - nv+fn5//oKCg/6Kiov+jo6P/pKSk/6Wlpf+np6f/qamp/6urq/+tra3/rq6u/6+vr/+wsLD/srKy/7Oz - s/+0tLT/tbW1/7e3t/+5ubn/u7u7/729vf++vr7/v7+//8DAwP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABISEhISEhISEhIS - AAAAAAAAAAAAAAAAABISEhISEhISEhISAAAAAAAAAAAAAAAAABISEhISEhISEhISAAAAAAAAAAAAAAAA - ABISEhISEhISEhISAAAAAAAAAAAAAAAAAAAAABISEhISAAAAAAAAAAAAAAAAAAAAAAAAABISEhISAAAA - AAAAAAAAAAAAAAAAAAAAABISEhISAAAAAAAAAAAAAAAAAAAAAAAAABISEhISAAAAAAAAAAAAAAAAAAAA - AAAAABISEhISAAAAAAAAAAAAAAAAAAAAAAAAABISEhISAAAAAAAAAAAAABMXHCInLDE0ODw/Q0RERERE - REREREREABMXHCInLDE0ODw/Q0REREREREREREREABQYHiMoLjI1OT1AREREREREREREREREABQYHiMo - LjI1OT1AREREREREREREREREABUaAQECAQECAQECAQECAQECAQECAUREABUaAwMDAwMDAwMDAwMDAwMD - AwMDA0REABYbAgICAgICAgICAgICAgICAgICAkREABYbBAQEBAQEBAQEBAQEBAQEBAQEBEREABcdBQUF - BQUFBQUFBQUFBQUFBQUFBUREABcdBQUFBQUFBQUFBQUFBQUFBQUFBUREABkeBgYGBgYGBgYGBgYGBgYG - BgYGBkREABkeBgYGBgYGBgYGBgYGBgYGBgYGBkREABogBwcHBwcHBwcHBwcHBwcHBwcHB0REABogBwcH - BwcHBwcHBwcHBwcHBwcHB0REABwhCAgICAgICAgICAgICAgICAgICEREABwhCAgICAgICAgICAgICAgI - CAgICEREAB0jCQkJCQkJCQkJCQkJCQkJCQkJCUREAB0jCQkJCQkJCQkJCQkJCQkJCQkJCUREAB8kCgoK - CgoKCgoKCgoKCgoKCgoKCkREAB8kCgoKCgoKCgoKCgoKCgoKCgoKCkREACAmCwsLCwsLCwsLCwsLCwsL - CwsLC0REACAmCwsLCwsLCwsLCwsLCwsLCwsLC0REACInDAwMDAwMDAwMDAwMDAwMDAwMDEREACInDAwM - DAwMDAwMDAwMDAwMDAwMDEREACMoDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUREACMoDQ0NDQ0NDQ0NDQ0NDQ0N - DQ0NDUREACUqDg4ODg4ODg4ODg4ODg4ODg4ODkREACUqDg4ODg4ODg4ODg4ODg4ODg4ODkREACYrDw8P - Dw8PDw8PDw8PDw8PDw8PD0REACYrDw8PDw8PDw8PDw8PDw8PDw8PD0REACctEBAQEBAQEBAQEBAQEBAQ - EBAQEEREACctEBAQEBAQEBAQEBAQEBAQEBAQEEREACkuEREREREREREREREREREREREREUREACkuERER - EREREREREREREREREREREUREACovMzY6PkFEREREREREREREREREREREACovMzY6PkFERERERERERERE - REREREREACwwNDc7P0JEREREREREREREREREREREACwwNDc7P0JEREREREREREREREREREREAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA/gA//gA/AAD+AD/+AD8AAP/B///B/wAA/8H//8H/AAD/wf//wf8AAIAAAIAAAAAAgAAAgAAA - AACAAACAAAAAAIAAAIAAAAAAgAAAgAAAAACAAACAAAAAAIAAAIAAAAAAgAAAgAAAAACAAACAAAAAAIAA - AIAAAAAAgAAAgAAAAACAAACAAAAAAIAAAIAAAAAAgAAAgAAAAACAAACAAAAAAIAAAIAAAAAAgAAAgAAA - AACAAACAAAAAAIAAAIAAAAAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAAKAAAACAA - AABAAAAAAQAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf39/QICA - gP+AgID/gICA/4CAgP+AgID/gICA/4CAgP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9/ - f0CAgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAB/f38Qf39/QH9/f3CAgID/gICA/4CAgP9/f39Af39/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAf39/EH9/f0B/f39wgICA/4CAgP+AgID/f39/QH9/f0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAf39/QICAgP+AgID/gICA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9/f0CAgID/gICA/4CAgP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACEhIQwhoaGv46Ojr+Wlpa/np6ev6ampr+srKzPqamp/6+vr/+wsLD/wMDAv8DAwL/AwMC/wMDAv8DA - wL/AwMC/hISEMIaGhr+Ojo6/lpaWv56enr+mpqa/rKysz6mpqf+vr6//sLCw/8DAwL/AwMC/wMDAv8DA - wL/AwMC/wMDAv4ODg0CJiYn/eHh4/4GBgf+EhIT/jo6O/5CQkP+ampr/nJyc/5+fn/+cnJz/n5+f/5yc - nP+fn5//paWl/8DAwP+Dg4NAiYmJ/6x8df+ygnv/uIiB/76Oh//ElI3/ypqT/8+fmP/Pn5j/z5+Y/8+f - mP/Pn5j/z5+Y/8unov/AwMD/h4eHQIuLi/88PDz/Pz8//zw8PP8/Pz//PDw8/z8/P/88PDz/Pz8//zw8 - PP8/Pz//PDw8/z8/P/9dXV3/wMDA/4eHh0CLi4v//0An//9AJ///QCf//0An//9AJ///QCf//0An//9A - J///QCf//0An//9AJ///QCf/72BN/8DAwP+Hh4dAjY2N//9FL///RS///0Uv//9FL///RS///0Uv//9F - L///RS///0Uv//9FL///RS///0Uv/+9kU//AwMD/h4eHQI2Njf//RS///0Uv//9FL///RS///0Uv//9F - L///RS///0Uv//9FL///RS///0Uv//9FL//vZFP/wMDA/4uLi0CQkJD//0s2//9LNv//Szb//0s2//9L - Nv//Szb//0s2//9LNv//Szb//0s2//9LNv//Szb/72hZ/8DAwP+Li4tAkJCQ//9LNv//Szb//0s2//9L - Nv//Szb//0s2//9LNv//Szb//0s2//9LNv//Szb//0s2/+9oWf/AwMD/j4+PQJKSkv//UD///1A///9Q - P///UD///1A///9QP///UD///1A///9QP///UD///1A///9QP//vbF//wMDA/4+Pj0CSkpL//1A///9Q - P///UD///1A///9QP///UD///1A///9QP///UD///1A///9QP///UD//72xf/8DAwP+Pj49AlJSU//9W - Rv//Vkb//1ZG//9WRv//Vkb//1ZG//9WRv//Vkb//1ZG//9WRv//Vkb//1ZG/+9wZf/AwMD/j4+PQJSU - lP//Vkb//1ZG//9WRv//Vkb//1ZG//9WRv//Vkb//1ZG//9WRv//Vkb//1ZG//9WRv/vcGX/wMDA/5OT - k0CWlpb//1tO//9bTv//W07//1tO//9bTv//W07//1tO//9bTv//W07//1tO//9bTv//W07/73Rq/8DA - wP+Tk5NAlpaW//9bTv//W07//1tO//9bTv//W07//1tO//9bTv//W07//1tO//9bTv//W07//1tO/+90 - av/AwMD/k5OTQJiYmP//YFX//2BV//9gVf//YFX//2BV//9gVf//YFX//2BV//9gVf//YFX//2BV//9g - Vf/veHD/wMDA/5OTk0CYmJj//2BV//9gVf//YFX//2BV//9gVf//YFX//2BV//9gVf//YFX//2BV//9g - Vf//YFX/73hw/8DAwP+Xl5dAm5ub//9lXf//ZV3//2Vd//9lXf//ZV3//2Vd//9lXf//ZV3//2Vd//9l - Xf//ZV3//2Vd/+98dv/AwMD/l5eXQJubm///ZV3//2Vd//9lXf//ZV3//2Vd//9lXf//ZV3//2Vd//9l - Xf//ZV3//2Vd//9lXf/vfHb/wMDA/5eXl0CdnZ3//2tl//9rZf//a2X//2tl//9rZf//a2X//2tl//9r - Zf//a2X//2tl//9rZf//a2X/74B8/8DAwP+Xl5dAnZ2d//9rZf//a2X//2tl//9rZf//a2X//2tl//9r - Zf//a2X//2tl//9rZf//a2X//2tl/++AfP/AwMD/m5ubQJ+fn//pfXv/6399/+2Bf//vg4D/74OB/++D - gf/vg4H/74OB/++Dgf/vg4H/74OB/++Dgf/jkpD/wMDA/5ubm0Cfn5//6X17/+t/ff/tgX//74OA/++D - gf/vg4H/74OB/++Dgf/vg4H/74OB/++Dgf/vg4H/45KQ/8DAwP+bm5tAoaGh/6mpqf+xsbH/ubm5/7+/ - v//AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/m5ubQKGhof+pqan/sbGx/7m5 - uf+/v7//wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////// - //////////////////////////////gP+A/+P/4//j/+P4AAgACAAIAAgACAAIAAgACAAIAAgACAAIAA - gACAAIAAgACAAIAAgACAAIAAgACAAIAAgAD//////////////////////////////////////////ygA - AAAgAAAAQAAAAAEACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Ozs7/z4+Pv9nZ2f/cXFx/3l5 - ef98fHz//0An//9GMP//Szb/tnZt/7t6cf//UUD//1ZG//9bT//qa1r//2BV//9mXv/qb2D//2tl/+py - ZP/qdmr/6nlv/+p9dP/BgHf/xoV8/+qAef/qhH//gICA/4ODg/+EhIT/hYWF/4aGhv+Hh4f/iYmJ/4qK - iv+Li4v/jIyM/42Njf+Ojo7/j4+P/5CQkP+SkpL/k5OT/5SUlP+VlZX/lpaW/5eXl/+YmJj/mZmZ/5ub - m/+cnJz/nZ2d/5+fn/+goKD/oaGh/6Wlpf+np6f/qqqq/6urq/+xsbH/urq6/7+/v//Li4L/0JCH/9WV - jP/cnJv/4oKA/+WFg//qh4T/6IiG/+qKiP/Oo53/wMDA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAcHBwcHBwcHAAAAAAAAAAAHBwcHBwcHBwAAAAAAAAAABwcHBwcHBwcAAAAAAAAAAAcHBwcHBwcHAAA - AAAAAAAAAAAcHBwcAAAAAAAAAAAAAAAAHBwcHAAAAAAAAB0hKS82OTo4OjtJSUlJSUkdISkvNjk6ODo7 - SUlJSUlJHyIEBQYeICgpLCksKSw2SR8iCgsYGT9AQUFBQUFBSEkhJAECAQIBAgECAQIBAgNJISQHBwcH - BwcHBwcHBwcPSSMmCAgICAgICAgICAgIEkkjJggICAgICAgICAgICBJJJSgJCQkJCQkJCQkJCQkUSSUo - CQkJCQkJCQkJCQkJFEknKgwMDAwMDAwMDAwMDBVJJyoMDAwMDAwMDAwMDAwVSSksDQ0NDQ0NDQ0NDQ0N - FkkpLA0NDQ0NDQ0NDQ0NDRZJKy4ODg4ODg4ODg4ODg4XSSsuDg4ODg4ODg4ODg4OF0ktMBAQEBAQEBAQ - EBAQEBpJLTAQEBAQEBAQEBAQEBAaSS8yERERERERERERERERG0kvMhERERERERERERERERtJMTMTExMT - ExMTExMTExNFSTEzExMTExMTExMTExMTRUkyNUNERkdHR0dHR0dHR0JJMjVDREZHR0dHR0dHR0dCSTQ3 - Ojw9PklJSUlJSUlJSUk0Nzo8PT5JSUlJSUlJSUlJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////// - ////////////////////////+A/4D/4//j/+P/4/gACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAA - gACAAIAAgACAAIAAgACAAIAAgACAAP//////////////////////////////////////////KAAAABAA - AAAgAAAAAQAgAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICA - gP+AgID/gICA/4CAgP8AAAAAAAAAAAAAAAAAAAAAgICA/4CAgP+AgID/gICA/wAAAAAAAAAAAAAAAAAA - AAAAAAAAgICA/4CAgP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgID/gICA/wAAAAAAAAAAAAAAAIaG - hv8wMDD/MDAw/zAwMP8wMDD/MDAw/zAwMP/AwMD/hoaG//8+I///PiP//z4j//8+I///PiP//z4j/8DA - wP+Li4v//0gz//9IM///SDP//0gz//9IM///SDP/wMDA/4uLi///SDP//0gz//9IM///SDP//0gz//9I - M//AwMD/j4+P//9TQ///U0P//1ND//9TQ///U0P//1ND/8DAwP+Pj4///1ND//9TQ///U0P//1ND//9T - Q///U0P/wMDA/5SUlP//XlL//15S//9eUv//XlL//15S//9eUv/AwMD/lJSU//9eUv//XlL//15S//9e - Uv//XlL//15S/8DAwP+YmJj//2hi//9oYv//aGL//2hi//9oYv//aGL/wMDA/5iYmP//aGL//2hi//9o - Yv//aGL//2hi//9oYv/AwMD/nJyc/62trf+9vb3/wMDA/8DAwP/AwMD/wMDA/8DAwP+cnJz/ra2t/729 - vf/AwMD/wMDA/8DAwP/AwMD/wMDA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAAw8MAAOfn - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAAKAAAABAAAAAgAAAAAQAIAAAA - AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAP9ZWVn/Xl5e/2RkZP9nZ2f//0gz/9xcS///U0P//15S/+Fh - UP/mZ1b/6mpZ//9oYv+AgID/hoaG/4mJif+Ojo7/kpKS/5SUlP+VlZX/lpaW/5ubm/+fn5//oqKi/6Sk - pP/JmZj/1ZiR/9Wclv/Vn5v/zqOe/9Ojov/Vo6H/1aWk/8e3t//AwMD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANDQ0NAAAAAA0NDQ0AAA4SGBQTIiIiDhIYFBMi - IiIPAQIDBAQEFw8GCQoLCwsdEAUFBQUFBRoQBQUFBQUFGhEHBwcHBwcbEQcHBwcHBxsUCAgICAgIHBQI - CAgICAgcFQwMDAwMDB8VDAwMDAwMHxYZHiAgICAhFhkeICAgICEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA//8AAMPD - AADn5wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA//8AAA== - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/NES/BarcodeEntry.Designer.cs b/BizHawk.Client.EmuHawk/tools/NES/BarcodeEntry.Designer.cs index 8acc6b08a4..855175255f 100644 --- a/BizHawk.Client.EmuHawk/tools/NES/BarcodeEntry.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/NES/BarcodeEntry.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BarcodeEntry)); this.textBox1 = new System.Windows.Forms.TextBox(); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); @@ -94,7 +93,7 @@ this.Controls.Add(this.label2); this.Controls.Add(this.label1); this.Controls.Add(this.textBox1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.NESControllerIcon_MultiSize; this.Name = "BarcodeEntry"; this.Text = "Barcode Entry"; this.ResumeLayout(false); diff --git a/BizHawk.Client.EmuHawk/tools/NES/BarcodeEntry.resx b/BizHawk.Client.EmuHawk/tools/NES/BarcodeEntry.resx index aef481cbf2..29dcb1b3a3 100644 --- a/BizHawk.Client.EmuHawk/tools/NES/BarcodeEntry.resx +++ b/BizHawk.Client.EmuHawk/tools/NES/BarcodeEntry.resx @@ -117,299 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAYAMBwAAAEAIAAIFgAAZgAAADAcAAABAAgASAoAAG4WAAAgIAAAAQAgAKgQAAC2IAAAICAAAAEA - CACoCAAAXjEAABAQAAABACAAaAQAAAY6AAAQEAAAAQAIAGgFAABuPgAAKAAAADAAAAA4AAAAAQAgAAAA - AAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADU1NQYpKSkY5aUlIGWlJKBl5WVfpSS - koGUlJSBlpaWepaWlnqWlpZ6lZWVfpWVlX6VlZV+lZWVfpWVlX6XlZV+mZeVfpmXlX6XlZV+l5WVfpaU - lIGWlJSBl5WVfpWXlX6Vl5V+lZeVfpWXlX6Xl5V+l5eVfpeXlX6Xl5V+l5WVfpeVlX6WlJSBl5WVfpeV - lX6XlZV+l5WVfpeVlX6VlZV+l5WVfpeVlX6Vk5GFlJKSgaSkpGPY2NgUAAAAALe3t0QsLCz/CAQD/w4L - B/8WEQ7/Ew4L/xQQD/8NCwr/DwoJ/xALCv8RDAv/Eg0M/xINDP8SDQz/FA8O/xUQD/8QDAv/EQ0M/xMP - Dv8TDw7/FBAP/xUREP8WEhH/FxMS/xMREP8TERD/EhAP/xIQD/8RDw7/EA4N/xAODf8PDQz/FBAP/xMP - Dv8SDg3/Eg4N/xIODf8SDg3/EQ0M/xAMC/8MCgn/Ew8O/xEMCf8UDwz/DwwI/wsHBv8tLS3/s7O3Ry0s - Lv8bGRn/bWhl/4aAe/+Gfnf/eXNu/4B5dv+FgH3/h357/4qBfv+NhIH/j4aD/5GIhf+Tiof/lo2K/5iP - jP+blpP/nJeU/5+al/+hnJn/o56b/6ahnv+oo6D/qqWi/6qlov+ppKH/p6Kf/6Wgnf+inZr/oJuY/5+a - l/+emZb/mJOQ/5eSj/+VkI3/k46L/5GMif+Qi4j/jomG/4yHhP+KhYL/hX57/395dP+Lg3z/jIaB/3Nu - a/8dGxv/KSgq/wQCAv9OSUj/qaOe/6Wck/+onZX/rKOa/6igmf+moJv/rKSd/66mn/+yqqP/tKyl/7au - p/+4sKn/u7Os/762r/++tbL/wLe0/8O6t//Gvbr/yL+8/8vCv//OxcL/0MfE/9HKx//Qycb/zcbD/8rD - wP/HwL3/xL26/8K7uP/Burf/w7u0/8G5sv++tq//u7Os/7iwqf+1rab/s6uk/7Gpov+uqKP/sami/7Ws - o/+uo5v/qaCX/62nov9STUz/BwUF/wQAAP9VUE3/tq6n/8e9s//GurD/x72z/8rBuP/Jwbr/ycG6/8zE - vf/Oxr//z8fA/8/HwP/QyMH/08vE/9XNxv/Yz8v/2tHN/9zTz//e1dH/4djU/+Pa1v/l3Nj/597a/+rh - 3f/p4Nz/597a/+Tb1//h2NT/39bS/93U0P/c08//1c3G/9TMxf/QyMH/zcW+/8rCu//Hv7j/xLy1/8K6 - s/+8tK3/v7at/7uxp/+3q6H/t62j/6ujnP9STUr/BQAB/wAAAP9tbW3/7u7u/+Li4v/c3Nz/19fX/9fX - 1//Z2dn/2tra/9zc3P/U1NT/1tbW/9zc3P/d29v/1NLS/9rY2P/d29v/3NjX/+Xg3f/m4Nv/6ePe/+nj - 3v/n4N3/5+Dd/+bk2v/k4dz/4d3j/+Tc5v/i2+D/49nf/93Y2f/Y3c7/3NnU/97Z0P/i2+L/1tfT/9LV - 0//Y0dj/3NrQ/9fUz//i4bv/0c7d/8vO1v/d1db/4tvS/+Hp2P9dYmX/BwUA/wAAAP9+fn7/6enp/2ho - aP8mJib/JiYm/ysrK/8pKSn/JiYm/yoqKv8pKSn/MjAw/yYkJP8sKir/NTMz/zEvL/8wLi7/VVFQ/4aB - fv95c27/fXdy/3lzbv9ya2j/e3Rx/3dvaP91cmr/dHJq/3FvZf99d2z/X1ZT/z01PP9BPUP/RT5L/0FE - Nf8+Qjz/OjhM/0FFP/9QVkX/QjtI/0tMSv9PQE7/TEZl/0tPUP9VT0j/hHt3/+bo6P92dYX/BAIA/wMD - A/9ycnL/3Nzc/zk5Of8AAAD/BAQE/wAAAP8BAQH/AgAA/wQCAv8CAAD/AwEB/wQCAv8CAAD/BAIC/wMB - Af8DAQH/Ih4d/0pFQv9IQj3/TEZB/09JRP9KQ0D/SEE+/0s/Pf9DOjf/RkE4/0Q+Mf9JQTT/OTAm/xkS - D/8fGiP/HxUi/xgfCv8iISv/LRpN/yUbLP8kIhr/IB0f/ygmJv8qHzn/JSM3/x4iHP8sJiH/XFRU/+Ti - 6P95dYj/BAAA/wMFBf9zdXX/4+Xl/zAyMv8AAAD/AQMD/wACAv8GCAj/W1lY/2xqaf9pZ2b/NzU0/wcF - BP8FAwL/DQsK/wcIBv8RDw//GhgX/yckIP8tKST/JiAb/yslIP80LSr/KiUi/zIpJv8yKSz/Ni4v/zQp - K/8tHyP/KyUY/zw+Kv+TlpT/q6aj/52hov+jpqr/in2N/11PUf+ioYz/rK+m/6Sjp/+mrLH/dn53/yos - Jv80KjD/YVxb/+Pi3v9vbXP/BwUE/wIDAf9tbmz/4+Ti/zk6OP8AAQD/AAEA/wMEAv8eHx3/cGxr/0E9 - PP9TT07/XVta/wgGBf8GBAP/CQcG/wsMCv8GBgb/YV9e/8bDv//KxsH/w724/7q0r/+5tLH/w767/7q0 - r/+1rrH/rKin/6+oq/++sr7/cG5k/1RaT//NzOb/mYzg/4F75v+mquX/vbjH/4iCff/S0+j/kYrl/4N9 - 3P+zt+f/pKyr/zUyLf8tIir/XVpW/+bj3v9wb2v/CQsF/xMUEv9pamj/2NnX/zk6OP8AAQD/AwQC/wME - Av8nKCb/RkFA/xINDP8gHBv/VFBP/wQCAf8VExL/BwgG/wgJB/8LCwv/fnx7/+Xi3v+Cfnn/Z2Ne/2ll - YP+KhYL/zsnG/3l2bv9dWlb/YGJP/4aFd//Ty9L/fn15/0ZIU/+GecX/Hhi9/wANof8kJrr/gYek/3aC - bP9gX7v/DhKt/wkRsv8/L73/hoak/z85NP8zLi3/YF1Z/+Td4P9wa2r/Cw4F/wkHBv9pZ2b/4d/e/zo4 - N/8NCwr/UU9O/1BOTf9oZmX/TUhH/yIdHP8qJST/cm5t/15cW/9aWFf/MTIw/wwNC/8KCgr/eXd2/+jl - 4f+sqKP/pKCb/6Sgm/+wq6j/2NPQ/6ymof+WkJH/nZ6K/7Ctnv/Qxc//fnx0/0tNVf9hUaX/BADM/wAE - xv8QCs3/bGic/3Bxb/9GO7//BAjL/wAAx/8lEr//dHOV/zkyKf8yLSr/YWJZ/+Xb4f9nYWL/CgwM/xkV - FP9jX17/3dnY/0I+Pf8YFBP/YFxb/zMvLv87Nzb/MCsq/xwXFv8lIB//My8u/y8tLP9APj3/U1RS/wkK - CP8NDQ3/QUJA/39+ev+Kh4L/hIB7/4J+ef+GgX7/gHt4/4R4eP+LfYj/f3Zy/4V5ef+EcYT/U1BB/09X - Rv+bksr/JyTe/w4H+P88RMf/npWq/4N3bf+JiMz/GRLl/xEW4/9XVtz/iZGY/0M6MP80LTD/YGRZ/+Xf - 2v9lXV3/ExEd/xYWFv9aWFj/2dXU/0E/Pv8SExH/UFFN/ysoJP8wJyT/LSQg/y8mIv8rJSD/LCYh/ykk - If84MzD/UUxJ/xYTD/8bGBD/IyIU/zMzJ/8oKyn/Jyo4/ycoPP8uLzn/NzU0/y40L/81Ozr/MDQ1/zU1 - Nf8+Ozf/Mi0q/0E8Pf9vbXP/Y12A/1tYbv9xb3X/YWJZ/0tMQ/93dnj/ZGBz/11Xdv93dXT/XFhX/zw3 - NP82Lyz/aWJf/+Db2P9aWFf/FhcV/x4eHv9cV1j/1dHQ/0NBQP8dHhz/VVZS/zs4NP8+NTL/Rz84/0Q7 - N/86NC//QTs2/zk0Mf9ST0v/YF1Z/y8rKv8zLyr/QzlF/1xJdP9VPIb/UDeN/0w5fv9USmj/XllW/1E8 - ev9QOYP/SDF7/006a/9USlb/Pzwu/yopH/8wLzP/My81/yolJ/82Lyz/Ny4q/ygfG/87MDL/MSkw/zEp - NP80MjH/NjIx/zUwLf86MzD/aGFe/9nU0f9XVVT/Hh8d/x4fHf9RTUz/0c3M/1ZSUf85Ojj/X2Be/1lW - Uv9lXlv/TkY//0Q8Nf9GQDv/aWNe/1RPTP9YVFP/SUdG/zAuLf87ODT/RkI9/1lVUP9VUFL/Uk5a/05K - Vv9STFH/V05K/09EVP9QRlf/SkJT/01FT/9UTEz/R0E8/zQxLf8uLi7/MjYq/zAxJ/8wLSn/OTI1/zct - M/8yKy7/NzIz/zQyMf8tKyr/NjIx/zo1Mv8/ODX/bWZj/9jT0P9RT07/HR4c/ygpJ/9LR0b/z8rJ/15a - Wf85Ojj/Ozw6/zw6Of9PSkn/ZFxV/01FPv9HQTz/XVhV/z47N/87OTj/NTU1/z4+Pv8xKjf/OzQ3/01H - QP9JRDv/SkZB/0dAQ/9KPUX/SzpD/0c/OP9GQjf/Q0I0/0M/NP9COTX/OjIz/zMuL/8wMS//Li8z/zUy - O/80LTr/NCo7/zkvQP8xKjf/OjU+/zEvNf86ODf/Ozc2/zgzMP86MzD/bWZj/9nU0f9OTEv/ICEf/ygp - J/9DPz7/zcjH/2NeXf9DQUD/Ozw6/0JAP/9QTEv/WVNO/1JMR/9WUk3/WVZS/z87Ov87OTj/MzMz/zU1 - Nf85OjH/S0k//2hhWP9oXlf/Zl1Z/2FZUv9kW1H/aV5Q/2RZUf9cUlL/WU5W/15TVv9YUUj/SkQ5/zg0 - M/8uKzT/GBSR/x0bk/8hHpL/FxOE/yAdiv8eG4j/IR6L/xsbh/81MzL/OjY1/zs2M/88NTL/bWZj/9PO - y/9HRUT/KSoo/y8wLP9DQDz/zcXF/11YV/9APj3/QUJA/0NEQv9EQD//U05L/0xHRP9OS0f/TElF/0A+ - Pf89Ozr/Ojs5/zs8Ov81NDb/RT9A/2BUUv9eUkz/XlVM/1tSSf9aT0v/Xk9N/1xVQv9VTj3/U01A/1hS - R/9XTkX/SD87/zkzNP8zMjb/MCxP/ywqR/8yM0f/Ky04/zI1Pf8wMzv/LjA7/zMzQ/87OTj/Pzs6/0A7 - OP9AOTb/cGlm/8/Kx/9APj3/LS4s/zM0MP8/PDj/zcbD/2JaWv9CQD//R0hG/0RERP9CQED/R0VE/0A+ - Pf89Ozr/Q0FA/0E/Pv88Ozf/PDs3/z8+Ov88QDX/RkI9/1tNTv9ZSkj/W09J/1lQRv9WTkH/VEs+/1VD - UP9RR0f/TUo8/05HPv9MPkL/QDI9/zkzNP86PjL/PTY5/zgyM/89ODX/Ozcy/z06Mv89NzL/PTcy/0A5 - Nv89Ozr/Ozc2/zo1Mv8+NzT/cmto/87Jxv89Ozr/MzQy/zY3M/85NjL/zMXC/2piYv9HQ0L/QUJA/zs7 - O/9EQkL/Ojo6/0RERP89PT3/QD49/zs5OP9APzv/QD87/z06Nf84ODj/S0ZF/2peWv9rX1X/amJR/2Ve - T/9iW1L/ZFhY/2BXTv9hWVL/XFZR/1pUTf9dVEv/UEhB/z86N/86ODj/PDov/z89M/8/Ojf/QDo7/z84 - O/9COjv/Rj4+/0A5Nv8+PDv/QDw7/0I9Ov9GPzz/dm9s/8rFwv84NjX/Njc1/zs6Nv80MS3/ysPA/7qv - q/+Xi4X/loyF/5mSif+TjoX/mJCJ/5iQif+YkIn/mJCJ/5iQif+YkIn/mJCJ/5iQif+Zj4j/oJaP/6ie - l/+roZr/qqCZ/6iel/+nnZb/qJ6X/6ael/+mnpf/pp6X/6Sclf+impP/npaP/5uTjP+ZkYr/nZWO/52V - jv+dlY7/nZWO/52Vjv+dlY7/nZWO/52Vjv+cl47/oJmQ/6CWj/+glI7/uq+r/8nCv/82My//Ozo2/0ZH - Rf8lISD/wLu4/+Pa1//h1tL/5dzY/9rUzf/e29P/39fQ/9/X0P/f19D/39fQ/9/X0P/f19D/39fQ/9/X - 0P/c1M3/39fQ/+La0//i2tP/4NjR/9/X0P/g2NH/4trT/97Wz//f19D/4NjR/+HZ0v/h2dL/4NjR/9/X - 0P/f19D/39fQ/9/X0P/f19D/39fQ/9/X0P/f19D/39fQ/9/X0P/Y1c3/39nS/+Tb1//d0s7/6N/c/8G8 - uf8hHRz/TU5M/4SEhP8RDw7/ZmJh/6mhof+mn5z/pp+c/6qmof+in5r/p6Kf/6ein/+nop//p6Kf/6ei - n/+nop//p6Kf/6ein/+nop//p6Kf/6ahnv+loJ3/pJ+c/6Oem/+loJ3/pqGe/6Wgnf+loJ3/pqGe/6ah - nv+moZ7/p6Kf/6ahnv+moZ7/p6Kf/6ein/+nop//p6Kf/6ein/+nop//p6Kf/6ein/+mo57/pqKd/6eg - nf+qo6D/o5ub/2RgX/8VExL/f39//9ra2gdcXFzXCQcH/wkEBf8ZFRT/DQkI/xAODf8PDQz/EAwL/xAM - C/8QDAv/EAwL/xAMC/8QDAv/EAwL/xAMC/8SDg3/Eg4N/xENDP8RDQz/Eg4N/xIODf8RDQz/EAwL/xIO - Df8SDg3/Eg4N/xENDP8RDQz/EAwL/xAMC/8QDAv/EQ0M/xENDP8RDQz/EQ0M/xENDP8RDQz/EQ0M/xEN - DP8NCwr/EQ8O/wsHBv8XExL/DQgJ/wwKCv9cXFzX////AwAAAAAAAAAAtbW1SZyZmXScmZl0kpCQhJmZ - mXSYmJV3mJWVd5iVlXeYlZV3mJWVd5iVlXeYlZV3mJWVd5iVlXeXlZV7l5WVe5eVlXuYlZV3mpiYd5qY - mHeYlZV3l5WVe5eVlXuXlZV7l5WVe5eVlXuXlZV7l5WVe5iVlXeYlZV3mJWVd5iVlXeYlZV3mJWVd5iV - lXeYlZV3mJWVd5iVlXeXl5V7mZmZdJCOjoiYlZV3n5ycbba2tkYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// - /////wAA5P/5/9/nAACAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAgAAAAAABAAD7/////98AAP///////wAAKAAAADAAAAA4AAAAAQAIAAAA - AACACgAAAAAAAAAAAAAAAAAAAAAAAAMCAf8JBgX/BwgG/woLBv8GCAj/DAsK/xENDP8VEg7/FBMR/xkV - FP8aGBP/ExEd/x0dHP8hHRz/KB8b/x4iHP8lIhv/Hxci/ykdJ/8qHzn/JiQj/yslIv8nKCb/Kikl/yIh - K/8tIir/Kysq/zAnJP8yKSb/Mi0s/y4yLf8xMif/OTAm/zMyLf85Myz/PTwt/yUjN/8uLTP/Jyk6/ywu - OP8yKzP/NCs6/y4wO/80MzL/OjQz/zw5Nf8yMzv/PDU7/zU7Ov87Ojn/Qjo0/0AyPf9BPTv/ST88/zxA - Nf8+Qjz/Q0I1/0lBNP9EQTz/SkQ8/0xJPf9UTD3/LRpN/ywqR/85L0D/MCxP/zIzRf86OEz/QzxC/0s8 - Q/9DPEn/TTpr/0o1fP9RPHr/REJB/0pGQv9HSEb/TUlF/05CTv9NS0r/UUdH/1NMQv9STUv/W01L/09X - Rv9RU0P/WVJF/1NQTf9bU0v/VFpP/0tIU/9SRFP/U0tT/1tOU/9STlr/VVNR/1tUUv9cWFb/XFdY/1xa - Wv9gV07/ZV5P/2BUUv9iWlL/aV5U/2JcW/9qXlr/X2Be/2BiT/9qYlH/YmJb/2hhXP9MRmX/VEpo/1tY - bv9cSXT/XVd2/11iZf9mYWH/amVj/21oZf9ra2r/cGxl/3Jtav93c2z/a2hz/3Fvdf90dHP/fHZy/3Z+ - d/9+enT/d3Z4/359e/+Dd23/g3t4/3aCbP+GgXz/FxOE/xsbh/8eG4j/GBSR/x0bk/8gHYr/IR6S/wAN - of8OEq3/CRGy/x4Yvf8lEr//JCa6/z8vvf9ROYf/Rju//2NdgP93dYb/bGic/3Rzlf9hUaX/YF+7/wID - yf8QCs3/JyTe/xUU5P8OB/j/PETH/1dW3P+IeYj/hnnF/4N93P+Be+b/hISE/4uFgv+OiYb/lIuF/5KM - iv+Yj4r/lpGO/5qSi/+dnor/iZGY/5WUlP+Ylpb/l5iW/52Zlv+bmZn/oJWO/6SclP+onZb/o52a/6Kh - jP+poJf/pqGe/6uim/+wrZ7/g4ak/56Vqv+doaL/paSm/6qkof+sqaT/o6aq/6Ssq/+vqKv/tKuj/7Cr - qP+6r6v/u7Os/6assf+1rrH/tbS1/7u0sf+7tLv/wLe0/8O6s//DvLn/yL+8/8bBvv/Kwrz/4uG7/4mI - zP+bksr/vbjH/5WL4v+mquX/s7fn/8zFwf/Oycb/z8rJ/9DHxP/SysT/0MXP/9LNy//Yz8v/19TP/9vT - zf/Y3c7/y87W/9LM1//U1NT/3dbQ/9zZ0//Y0dj/29ra/+HW0v/h2dP/5Nza/+jf3P/m4tz/zczm/9LT - 6P/j2+L/3uDg/+bm5v//////AAAA/wAAAP/9/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39 - /f39/f39/f39/f39/f397sW0tbW1tLW1t7S0tLS4tbW1tbW0tLS0tLa0tri4trW0tLW0tLW1tLS1sLDH - 7v3TGgEDBwYHAwYGBgYGBgYGBgYGBgcICAkICAYIBgUGBggHBwUHBwYFBQcGBgYBGtEaDHiIiHyCiIiI - iKytra+xtbW8vLzAwMbGxsa8vLy3tbGwsLCsrqyrq4aGiKt7DBkATb+6u8C+v8DHy8vLzc7O0tTV19fZ - 5OTl5eHh2dbW1tXVzs7Oy8vLx8vLwb7HUgEAV87X1dXZ2NjZ4uXi5eXo6urv7/T19fb29/X18/Pv7+fl - 5eHZ1tbVzs7Oy8vAVwAAfvz78vLu8vLy7u7y8u7x8vD19vf19vb39fz69frw6/Dr+u7u7+vu2u3s8PT3 - dQEAhPx5FBYaFhQaGSsVGiseJVeqfICAe3x8fHt6fGUvREY4N0NKVEZPTnBaWIb8mgAAfvIxAAAAAAAA - AAAAAAAAAA1LO0tRO0s7Mjk5OSAHEQ0KGD4SEAwUEyQQEGD8mgAAgfweAAAAAmN5eSsAAAUCBgwQFw4Q - IRAcHSgdEhAjtsfExaZgvcrFz4EXKGn3fgAAefwwAAAAD3s0UmMFAAUFAmPY4tjS0tjS0MbL3XhZ+N6p - 392I+d6o4MkhGWH8eQMIee4xAAAAGUoGDVwACAQFBYT8gm5uq+J8Y2yI54Rap5OQlcKHnpGSmMIyHWf6 - ewUFefUvBV9Xd0sNFXxjYCEFBIT3x7+/zOrGsbLB5oJanZ+foJt+mJ+flJwgHW71dwUJbvI3CGMoMR0J - EB0dSl8DBjqIrIaEiISGpoaGpj1U3KGjpMOF26KipbMyKG71aQsIYe9ECFQXGxUbFRwQIVcHBxAfFycm - KiweLiUrNB06fZlyfm5NgHR0f2MsIHfyYwgRY+5KDF8tLDk0IjIsV2EaHURzl5eXcWBJl0hHWyMVKCsX - IR0OLCgoKyshLGrvXwwPT+NXLXZgaVEyOm9XYE8lLTphXF5aW1NbWlpaUjUhHiEdHSwsKCsrGiEsMnfu - Xw8WTuNjMDExT2c7O2ExMSs3JSw7O01LRUU1OTgyMiwdJSUuKSlAJy8oLS8iLHjvTxEXOuN2SjA6UldS - V2ExMSsrLU1qaGdmZW1lYF1mVjsrJYyNjYmOi46KKy0sLHjnShoeOuRgN0pMN1JNUk00MTAxK0RmZGRT - U1NWPT1XVjUsK0E/QiUuLilCLzI0MnrhSh4rMeFpOkxKSk0xMTo3LS06NjpTU1NWUT1bUDw9RTMsLS0s - MiwsMiwyNC8sLHvjMSsrLeF3RToxOjFMMTQtOjotLUtqaGxtZWlYZ2FYWFE0LS0jNC80NDQyMTQ0NXvh - KystIdnNr62wra+vsa+vra+tr7q+wMC7u7rAvru6urGxsbm1srqxurm1srm5uc3hLDFMDdP18/Xq8O/z - 7/T09PT06ur09PTw9PTq7/Pw9PTv7+rq6urq6urr6vD16vbWDVSqCHbGvMDGv8W/v7+/v7+/xsa/v7y8 - v7+/v8XAv7+/v8bGxsbGxsbGv8a8xrx2CITyYwMBCQEGBQYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYG - BgYGBgYGBQUFCAUFY/v9/dG4uLS2t7W1tbW1tbW1tbW1tbi4tbW1tbS0tbW1tbW1tbW1tbW1triuuLjR - /f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f3///////8AAOT/ - +f/f5wAAgAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAIAAAAAAAQAA+//////fAAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAACAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzAWoqKhBlpSUaZeUlGeUlJRplJSUZZeXl2OWlpZmlpaWZpaW - lmaWlpZmmJaWZpiWlmaYlpZmlpSUaZeUlGeWlpZmlpaWZpaWlmaWmJZmlpiWZpaWlmaXlJRnl5SUZ5iW - lmaYlpZmlpaWZpaWlmaYlZNolZKSaqenp0C/v78Ea2tuUSIhH8gpJCLYKyck1yomJdgnIiLWJyMi1Sgk - I9YpJSTXKicl1yonJdcpJSTXKicl1ysoJ9csKSjYLikp1yopKNcpKCfXKSgn1ygnJdcoJyTXKicn1yon - JdcpJSXXKSUl1yklJNcnIyPXKSUk1yklI9cpJSLYJCIiyGxsbFI4ODjCOTUz/1JNSP9OSET/UEtJ/1JL - Sf9VTUv/V1BO/1lSUP9cVVP/XldV/15aWP9iXVv/ZF9d/2ZiYP9pZGL/Z2Rh/2ZiYP9kYF7/YV1b/2Bc - Wv9eWlj/XFhW/1pWVP9ZVFL/V1NR/1VQTv9TTUv/UEtG/1VQS/89OTf/ODY4wyAeH/9xbGn/k4yF/5CI - gf+Ri4b/lo6J/5qSjf+elpH/oZmU/6WcmP+poJz/q6Sh/6+opf+yq6j/trCt/7qzsP+6tLH/uLKv/7Su - q/+wqqf/rqil/6uloP+oop3/pZ6a/6Gblv+emJP/m5WQ/5iRjf+Xj4j/mZGK/3Zxbv8gHh//FxMT/5WP - i/+wpp3/s6mg/7Kqo/+0rKX/uLCp/7y0rf++tq//wbmy/8W9t//Hvrv/y8K//8/Gwv/Tysb/1s3K/9jQ - zf/Vzsr/0cnG/83Fwv/Kwr//yMC6/8a+t//BubL/vLSt/7iwqf+1raf/tKyl/7Wrov+upJv/lY+K/xkV - Ff8YFRT/pqCb/8vDuv/Kwbn/zMW+/8zFv//PyML/0MnD/9HLxf/TzMb/1s/K/9rSzv/e1dH/4dnV/+Tb - 1//m3dr/6OHc/+be2//j2tj/4NfU/9zU0P/X0Mr/1c3H/8/Jw//LxL//yMG7/8W+tv/CurT/vrWu/760 - q/+cmJH/GRQU/xsbG//Nzc3/19fX/83Nzf/MzMz/zs7O/87Ozv/Ly8v/0NDQ/8zKyv/Qzs7/08/O/9/Z - 1v/h29b/4dvW/+DZ1v/e3NP/2tfZ/9zV3P/a0db/0c/M/9HQyf/V0Mr/z87N/8rLy//Rzsn/0M7C/8zJ - zf/Hx83/2tLM/8DHvP8cHBn/Hx8f/87Ozv9gYGD/MTEx/zU1Nf8xMTH/NDQ0/zo4OP8yMDD/PDo6/zs5 - Of9UUVD/iIOA/4J8d/9+eHP/f3h1/312b/97eHH/endu/25lYf9HQUf/TUdR/0pMQP9ERFD/TVFJ/05L - T/9UUVL/VU1m/1VXVv9+dnH/ycvO/yAeIP8eHh7/w8PD/zMzM/8JCQn/CAgI/wgHB/8KCQn/CwkJ/woI - CP8MCgr/CwkJ/yMgH/9UTkv/VE5J/1VPSv9RSkf/UUdD/05IQf9OSDv/RDwy/yEaG/8lHSn/ISYZ/y0h - Rf8qJSz/JyQl/y8rMP8tKD7/KSsm/1dPTv/Jx8//IR0h/x4gIP/Fxsb/Jicn/wECAv8BAgL/MC8u/0pI - SP8vLSz/BQMC/wgGBf8HBwX/GBYV/zIuKv8yLSj/NzEs/zUvLP85Ly3/OjIx/zguK/8wKB//QEA1/3t2 - eP91eXb/cGV7/1dNTv9+f3b/fXyB/2Vpbf8pKCT/U01N/8fFx/8hHiD/HR8e/8bHxv8nKSj/AAEA/wYH - Bv9RUE7/VlJR/1BOTf8HBQT/CQcG/wkKCP80MjH/gX56/4B6df98dnH/f3p3/312dP95cnP/enB0/11W - UP9kZ1//pZ7E/5OSyP+moLX/h4B//6Six/+Ylsf/l56j/zAsKv9TTU3/x8XC/yEhH/8hIiD/wcLA/yor - Kv8AAQD/CgsJ/05LSv8wLCv/UU5N/wcFBP8JCAb/CQoI/1RSUv/JxsH/npmU/5qUkP++ubb/mZSQ/4uJ - gv+noaD/ioaD/2Vncv91bNL/UVTK/5WVvv+IiY3/aWjO/1pZzP+Rk7P/NjEu/1JOTP/Hw8H/IyQe/yYm - JP++vrz/LCwq/xUVFP8jIyH/REFA/xoVFP9OSkn/IiAf/xkZGP8JCgj/YF5d/9DMyP9/e3b/gn15/8K9 - uv+Cfnj/cnJj/6Kflv+Tj43/VFJt/y8nwP8HDrH/Y2Wp/21ygP8eILf/EhK5/25ppv86NC//VFJN/8a/ - wv8jJB//IiAf/8K/vv8wLi3/QkA//09NTP9NSUj/Ih0c/1ZSUf9VU1L/Pj89/wsLCv9VVFP/yMXB/5+b - lv+gnJf/v7q3/6CZlv+Wk4f/rqeh/4iEgP9TUmj/IhzG/wgIzv9eWan/a2eD/xoZzP8NCsr/ZWKh/zgx - Kv9VVU3/xbzA/yIhI/8rJyb/vrq5/zczMv9NSUj/NDAv/zItLP8fGhj/Lyop/zIwL/9OTUz/CgsJ/zIz - Mf98e3b/f3x4/315dv98d3X/gHV3/3xzc/9/cnf/XFVP/2BjZf9GQdP/HRrk/4N/rP+BeIH/ODLY/yYp - 2v96gKT/PjYw/1VWTv/Evrr/JyQs/ycmJv+5trX/NTMy/0FCPv8sKCT/LiUh/y0kIP8rJiH/LSgl/0pG - Q/8WEw7/IiAV/zU1LP8tLzj/Li8//zk4Of81OTb/Njk6/zw6Of83Mi//TUpM/2Negv9cWXf/Z2Zl/1hY - U/9lYnr/X1p8/2RhYv86NTH/W1VS/766t/8nJyX/LCsr/7ezsv84Nzb/RUZD/zg0MP9AODL/PTUx/zs1 - MP87NzP/WVVR/ysnJP85Mjb/UkFp/0k1ev9HOW3/VE5T/0o6bv9FM2//Sjxc/0E8Nf8xMCv/OzhC/zYx - Nf8/ODT/NCwp/z01Pf87ND//PTo5/zcxLv9cVVL/ubWy/ysrKf8rKyn/sq6t/0hFRP9QUU//UU1K/09H - Qf9DOzb/VU9K/05JRv9RT03/MS8t/0E8O/9YT13/Ukdo/05GX/9XT1D/T0Fh/0s+YP9ORFX/SEI9/zAu - Kv8xMi3/Ly0n/zYvL/8yKSz/NS4x/zIuMP80MC//OTQx/19YVf+2srD/Kiop/y4tLP+vqqn/Uk9O/0ZH - Rf9MSUf/WVJM/0hAOv9bVVH/R0RB/0A+Pv83NTb/PTc4/1FMRv9NSUr/SkRL/09CR/9KQUT/R0JC/0hB - P/9COjj/Mi8u/y8xLv8yMDL/NS02/zYtOP82MTf/MjAy/zc0M/85NDH/YFlW/7ayr/8qKyn/Ly8t/6yn - pv9XVFL/Ozw6/0JAP/9bVE//TkhC/1dTT/89Ojj/NTU1/zg3OP8+Ojj/WFFJ/1ZPSv9TSkn/V0lJ/1JK - Qv9NR0L/TkZB/0M8N/8zMDD/JyVR/yonYf8oIVz/LCZe/y0pXv8rKk//OTY1/zk0Mf9gWVb/s6+s/y0t - LP8wMC3/qqWk/1lVVP8+Pjz/RENB/1RPS/9QS0f/VFFN/z47Ov82NjX/Nzc1/0RCPP9lXFX/Y1pU/19W - T/9kWE//X1ZM/1dOTv9bUk7/TEU8/zYyM/8jH2r/IiB7/x8db/8lJHH/JCNx/ycnYv86NjX/PDc0/2Fa - V/+uqqf/MDEv/zQ0MP+qo6L/VlFR/0FBQP9DQ0H/TUlH/0pFQ/9KR0T/Pz08/zo7OP86Ojj/QT09/15S - T/9dU0v/WlBI/1tOSf9ZUEP/Ukw//1VORf9KQD3/NzM0/zIvRf8vLUP/LzA6/zM1Ov8xMTn/NjU+/z06 - Of8/OTb/ZF1a/6qmpP8yMjD/NjYy/6mjoP9aU1P/RUVE/0NCQv9FQ0L/Pz08/0E/Pv8/PTz/PDs3/z4+ - OP9DQTv/W01N/1tOSf9ZUEX/VUxA/1RFTf9OSj//TkU//0Q2Pv85NTP/PDg2/zk0M/87NzP/PTky/z03 - Mv8/OTf/Ozg3/zs2M/9lXlv/qaWi/zU1NP82NjL/p6Ge/2BZWf9CQkD/PT09/z08PP9CQUH/Pz09/zw6 - OP8/Pjr/Ozk1/0ZCQf9pXVf/aWBR/2NcT/9iV1X/X1ZO/1xVUP9ZU0v/UklD/z05N/87OTH/Pjsz/z85 - Of8/ODr/RDw8/z85N/8/Ozr/Qj06/2liX/+loZ//NjY0/zg3M/+ln5v/opeU/4Z9eP+GgXn/hX95/4eB - e/+HgHr/hn95/4eAev+Gf3n/jYR//52Si/+elIv/m5GJ/5qQiv+YkIn/mJCJ/5WOh/+QiIH/iYF7/4mD - e/+LhH3/i4N+/4uDfv+MhH7/i4R9/42Hf/+OhX7/pZuX/6Sem/85NzT/PDs5/5yXlP/TycX/y8G9/8XA - uP/Iwbr/yMC5/8jAuf/IwLn/yMC5/8jAuf/Kwbr/0MfA/8/Gv//Nxb7/z8a//8zEvf/Nxb7/zcW+/8vD - vP/Jwbr/ysK7/8rCu//Kwrv/ysK7/8rCu//Jwrr/ycS8/83Dvv/Vy8j/nJeU/z8+PP9VVFP/cGxq/8G5 - t//BubX/vrmz/765tP+/ubT/v7m0/7+5tP+/ubT/v7i0/7+4tP/AubX/vriz/723sv+/ubT/vrey/7+4 - tP+/ubT/v7m0/764s/+/ubT/v7m0/7+5tP+/ubT/v7m0/765s/++ubP/wbm1/8C4tv9wbGr/VVVU/2Zm - Zqk4NjX7ZF1d/2ReXP9lYl//ZGBd/2RgXv9kYF7/ZGBe/2RgXv9lYF7/ZWFf/2RgXf9kX13/Y19d/2Rf - Xf9kYF7/ZWBe/2RgXv9kYF7/ZF9d/2VgXv9lYF7/ZWBe/2VgXv9lYF7/ZGBe/2RhXv9kXlz/Y11c/zk2 - NvtkYmKoaWlpKSkmJrolICDUKCMj1yYlJNQnIyLVJyMi1ScjItUnIyLVJyMi1ScjI9UpJiTWKCUj1Sgl - JdUoJSXVJyMj1SkmJNYoJiTWKCQj1igkI9YnIyLVJyMj1SclI9UnJSPVJyUj1SclI9UnIyPVJiYl1CYj - ItgmISPSKikpuWJiYicAAAAAs7OzLJ2aml6Tk5NomJiYX5iVlWGYlZVhmJWVYZiVlWGYlZVhlpaWYpiW - lmSXlZVjmJWVYZiVlWGXlZVjmJaWZJaTk2SWk5NkmJaWZJiVlWGYlZVhmJWVYZiVlWGYlZVhmJWVYZaW - lmKXl5dgkY6Oa5yamlu3t7crAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////+AAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAB//////////8oAAAAIAAAAEAAAAABAAgAAAAAAAAI - AAAAAAAAAAAAAAAAAAAAAAAAAQIC/wgGBf8HCQj/DAwL/xEPD/8UExP/HRoW/x0bGv8hHR3/JSAf/yQj - I/8rJiP/LCkm/ysrKv80LCb/Mi0s/zIwLv88NC//Liww/zMuM/80LDn/LzEx/zExMP81MjH/NjQy/zMx - Nf82MjT/NjU1/zgyMf84NDL/PTYx/zk2Nf89NzT/Nzg2/zw4Nf81MDn/OTc4/zo7OP89OTj/PTw6/z05 - Pf8+Pj3/QDc0/0I7Nv9BPDv/SDw//0NBPf9KQz3/KCdP/y0rTv8yL0b/My5J/zIyQP85NUf/PTlA/yok - Xf8rKVv/JyNg/yonYf8lI2n/JSNz/0E8Rf9APk7/QD5Q/0g9Vv9MP13/RDZm/0U6ZP9JPWL/Rjdt/0VD - Q/9KRUP/TEhF/0ZETP9KRUr/SklI/01KSf9LTEn/TkxK/05KTP9OTE3/UUpE/1lPRv9QREj/U01K/1hL - Sf9WUEz/W1FL/05DVf9PSVL/Vk5S/1ZMXP9UUlH/WVRT/1xZVP9XV1j/W1VY/1paWv9dWlj/XVhd/11d - XP9iVk7/YVpU/2FaWP9gXVv/ZF1a/2JdXP9mX1z/aF5Z/2VhXv9rYVv/cGZa/09GYP9QQmD/UUZo/1lX - Yv9OS3//XFl0/2FeY/9jXW7/YGBg/2diYP9jYmT/ZGRk/2llY/9taGb/aWxn/2Fhaf9ybGn/dnBv/3ly - bv97em3/bGN3/21ufP90b3L/eG9y/29ydf9xcXH/dnNz/3d1c/92dHT/enJy/3x3cv98cnT/eHZ2/3l4 - c/95eHf/fHh1/3d2f/95eHj/fHx9/4V+ef+FgHr/iYJ9/xIXuf8cGr3/KSq8/1JPgf9ZVYL/YF2f/21q - jP9ucYv/eXOD/2xtlv9yb57/XVqq/2Zhov9gYan/DQ7O/xUSy/8vKMb/JCLL/ykny/8wMMf/OTLA/0A9 - xf9KRcP/VVfJ/11by/9sa8z/d2/P/4B/gP+LhoL/kouE/5OMif+XkY3/mZGM/4qLlv+PlZ3/k5GR/5WR - kP+WlZX/mZOR/5mVkf+dlZH/mJaW/5yXlv+XmJb/mJiX/56Zlf+ZmJj/nZqa/56cnP+glpP/opqW/6Oe - m/+moZ3/qaKd/7Cmnv+HiKz/npmv/42Nuf+loaD/q6Wj/66ppv+op6j/rayr/7Oqo/+yrKr/tbGu/7qz - rf+1rrD/srGx/7Wysf+2tLL/tbK1/7W1tf+6tLD/vLi1/7m3vv+8vLz/wbev/8K6tP/Fvrn/yL+4/8bA - tv/DwLz/ycG8/5OTxP+gnMD/w8HA/8zEwf/OyMT/zcbJ/83JyP/RysX/1c3K/9bQyv/Z0s7/0dDS/93U - 0v/h2dX/49vZ/wAAAP8AAAD/AAAA//nYv7+/xca/v7/DxsbDw8G/xcXFxcbDw8bDv8O/wNj5tZKSkpCQ - kpWSkpCVlZOVlpWVlZWVlZWSlZKSlZOSlZZfDRgRHRAQGB0dHxwiHyIkIB8fGx0fHxgYGxAQHRAPXxsi - UUhIVlZXXV1mYmpqfHx7fGttaF5eXl1XXVZRViIbCXy3t7e3ubrCzM3V1dna3Nza2tXVz8/MzMK6ubq3 - gAoHttbQ2drc3Ofk6Ort8vX3+Pf08e3t6Ojc3NnZ2c+2CQrO7e3x7fLy8vb3+Pr7/Pz8/Pz6+Pj19e3s - 7Onj58EICubs3t7e4t7i3+Pm8vL19fX08fHm5OTl4uTc4+Lp4AoN5ohGS0lGT0dOTHm2tpiZmJiXgmBi - XnNoZHl3erblDQ3iKQMEBAcFAwQEClZSVlRRUVErCxQQNRQeKDUQZ+UNDd4WAAANLA0BAQIGIiIrKysq - KhEuhoWEXZKifw9d4g0N3hUAAkhcSwMCAhuTjoGTjYqHXn7v7tK27+68HV3hDQ3YFQADRhFIAwIDXOTH - udvAmdS2hbSx07uzstEfXeMNDdgYBg0uCEYMBwNk7Ji247aDzrh1rpqnoZybpite3Q0N2B8bRy8JR00n - A1bbwcHawLfPtnWqqKWgq6mfIl7aDQ/YJy4fEAkREUYFGJGLi5OPhodmf7CspKKvraMrXtoNEtQpJxAO - CwwQRgYLRj8/SklKSidQnp1/Yp6ddiJm2BAW1C4uIh4RIiJWDBpBRUNZREJAKx09KCsqPT0sHWnUFRDN - UE1WSCtRSFQYLFtycVpxRFgvEBYNEw8TExcdZ9QQFsldRkhXL1ZIKSMsSE9KU0dHLywQFRMUFCQaGxxr - zhUXxF4pRlZIViwhISZXV1RSUUhIKxMwOjc6ODEfHmvNFhDBaClGVk5WJyQhLmZlZWVlUlcvHzk8Ozs7 - OCIfa8kYIcBgLkZIR0YuIicvV2VXUlJRUi0fMjM0NDQ0JitswhgYwWdGRkYuRiknIi5VZVJSUlFRLR0i - JSIiJCsmIHzDGyG6fUxIS1BIR0hHVW9vbm5sZmZXSC8vSEhRSEhRgMEhIr7LmZmYmJiYmJe2urq6urq6 - t7eZmZmZmZmZmbbLviInuPHo5Ojo6Ojo6Ojt7ert6urp6ejo6Ojo6OTp6vG4J1B93ePc3Nzj49zc3OPj - 4+Pj49zj4+Pj4+Pj3Nzj3H1QZCZrbXltfHlufHl8bW1tbW1rfGtteXl5eXl5eW1rJmR4GxcdGB0XFxcX - HB8fHR0dHx8dHxccHR0dHRcYFxcbZHiMlYySkJWVlZWVkJCSkpCQkJCQlZWVlZWVlZKMlZV44t7Jv8jG - w8PDw8PDw8jIw8O/v8PDw8PDw8PDxr3K3uL//////////4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAH//////////ygAAAAQAAAAIAAAAAEAIAAAAAAAAAgAAAAA - AAAAAAAAAAAAAAAAAADGxsYJlJSUMJSUlDCVlZUukpKSL5eXki+Xl5IvlJSUMJeXki+Xl5cvl5eXL5SU - lDCXl5cvkpKSL5OTkzLf398IKSkp/yQeG/8cGRj/IBsZ/yIcG/8hHRz/JCAf/ygkIv8lIyL/IyAf/yAe - Hf8iHh3/IR0c/xsZGP8iHRr/Kyoq/0dDQv+jmZH/oZyX/62lnv+zq6T/ubGu/8G4tf/JwL3/y8TB/8K7 - uP+8tbL/uLGq/7Coov+po57/qZ+X/0tGRf9kYmH/08/L/9PQzf/Rzsz/2NPR/9vW1f/j29f/5t7b/+Xg - 3P/h2dv/2dnO/9vT1f/Rysz/09C1/87Fwv9YWlr/eXl5/xcXF/8aGhr/GhkZ/xwaGv8fHR3/ZmBb/2Nc - Wf9iXVb/aWJX/zQvN/8zNTX/P0I0/0EzRv9FPzn/d3WG/3J0c/8AAAD/CQoK/2ZkY/8FAwL/Dw0N/0A8 - N/9EPTr/Qjk8/z8xNv+anJ7/o6ax/6inl/+nrbf/Mykv/29tcv9pamj/AAEA/yUmJP8mIiH/ExEQ/woK - Cv+Lh4L/j4qH/2hkYf/Qx8//joPJ/zQ2v/9ubcD/TUDC/zIsLP9wa2r/ZWJh/xMQD/9LSEf/JiEg/0lH - Rv8LCwv/lpOO/5WQjf+PhIv/oJCg/4V5vP8rLsn/b2vH/0Q80f8zLS3/ZV5e/1pXWP8WFxX/NSwp/zAq - Jf9BPTr/JCAZ/zgxS/88OUr/PzpV/0ZAQv9XVVv/WldZ/2BbXf9dW1r/NzAt/1hWVf9QTEv/OTo4/2Jb - WP9GQDv/VFBP/zk2NP9TTk//UUpP/05FU/9RSUn/Li4u/zAtK/8xKi//Liwr/z43NP9QTk3/REA//0FA - P/9PS0r/VE9K/zs5OP84ODH/ZFpT/2BXT/9ZUE7/VU5F/y4rM/8jH4f/IBx9/zUzMv87NDH/R0VE/0A9 - Of9BPz7/QkA//0NBPv88Ozj/OTs1/1pNSf9XTkT/UklD/1BEQ/83OTP/ODY7/zg1Nf88Ojn/Pjc0/z48 - O/83NDD/ZV5b/2FeW/9fXFn/YV1Y/1xYVv+Dd27/e3Nr/3pya/92bmb/XVlW/2JcV/9kXFr/YV5a/2de - Wv83NDL/Ih4d/9nPy//W08v/2NDJ/9jQyf/Vzcf/2tLM/9jRyv/X0Mn/2dLL/9fQyf/Y0Mn/2NDJ/9HO - x//WzMj/Hxsa/1FPT9wqJiX/IR8d/yIeHf8iHh3/JCAf/yMfHv8jHx7/JCAf/yMfHv8iHh3/Ix8e/yMf - Hv8gHhz/KSUj/1FRUdwAAAAAnJycLJiYmC2YmJgtmJiYLZWVlS6YmJgtmJiYLZWVlS6VlZUumJiYLZiY - mC2YmJgtlZWVLpiYmC0AAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA//8AACgAAAAQAAAAIAAAAAEACAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAA - AAAHBQX/EhMS/xMSEf8WFRT/GBcX/xgZF/8bGRn/ICEg/yUlJP8oJCD/KCYl/ysrK/8tLSz/NS4p/zEt - LP8wLi3/MTAu/zIrMv8zLzD/NS4z/zQxMf8yMTf/NzU0/zc2Nf86NTT/ODY2/zk2Nf86Njb/OTk3/zo4 - N/8/Ojb/NTI6/zg1Of88ODn/Pjk4/zw6OP8+Ojn/Pzs6/z08Ov8/Pjr/Pzk//0A7N/9BOzr/Qz88/0Q+ - PP9DQD//RUE//0ZCPP9IQj//LSpG/zIwRf89N0b/PzpN/z01Uv89N1T/JiJr/yklaP9DQUH/Q0JB/0ZB - QP9FQ0H/RkNB/0ZEQ/9GRUT/SUFD/0hDQv9NQ0D/SEVD/0lEQ/9LRUL/TEZD/09HQf9IRUT/SUVE/0pH - Rf9OSEL/SUhG/0pIR/9LSEb/TUlH/09JRv9OSkf/SUVN/0pJSP9NSEv/TEpJ/05KSP9PTEj/T0tO/1NL - Q/9SSUb/WU9G/1BMSv9TTUn/U05J/1ZNSP9cVUv/XFBM/15WT/9LQVL/UEdQ/1BMU/9SS1X/W1NS/1tV - Uf9aVlH/YVtV/2BdW/9kXlr/YF5c/2VgWv9jYl3/ZGFd/2VhXP9nYV3/ZmJf/2diXP9pYV//aGJe/2ll - Yv9oZmP/aWZl/2pnZP9qaGb/bGlo/2xqaP9ta2n/b2xs/3Rtav93b2j/cG5s/3Jvbv95cGz/fXZv/3Nu - cf9xcnD/cnNz/3Rycv91cnD/dXV1/3V0ev92dHr/gXhw/4V7cv+Fgnv/TUqf/1JOr/9fWqL/REO//1NW - u/9cWrr/Y2Sp/z48xf+FgYb/i4KB/5CIhv+Iipv/ioif/5WVlf+WlJT/l5WU/5aXlf+Xlpb/mpWS/5iW - lf+Zl5f/l5iW/5iYl/+dmpX/mZiY/5+bmf+imZH/o5uW/6WclP+noJr/pqGd/6ujnf+tpqD/rKij/66u - rv+xqaP/ta6o/7iwrP+0tLT/tra2/7u0sP+/t7T/wLq2/8O+t//Fvbj/xL+4/8W+uP/Gvrn/yb+8/8fA - uv/Iwbv/yMG+/8nAvf/LxMD/zsnA/9DMyP/Sz8v/087K/9PQzf/W0s//19LO/9rV0v/b1tH/49zY/+ff - 2//i2tz/5uDd/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/s6Ceop6ipaCipqKipJ+fsxYeIiosO0NVTUg9Li0lJRlWq6ywtLa6wMS7ubWxrq1cecrJy8zO - 0NHT0s/NyMfGb4sLBAYGCnZsamARFRczV4yIAQdNAANpaGhajZ2ZnB6JhwUOGAIMsq+QqpOVl5YsioMZ - OQ4/CKijm5qRmJKUL4Z/HA0NKwk1NDYoUlhUZUGCfVNdS0obZmRjQBASExRFfnlMUV4dI2JhX0cxNzgy - Rn16VT48JidhW1lCIB8XIVB7d4Bwc3Fyj46FgW50dXaEeGvBvL+/vcPCwMK/wMC+xW06RENERElERElJ - REREQ0E5t6SppaWkpaWkpKWlpaeguP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/NES/NESGameGenie.Designer.cs b/BizHawk.Client.EmuHawk/tools/NES/NESGameGenie.Designer.cs index cb1b7ce3e1..dce67c475b 100644 --- a/BizHawk.Client.EmuHawk/tools/NES/NESGameGenie.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/NES/NESGameGenie.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NESGameGenie)); this.GameGenieCode = new System.Windows.Forms.TextBox(); this.GameGenieCodeBox = new System.Windows.Forms.GroupBox(); this.label3 = new System.Windows.Forms.Label(); @@ -443,7 +442,7 @@ this.Controls.Add(this.GameGenieCodeBox); this.Controls.Add(this.MenuStrip); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.NESControllerIcon_MultiSize; this.MainMenuStrip = this.MenuStrip; this.MaximizeBox = false; this.MaximumSize = new System.Drawing.Size(322, 302); diff --git a/BizHawk.Client.EmuHawk/tools/NES/NESGameGenie.resx b/BizHawk.Client.EmuHawk/tools/NES/NESGameGenie.resx index 37ce107834..2d477aa0a4 100644 --- a/BizHawk.Client.EmuHawk/tools/NES/NESGameGenie.resx +++ b/BizHawk.Client.EmuHawk/tools/NES/NESGameGenie.resx @@ -120,299 +120,4 @@ 17, 17 - - - - AAABAAYAMBwAAAEAIAAIFgAAZgAAADAcAAABAAgASAoAAG4WAAAgIAAAAQAgAKgQAAC2IAAAICAAAAEA - CACoCAAAXjEAABAQAAABACAAaAQAAAY6AAAQEAAAAQAIAGgFAABuPgAAKAAAADAAAAA4AAAAAQAgAAAA - AAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADU1NQYpKSkY5aUlIGWlJKBl5WVfpSS - koGUlJSBlpaWepaWlnqWlpZ6lZWVfpWVlX6VlZV+lZWVfpWVlX6XlZV+mZeVfpmXlX6XlZV+l5WVfpaU - lIGWlJSBl5WVfpWXlX6Vl5V+lZeVfpWXlX6Xl5V+l5eVfpeXlX6Xl5V+l5WVfpeVlX6WlJSBl5WVfpeV - lX6XlZV+l5WVfpeVlX6VlZV+l5WVfpeVlX6Vk5GFlJKSgaSkpGPY2NgUAAAAALe3t0QsLCz/CAQD/w4L - B/8WEQ7/Ew4L/xQQD/8NCwr/DwoJ/xALCv8RDAv/Eg0M/xINDP8SDQz/FA8O/xUQD/8QDAv/EQ0M/xMP - Dv8TDw7/FBAP/xUREP8WEhH/FxMS/xMREP8TERD/EhAP/xIQD/8RDw7/EA4N/xAODf8PDQz/FBAP/xMP - Dv8SDg3/Eg4N/xIODf8SDg3/EQ0M/xAMC/8MCgn/Ew8O/xEMCf8UDwz/DwwI/wsHBv8tLS3/s7O3Ry0s - Lv8bGRn/bWhl/4aAe/+Gfnf/eXNu/4B5dv+FgH3/h357/4qBfv+NhIH/j4aD/5GIhf+Tiof/lo2K/5iP - jP+blpP/nJeU/5+al/+hnJn/o56b/6ahnv+oo6D/qqWi/6qlov+ppKH/p6Kf/6Wgnf+inZr/oJuY/5+a - l/+emZb/mJOQ/5eSj/+VkI3/k46L/5GMif+Qi4j/jomG/4yHhP+KhYL/hX57/395dP+Lg3z/jIaB/3Nu - a/8dGxv/KSgq/wQCAv9OSUj/qaOe/6Wck/+onZX/rKOa/6igmf+moJv/rKSd/66mn/+yqqP/tKyl/7au - p/+4sKn/u7Os/762r/++tbL/wLe0/8O6t//Gvbr/yL+8/8vCv//OxcL/0MfE/9HKx//Qycb/zcbD/8rD - wP/HwL3/xL26/8K7uP/Burf/w7u0/8G5sv++tq//u7Os/7iwqf+1rab/s6uk/7Gpov+uqKP/sami/7Ws - o/+uo5v/qaCX/62nov9STUz/BwUF/wQAAP9VUE3/tq6n/8e9s//GurD/x72z/8rBuP/Jwbr/ycG6/8zE - vf/Oxr//z8fA/8/HwP/QyMH/08vE/9XNxv/Yz8v/2tHN/9zTz//e1dH/4djU/+Pa1v/l3Nj/597a/+rh - 3f/p4Nz/597a/+Tb1//h2NT/39bS/93U0P/c08//1c3G/9TMxf/QyMH/zcW+/8rCu//Hv7j/xLy1/8K6 - s/+8tK3/v7at/7uxp/+3q6H/t62j/6ujnP9STUr/BQAB/wAAAP9tbW3/7u7u/+Li4v/c3Nz/19fX/9fX - 1//Z2dn/2tra/9zc3P/U1NT/1tbW/9zc3P/d29v/1NLS/9rY2P/d29v/3NjX/+Xg3f/m4Nv/6ePe/+nj - 3v/n4N3/5+Dd/+bk2v/k4dz/4d3j/+Tc5v/i2+D/49nf/93Y2f/Y3c7/3NnU/97Z0P/i2+L/1tfT/9LV - 0//Y0dj/3NrQ/9fUz//i4bv/0c7d/8vO1v/d1db/4tvS/+Hp2P9dYmX/BwUA/wAAAP9+fn7/6enp/2ho - aP8mJib/JiYm/ysrK/8pKSn/JiYm/yoqKv8pKSn/MjAw/yYkJP8sKir/NTMz/zEvL/8wLi7/VVFQ/4aB - fv95c27/fXdy/3lzbv9ya2j/e3Rx/3dvaP91cmr/dHJq/3FvZf99d2z/X1ZT/z01PP9BPUP/RT5L/0FE - Nf8+Qjz/OjhM/0FFP/9QVkX/QjtI/0tMSv9PQE7/TEZl/0tPUP9VT0j/hHt3/+bo6P92dYX/BAIA/wMD - A/9ycnL/3Nzc/zk5Of8AAAD/BAQE/wAAAP8BAQH/AgAA/wQCAv8CAAD/AwEB/wQCAv8CAAD/BAIC/wMB - Af8DAQH/Ih4d/0pFQv9IQj3/TEZB/09JRP9KQ0D/SEE+/0s/Pf9DOjf/RkE4/0Q+Mf9JQTT/OTAm/xkS - D/8fGiP/HxUi/xgfCv8iISv/LRpN/yUbLP8kIhr/IB0f/ygmJv8qHzn/JSM3/x4iHP8sJiH/XFRU/+Ti - 6P95dYj/BAAA/wMFBf9zdXX/4+Xl/zAyMv8AAAD/AQMD/wACAv8GCAj/W1lY/2xqaf9pZ2b/NzU0/wcF - BP8FAwL/DQsK/wcIBv8RDw//GhgX/yckIP8tKST/JiAb/yslIP80LSr/KiUi/zIpJv8yKSz/Ni4v/zQp - K/8tHyP/KyUY/zw+Kv+TlpT/q6aj/52hov+jpqr/in2N/11PUf+ioYz/rK+m/6Sjp/+mrLH/dn53/yos - Jv80KjD/YVxb/+Pi3v9vbXP/BwUE/wIDAf9tbmz/4+Ti/zk6OP8AAQD/AAEA/wMEAv8eHx3/cGxr/0E9 - PP9TT07/XVta/wgGBf8GBAP/CQcG/wsMCv8GBgb/YV9e/8bDv//KxsH/w724/7q0r/+5tLH/w767/7q0 - r/+1rrH/rKin/6+oq/++sr7/cG5k/1RaT//NzOb/mYzg/4F75v+mquX/vbjH/4iCff/S0+j/kYrl/4N9 - 3P+zt+f/pKyr/zUyLf8tIir/XVpW/+bj3v9wb2v/CQsF/xMUEv9pamj/2NnX/zk6OP8AAQD/AwQC/wME - Av8nKCb/RkFA/xINDP8gHBv/VFBP/wQCAf8VExL/BwgG/wgJB/8LCwv/fnx7/+Xi3v+Cfnn/Z2Ne/2ll - YP+KhYL/zsnG/3l2bv9dWlb/YGJP/4aFd//Ty9L/fn15/0ZIU/+GecX/Hhi9/wANof8kJrr/gYek/3aC - bP9gX7v/DhKt/wkRsv8/L73/hoak/z85NP8zLi3/YF1Z/+Td4P9wa2r/Cw4F/wkHBv9pZ2b/4d/e/zo4 - N/8NCwr/UU9O/1BOTf9oZmX/TUhH/yIdHP8qJST/cm5t/15cW/9aWFf/MTIw/wwNC/8KCgr/eXd2/+jl - 4f+sqKP/pKCb/6Sgm/+wq6j/2NPQ/6ymof+WkJH/nZ6K/7Ctnv/Qxc//fnx0/0tNVf9hUaX/BADM/wAE - xv8QCs3/bGic/3Bxb/9GO7//BAjL/wAAx/8lEr//dHOV/zkyKf8yLSr/YWJZ/+Xb4f9nYWL/CgwM/xkV - FP9jX17/3dnY/0I+Pf8YFBP/YFxb/zMvLv87Nzb/MCsq/xwXFv8lIB//My8u/y8tLP9APj3/U1RS/wkK - CP8NDQ3/QUJA/39+ev+Kh4L/hIB7/4J+ef+GgX7/gHt4/4R4eP+LfYj/f3Zy/4V5ef+EcYT/U1BB/09X - Rv+bksr/JyTe/w4H+P88RMf/npWq/4N3bf+JiMz/GRLl/xEW4/9XVtz/iZGY/0M6MP80LTD/YGRZ/+Xf - 2v9lXV3/ExEd/xYWFv9aWFj/2dXU/0E/Pv8SExH/UFFN/ysoJP8wJyT/LSQg/y8mIv8rJSD/LCYh/ykk - If84MzD/UUxJ/xYTD/8bGBD/IyIU/zMzJ/8oKyn/Jyo4/ycoPP8uLzn/NzU0/y40L/81Ozr/MDQ1/zU1 - Nf8+Ozf/Mi0q/0E8Pf9vbXP/Y12A/1tYbv9xb3X/YWJZ/0tMQ/93dnj/ZGBz/11Xdv93dXT/XFhX/zw3 - NP82Lyz/aWJf/+Db2P9aWFf/FhcV/x4eHv9cV1j/1dHQ/0NBQP8dHhz/VVZS/zs4NP8+NTL/Rz84/0Q7 - N/86NC//QTs2/zk0Mf9ST0v/YF1Z/y8rKv8zLyr/QzlF/1xJdP9VPIb/UDeN/0w5fv9USmj/XllW/1E8 - ev9QOYP/SDF7/006a/9USlb/Pzwu/yopH/8wLzP/My81/yolJ/82Lyz/Ny4q/ygfG/87MDL/MSkw/zEp - NP80MjH/NjIx/zUwLf86MzD/aGFe/9nU0f9XVVT/Hh8d/x4fHf9RTUz/0c3M/1ZSUf85Ojj/X2Be/1lW - Uv9lXlv/TkY//0Q8Nf9GQDv/aWNe/1RPTP9YVFP/SUdG/zAuLf87ODT/RkI9/1lVUP9VUFL/Uk5a/05K - Vv9STFH/V05K/09EVP9QRlf/SkJT/01FT/9UTEz/R0E8/zQxLf8uLi7/MjYq/zAxJ/8wLSn/OTI1/zct - M/8yKy7/NzIz/zQyMf8tKyr/NjIx/zo1Mv8/ODX/bWZj/9jT0P9RT07/HR4c/ygpJ/9LR0b/z8rJ/15a - Wf85Ojj/Ozw6/zw6Of9PSkn/ZFxV/01FPv9HQTz/XVhV/z47N/87OTj/NTU1/z4+Pv8xKjf/OzQ3/01H - QP9JRDv/SkZB/0dAQ/9KPUX/SzpD/0c/OP9GQjf/Q0I0/0M/NP9COTX/OjIz/zMuL/8wMS//Li8z/zUy - O/80LTr/NCo7/zkvQP8xKjf/OjU+/zEvNf86ODf/Ozc2/zgzMP86MzD/bWZj/9nU0f9OTEv/ICEf/ygp - J/9DPz7/zcjH/2NeXf9DQUD/Ozw6/0JAP/9QTEv/WVNO/1JMR/9WUk3/WVZS/z87Ov87OTj/MzMz/zU1 - Nf85OjH/S0k//2hhWP9oXlf/Zl1Z/2FZUv9kW1H/aV5Q/2RZUf9cUlL/WU5W/15TVv9YUUj/SkQ5/zg0 - M/8uKzT/GBSR/x0bk/8hHpL/FxOE/yAdiv8eG4j/IR6L/xsbh/81MzL/OjY1/zs2M/88NTL/bWZj/9PO - y/9HRUT/KSoo/y8wLP9DQDz/zcXF/11YV/9APj3/QUJA/0NEQv9EQD//U05L/0xHRP9OS0f/TElF/0A+ - Pf89Ozr/Ojs5/zs8Ov81NDb/RT9A/2BUUv9eUkz/XlVM/1tSSf9aT0v/Xk9N/1xVQv9VTj3/U01A/1hS - R/9XTkX/SD87/zkzNP8zMjb/MCxP/ywqR/8yM0f/Ky04/zI1Pf8wMzv/LjA7/zMzQ/87OTj/Pzs6/0A7 - OP9AOTb/cGlm/8/Kx/9APj3/LS4s/zM0MP8/PDj/zcbD/2JaWv9CQD//R0hG/0RERP9CQED/R0VE/0A+ - Pf89Ozr/Q0FA/0E/Pv88Ozf/PDs3/z8+Ov88QDX/RkI9/1tNTv9ZSkj/W09J/1lQRv9WTkH/VEs+/1VD - UP9RR0f/TUo8/05HPv9MPkL/QDI9/zkzNP86PjL/PTY5/zgyM/89ODX/Ozcy/z06Mv89NzL/PTcy/0A5 - Nv89Ozr/Ozc2/zo1Mv8+NzT/cmto/87Jxv89Ozr/MzQy/zY3M/85NjL/zMXC/2piYv9HQ0L/QUJA/zs7 - O/9EQkL/Ojo6/0RERP89PT3/QD49/zs5OP9APzv/QD87/z06Nf84ODj/S0ZF/2peWv9rX1X/amJR/2Ve - T/9iW1L/ZFhY/2BXTv9hWVL/XFZR/1pUTf9dVEv/UEhB/z86N/86ODj/PDov/z89M/8/Ojf/QDo7/z84 - O/9COjv/Rj4+/0A5Nv8+PDv/QDw7/0I9Ov9GPzz/dm9s/8rFwv84NjX/Njc1/zs6Nv80MS3/ysPA/7qv - q/+Xi4X/loyF/5mSif+TjoX/mJCJ/5iQif+YkIn/mJCJ/5iQif+YkIn/mJCJ/5iQif+Zj4j/oJaP/6ie - l/+roZr/qqCZ/6iel/+nnZb/qJ6X/6ael/+mnpf/pp6X/6Sclf+impP/npaP/5uTjP+ZkYr/nZWO/52V - jv+dlY7/nZWO/52Vjv+dlY7/nZWO/52Vjv+cl47/oJmQ/6CWj/+glI7/uq+r/8nCv/82My//Ozo2/0ZH - Rf8lISD/wLu4/+Pa1//h1tL/5dzY/9rUzf/e29P/39fQ/9/X0P/f19D/39fQ/9/X0P/f19D/39fQ/9/X - 0P/c1M3/39fQ/+La0//i2tP/4NjR/9/X0P/g2NH/4trT/97Wz//f19D/4NjR/+HZ0v/h2dL/4NjR/9/X - 0P/f19D/39fQ/9/X0P/f19D/39fQ/9/X0P/f19D/39fQ/9/X0P/Y1c3/39nS/+Tb1//d0s7/6N/c/8G8 - uf8hHRz/TU5M/4SEhP8RDw7/ZmJh/6mhof+mn5z/pp+c/6qmof+in5r/p6Kf/6ein/+nop//p6Kf/6ei - n/+nop//p6Kf/6ein/+nop//p6Kf/6ahnv+loJ3/pJ+c/6Oem/+loJ3/pqGe/6Wgnf+loJ3/pqGe/6ah - nv+moZ7/p6Kf/6ahnv+moZ7/p6Kf/6ein/+nop//p6Kf/6ein/+nop//p6Kf/6ein/+mo57/pqKd/6eg - nf+qo6D/o5ub/2RgX/8VExL/f39//9ra2gdcXFzXCQcH/wkEBf8ZFRT/DQkI/xAODf8PDQz/EAwL/xAM - C/8QDAv/EAwL/xAMC/8QDAv/EAwL/xAMC/8SDg3/Eg4N/xENDP8RDQz/Eg4N/xIODf8RDQz/EAwL/xIO - Df8SDg3/Eg4N/xENDP8RDQz/EAwL/xAMC/8QDAv/EQ0M/xENDP8RDQz/EQ0M/xENDP8RDQz/EQ0M/xEN - DP8NCwr/EQ8O/wsHBv8XExL/DQgJ/wwKCv9cXFzX////AwAAAAAAAAAAtbW1SZyZmXScmZl0kpCQhJmZ - mXSYmJV3mJWVd5iVlXeYlZV3mJWVd5iVlXeYlZV3mJWVd5iVlXeXlZV7l5WVe5eVlXuYlZV3mpiYd5qY - mHeYlZV3l5WVe5eVlXuXlZV7l5WVe5eVlXuXlZV7l5WVe5iVlXeYlZV3mJWVd5iVlXeYlZV3mJWVd5iV - lXeYlZV3mJWVd5iVlXeXl5V7mZmZdJCOjoiYlZV3n5ycbba2tkYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// - /////wAA5P/5/9/nAACAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAgAAAAAABAAD7/////98AAP///////wAAKAAAADAAAAA4AAAAAQAIAAAA - AACACgAAAAAAAAAAAAAAAAAAAAAAAAMCAf8JBgX/BwgG/woLBv8GCAj/DAsK/xENDP8VEg7/FBMR/xkV - FP8aGBP/ExEd/x0dHP8hHRz/KB8b/x4iHP8lIhv/Hxci/ykdJ/8qHzn/JiQj/yslIv8nKCb/Kikl/yIh - K/8tIir/Kysq/zAnJP8yKSb/Mi0s/y4yLf8xMif/OTAm/zMyLf85Myz/PTwt/yUjN/8uLTP/Jyk6/ywu - OP8yKzP/NCs6/y4wO/80MzL/OjQz/zw5Nf8yMzv/PDU7/zU7Ov87Ojn/Qjo0/0AyPf9BPTv/ST88/zxA - Nf8+Qjz/Q0I1/0lBNP9EQTz/SkQ8/0xJPf9UTD3/LRpN/ywqR/85L0D/MCxP/zIzRf86OEz/QzxC/0s8 - Q/9DPEn/TTpr/0o1fP9RPHr/REJB/0pGQv9HSEb/TUlF/05CTv9NS0r/UUdH/1NMQv9STUv/W01L/09X - Rv9RU0P/WVJF/1NQTf9bU0v/VFpP/0tIU/9SRFP/U0tT/1tOU/9STlr/VVNR/1tUUv9cWFb/XFdY/1xa - Wv9gV07/ZV5P/2BUUv9iWlL/aV5U/2JcW/9qXlr/X2Be/2BiT/9qYlH/YmJb/2hhXP9MRmX/VEpo/1tY - bv9cSXT/XVd2/11iZf9mYWH/amVj/21oZf9ra2r/cGxl/3Jtav93c2z/a2hz/3Fvdf90dHP/fHZy/3Z+ - d/9+enT/d3Z4/359e/+Dd23/g3t4/3aCbP+GgXz/FxOE/xsbh/8eG4j/GBSR/x0bk/8gHYr/IR6S/wAN - of8OEq3/CRGy/x4Yvf8lEr//JCa6/z8vvf9ROYf/Rju//2NdgP93dYb/bGic/3Rzlf9hUaX/YF+7/wID - yf8QCs3/JyTe/xUU5P8OB/j/PETH/1dW3P+IeYj/hnnF/4N93P+Be+b/hISE/4uFgv+OiYb/lIuF/5KM - iv+Yj4r/lpGO/5qSi/+dnor/iZGY/5WUlP+Ylpb/l5iW/52Zlv+bmZn/oJWO/6SclP+onZb/o52a/6Kh - jP+poJf/pqGe/6uim/+wrZ7/g4ak/56Vqv+doaL/paSm/6qkof+sqaT/o6aq/6Ssq/+vqKv/tKuj/7Cr - qP+6r6v/u7Os/6assf+1rrH/tbS1/7u0sf+7tLv/wLe0/8O6s//DvLn/yL+8/8bBvv/Kwrz/4uG7/4mI - zP+bksr/vbjH/5WL4v+mquX/s7fn/8zFwf/Oycb/z8rJ/9DHxP/SysT/0MXP/9LNy//Yz8v/19TP/9vT - zf/Y3c7/y87W/9LM1//U1NT/3dbQ/9zZ0//Y0dj/29ra/+HW0v/h2dP/5Nza/+jf3P/m4tz/zczm/9LT - 6P/j2+L/3uDg/+bm5v//////AAAA/wAAAP/9/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39 - /f39/f39/f39/f39/f397sW0tbW1tLW1t7S0tLS4tbW1tbW0tLS0tLa0tri4trW0tLW0tLW1tLS1sLDH - 7v3TGgEDBwYHAwYGBgYGBgYGBgYGBgcICAkICAYIBgUGBggHBwUHBwYFBQcGBgYBGtEaDHiIiHyCiIiI - iKytra+xtbW8vLzAwMbGxsa8vLy3tbGwsLCsrqyrq4aGiKt7DBkATb+6u8C+v8DHy8vLzc7O0tTV19fZ - 5OTl5eHh2dbW1tXVzs7Oy8vLx8vLwb7HUgEAV87X1dXZ2NjZ4uXi5eXo6urv7/T19fb29/X18/Pv7+fl - 5eHZ1tbVzs7Oy8vAVwAAfvz78vLu8vLy7u7y8u7x8vD19vf19vb39fz69frw6/Dr+u7u7+vu2u3s8PT3 - dQEAhPx5FBYaFhQaGSsVGiseJVeqfICAe3x8fHt6fGUvREY4N0NKVEZPTnBaWIb8mgAAfvIxAAAAAAAA - AAAAAAAAAA1LO0tRO0s7Mjk5OSAHEQ0KGD4SEAwUEyQQEGD8mgAAgfweAAAAAmN5eSsAAAUCBgwQFw4Q - IRAcHSgdEhAjtsfExaZgvcrFz4EXKGn3fgAAefwwAAAAD3s0UmMFAAUFAmPY4tjS0tjS0MbL3XhZ+N6p - 392I+d6o4MkhGWH8eQMIee4xAAAAGUoGDVwACAQFBYT8gm5uq+J8Y2yI54Rap5OQlcKHnpGSmMIyHWf6 - ewUFefUvBV9Xd0sNFXxjYCEFBIT3x7+/zOrGsbLB5oJanZ+foJt+mJ+flJwgHW71dwUJbvI3CGMoMR0J - EB0dSl8DBjqIrIaEiISGpoaGpj1U3KGjpMOF26KipbMyKG71aQsIYe9ECFQXGxUbFRwQIVcHBxAfFycm - KiweLiUrNB06fZlyfm5NgHR0f2MsIHfyYwgRY+5KDF8tLDk0IjIsV2EaHURzl5eXcWBJl0hHWyMVKCsX - IR0OLCgoKyshLGrvXwwPT+NXLXZgaVEyOm9XYE8lLTphXF5aW1NbWlpaUjUhHiEdHSwsKCsrGiEsMnfu - Xw8WTuNjMDExT2c7O2ExMSs3JSw7O01LRUU1OTgyMiwdJSUuKSlAJy8oLS8iLHjvTxEXOuN2SjA6UldS - V2ExMSsrLU1qaGdmZW1lYF1mVjsrJYyNjYmOi46KKy0sLHjnShoeOuRgN0pMN1JNUk00MTAxK0RmZGRT - U1NWPT1XVjUsK0E/QiUuLilCLzI0MnrhSh4rMeFpOkxKSk0xMTo3LS06NjpTU1NWUT1bUDw9RTMsLS0s - MiwsMiwyNC8sLHvjMSsrLeF3RToxOjFMMTQtOjotLUtqaGxtZWlYZ2FYWFE0LS0jNC80NDQyMTQ0NXvh - KystIdnNr62wra+vsa+vra+tr7q+wMC7u7rAvru6urGxsbm1srqxurm1srm5uc3hLDFMDdP18/Xq8O/z - 7/T09PT06ur09PTw9PTq7/Pw9PTv7+rq6urq6urr6vD16vbWDVSqCHbGvMDGv8W/v7+/v7+/xsa/v7y8 - v7+/v8XAv7+/v8bGxsbGxsbGv8a8xrx2CITyYwMBCQEGBQYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYG - BgYGBgYGBQUFCAUFY/v9/dG4uLS2t7W1tbW1tbW1tbW1tbi4tbW1tbS0tbW1tbW1tbW1tbW1triuuLjR - /f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f3///////8AAOT/ - +f/f5wAAgAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAIAAAAAAAQAA+//////fAAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAACAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzAWoqKhBlpSUaZeUlGeUlJRplJSUZZeXl2OWlpZmlpaWZpaW - lmaWlpZmmJaWZpiWlmaYlpZmlpSUaZeUlGeWlpZmlpaWZpaWlmaWmJZmlpiWZpaWlmaXlJRnl5SUZ5iW - lmaYlpZmlpaWZpaWlmaYlZNolZKSaqenp0C/v78Ea2tuUSIhH8gpJCLYKyck1yomJdgnIiLWJyMi1Sgk - I9YpJSTXKicl1yonJdcpJSTXKicl1ysoJ9csKSjYLikp1yopKNcpKCfXKSgn1ygnJdcoJyTXKicn1yon - JdcpJSXXKSUl1yklJNcnIyPXKSUk1yklI9cpJSLYJCIiyGxsbFI4ODjCOTUz/1JNSP9OSET/UEtJ/1JL - Sf9VTUv/V1BO/1lSUP9cVVP/XldV/15aWP9iXVv/ZF9d/2ZiYP9pZGL/Z2Rh/2ZiYP9kYF7/YV1b/2Bc - Wv9eWlj/XFhW/1pWVP9ZVFL/V1NR/1VQTv9TTUv/UEtG/1VQS/89OTf/ODY4wyAeH/9xbGn/k4yF/5CI - gf+Ri4b/lo6J/5qSjf+elpH/oZmU/6WcmP+poJz/q6Sh/6+opf+yq6j/trCt/7qzsP+6tLH/uLKv/7Su - q/+wqqf/rqil/6uloP+oop3/pZ6a/6Gblv+emJP/m5WQ/5iRjf+Xj4j/mZGK/3Zxbv8gHh//FxMT/5WP - i/+wpp3/s6mg/7Kqo/+0rKX/uLCp/7y0rf++tq//wbmy/8W9t//Hvrv/y8K//8/Gwv/Tysb/1s3K/9jQ - zf/Vzsr/0cnG/83Fwv/Kwr//yMC6/8a+t//BubL/vLSt/7iwqf+1raf/tKyl/7Wrov+upJv/lY+K/xkV - Ff8YFRT/pqCb/8vDuv/Kwbn/zMW+/8zFv//PyML/0MnD/9HLxf/TzMb/1s/K/9rSzv/e1dH/4dnV/+Tb - 1//m3dr/6OHc/+be2//j2tj/4NfU/9zU0P/X0Mr/1c3H/8/Jw//LxL//yMG7/8W+tv/CurT/vrWu/760 - q/+cmJH/GRQU/xsbG//Nzc3/19fX/83Nzf/MzMz/zs7O/87Ozv/Ly8v/0NDQ/8zKyv/Qzs7/08/O/9/Z - 1v/h29b/4dvW/+DZ1v/e3NP/2tfZ/9zV3P/a0db/0c/M/9HQyf/V0Mr/z87N/8rLy//Rzsn/0M7C/8zJ - zf/Hx83/2tLM/8DHvP8cHBn/Hx8f/87Ozv9gYGD/MTEx/zU1Nf8xMTH/NDQ0/zo4OP8yMDD/PDo6/zs5 - Of9UUVD/iIOA/4J8d/9+eHP/f3h1/312b/97eHH/endu/25lYf9HQUf/TUdR/0pMQP9ERFD/TVFJ/05L - T/9UUVL/VU1m/1VXVv9+dnH/ycvO/yAeIP8eHh7/w8PD/zMzM/8JCQn/CAgI/wgHB/8KCQn/CwkJ/woI - CP8MCgr/CwkJ/yMgH/9UTkv/VE5J/1VPSv9RSkf/UUdD/05IQf9OSDv/RDwy/yEaG/8lHSn/ISYZ/y0h - Rf8qJSz/JyQl/y8rMP8tKD7/KSsm/1dPTv/Jx8//IR0h/x4gIP/Fxsb/Jicn/wECAv8BAgL/MC8u/0pI - SP8vLSz/BQMC/wgGBf8HBwX/GBYV/zIuKv8yLSj/NzEs/zUvLP85Ly3/OjIx/zguK/8wKB//QEA1/3t2 - eP91eXb/cGV7/1dNTv9+f3b/fXyB/2Vpbf8pKCT/U01N/8fFx/8hHiD/HR8e/8bHxv8nKSj/AAEA/wYH - Bv9RUE7/VlJR/1BOTf8HBQT/CQcG/wkKCP80MjH/gX56/4B6df98dnH/f3p3/312dP95cnP/enB0/11W - UP9kZ1//pZ7E/5OSyP+moLX/h4B//6Six/+Ylsf/l56j/zAsKv9TTU3/x8XC/yEhH/8hIiD/wcLA/yor - Kv8AAQD/CgsJ/05LSv8wLCv/UU5N/wcFBP8JCAb/CQoI/1RSUv/JxsH/npmU/5qUkP++ubb/mZSQ/4uJ - gv+noaD/ioaD/2Vncv91bNL/UVTK/5WVvv+IiY3/aWjO/1pZzP+Rk7P/NjEu/1JOTP/Hw8H/IyQe/yYm - JP++vrz/LCwq/xUVFP8jIyH/REFA/xoVFP9OSkn/IiAf/xkZGP8JCgj/YF5d/9DMyP9/e3b/gn15/8K9 - uv+Cfnj/cnJj/6Kflv+Tj43/VFJt/y8nwP8HDrH/Y2Wp/21ygP8eILf/EhK5/25ppv86NC//VFJN/8a/ - wv8jJB//IiAf/8K/vv8wLi3/QkA//09NTP9NSUj/Ih0c/1ZSUf9VU1L/Pj89/wsLCv9VVFP/yMXB/5+b - lv+gnJf/v7q3/6CZlv+Wk4f/rqeh/4iEgP9TUmj/IhzG/wgIzv9eWan/a2eD/xoZzP8NCsr/ZWKh/zgx - Kv9VVU3/xbzA/yIhI/8rJyb/vrq5/zczMv9NSUj/NDAv/zItLP8fGhj/Lyop/zIwL/9OTUz/CgsJ/zIz - Mf98e3b/f3x4/315dv98d3X/gHV3/3xzc/9/cnf/XFVP/2BjZf9GQdP/HRrk/4N/rP+BeIH/ODLY/yYp - 2v96gKT/PjYw/1VWTv/Evrr/JyQs/ycmJv+5trX/NTMy/0FCPv8sKCT/LiUh/y0kIP8rJiH/LSgl/0pG - Q/8WEw7/IiAV/zU1LP8tLzj/Li8//zk4Of81OTb/Njk6/zw6Of83Mi//TUpM/2Negv9cWXf/Z2Zl/1hY - U/9lYnr/X1p8/2RhYv86NTH/W1VS/766t/8nJyX/LCsr/7ezsv84Nzb/RUZD/zg0MP9AODL/PTUx/zs1 - MP87NzP/WVVR/ysnJP85Mjb/UkFp/0k1ev9HOW3/VE5T/0o6bv9FM2//Sjxc/0E8Nf8xMCv/OzhC/zYx - Nf8/ODT/NCwp/z01Pf87ND//PTo5/zcxLv9cVVL/ubWy/ysrKf8rKyn/sq6t/0hFRP9QUU//UU1K/09H - Qf9DOzb/VU9K/05JRv9RT03/MS8t/0E8O/9YT13/Ukdo/05GX/9XT1D/T0Fh/0s+YP9ORFX/SEI9/zAu - Kv8xMi3/Ly0n/zYvL/8yKSz/NS4x/zIuMP80MC//OTQx/19YVf+2srD/Kiop/y4tLP+vqqn/Uk9O/0ZH - Rf9MSUf/WVJM/0hAOv9bVVH/R0RB/0A+Pv83NTb/PTc4/1FMRv9NSUr/SkRL/09CR/9KQUT/R0JC/0hB - P/9COjj/Mi8u/y8xLv8yMDL/NS02/zYtOP82MTf/MjAy/zc0M/85NDH/YFlW/7ayr/8qKyn/Ly8t/6yn - pv9XVFL/Ozw6/0JAP/9bVE//TkhC/1dTT/89Ojj/NTU1/zg3OP8+Ojj/WFFJ/1ZPSv9TSkn/V0lJ/1JK - Qv9NR0L/TkZB/0M8N/8zMDD/JyVR/yonYf8oIVz/LCZe/y0pXv8rKk//OTY1/zk0Mf9gWVb/s6+s/y0t - LP8wMC3/qqWk/1lVVP8+Pjz/RENB/1RPS/9QS0f/VFFN/z47Ov82NjX/Nzc1/0RCPP9lXFX/Y1pU/19W - T/9kWE//X1ZM/1dOTv9bUk7/TEU8/zYyM/8jH2r/IiB7/x8db/8lJHH/JCNx/ycnYv86NjX/PDc0/2Fa - V/+uqqf/MDEv/zQ0MP+qo6L/VlFR/0FBQP9DQ0H/TUlH/0pFQ/9KR0T/Pz08/zo7OP86Ojj/QT09/15S - T/9dU0v/WlBI/1tOSf9ZUEP/Ukw//1VORf9KQD3/NzM0/zIvRf8vLUP/LzA6/zM1Ov8xMTn/NjU+/z06 - Of8/OTb/ZF1a/6qmpP8yMjD/NjYy/6mjoP9aU1P/RUVE/0NCQv9FQ0L/Pz08/0E/Pv8/PTz/PDs3/z4+ - OP9DQTv/W01N/1tOSf9ZUEX/VUxA/1RFTf9OSj//TkU//0Q2Pv85NTP/PDg2/zk0M/87NzP/PTky/z03 - Mv8/OTf/Ozg3/zs2M/9lXlv/qaWi/zU1NP82NjL/p6Ge/2BZWf9CQkD/PT09/z08PP9CQUH/Pz09/zw6 - OP8/Pjr/Ozk1/0ZCQf9pXVf/aWBR/2NcT/9iV1X/X1ZO/1xVUP9ZU0v/UklD/z05N/87OTH/Pjsz/z85 - Of8/ODr/RDw8/z85N/8/Ozr/Qj06/2liX/+loZ//NjY0/zg3M/+ln5v/opeU/4Z9eP+GgXn/hX95/4eB - e/+HgHr/hn95/4eAev+Gf3n/jYR//52Si/+elIv/m5GJ/5qQiv+YkIn/mJCJ/5WOh/+QiIH/iYF7/4mD - e/+LhH3/i4N+/4uDfv+MhH7/i4R9/42Hf/+OhX7/pZuX/6Sem/85NzT/PDs5/5yXlP/TycX/y8G9/8XA - uP/Iwbr/yMC5/8jAuf/IwLn/yMC5/8jAuf/Kwbr/0MfA/8/Gv//Nxb7/z8a//8zEvf/Nxb7/zcW+/8vD - vP/Jwbr/ysK7/8rCu//Kwrv/ysK7/8rCu//Jwrr/ycS8/83Dvv/Vy8j/nJeU/z8+PP9VVFP/cGxq/8G5 - t//BubX/vrmz/765tP+/ubT/v7m0/7+5tP+/ubT/v7i0/7+4tP/AubX/vriz/723sv+/ubT/vrey/7+4 - tP+/ubT/v7m0/764s/+/ubT/v7m0/7+5tP+/ubT/v7m0/765s/++ubP/wbm1/8C4tv9wbGr/VVVU/2Zm - Zqk4NjX7ZF1d/2ReXP9lYl//ZGBd/2RgXv9kYF7/ZGBe/2RgXv9lYF7/ZWFf/2RgXf9kX13/Y19d/2Rf - Xf9kYF7/ZWBe/2RgXv9kYF7/ZF9d/2VgXv9lYF7/ZWBe/2VgXv9lYF7/ZGBe/2RhXv9kXlz/Y11c/zk2 - NvtkYmKoaWlpKSkmJrolICDUKCMj1yYlJNQnIyLVJyMi1ScjItUnIyLVJyMi1ScjI9UpJiTWKCUj1Sgl - JdUoJSXVJyMj1SkmJNYoJiTWKCQj1igkI9YnIyLVJyMj1SclI9UnJSPVJyUj1SclI9UnIyPVJiYl1CYj - ItgmISPSKikpuWJiYicAAAAAs7OzLJ2aml6Tk5NomJiYX5iVlWGYlZVhmJWVYZiVlWGYlZVhlpaWYpiW - lmSXlZVjmJWVYZiVlWGXlZVjmJaWZJaTk2SWk5NkmJaWZJiVlWGYlZVhmJWVYZiVlWGYlZVhmJWVYZaW - lmKXl5dgkY6Oa5yamlu3t7crAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////+AAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAB//////////8oAAAAIAAAAEAAAAABAAgAAAAAAAAI - AAAAAAAAAAAAAAAAAAAAAAAAAQIC/wgGBf8HCQj/DAwL/xEPD/8UExP/HRoW/x0bGv8hHR3/JSAf/yQj - I/8rJiP/LCkm/ysrKv80LCb/Mi0s/zIwLv88NC//Liww/zMuM/80LDn/LzEx/zExMP81MjH/NjQy/zMx - Nf82MjT/NjU1/zgyMf84NDL/PTYx/zk2Nf89NzT/Nzg2/zw4Nf81MDn/OTc4/zo7OP89OTj/PTw6/z05 - Pf8+Pj3/QDc0/0I7Nv9BPDv/SDw//0NBPf9KQz3/KCdP/y0rTv8yL0b/My5J/zIyQP85NUf/PTlA/yok - Xf8rKVv/JyNg/yonYf8lI2n/JSNz/0E8Rf9APk7/QD5Q/0g9Vv9MP13/RDZm/0U6ZP9JPWL/Rjdt/0VD - Q/9KRUP/TEhF/0ZETP9KRUr/SklI/01KSf9LTEn/TkxK/05KTP9OTE3/UUpE/1lPRv9QREj/U01K/1hL - Sf9WUEz/W1FL/05DVf9PSVL/Vk5S/1ZMXP9UUlH/WVRT/1xZVP9XV1j/W1VY/1paWv9dWlj/XVhd/11d - XP9iVk7/YVpU/2FaWP9gXVv/ZF1a/2JdXP9mX1z/aF5Z/2VhXv9rYVv/cGZa/09GYP9QQmD/UUZo/1lX - Yv9OS3//XFl0/2FeY/9jXW7/YGBg/2diYP9jYmT/ZGRk/2llY/9taGb/aWxn/2Fhaf9ybGn/dnBv/3ly - bv97em3/bGN3/21ufP90b3L/eG9y/29ydf9xcXH/dnNz/3d1c/92dHT/enJy/3x3cv98cnT/eHZ2/3l4 - c/95eHf/fHh1/3d2f/95eHj/fHx9/4V+ef+FgHr/iYJ9/xIXuf8cGr3/KSq8/1JPgf9ZVYL/YF2f/21q - jP9ucYv/eXOD/2xtlv9yb57/XVqq/2Zhov9gYan/DQ7O/xUSy/8vKMb/JCLL/ykny/8wMMf/OTLA/0A9 - xf9KRcP/VVfJ/11by/9sa8z/d2/P/4B/gP+LhoL/kouE/5OMif+XkY3/mZGM/4qLlv+PlZ3/k5GR/5WR - kP+WlZX/mZOR/5mVkf+dlZH/mJaW/5yXlv+XmJb/mJiX/56Zlf+ZmJj/nZqa/56cnP+glpP/opqW/6Oe - m/+moZ3/qaKd/7Cmnv+HiKz/npmv/42Nuf+loaD/q6Wj/66ppv+op6j/rayr/7Oqo/+yrKr/tbGu/7qz - rf+1rrD/srGx/7Wysf+2tLL/tbK1/7W1tf+6tLD/vLi1/7m3vv+8vLz/wbev/8K6tP/Fvrn/yL+4/8bA - tv/DwLz/ycG8/5OTxP+gnMD/w8HA/8zEwf/OyMT/zcbJ/83JyP/RysX/1c3K/9bQyv/Z0s7/0dDS/93U - 0v/h2dX/49vZ/wAAAP8AAAD/AAAA//nYv7+/xca/v7/DxsbDw8G/xcXFxcbDw8bDv8O/wNj5tZKSkpCQ - kpWSkpCVlZOVlpWVlZWVlZWSlZKSlZOSlZZfDRgRHRAQGB0dHxwiHyIkIB8fGx0fHxgYGxAQHRAPXxsi - UUhIVlZXXV1mYmpqfHx7fGttaF5eXl1XXVZRViIbCXy3t7e3ubrCzM3V1dna3Nza2tXVz8/MzMK6ubq3 - gAoHttbQ2drc3Ofk6Ort8vX3+Pf08e3t6Ojc3NnZ2c+2CQrO7e3x7fLy8vb3+Pr7/Pz8/Pz6+Pj19e3s - 7Onj58EICubs3t7e4t7i3+Pm8vL19fX08fHm5OTl4uTc4+Lp4AoN5ohGS0lGT0dOTHm2tpiZmJiXgmBi - XnNoZHl3erblDQ3iKQMEBAcFAwQEClZSVlRRUVErCxQQNRQeKDUQZ+UNDd4WAAANLA0BAQIGIiIrKysq - KhEuhoWEXZKifw9d4g0N3hUAAkhcSwMCAhuTjoGTjYqHXn7v7tK27+68HV3hDQ3YFQADRhFIAwIDXOTH - udvAmdS2hbSx07uzstEfXeMNDdgYBg0uCEYMBwNk7Ji247aDzrh1rpqnoZybpite3Q0N2B8bRy8JR00n - A1bbwcHawLfPtnWqqKWgq6mfIl7aDQ/YJy4fEAkREUYFGJGLi5OPhodmf7CspKKvraMrXtoNEtQpJxAO - CwwQRgYLRj8/SklKSidQnp1/Yp6ddiJm2BAW1C4uIh4RIiJWDBpBRUNZREJAKx09KCsqPT0sHWnUFRDN - UE1WSCtRSFQYLFtycVpxRFgvEBYNEw8TExcdZ9QQFsldRkhXL1ZIKSMsSE9KU0dHLywQFRMUFCQaGxxr - zhUXxF4pRlZIViwhISZXV1RSUUhIKxMwOjc6ODEfHmvNFhDBaClGVk5WJyQhLmZlZWVlUlcvHzk8Ozs7 - OCIfa8kYIcBgLkZIR0YuIicvV2VXUlJRUi0fMjM0NDQ0JitswhgYwWdGRkYuRiknIi5VZVJSUlFRLR0i - JSIiJCsmIHzDGyG6fUxIS1BIR0hHVW9vbm5sZmZXSC8vSEhRSEhRgMEhIr7LmZmYmJiYmJe2urq6urq6 - t7eZmZmZmZmZmbbLviInuPHo5Ojo6Ojo6Ojt7ert6urp6ejo6Ojo6OTp6vG4J1B93ePc3Nzj49zc3OPj - 4+Pj49zj4+Pj4+Pj3Nzj3H1QZCZrbXltfHlufHl8bW1tbW1rfGtteXl5eXl5eW1rJmR4GxcdGB0XFxcX - HB8fHR0dHx8dHxccHR0dHRcYFxcbZHiMlYySkJWVlZWVkJCSkpCQkJCQlZWVlZWVlZKMlZV44t7Jv8jG - w8PDw8PDw8jIw8O/v8PDw8PDw8PDxr3K3uL//////////4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAH//////////ygAAAAQAAAAIAAAAAEAIAAAAAAAAAgAAAAA - AAAAAAAAAAAAAAAAAADGxsYJlJSUMJSUlDCVlZUukpKSL5eXki+Xl5IvlJSUMJeXki+Xl5cvl5eXL5SU - lDCXl5cvkpKSL5OTkzLf398IKSkp/yQeG/8cGRj/IBsZ/yIcG/8hHRz/JCAf/ygkIv8lIyL/IyAf/yAe - Hf8iHh3/IR0c/xsZGP8iHRr/Kyoq/0dDQv+jmZH/oZyX/62lnv+zq6T/ubGu/8G4tf/JwL3/y8TB/8K7 - uP+8tbL/uLGq/7Coov+po57/qZ+X/0tGRf9kYmH/08/L/9PQzf/Rzsz/2NPR/9vW1f/j29f/5t7b/+Xg - 3P/h2dv/2dnO/9vT1f/Rysz/09C1/87Fwv9YWlr/eXl5/xcXF/8aGhr/GhkZ/xwaGv8fHR3/ZmBb/2Nc - Wf9iXVb/aWJX/zQvN/8zNTX/P0I0/0EzRv9FPzn/d3WG/3J0c/8AAAD/CQoK/2ZkY/8FAwL/Dw0N/0A8 - N/9EPTr/Qjk8/z8xNv+anJ7/o6ax/6inl/+nrbf/Mykv/29tcv9pamj/AAEA/yUmJP8mIiH/ExEQ/woK - Cv+Lh4L/j4qH/2hkYf/Qx8//joPJ/zQ2v/9ubcD/TUDC/zIsLP9wa2r/ZWJh/xMQD/9LSEf/JiEg/0lH - Rv8LCwv/lpOO/5WQjf+PhIv/oJCg/4V5vP8rLsn/b2vH/0Q80f8zLS3/ZV5e/1pXWP8WFxX/NSwp/zAq - Jf9BPTr/JCAZ/zgxS/88OUr/PzpV/0ZAQv9XVVv/WldZ/2BbXf9dW1r/NzAt/1hWVf9QTEv/OTo4/2Jb - WP9GQDv/VFBP/zk2NP9TTk//UUpP/05FU/9RSUn/Li4u/zAtK/8xKi//Liwr/z43NP9QTk3/REA//0FA - P/9PS0r/VE9K/zs5OP84ODH/ZFpT/2BXT/9ZUE7/VU5F/y4rM/8jH4f/IBx9/zUzMv87NDH/R0VE/0A9 - Of9BPz7/QkA//0NBPv88Ozj/OTs1/1pNSf9XTkT/UklD/1BEQ/83OTP/ODY7/zg1Nf88Ojn/Pjc0/z48 - O/83NDD/ZV5b/2FeW/9fXFn/YV1Y/1xYVv+Dd27/e3Nr/3pya/92bmb/XVlW/2JcV/9kXFr/YV5a/2de - Wv83NDL/Ih4d/9nPy//W08v/2NDJ/9jQyf/Vzcf/2tLM/9jRyv/X0Mn/2dLL/9fQyf/Y0Mn/2NDJ/9HO - x//WzMj/Hxsa/1FPT9wqJiX/IR8d/yIeHf8iHh3/JCAf/yMfHv8jHx7/JCAf/yMfHv8iHh3/Ix8e/yMf - Hv8gHhz/KSUj/1FRUdwAAAAAnJycLJiYmC2YmJgtmJiYLZWVlS6YmJgtmJiYLZWVlS6VlZUumJiYLZiY - mC2YmJgtlZWVLpiYmC0AAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA//8AACgAAAAQAAAAIAAAAAEACAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAA - AAAHBQX/EhMS/xMSEf8WFRT/GBcX/xgZF/8bGRn/ICEg/yUlJP8oJCD/KCYl/ysrK/8tLSz/NS4p/zEt - LP8wLi3/MTAu/zIrMv8zLzD/NS4z/zQxMf8yMTf/NzU0/zc2Nf86NTT/ODY2/zk2Nf86Njb/OTk3/zo4 - N/8/Ojb/NTI6/zg1Of88ODn/Pjk4/zw6OP8+Ojn/Pzs6/z08Ov8/Pjr/Pzk//0A7N/9BOzr/Qz88/0Q+ - PP9DQD//RUE//0ZCPP9IQj//LSpG/zIwRf89N0b/PzpN/z01Uv89N1T/JiJr/yklaP9DQUH/Q0JB/0ZB - QP9FQ0H/RkNB/0ZEQ/9GRUT/SUFD/0hDQv9NQ0D/SEVD/0lEQ/9LRUL/TEZD/09HQf9IRUT/SUVE/0pH - Rf9OSEL/SUhG/0pIR/9LSEb/TUlH/09JRv9OSkf/SUVN/0pJSP9NSEv/TEpJ/05KSP9PTEj/T0tO/1NL - Q/9SSUb/WU9G/1BMSv9TTUn/U05J/1ZNSP9cVUv/XFBM/15WT/9LQVL/UEdQ/1BMU/9SS1X/W1NS/1tV - Uf9aVlH/YVtV/2BdW/9kXlr/YF5c/2VgWv9jYl3/ZGFd/2VhXP9nYV3/ZmJf/2diXP9pYV//aGJe/2ll - Yv9oZmP/aWZl/2pnZP9qaGb/bGlo/2xqaP9ta2n/b2xs/3Rtav93b2j/cG5s/3Jvbv95cGz/fXZv/3Nu - cf9xcnD/cnNz/3Rycv91cnD/dXV1/3V0ev92dHr/gXhw/4V7cv+Fgnv/TUqf/1JOr/9fWqL/REO//1NW - u/9cWrr/Y2Sp/z48xf+FgYb/i4KB/5CIhv+Iipv/ioif/5WVlf+WlJT/l5WU/5aXlf+Xlpb/mpWS/5iW - lf+Zl5f/l5iW/5iYl/+dmpX/mZiY/5+bmf+imZH/o5uW/6WclP+noJr/pqGd/6ujnf+tpqD/rKij/66u - rv+xqaP/ta6o/7iwrP+0tLT/tra2/7u0sP+/t7T/wLq2/8O+t//Fvbj/xL+4/8W+uP/Gvrn/yb+8/8fA - uv/Iwbv/yMG+/8nAvf/LxMD/zsnA/9DMyP/Sz8v/087K/9PQzf/W0s//19LO/9rV0v/b1tH/49zY/+ff - 2//i2tz/5uDd/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/s6Ceop6ipaCipqKipJ+fsxYeIiosO0NVTUg9Li0lJRlWq6ywtLa6wMS7ubWxrq1cecrJy8zO - 0NHT0s/NyMfGb4sLBAYGCnZsamARFRczV4yIAQdNAANpaGhajZ2ZnB6JhwUOGAIMsq+QqpOVl5YsioMZ - OQ4/CKijm5qRmJKUL4Z/HA0NKwk1NDYoUlhUZUGCfVNdS0obZmRjQBASExRFfnlMUV4dI2JhX0cxNzgy - Rn16VT48JidhW1lCIB8XIVB7d4Bwc3Fyj46FgW50dXaEeGvBvL+/vcPCwMK/wMC+xW06RENERElERElJ - REREQ0E5t6SppaWkpaWkpKWlpaeguP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/NES/NESMusicRipper.Designer.cs b/BizHawk.Client.EmuHawk/tools/NES/NESMusicRipper.Designer.cs index 16e2b91d92..0b1f1fabe5 100644 --- a/BizHawk.Client.EmuHawk/tools/NES/NESMusicRipper.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/NES/NESMusicRipper.Designer.cs @@ -189,7 +189,7 @@ this.Controls.Add(this.groupBox1); this.Controls.Add(this.textBox1); this.Controls.Add(this.menuStrip1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.NESControllerIcon_MultiSize; this.Name = "NESMusicRipper"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Music Ripper"; diff --git a/BizHawk.Client.EmuHawk/tools/NES/NESMusicRipper.resx b/BizHawk.Client.EmuHawk/tools/NES/NESMusicRipper.resx index a9a2d5347c..803443a4c1 100644 --- a/BizHawk.Client.EmuHawk/tools/NES/NESMusicRipper.resx +++ b/BizHawk.Client.EmuHawk/tools/NES/NESMusicRipper.resx @@ -125,299 +125,4 @@ Make sure the template has 5 tracks. There should be pulse waveforms in instrume 17, 17 - - - - AAABAAYAMBwAAAEAIAAIFgAAZgAAADAcAAABAAgASAoAAG4WAAAgIAAAAQAgAKgQAAC2IAAAICAAAAEA - CACoCAAAXjEAABAQAAABACAAaAQAAAY6AAAQEAAAAQAIAGgFAABuPgAAKAAAADAAAAA4AAAAAQAgAAAA - AAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADU1NQYpKSkY5aUlIGWlJKBl5WVfpSS - koGUlJSBlpaWepaWlnqWlpZ6lZWVfpWVlX6VlZV+lZWVfpWVlX6XlZV+mZeVfpmXlX6XlZV+l5WVfpaU - lIGWlJSBl5WVfpWXlX6Vl5V+lZeVfpWXlX6Xl5V+l5eVfpeXlX6Xl5V+l5WVfpeVlX6WlJSBl5WVfpeV - lX6XlZV+l5WVfpeVlX6VlZV+l5WVfpeVlX6Vk5GFlJKSgaSkpGPY2NgUAAAAALe3t0QsLCz/CAQD/w4L - B/8WEQ7/Ew4L/xQQD/8NCwr/DwoJ/xALCv8RDAv/Eg0M/xINDP8SDQz/FA8O/xUQD/8QDAv/EQ0M/xMP - Dv8TDw7/FBAP/xUREP8WEhH/FxMS/xMREP8TERD/EhAP/xIQD/8RDw7/EA4N/xAODf8PDQz/FBAP/xMP - Dv8SDg3/Eg4N/xIODf8SDg3/EQ0M/xAMC/8MCgn/Ew8O/xEMCf8UDwz/DwwI/wsHBv8tLS3/s7O3Ry0s - Lv8bGRn/bWhl/4aAe/+Gfnf/eXNu/4B5dv+FgH3/h357/4qBfv+NhIH/j4aD/5GIhf+Tiof/lo2K/5iP - jP+blpP/nJeU/5+al/+hnJn/o56b/6ahnv+oo6D/qqWi/6qlov+ppKH/p6Kf/6Wgnf+inZr/oJuY/5+a - l/+emZb/mJOQ/5eSj/+VkI3/k46L/5GMif+Qi4j/jomG/4yHhP+KhYL/hX57/395dP+Lg3z/jIaB/3Nu - a/8dGxv/KSgq/wQCAv9OSUj/qaOe/6Wck/+onZX/rKOa/6igmf+moJv/rKSd/66mn/+yqqP/tKyl/7au - p/+4sKn/u7Os/762r/++tbL/wLe0/8O6t//Gvbr/yL+8/8vCv//OxcL/0MfE/9HKx//Qycb/zcbD/8rD - wP/HwL3/xL26/8K7uP/Burf/w7u0/8G5sv++tq//u7Os/7iwqf+1rab/s6uk/7Gpov+uqKP/sami/7Ws - o/+uo5v/qaCX/62nov9STUz/BwUF/wQAAP9VUE3/tq6n/8e9s//GurD/x72z/8rBuP/Jwbr/ycG6/8zE - vf/Oxr//z8fA/8/HwP/QyMH/08vE/9XNxv/Yz8v/2tHN/9zTz//e1dH/4djU/+Pa1v/l3Nj/597a/+rh - 3f/p4Nz/597a/+Tb1//h2NT/39bS/93U0P/c08//1c3G/9TMxf/QyMH/zcW+/8rCu//Hv7j/xLy1/8K6 - s/+8tK3/v7at/7uxp/+3q6H/t62j/6ujnP9STUr/BQAB/wAAAP9tbW3/7u7u/+Li4v/c3Nz/19fX/9fX - 1//Z2dn/2tra/9zc3P/U1NT/1tbW/9zc3P/d29v/1NLS/9rY2P/d29v/3NjX/+Xg3f/m4Nv/6ePe/+nj - 3v/n4N3/5+Dd/+bk2v/k4dz/4d3j/+Tc5v/i2+D/49nf/93Y2f/Y3c7/3NnU/97Z0P/i2+L/1tfT/9LV - 0//Y0dj/3NrQ/9fUz//i4bv/0c7d/8vO1v/d1db/4tvS/+Hp2P9dYmX/BwUA/wAAAP9+fn7/6enp/2ho - aP8mJib/JiYm/ysrK/8pKSn/JiYm/yoqKv8pKSn/MjAw/yYkJP8sKir/NTMz/zEvL/8wLi7/VVFQ/4aB - fv95c27/fXdy/3lzbv9ya2j/e3Rx/3dvaP91cmr/dHJq/3FvZf99d2z/X1ZT/z01PP9BPUP/RT5L/0FE - Nf8+Qjz/OjhM/0FFP/9QVkX/QjtI/0tMSv9PQE7/TEZl/0tPUP9VT0j/hHt3/+bo6P92dYX/BAIA/wMD - A/9ycnL/3Nzc/zk5Of8AAAD/BAQE/wAAAP8BAQH/AgAA/wQCAv8CAAD/AwEB/wQCAv8CAAD/BAIC/wMB - Af8DAQH/Ih4d/0pFQv9IQj3/TEZB/09JRP9KQ0D/SEE+/0s/Pf9DOjf/RkE4/0Q+Mf9JQTT/OTAm/xkS - D/8fGiP/HxUi/xgfCv8iISv/LRpN/yUbLP8kIhr/IB0f/ygmJv8qHzn/JSM3/x4iHP8sJiH/XFRU/+Ti - 6P95dYj/BAAA/wMFBf9zdXX/4+Xl/zAyMv8AAAD/AQMD/wACAv8GCAj/W1lY/2xqaf9pZ2b/NzU0/wcF - BP8FAwL/DQsK/wcIBv8RDw//GhgX/yckIP8tKST/JiAb/yslIP80LSr/KiUi/zIpJv8yKSz/Ni4v/zQp - K/8tHyP/KyUY/zw+Kv+TlpT/q6aj/52hov+jpqr/in2N/11PUf+ioYz/rK+m/6Sjp/+mrLH/dn53/yos - Jv80KjD/YVxb/+Pi3v9vbXP/BwUE/wIDAf9tbmz/4+Ti/zk6OP8AAQD/AAEA/wMEAv8eHx3/cGxr/0E9 - PP9TT07/XVta/wgGBf8GBAP/CQcG/wsMCv8GBgb/YV9e/8bDv//KxsH/w724/7q0r/+5tLH/w767/7q0 - r/+1rrH/rKin/6+oq/++sr7/cG5k/1RaT//NzOb/mYzg/4F75v+mquX/vbjH/4iCff/S0+j/kYrl/4N9 - 3P+zt+f/pKyr/zUyLf8tIir/XVpW/+bj3v9wb2v/CQsF/xMUEv9pamj/2NnX/zk6OP8AAQD/AwQC/wME - Av8nKCb/RkFA/xINDP8gHBv/VFBP/wQCAf8VExL/BwgG/wgJB/8LCwv/fnx7/+Xi3v+Cfnn/Z2Ne/2ll - YP+KhYL/zsnG/3l2bv9dWlb/YGJP/4aFd//Ty9L/fn15/0ZIU/+GecX/Hhi9/wANof8kJrr/gYek/3aC - bP9gX7v/DhKt/wkRsv8/L73/hoak/z85NP8zLi3/YF1Z/+Td4P9wa2r/Cw4F/wkHBv9pZ2b/4d/e/zo4 - N/8NCwr/UU9O/1BOTf9oZmX/TUhH/yIdHP8qJST/cm5t/15cW/9aWFf/MTIw/wwNC/8KCgr/eXd2/+jl - 4f+sqKP/pKCb/6Sgm/+wq6j/2NPQ/6ymof+WkJH/nZ6K/7Ctnv/Qxc//fnx0/0tNVf9hUaX/BADM/wAE - xv8QCs3/bGic/3Bxb/9GO7//BAjL/wAAx/8lEr//dHOV/zkyKf8yLSr/YWJZ/+Xb4f9nYWL/CgwM/xkV - FP9jX17/3dnY/0I+Pf8YFBP/YFxb/zMvLv87Nzb/MCsq/xwXFv8lIB//My8u/y8tLP9APj3/U1RS/wkK - CP8NDQ3/QUJA/39+ev+Kh4L/hIB7/4J+ef+GgX7/gHt4/4R4eP+LfYj/f3Zy/4V5ef+EcYT/U1BB/09X - Rv+bksr/JyTe/w4H+P88RMf/npWq/4N3bf+JiMz/GRLl/xEW4/9XVtz/iZGY/0M6MP80LTD/YGRZ/+Xf - 2v9lXV3/ExEd/xYWFv9aWFj/2dXU/0E/Pv8SExH/UFFN/ysoJP8wJyT/LSQg/y8mIv8rJSD/LCYh/ykk - If84MzD/UUxJ/xYTD/8bGBD/IyIU/zMzJ/8oKyn/Jyo4/ycoPP8uLzn/NzU0/y40L/81Ozr/MDQ1/zU1 - Nf8+Ozf/Mi0q/0E8Pf9vbXP/Y12A/1tYbv9xb3X/YWJZ/0tMQ/93dnj/ZGBz/11Xdv93dXT/XFhX/zw3 - NP82Lyz/aWJf/+Db2P9aWFf/FhcV/x4eHv9cV1j/1dHQ/0NBQP8dHhz/VVZS/zs4NP8+NTL/Rz84/0Q7 - N/86NC//QTs2/zk0Mf9ST0v/YF1Z/y8rKv8zLyr/QzlF/1xJdP9VPIb/UDeN/0w5fv9USmj/XllW/1E8 - ev9QOYP/SDF7/006a/9USlb/Pzwu/yopH/8wLzP/My81/yolJ/82Lyz/Ny4q/ygfG/87MDL/MSkw/zEp - NP80MjH/NjIx/zUwLf86MzD/aGFe/9nU0f9XVVT/Hh8d/x4fHf9RTUz/0c3M/1ZSUf85Ojj/X2Be/1lW - Uv9lXlv/TkY//0Q8Nf9GQDv/aWNe/1RPTP9YVFP/SUdG/zAuLf87ODT/RkI9/1lVUP9VUFL/Uk5a/05K - Vv9STFH/V05K/09EVP9QRlf/SkJT/01FT/9UTEz/R0E8/zQxLf8uLi7/MjYq/zAxJ/8wLSn/OTI1/zct - M/8yKy7/NzIz/zQyMf8tKyr/NjIx/zo1Mv8/ODX/bWZj/9jT0P9RT07/HR4c/ygpJ/9LR0b/z8rJ/15a - Wf85Ojj/Ozw6/zw6Of9PSkn/ZFxV/01FPv9HQTz/XVhV/z47N/87OTj/NTU1/z4+Pv8xKjf/OzQ3/01H - QP9JRDv/SkZB/0dAQ/9KPUX/SzpD/0c/OP9GQjf/Q0I0/0M/NP9COTX/OjIz/zMuL/8wMS//Li8z/zUy - O/80LTr/NCo7/zkvQP8xKjf/OjU+/zEvNf86ODf/Ozc2/zgzMP86MzD/bWZj/9nU0f9OTEv/ICEf/ygp - J/9DPz7/zcjH/2NeXf9DQUD/Ozw6/0JAP/9QTEv/WVNO/1JMR/9WUk3/WVZS/z87Ov87OTj/MzMz/zU1 - Nf85OjH/S0k//2hhWP9oXlf/Zl1Z/2FZUv9kW1H/aV5Q/2RZUf9cUlL/WU5W/15TVv9YUUj/SkQ5/zg0 - M/8uKzT/GBSR/x0bk/8hHpL/FxOE/yAdiv8eG4j/IR6L/xsbh/81MzL/OjY1/zs2M/88NTL/bWZj/9PO - y/9HRUT/KSoo/y8wLP9DQDz/zcXF/11YV/9APj3/QUJA/0NEQv9EQD//U05L/0xHRP9OS0f/TElF/0A+ - Pf89Ozr/Ojs5/zs8Ov81NDb/RT9A/2BUUv9eUkz/XlVM/1tSSf9aT0v/Xk9N/1xVQv9VTj3/U01A/1hS - R/9XTkX/SD87/zkzNP8zMjb/MCxP/ywqR/8yM0f/Ky04/zI1Pf8wMzv/LjA7/zMzQ/87OTj/Pzs6/0A7 - OP9AOTb/cGlm/8/Kx/9APj3/LS4s/zM0MP8/PDj/zcbD/2JaWv9CQD//R0hG/0RERP9CQED/R0VE/0A+ - Pf89Ozr/Q0FA/0E/Pv88Ozf/PDs3/z8+Ov88QDX/RkI9/1tNTv9ZSkj/W09J/1lQRv9WTkH/VEs+/1VD - UP9RR0f/TUo8/05HPv9MPkL/QDI9/zkzNP86PjL/PTY5/zgyM/89ODX/Ozcy/z06Mv89NzL/PTcy/0A5 - Nv89Ozr/Ozc2/zo1Mv8+NzT/cmto/87Jxv89Ozr/MzQy/zY3M/85NjL/zMXC/2piYv9HQ0L/QUJA/zs7 - O/9EQkL/Ojo6/0RERP89PT3/QD49/zs5OP9APzv/QD87/z06Nf84ODj/S0ZF/2peWv9rX1X/amJR/2Ve - T/9iW1L/ZFhY/2BXTv9hWVL/XFZR/1pUTf9dVEv/UEhB/z86N/86ODj/PDov/z89M/8/Ojf/QDo7/z84 - O/9COjv/Rj4+/0A5Nv8+PDv/QDw7/0I9Ov9GPzz/dm9s/8rFwv84NjX/Njc1/zs6Nv80MS3/ysPA/7qv - q/+Xi4X/loyF/5mSif+TjoX/mJCJ/5iQif+YkIn/mJCJ/5iQif+YkIn/mJCJ/5iQif+Zj4j/oJaP/6ie - l/+roZr/qqCZ/6iel/+nnZb/qJ6X/6ael/+mnpf/pp6X/6Sclf+impP/npaP/5uTjP+ZkYr/nZWO/52V - jv+dlY7/nZWO/52Vjv+dlY7/nZWO/52Vjv+cl47/oJmQ/6CWj/+glI7/uq+r/8nCv/82My//Ozo2/0ZH - Rf8lISD/wLu4/+Pa1//h1tL/5dzY/9rUzf/e29P/39fQ/9/X0P/f19D/39fQ/9/X0P/f19D/39fQ/9/X - 0P/c1M3/39fQ/+La0//i2tP/4NjR/9/X0P/g2NH/4trT/97Wz//f19D/4NjR/+HZ0v/h2dL/4NjR/9/X - 0P/f19D/39fQ/9/X0P/f19D/39fQ/9/X0P/f19D/39fQ/9/X0P/Y1c3/39nS/+Tb1//d0s7/6N/c/8G8 - uf8hHRz/TU5M/4SEhP8RDw7/ZmJh/6mhof+mn5z/pp+c/6qmof+in5r/p6Kf/6ein/+nop//p6Kf/6ei - n/+nop//p6Kf/6ein/+nop//p6Kf/6ahnv+loJ3/pJ+c/6Oem/+loJ3/pqGe/6Wgnf+loJ3/pqGe/6ah - nv+moZ7/p6Kf/6ahnv+moZ7/p6Kf/6ein/+nop//p6Kf/6ein/+nop//p6Kf/6ein/+mo57/pqKd/6eg - nf+qo6D/o5ub/2RgX/8VExL/f39//9ra2gdcXFzXCQcH/wkEBf8ZFRT/DQkI/xAODf8PDQz/EAwL/xAM - C/8QDAv/EAwL/xAMC/8QDAv/EAwL/xAMC/8SDg3/Eg4N/xENDP8RDQz/Eg4N/xIODf8RDQz/EAwL/xIO - Df8SDg3/Eg4N/xENDP8RDQz/EAwL/xAMC/8QDAv/EQ0M/xENDP8RDQz/EQ0M/xENDP8RDQz/EQ0M/xEN - DP8NCwr/EQ8O/wsHBv8XExL/DQgJ/wwKCv9cXFzX////AwAAAAAAAAAAtbW1SZyZmXScmZl0kpCQhJmZ - mXSYmJV3mJWVd5iVlXeYlZV3mJWVd5iVlXeYlZV3mJWVd5iVlXeXlZV7l5WVe5eVlXuYlZV3mpiYd5qY - mHeYlZV3l5WVe5eVlXuXlZV7l5WVe5eVlXuXlZV7l5WVe5iVlXeYlZV3mJWVd5iVlXeYlZV3mJWVd5iV - lXeYlZV3mJWVd5iVlXeXl5V7mZmZdJCOjoiYlZV3n5ycbba2tkYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// - /////wAA5P/5/9/nAACAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAgAAAAAABAAD7/////98AAP///////wAAKAAAADAAAAA4AAAAAQAIAAAA - AACACgAAAAAAAAAAAAAAAAAAAAAAAAMCAf8JBgX/BwgG/woLBv8GCAj/DAsK/xENDP8VEg7/FBMR/xkV - FP8aGBP/ExEd/x0dHP8hHRz/KB8b/x4iHP8lIhv/Hxci/ykdJ/8qHzn/JiQj/yslIv8nKCb/Kikl/yIh - K/8tIir/Kysq/zAnJP8yKSb/Mi0s/y4yLf8xMif/OTAm/zMyLf85Myz/PTwt/yUjN/8uLTP/Jyk6/ywu - OP8yKzP/NCs6/y4wO/80MzL/OjQz/zw5Nf8yMzv/PDU7/zU7Ov87Ojn/Qjo0/0AyPf9BPTv/ST88/zxA - Nf8+Qjz/Q0I1/0lBNP9EQTz/SkQ8/0xJPf9UTD3/LRpN/ywqR/85L0D/MCxP/zIzRf86OEz/QzxC/0s8 - Q/9DPEn/TTpr/0o1fP9RPHr/REJB/0pGQv9HSEb/TUlF/05CTv9NS0r/UUdH/1NMQv9STUv/W01L/09X - Rv9RU0P/WVJF/1NQTf9bU0v/VFpP/0tIU/9SRFP/U0tT/1tOU/9STlr/VVNR/1tUUv9cWFb/XFdY/1xa - Wv9gV07/ZV5P/2BUUv9iWlL/aV5U/2JcW/9qXlr/X2Be/2BiT/9qYlH/YmJb/2hhXP9MRmX/VEpo/1tY - bv9cSXT/XVd2/11iZf9mYWH/amVj/21oZf9ra2r/cGxl/3Jtav93c2z/a2hz/3Fvdf90dHP/fHZy/3Z+ - d/9+enT/d3Z4/359e/+Dd23/g3t4/3aCbP+GgXz/FxOE/xsbh/8eG4j/GBSR/x0bk/8gHYr/IR6S/wAN - of8OEq3/CRGy/x4Yvf8lEr//JCa6/z8vvf9ROYf/Rju//2NdgP93dYb/bGic/3Rzlf9hUaX/YF+7/wID - yf8QCs3/JyTe/xUU5P8OB/j/PETH/1dW3P+IeYj/hnnF/4N93P+Be+b/hISE/4uFgv+OiYb/lIuF/5KM - iv+Yj4r/lpGO/5qSi/+dnor/iZGY/5WUlP+Ylpb/l5iW/52Zlv+bmZn/oJWO/6SclP+onZb/o52a/6Kh - jP+poJf/pqGe/6uim/+wrZ7/g4ak/56Vqv+doaL/paSm/6qkof+sqaT/o6aq/6Ssq/+vqKv/tKuj/7Cr - qP+6r6v/u7Os/6assf+1rrH/tbS1/7u0sf+7tLv/wLe0/8O6s//DvLn/yL+8/8bBvv/Kwrz/4uG7/4mI - zP+bksr/vbjH/5WL4v+mquX/s7fn/8zFwf/Oycb/z8rJ/9DHxP/SysT/0MXP/9LNy//Yz8v/19TP/9vT - zf/Y3c7/y87W/9LM1//U1NT/3dbQ/9zZ0//Y0dj/29ra/+HW0v/h2dP/5Nza/+jf3P/m4tz/zczm/9LT - 6P/j2+L/3uDg/+bm5v//////AAAA/wAAAP/9/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39 - /f39/f39/f39/f39/f397sW0tbW1tLW1t7S0tLS4tbW1tbW0tLS0tLa0tri4trW0tLW0tLW1tLS1sLDH - 7v3TGgEDBwYHAwYGBgYGBgYGBgYGBgcICAkICAYIBgUGBggHBwUHBwYFBQcGBgYBGtEaDHiIiHyCiIiI - iKytra+xtbW8vLzAwMbGxsa8vLy3tbGwsLCsrqyrq4aGiKt7DBkATb+6u8C+v8DHy8vLzc7O0tTV19fZ - 5OTl5eHh2dbW1tXVzs7Oy8vLx8vLwb7HUgEAV87X1dXZ2NjZ4uXi5eXo6urv7/T19fb29/X18/Pv7+fl - 5eHZ1tbVzs7Oy8vAVwAAfvz78vLu8vLy7u7y8u7x8vD19vf19vb39fz69frw6/Dr+u7u7+vu2u3s8PT3 - dQEAhPx5FBYaFhQaGSsVGiseJVeqfICAe3x8fHt6fGUvREY4N0NKVEZPTnBaWIb8mgAAfvIxAAAAAAAA - AAAAAAAAAA1LO0tRO0s7Mjk5OSAHEQ0KGD4SEAwUEyQQEGD8mgAAgfweAAAAAmN5eSsAAAUCBgwQFw4Q - IRAcHSgdEhAjtsfExaZgvcrFz4EXKGn3fgAAefwwAAAAD3s0UmMFAAUFAmPY4tjS0tjS0MbL3XhZ+N6p - 392I+d6o4MkhGWH8eQMIee4xAAAAGUoGDVwACAQFBYT8gm5uq+J8Y2yI54Rap5OQlcKHnpGSmMIyHWf6 - ewUFefUvBV9Xd0sNFXxjYCEFBIT3x7+/zOrGsbLB5oJanZ+foJt+mJ+flJwgHW71dwUJbvI3CGMoMR0J - EB0dSl8DBjqIrIaEiISGpoaGpj1U3KGjpMOF26KipbMyKG71aQsIYe9ECFQXGxUbFRwQIVcHBxAfFycm - KiweLiUrNB06fZlyfm5NgHR0f2MsIHfyYwgRY+5KDF8tLDk0IjIsV2EaHURzl5eXcWBJl0hHWyMVKCsX - IR0OLCgoKyshLGrvXwwPT+NXLXZgaVEyOm9XYE8lLTphXF5aW1NbWlpaUjUhHiEdHSwsKCsrGiEsMnfu - Xw8WTuNjMDExT2c7O2ExMSs3JSw7O01LRUU1OTgyMiwdJSUuKSlAJy8oLS8iLHjvTxEXOuN2SjA6UldS - V2ExMSsrLU1qaGdmZW1lYF1mVjsrJYyNjYmOi46KKy0sLHjnShoeOuRgN0pMN1JNUk00MTAxK0RmZGRT - U1NWPT1XVjUsK0E/QiUuLilCLzI0MnrhSh4rMeFpOkxKSk0xMTo3LS06NjpTU1NWUT1bUDw9RTMsLS0s - MiwsMiwyNC8sLHvjMSsrLeF3RToxOjFMMTQtOjotLUtqaGxtZWlYZ2FYWFE0LS0jNC80NDQyMTQ0NXvh - KystIdnNr62wra+vsa+vra+tr7q+wMC7u7rAvru6urGxsbm1srqxurm1srm5uc3hLDFMDdP18/Xq8O/z - 7/T09PT06ur09PTw9PTq7/Pw9PTv7+rq6urq6urr6vD16vbWDVSqCHbGvMDGv8W/v7+/v7+/xsa/v7y8 - v7+/v8XAv7+/v8bGxsbGxsbGv8a8xrx2CITyYwMBCQEGBQYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYG - BgYGBgYGBQUFCAUFY/v9/dG4uLS2t7W1tbW1tbW1tbW1tbi4tbW1tbS0tbW1tbW1tbW1tbW1triuuLjR - /f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f3///////8AAOT/ - +f/f5wAAgAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAIAAAAAAAQAA+//////fAAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAACAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzAWoqKhBlpSUaZeUlGeUlJRplJSUZZeXl2OWlpZmlpaWZpaW - lmaWlpZmmJaWZpiWlmaYlpZmlpSUaZeUlGeWlpZmlpaWZpaWlmaWmJZmlpiWZpaWlmaXlJRnl5SUZ5iW - lmaYlpZmlpaWZpaWlmaYlZNolZKSaqenp0C/v78Ea2tuUSIhH8gpJCLYKyck1yomJdgnIiLWJyMi1Sgk - I9YpJSTXKicl1yonJdcpJSTXKicl1ysoJ9csKSjYLikp1yopKNcpKCfXKSgn1ygnJdcoJyTXKicn1yon - JdcpJSXXKSUl1yklJNcnIyPXKSUk1yklI9cpJSLYJCIiyGxsbFI4ODjCOTUz/1JNSP9OSET/UEtJ/1JL - Sf9VTUv/V1BO/1lSUP9cVVP/XldV/15aWP9iXVv/ZF9d/2ZiYP9pZGL/Z2Rh/2ZiYP9kYF7/YV1b/2Bc - Wv9eWlj/XFhW/1pWVP9ZVFL/V1NR/1VQTv9TTUv/UEtG/1VQS/89OTf/ODY4wyAeH/9xbGn/k4yF/5CI - gf+Ri4b/lo6J/5qSjf+elpH/oZmU/6WcmP+poJz/q6Sh/6+opf+yq6j/trCt/7qzsP+6tLH/uLKv/7Su - q/+wqqf/rqil/6uloP+oop3/pZ6a/6Gblv+emJP/m5WQ/5iRjf+Xj4j/mZGK/3Zxbv8gHh//FxMT/5WP - i/+wpp3/s6mg/7Kqo/+0rKX/uLCp/7y0rf++tq//wbmy/8W9t//Hvrv/y8K//8/Gwv/Tysb/1s3K/9jQ - zf/Vzsr/0cnG/83Fwv/Kwr//yMC6/8a+t//BubL/vLSt/7iwqf+1raf/tKyl/7Wrov+upJv/lY+K/xkV - Ff8YFRT/pqCb/8vDuv/Kwbn/zMW+/8zFv//PyML/0MnD/9HLxf/TzMb/1s/K/9rSzv/e1dH/4dnV/+Tb - 1//m3dr/6OHc/+be2//j2tj/4NfU/9zU0P/X0Mr/1c3H/8/Jw//LxL//yMG7/8W+tv/CurT/vrWu/760 - q/+cmJH/GRQU/xsbG//Nzc3/19fX/83Nzf/MzMz/zs7O/87Ozv/Ly8v/0NDQ/8zKyv/Qzs7/08/O/9/Z - 1v/h29b/4dvW/+DZ1v/e3NP/2tfZ/9zV3P/a0db/0c/M/9HQyf/V0Mr/z87N/8rLy//Rzsn/0M7C/8zJ - zf/Hx83/2tLM/8DHvP8cHBn/Hx8f/87Ozv9gYGD/MTEx/zU1Nf8xMTH/NDQ0/zo4OP8yMDD/PDo6/zs5 - Of9UUVD/iIOA/4J8d/9+eHP/f3h1/312b/97eHH/endu/25lYf9HQUf/TUdR/0pMQP9ERFD/TVFJ/05L - T/9UUVL/VU1m/1VXVv9+dnH/ycvO/yAeIP8eHh7/w8PD/zMzM/8JCQn/CAgI/wgHB/8KCQn/CwkJ/woI - CP8MCgr/CwkJ/yMgH/9UTkv/VE5J/1VPSv9RSkf/UUdD/05IQf9OSDv/RDwy/yEaG/8lHSn/ISYZ/y0h - Rf8qJSz/JyQl/y8rMP8tKD7/KSsm/1dPTv/Jx8//IR0h/x4gIP/Fxsb/Jicn/wECAv8BAgL/MC8u/0pI - SP8vLSz/BQMC/wgGBf8HBwX/GBYV/zIuKv8yLSj/NzEs/zUvLP85Ly3/OjIx/zguK/8wKB//QEA1/3t2 - eP91eXb/cGV7/1dNTv9+f3b/fXyB/2Vpbf8pKCT/U01N/8fFx/8hHiD/HR8e/8bHxv8nKSj/AAEA/wYH - Bv9RUE7/VlJR/1BOTf8HBQT/CQcG/wkKCP80MjH/gX56/4B6df98dnH/f3p3/312dP95cnP/enB0/11W - UP9kZ1//pZ7E/5OSyP+moLX/h4B//6Six/+Ylsf/l56j/zAsKv9TTU3/x8XC/yEhH/8hIiD/wcLA/yor - Kv8AAQD/CgsJ/05LSv8wLCv/UU5N/wcFBP8JCAb/CQoI/1RSUv/JxsH/npmU/5qUkP++ubb/mZSQ/4uJ - gv+noaD/ioaD/2Vncv91bNL/UVTK/5WVvv+IiY3/aWjO/1pZzP+Rk7P/NjEu/1JOTP/Hw8H/IyQe/yYm - JP++vrz/LCwq/xUVFP8jIyH/REFA/xoVFP9OSkn/IiAf/xkZGP8JCgj/YF5d/9DMyP9/e3b/gn15/8K9 - uv+Cfnj/cnJj/6Kflv+Tj43/VFJt/y8nwP8HDrH/Y2Wp/21ygP8eILf/EhK5/25ppv86NC//VFJN/8a/ - wv8jJB//IiAf/8K/vv8wLi3/QkA//09NTP9NSUj/Ih0c/1ZSUf9VU1L/Pj89/wsLCv9VVFP/yMXB/5+b - lv+gnJf/v7q3/6CZlv+Wk4f/rqeh/4iEgP9TUmj/IhzG/wgIzv9eWan/a2eD/xoZzP8NCsr/ZWKh/zgx - Kv9VVU3/xbzA/yIhI/8rJyb/vrq5/zczMv9NSUj/NDAv/zItLP8fGhj/Lyop/zIwL/9OTUz/CgsJ/zIz - Mf98e3b/f3x4/315dv98d3X/gHV3/3xzc/9/cnf/XFVP/2BjZf9GQdP/HRrk/4N/rP+BeIH/ODLY/yYp - 2v96gKT/PjYw/1VWTv/Evrr/JyQs/ycmJv+5trX/NTMy/0FCPv8sKCT/LiUh/y0kIP8rJiH/LSgl/0pG - Q/8WEw7/IiAV/zU1LP8tLzj/Li8//zk4Of81OTb/Njk6/zw6Of83Mi//TUpM/2Negv9cWXf/Z2Zl/1hY - U/9lYnr/X1p8/2RhYv86NTH/W1VS/766t/8nJyX/LCsr/7ezsv84Nzb/RUZD/zg0MP9AODL/PTUx/zs1 - MP87NzP/WVVR/ysnJP85Mjb/UkFp/0k1ev9HOW3/VE5T/0o6bv9FM2//Sjxc/0E8Nf8xMCv/OzhC/zYx - Nf8/ODT/NCwp/z01Pf87ND//PTo5/zcxLv9cVVL/ubWy/ysrKf8rKyn/sq6t/0hFRP9QUU//UU1K/09H - Qf9DOzb/VU9K/05JRv9RT03/MS8t/0E8O/9YT13/Ukdo/05GX/9XT1D/T0Fh/0s+YP9ORFX/SEI9/zAu - Kv8xMi3/Ly0n/zYvL/8yKSz/NS4x/zIuMP80MC//OTQx/19YVf+2srD/Kiop/y4tLP+vqqn/Uk9O/0ZH - Rf9MSUf/WVJM/0hAOv9bVVH/R0RB/0A+Pv83NTb/PTc4/1FMRv9NSUr/SkRL/09CR/9KQUT/R0JC/0hB - P/9COjj/Mi8u/y8xLv8yMDL/NS02/zYtOP82MTf/MjAy/zc0M/85NDH/YFlW/7ayr/8qKyn/Ly8t/6yn - pv9XVFL/Ozw6/0JAP/9bVE//TkhC/1dTT/89Ojj/NTU1/zg3OP8+Ojj/WFFJ/1ZPSv9TSkn/V0lJ/1JK - Qv9NR0L/TkZB/0M8N/8zMDD/JyVR/yonYf8oIVz/LCZe/y0pXv8rKk//OTY1/zk0Mf9gWVb/s6+s/y0t - LP8wMC3/qqWk/1lVVP8+Pjz/RENB/1RPS/9QS0f/VFFN/z47Ov82NjX/Nzc1/0RCPP9lXFX/Y1pU/19W - T/9kWE//X1ZM/1dOTv9bUk7/TEU8/zYyM/8jH2r/IiB7/x8db/8lJHH/JCNx/ycnYv86NjX/PDc0/2Fa - V/+uqqf/MDEv/zQ0MP+qo6L/VlFR/0FBQP9DQ0H/TUlH/0pFQ/9KR0T/Pz08/zo7OP86Ojj/QT09/15S - T/9dU0v/WlBI/1tOSf9ZUEP/Ukw//1VORf9KQD3/NzM0/zIvRf8vLUP/LzA6/zM1Ov8xMTn/NjU+/z06 - Of8/OTb/ZF1a/6qmpP8yMjD/NjYy/6mjoP9aU1P/RUVE/0NCQv9FQ0L/Pz08/0E/Pv8/PTz/PDs3/z4+ - OP9DQTv/W01N/1tOSf9ZUEX/VUxA/1RFTf9OSj//TkU//0Q2Pv85NTP/PDg2/zk0M/87NzP/PTky/z03 - Mv8/OTf/Ozg3/zs2M/9lXlv/qaWi/zU1NP82NjL/p6Ge/2BZWf9CQkD/PT09/z08PP9CQUH/Pz09/zw6 - OP8/Pjr/Ozk1/0ZCQf9pXVf/aWBR/2NcT/9iV1X/X1ZO/1xVUP9ZU0v/UklD/z05N/87OTH/Pjsz/z85 - Of8/ODr/RDw8/z85N/8/Ozr/Qj06/2liX/+loZ//NjY0/zg3M/+ln5v/opeU/4Z9eP+GgXn/hX95/4eB - e/+HgHr/hn95/4eAev+Gf3n/jYR//52Si/+elIv/m5GJ/5qQiv+YkIn/mJCJ/5WOh/+QiIH/iYF7/4mD - e/+LhH3/i4N+/4uDfv+MhH7/i4R9/42Hf/+OhX7/pZuX/6Sem/85NzT/PDs5/5yXlP/TycX/y8G9/8XA - uP/Iwbr/yMC5/8jAuf/IwLn/yMC5/8jAuf/Kwbr/0MfA/8/Gv//Nxb7/z8a//8zEvf/Nxb7/zcW+/8vD - vP/Jwbr/ysK7/8rCu//Kwrv/ysK7/8rCu//Jwrr/ycS8/83Dvv/Vy8j/nJeU/z8+PP9VVFP/cGxq/8G5 - t//BubX/vrmz/765tP+/ubT/v7m0/7+5tP+/ubT/v7i0/7+4tP/AubX/vriz/723sv+/ubT/vrey/7+4 - tP+/ubT/v7m0/764s/+/ubT/v7m0/7+5tP+/ubT/v7m0/765s/++ubP/wbm1/8C4tv9wbGr/VVVU/2Zm - Zqk4NjX7ZF1d/2ReXP9lYl//ZGBd/2RgXv9kYF7/ZGBe/2RgXv9lYF7/ZWFf/2RgXf9kX13/Y19d/2Rf - Xf9kYF7/ZWBe/2RgXv9kYF7/ZF9d/2VgXv9lYF7/ZWBe/2VgXv9lYF7/ZGBe/2RhXv9kXlz/Y11c/zk2 - NvtkYmKoaWlpKSkmJrolICDUKCMj1yYlJNQnIyLVJyMi1ScjItUnIyLVJyMi1ScjI9UpJiTWKCUj1Sgl - JdUoJSXVJyMj1SkmJNYoJiTWKCQj1igkI9YnIyLVJyMj1SclI9UnJSPVJyUj1SclI9UnIyPVJiYl1CYj - ItgmISPSKikpuWJiYicAAAAAs7OzLJ2aml6Tk5NomJiYX5iVlWGYlZVhmJWVYZiVlWGYlZVhlpaWYpiW - lmSXlZVjmJWVYZiVlWGXlZVjmJaWZJaTk2SWk5NkmJaWZJiVlWGYlZVhmJWVYZiVlWGYlZVhmJWVYZaW - lmKXl5dgkY6Oa5yamlu3t7crAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////+AAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAB//////////8oAAAAIAAAAEAAAAABAAgAAAAAAAAI - AAAAAAAAAAAAAAAAAAAAAAAAAQIC/wgGBf8HCQj/DAwL/xEPD/8UExP/HRoW/x0bGv8hHR3/JSAf/yQj - I/8rJiP/LCkm/ysrKv80LCb/Mi0s/zIwLv88NC//Liww/zMuM/80LDn/LzEx/zExMP81MjH/NjQy/zMx - Nf82MjT/NjU1/zgyMf84NDL/PTYx/zk2Nf89NzT/Nzg2/zw4Nf81MDn/OTc4/zo7OP89OTj/PTw6/z05 - Pf8+Pj3/QDc0/0I7Nv9BPDv/SDw//0NBPf9KQz3/KCdP/y0rTv8yL0b/My5J/zIyQP85NUf/PTlA/yok - Xf8rKVv/JyNg/yonYf8lI2n/JSNz/0E8Rf9APk7/QD5Q/0g9Vv9MP13/RDZm/0U6ZP9JPWL/Rjdt/0VD - Q/9KRUP/TEhF/0ZETP9KRUr/SklI/01KSf9LTEn/TkxK/05KTP9OTE3/UUpE/1lPRv9QREj/U01K/1hL - Sf9WUEz/W1FL/05DVf9PSVL/Vk5S/1ZMXP9UUlH/WVRT/1xZVP9XV1j/W1VY/1paWv9dWlj/XVhd/11d - XP9iVk7/YVpU/2FaWP9gXVv/ZF1a/2JdXP9mX1z/aF5Z/2VhXv9rYVv/cGZa/09GYP9QQmD/UUZo/1lX - Yv9OS3//XFl0/2FeY/9jXW7/YGBg/2diYP9jYmT/ZGRk/2llY/9taGb/aWxn/2Fhaf9ybGn/dnBv/3ly - bv97em3/bGN3/21ufP90b3L/eG9y/29ydf9xcXH/dnNz/3d1c/92dHT/enJy/3x3cv98cnT/eHZ2/3l4 - c/95eHf/fHh1/3d2f/95eHj/fHx9/4V+ef+FgHr/iYJ9/xIXuf8cGr3/KSq8/1JPgf9ZVYL/YF2f/21q - jP9ucYv/eXOD/2xtlv9yb57/XVqq/2Zhov9gYan/DQ7O/xUSy/8vKMb/JCLL/ykny/8wMMf/OTLA/0A9 - xf9KRcP/VVfJ/11by/9sa8z/d2/P/4B/gP+LhoL/kouE/5OMif+XkY3/mZGM/4qLlv+PlZ3/k5GR/5WR - kP+WlZX/mZOR/5mVkf+dlZH/mJaW/5yXlv+XmJb/mJiX/56Zlf+ZmJj/nZqa/56cnP+glpP/opqW/6Oe - m/+moZ3/qaKd/7Cmnv+HiKz/npmv/42Nuf+loaD/q6Wj/66ppv+op6j/rayr/7Oqo/+yrKr/tbGu/7qz - rf+1rrD/srGx/7Wysf+2tLL/tbK1/7W1tf+6tLD/vLi1/7m3vv+8vLz/wbev/8K6tP/Fvrn/yL+4/8bA - tv/DwLz/ycG8/5OTxP+gnMD/w8HA/8zEwf/OyMT/zcbJ/83JyP/RysX/1c3K/9bQyv/Z0s7/0dDS/93U - 0v/h2dX/49vZ/wAAAP8AAAD/AAAA//nYv7+/xca/v7/DxsbDw8G/xcXFxcbDw8bDv8O/wNj5tZKSkpCQ - kpWSkpCVlZOVlpWVlZWVlZWSlZKSlZOSlZZfDRgRHRAQGB0dHxwiHyIkIB8fGx0fHxgYGxAQHRAPXxsi - UUhIVlZXXV1mYmpqfHx7fGttaF5eXl1XXVZRViIbCXy3t7e3ubrCzM3V1dna3Nza2tXVz8/MzMK6ubq3 - gAoHttbQ2drc3Ofk6Ort8vX3+Pf08e3t6Ojc3NnZ2c+2CQrO7e3x7fLy8vb3+Pr7/Pz8/Pz6+Pj19e3s - 7Onj58EICubs3t7e4t7i3+Pm8vL19fX08fHm5OTl4uTc4+Lp4AoN5ohGS0lGT0dOTHm2tpiZmJiXgmBi - XnNoZHl3erblDQ3iKQMEBAcFAwQEClZSVlRRUVErCxQQNRQeKDUQZ+UNDd4WAAANLA0BAQIGIiIrKysq - KhEuhoWEXZKifw9d4g0N3hUAAkhcSwMCAhuTjoGTjYqHXn7v7tK27+68HV3hDQ3YFQADRhFIAwIDXOTH - udvAmdS2hbSx07uzstEfXeMNDdgYBg0uCEYMBwNk7Ji247aDzrh1rpqnoZybpite3Q0N2B8bRy8JR00n - A1bbwcHawLfPtnWqqKWgq6mfIl7aDQ/YJy4fEAkREUYFGJGLi5OPhodmf7CspKKvraMrXtoNEtQpJxAO - CwwQRgYLRj8/SklKSidQnp1/Yp6ddiJm2BAW1C4uIh4RIiJWDBpBRUNZREJAKx09KCsqPT0sHWnUFRDN - UE1WSCtRSFQYLFtycVpxRFgvEBYNEw8TExcdZ9QQFsldRkhXL1ZIKSMsSE9KU0dHLywQFRMUFCQaGxxr - zhUXxF4pRlZIViwhISZXV1RSUUhIKxMwOjc6ODEfHmvNFhDBaClGVk5WJyQhLmZlZWVlUlcvHzk8Ozs7 - OCIfa8kYIcBgLkZIR0YuIicvV2VXUlJRUi0fMjM0NDQ0JitswhgYwWdGRkYuRiknIi5VZVJSUlFRLR0i - JSIiJCsmIHzDGyG6fUxIS1BIR0hHVW9vbm5sZmZXSC8vSEhRSEhRgMEhIr7LmZmYmJiYmJe2urq6urq6 - t7eZmZmZmZmZmbbLviInuPHo5Ojo6Ojo6Ojt7ert6urp6ejo6Ojo6OTp6vG4J1B93ePc3Nzj49zc3OPj - 4+Pj49zj4+Pj4+Pj3Nzj3H1QZCZrbXltfHlufHl8bW1tbW1rfGtteXl5eXl5eW1rJmR4GxcdGB0XFxcX - HB8fHR0dHx8dHxccHR0dHRcYFxcbZHiMlYySkJWVlZWVkJCSkpCQkJCQlZWVlZWVlZKMlZV44t7Jv8jG - w8PDw8PDw8jIw8O/v8PDw8PDw8PDxr3K3uL//////////4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAH//////////ygAAAAQAAAAIAAAAAEAIAAAAAAAAAgAAAAA - AAAAAAAAAAAAAAAAAADGxsYJlJSUMJSUlDCVlZUukpKSL5eXki+Xl5IvlJSUMJeXki+Xl5cvl5eXL5SU - lDCXl5cvkpKSL5OTkzLf398IKSkp/yQeG/8cGRj/IBsZ/yIcG/8hHRz/JCAf/ygkIv8lIyL/IyAf/yAe - Hf8iHh3/IR0c/xsZGP8iHRr/Kyoq/0dDQv+jmZH/oZyX/62lnv+zq6T/ubGu/8G4tf/JwL3/y8TB/8K7 - uP+8tbL/uLGq/7Coov+po57/qZ+X/0tGRf9kYmH/08/L/9PQzf/Rzsz/2NPR/9vW1f/j29f/5t7b/+Xg - 3P/h2dv/2dnO/9vT1f/Rysz/09C1/87Fwv9YWlr/eXl5/xcXF/8aGhr/GhkZ/xwaGv8fHR3/ZmBb/2Nc - Wf9iXVb/aWJX/zQvN/8zNTX/P0I0/0EzRv9FPzn/d3WG/3J0c/8AAAD/CQoK/2ZkY/8FAwL/Dw0N/0A8 - N/9EPTr/Qjk8/z8xNv+anJ7/o6ax/6inl/+nrbf/Mykv/29tcv9pamj/AAEA/yUmJP8mIiH/ExEQ/woK - Cv+Lh4L/j4qH/2hkYf/Qx8//joPJ/zQ2v/9ubcD/TUDC/zIsLP9wa2r/ZWJh/xMQD/9LSEf/JiEg/0lH - Rv8LCwv/lpOO/5WQjf+PhIv/oJCg/4V5vP8rLsn/b2vH/0Q80f8zLS3/ZV5e/1pXWP8WFxX/NSwp/zAq - Jf9BPTr/JCAZ/zgxS/88OUr/PzpV/0ZAQv9XVVv/WldZ/2BbXf9dW1r/NzAt/1hWVf9QTEv/OTo4/2Jb - WP9GQDv/VFBP/zk2NP9TTk//UUpP/05FU/9RSUn/Li4u/zAtK/8xKi//Liwr/z43NP9QTk3/REA//0FA - P/9PS0r/VE9K/zs5OP84ODH/ZFpT/2BXT/9ZUE7/VU5F/y4rM/8jH4f/IBx9/zUzMv87NDH/R0VE/0A9 - Of9BPz7/QkA//0NBPv88Ozj/OTs1/1pNSf9XTkT/UklD/1BEQ/83OTP/ODY7/zg1Nf88Ojn/Pjc0/z48 - O/83NDD/ZV5b/2FeW/9fXFn/YV1Y/1xYVv+Dd27/e3Nr/3pya/92bmb/XVlW/2JcV/9kXFr/YV5a/2de - Wv83NDL/Ih4d/9nPy//W08v/2NDJ/9jQyf/Vzcf/2tLM/9jRyv/X0Mn/2dLL/9fQyf/Y0Mn/2NDJ/9HO - x//WzMj/Hxsa/1FPT9wqJiX/IR8d/yIeHf8iHh3/JCAf/yMfHv8jHx7/JCAf/yMfHv8iHh3/Ix8e/yMf - Hv8gHhz/KSUj/1FRUdwAAAAAnJycLJiYmC2YmJgtmJiYLZWVlS6YmJgtmJiYLZWVlS6VlZUumJiYLZiY - mC2YmJgtlZWVLpiYmC0AAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA//8AACgAAAAQAAAAIAAAAAEACAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAA - AAAHBQX/EhMS/xMSEf8WFRT/GBcX/xgZF/8bGRn/ICEg/yUlJP8oJCD/KCYl/ysrK/8tLSz/NS4p/zEt - LP8wLi3/MTAu/zIrMv8zLzD/NS4z/zQxMf8yMTf/NzU0/zc2Nf86NTT/ODY2/zk2Nf86Njb/OTk3/zo4 - N/8/Ojb/NTI6/zg1Of88ODn/Pjk4/zw6OP8+Ojn/Pzs6/z08Ov8/Pjr/Pzk//0A7N/9BOzr/Qz88/0Q+ - PP9DQD//RUE//0ZCPP9IQj//LSpG/zIwRf89N0b/PzpN/z01Uv89N1T/JiJr/yklaP9DQUH/Q0JB/0ZB - QP9FQ0H/RkNB/0ZEQ/9GRUT/SUFD/0hDQv9NQ0D/SEVD/0lEQ/9LRUL/TEZD/09HQf9IRUT/SUVE/0pH - Rf9OSEL/SUhG/0pIR/9LSEb/TUlH/09JRv9OSkf/SUVN/0pJSP9NSEv/TEpJ/05KSP9PTEj/T0tO/1NL - Q/9SSUb/WU9G/1BMSv9TTUn/U05J/1ZNSP9cVUv/XFBM/15WT/9LQVL/UEdQ/1BMU/9SS1X/W1NS/1tV - Uf9aVlH/YVtV/2BdW/9kXlr/YF5c/2VgWv9jYl3/ZGFd/2VhXP9nYV3/ZmJf/2diXP9pYV//aGJe/2ll - Yv9oZmP/aWZl/2pnZP9qaGb/bGlo/2xqaP9ta2n/b2xs/3Rtav93b2j/cG5s/3Jvbv95cGz/fXZv/3Nu - cf9xcnD/cnNz/3Rycv91cnD/dXV1/3V0ev92dHr/gXhw/4V7cv+Fgnv/TUqf/1JOr/9fWqL/REO//1NW - u/9cWrr/Y2Sp/z48xf+FgYb/i4KB/5CIhv+Iipv/ioif/5WVlf+WlJT/l5WU/5aXlf+Xlpb/mpWS/5iW - lf+Zl5f/l5iW/5iYl/+dmpX/mZiY/5+bmf+imZH/o5uW/6WclP+noJr/pqGd/6ujnf+tpqD/rKij/66u - rv+xqaP/ta6o/7iwrP+0tLT/tra2/7u0sP+/t7T/wLq2/8O+t//Fvbj/xL+4/8W+uP/Gvrn/yb+8/8fA - uv/Iwbv/yMG+/8nAvf/LxMD/zsnA/9DMyP/Sz8v/087K/9PQzf/W0s//19LO/9rV0v/b1tH/49zY/+ff - 2//i2tz/5uDd/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/s6Ceop6ipaCipqKipJ+fsxYeIiosO0NVTUg9Li0lJRlWq6ywtLa6wMS7ubWxrq1cecrJy8zO - 0NHT0s/NyMfGb4sLBAYGCnZsamARFRczV4yIAQdNAANpaGhajZ2ZnB6JhwUOGAIMsq+QqpOVl5YsioMZ - OQ4/CKijm5qRmJKUL4Z/HA0NKwk1NDYoUlhUZUGCfVNdS0obZmRjQBASExRFfnlMUV4dI2JhX0cxNzgy - Rn16VT48JidhW1lCIB8XIVB7d4Bwc3Fyj46FgW50dXaEeGvBvL+/vcPCwMK/wMC+xW06RENERElERElJ - REREQ0E5t6SppaWkpaWkpKWlpaeguP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/NES/NESNameTableViewer.Designer.cs b/BizHawk.Client.EmuHawk/tools/NES/NESNameTableViewer.Designer.cs index 277d3d48e1..10753f142d 100644 --- a/BizHawk.Client.EmuHawk/tools/NES/NESNameTableViewer.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/NES/NESNameTableViewer.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NESNameTableViewer)); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.NameTableView = new BizHawk.Client.EmuHawk.NameTableViewer(); this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); @@ -185,7 +184,7 @@ this.txtScanline.Size = new System.Drawing.Size(60, 20); this.txtScanline.TabIndex = 2; this.txtScanline.Text = "0"; - this.txtScanline.TextChanged += new System.EventHandler(this.ScanlineTextbox_TextChanged); + this.txtScanline.TextChanged += new System.EventHandler(this.ScanlineTextBox_TextChanged); // // rbNametableNW // @@ -431,7 +430,7 @@ this.Controls.Add(this.groupBox2); this.Controls.Add(this.groupBox1); this.Controls.Add(this.menuStrip1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.NESControllerIcon_MultiSize; this.MainMenuStrip = this.menuStrip1; this.MinimumSize = new System.Drawing.Size(687, 588); this.Name = "NESNameTableViewer"; diff --git a/BizHawk.Client.EmuHawk/tools/NES/NESNameTableViewer.cs b/BizHawk.Client.EmuHawk/tools/NES/NESNameTableViewer.cs index 2f8d37f9fd..c49aaee196 100644 --- a/BizHawk.Client.EmuHawk/tools/NES/NESNameTableViewer.cs +++ b/BizHawk.Client.EmuHawk/tools/NES/NESNameTableViewer.cs @@ -23,7 +23,7 @@ namespace BizHawk.Client.EmuHawk set => RefreshRate.Value = value; } - int scanline; + private int _scanline; public NESNameTableViewer() { @@ -37,7 +37,7 @@ namespace BizHawk.Client.EmuHawk #region Public API - public bool AskSaveChanges() { return true; } + public bool AskSaveChanges() => true; public bool UpdateBefore => true; public void Restart() @@ -49,7 +49,7 @@ namespace BizHawk.Client.EmuHawk public void UpdateValues() { - _ppu.InstallCallback1(() => Generate(), scanline); + _ppu.InstallCallback1(() => Generate(), _scanline); } public void FastUpdate() @@ -59,56 +59,56 @@ namespace BizHawk.Client.EmuHawk #endregion - private unsafe void DrawTile(int* dst, int pitch, byte* pal, byte* tile, int* finalpal) + private unsafe void DrawTile(int* dst, int pitch, byte* pal, byte* tile, int* finalPal) { dst += 7; - int vinc = pitch + 8; + int verticalInc = pitch + 8; for (int j = 0; j < 8; j++) { int lo = tile[0]; int hi = tile[8] << 1; for (int i = 0; i < 8; i++) { - *dst-- = finalpal[pal[lo & 1 | hi & 2]]; + *dst-- = finalPal[pal[lo & 1 | hi & 2]]; lo >>= 1; hi >>= 1; } - dst += vinc; + dst += verticalInc; tile++; } } - private unsafe void GenerateExAttr(int* dst, int pitch, byte[] palram, byte[] ppumem, byte[] exram) + private unsafe void GenerateExAttr(int* dst, int pitch, byte[] palRam, byte[] ppuMem, byte[] exRam) { byte[] chr = _ppu.GetExTiles(); - int chr_mask = chr.Length - 1; + int chrMask = chr.Length - 1; - fixed (byte* chrptr = chr, palptr = palram, ppuptr = ppumem, exptr = exram) - fixed (int* finalpal = _ppu.GetPalette()) + fixed (byte* chrPtr = chr, palPtr = palRam, ppuPtr = ppuMem, exPtr = exRam) + fixed (int* finalPal = _ppu.GetPalette()) { - DrawExNT(dst, pitch, palptr, ppuptr + 0x2000, exptr, chrptr, chr_mask, finalpal); - DrawExNT(dst + 256, pitch, palptr, ppuptr + 0x2400, exptr, chrptr, chr_mask, finalpal); + DrawExNT(dst, pitch, palPtr, ppuPtr + 0x2000, exPtr, chrPtr, chrMask, finalPal); + DrawExNT(dst + 256, pitch, palPtr, ppuPtr + 0x2400, exPtr, chrPtr, chrMask, finalPal); dst += pitch * 240; - DrawExNT(dst, pitch, palptr, ppuptr + 0x2800, exptr, chrptr, chr_mask, finalpal); - DrawExNT(dst + 256, pitch, palptr, ppuptr + 0x2c00, exptr, chrptr, chr_mask, finalpal); + DrawExNT(dst, pitch, palPtr, ppuPtr + 0x2800, exPtr, chrPtr, chrMask, finalPal); + DrawExNT(dst + 256, pitch, palPtr, ppuPtr + 0x2c00, exPtr, chrPtr, chrMask, finalPal); } } - private unsafe void GenerateAttr(int* dst, int pitch, byte[] palram, byte[] ppumem) + private unsafe void GenerateAttr(int* dst, int pitch, byte[] palRam, byte[] ppuMem) { - fixed (byte* palptr = palram, ppuptr = ppumem) - fixed (int* finalpal = _ppu.GetPalette()) + fixed (byte* palPtr = palRam, ppuPtr = ppuMem) + fixed (int* finalPal = _ppu.GetPalette()) { - byte* chrptr = ppuptr + (_ppu.BGBaseHigh ? 0x1000 : 0); - DrawNT(dst, pitch, palptr, ppuptr + 0x2000, chrptr, finalpal); - DrawNT(dst + 256, pitch, palptr, ppuptr + 0x2400, chrptr, finalpal); + byte* chrPtr = ppuPtr + (_ppu.BGBaseHigh ? 0x1000 : 0); + DrawNT(dst, pitch, palPtr, ppuPtr + 0x2000, chrPtr, finalPal); + DrawNT(dst + 256, pitch, palPtr, ppuPtr + 0x2400, chrPtr, finalPal); dst += pitch * 240; - DrawNT(dst, pitch, palptr, ppuptr + 0x2800, chrptr, finalpal); - DrawNT(dst + 256, pitch, palptr, ppuptr + 0x2c00, chrptr, finalpal); + DrawNT(dst, pitch, palPtr, ppuPtr + 0x2800, chrPtr, finalPal); + DrawNT(dst + 256, pitch, palPtr, ppuPtr + 0x2c00, chrPtr, finalPal); } } - private unsafe void DrawNT(int* dst, int pitch, byte* palram, byte* nt, byte* chr, int* finalpal) + private unsafe void DrawNT(int* dst, int pitch, byte* palRam, byte* nt, byte* chr, int* finalPal) { byte* at = nt + 0x3c0; @@ -120,10 +120,10 @@ namespace BizHawk.Client.EmuHawk byte a = at[ty >> 2 << 3 | tx >> 2]; a >>= tx & 2; a >>= (ty & 2) << 1; - int palnum = a & 3; + int palNum = a & 3; - int tileaddr = t << 4; - DrawTile(dst, pitch, palram + palnum * 4, chr + tileaddr, finalpal); + int tileAddr = t << 4; + DrawTile(dst, pitch, palRam + palNum * 4, chr + tileAddr, finalPal); dst += 8; } dst -= 256; @@ -131,20 +131,20 @@ namespace BizHawk.Client.EmuHawk } } - private unsafe void DrawExNT(int* dst, int pitch, byte* palram, byte* nt, byte* exnt, byte* chr, int chr_mask, int* finalpal) + private unsafe void DrawExNT(int* dst, int pitch, byte* palRam, byte* nt, byte* exNt, byte* chr, int chrMask, int* finalPal) { for (int ty = 0; ty < 30; ty++) { for (int tx = 0; tx < 32; tx++) { byte t = *nt++; - byte ex = *exnt++; + byte ex = *exNt++; - int tilenum = t | (ex & 0x3f) << 8; - int palnum = ex >> 6; + int tileNum = t | (ex & 0x3f) << 8; + int palNum = ex >> 6; - int tileaddr = tilenum << 4 & chr_mask; - DrawTile(dst, pitch, palram + palnum * 4, chr + tileaddr, finalpal); + int tileAddr = tileNum << 4 & chrMask; + DrawTile(dst, pitch, palRam + palNum * 4, chr + tileAddr, finalPal); dst += 8; } dst -= 256; @@ -164,30 +164,30 @@ namespace BizHawk.Client.EmuHawk return; } - var bmpdata = NameTableView.Nametables.LockBits( + var bmpData = NameTableView.Nametables.LockBits( new Rectangle(0, 0, 512, 480), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); - var dptr = (int*)bmpdata.Scan0.ToPointer(); - var pitch = bmpdata.Stride / 4; + var dPtr = (int*)bmpData.Scan0.ToPointer(); + var pitch = bmpData.Stride / 4; // Buffer all the data from the ppu, because it will be read multiple times and that is slow var ppuBuffer = _ppu.GetPPUBus(); - var palram = _ppu.GetPalRam(); + var palRam = _ppu.GetPalRam(); if (_ppu.ExActive) { - byte[] exram = _ppu.GetExRam(); - GenerateExAttr(dptr, pitch, palram, ppuBuffer, exram); + byte[] exRam = _ppu.GetExRam(); + GenerateExAttr(dPtr, pitch, palRam, ppuBuffer, exRam); } else { - GenerateAttr(dptr, pitch, palram, ppuBuffer); + GenerateAttr(dPtr, pitch, palRam, ppuBuffer); } - NameTableView.Nametables.UnlockBits(bmpdata); + NameTableView.Nametables.UnlockBits(bmpData); NameTableView.Refresh(); } @@ -239,11 +239,11 @@ namespace BizHawk.Client.EmuHawk _ppu?.RemoveCallback1(); } - private void ScanlineTextbox_TextChanged(object sender, EventArgs e) + private void ScanlineTextBox_TextChanged(object sender, EventArgs e) { - if (int.TryParse(txtScanline.Text, out scanline)) + if (int.TryParse(txtScanline.Text, out _scanline)) { - _ppu.InstallCallback1(() => Generate(), scanline); + _ppu.InstallCallback1(() => Generate(), _scanline); } } @@ -277,12 +277,12 @@ namespace BizHawk.Client.EmuHawk private void NameTableView_MouseMove(object sender, MouseEventArgs e) { - int TileX, TileY, NameTable; + int tileX, tileY, nameTable; if (NameTableView.Which == NameTableViewer.WhichNametable.NT_ALL) { - TileX = e.X / 8; - TileY = e.Y / 8; - NameTable = (TileX / 32) + ((TileY / 30) * 2); + tileX = e.X / 8; + tileY = e.Y / 8; + nameTable = (tileX / 32) + ((tileY / 30) * 2); } else { @@ -290,44 +290,44 @@ namespace BizHawk.Client.EmuHawk { default: case NameTableViewer.WhichNametable.NT_2000: - NameTable = 0; + nameTable = 0; break; case NameTableViewer.WhichNametable.NT_2400: - NameTable = 1; + nameTable = 1; break; case NameTableViewer.WhichNametable.NT_2800: - NameTable = 2; + nameTable = 2; break; case NameTableViewer.WhichNametable.NT_2C00: - NameTable = 3; + nameTable = 3; break; } - TileX = e.X / 16; - TileY = e.Y / 16; + tileX = e.X / 16; + tileY = e.Y / 16; } - XYLabel.Text = $"{TileX} : {TileY}"; - int PPUAddress = 0x2000 + (NameTable * 0x400) + ((TileY % 30) * 32) + (TileX % 32); - PPUAddressLabel.Text = $"{PPUAddress:X4}"; - int TileID = _ppu.PeekPPU(PPUAddress); - TileIDLabel.Text = $"{TileID:X2}"; - TableLabel.Text = NameTable.ToString(); + XYLabel.Text = $"{tileX} : {tileY}"; + int ppuAddress = 0x2000 + (nameTable * 0x400) + ((tileY % 30) * 32) + (tileX % 32); + PPUAddressLabel.Text = $"{ppuAddress:X4}"; + int tileID = _ppu.PeekPPU(ppuAddress); + TileIDLabel.Text = $"{tileID:X2}"; + TableLabel.Text = nameTable.ToString(); - int ytable = 0, yline = 0; + int yTable = 0, yLine = 0; if (e.Y >= 240) { - ytable += 2; - yline = 240; + yTable += 2; + yLine = 240; } - int table = (e.X >> 8) + ytable; - int ntaddr = (table << 10); + int table = (e.X >> 8) + yTable; + int ntAddr = (table << 10); int px = e.X & 255; - int py = e.Y - yline; + int py = e.Y - yLine; int tx = px >> 3; int ty = py >> 3; - int atbyte_ptr = ntaddr + 0x3C0 + ((ty >> 2) << 3) + (tx >> 2); - int at = _ppu.PeekPPU(atbyte_ptr + 0x2000); + int atBytePtr = ntAddr + 0x3C0 + ((ty >> 2) << 3) + (tx >> 2); + int at = _ppu.PeekPPU(atBytePtr + 0x2000); if ((ty & 2) != 0) at >>= 4; if ((tx & 2) != 0) at >>= 2; at &= 0x03; diff --git a/BizHawk.Client.EmuHawk/tools/NES/NESNameTableViewer.resx b/BizHawk.Client.EmuHawk/tools/NES/NESNameTableViewer.resx index 83e9a19668..6acf840389 100644 --- a/BizHawk.Client.EmuHawk/tools/NES/NESNameTableViewer.resx +++ b/BizHawk.Client.EmuHawk/tools/NES/NESNameTableViewer.resx @@ -126,299 +126,4 @@ 281, 17 - - - - AAABAAYAMBwAAAEAIAAIFgAAZgAAADAcAAABAAgASAoAAG4WAAAgIAAAAQAgAKgQAAC2IAAAICAAAAEA - CACoCAAAXjEAABAQAAABACAAaAQAAAY6AAAQEAAAAQAIAGgFAABuPgAAKAAAADAAAAA4AAAAAQAgAAAA - AAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADU1NQYpKSkY5aUlIGWlJKBl5WVfpSS - koGUlJSBlpaWepaWlnqWlpZ6lZWVfpWVlX6VlZV+lZWVfpWVlX6XlZV+mZeVfpmXlX6XlZV+l5WVfpaU - lIGWlJSBl5WVfpWXlX6Vl5V+lZeVfpWXlX6Xl5V+l5eVfpeXlX6Xl5V+l5WVfpeVlX6WlJSBl5WVfpeV - lX6XlZV+l5WVfpeVlX6VlZV+l5WVfpeVlX6Vk5GFlJKSgaSkpGPY2NgUAAAAALe3t0QsLCz/CAQD/w4L - B/8WEQ7/Ew4L/xQQD/8NCwr/DwoJ/xALCv8RDAv/Eg0M/xINDP8SDQz/FA8O/xUQD/8QDAv/EQ0M/xMP - Dv8TDw7/FBAP/xUREP8WEhH/FxMS/xMREP8TERD/EhAP/xIQD/8RDw7/EA4N/xAODf8PDQz/FBAP/xMP - Dv8SDg3/Eg4N/xIODf8SDg3/EQ0M/xAMC/8MCgn/Ew8O/xEMCf8UDwz/DwwI/wsHBv8tLS3/s7O3Ry0s - Lv8bGRn/bWhl/4aAe/+Gfnf/eXNu/4B5dv+FgH3/h357/4qBfv+NhIH/j4aD/5GIhf+Tiof/lo2K/5iP - jP+blpP/nJeU/5+al/+hnJn/o56b/6ahnv+oo6D/qqWi/6qlov+ppKH/p6Kf/6Wgnf+inZr/oJuY/5+a - l/+emZb/mJOQ/5eSj/+VkI3/k46L/5GMif+Qi4j/jomG/4yHhP+KhYL/hX57/395dP+Lg3z/jIaB/3Nu - a/8dGxv/KSgq/wQCAv9OSUj/qaOe/6Wck/+onZX/rKOa/6igmf+moJv/rKSd/66mn/+yqqP/tKyl/7au - p/+4sKn/u7Os/762r/++tbL/wLe0/8O6t//Gvbr/yL+8/8vCv//OxcL/0MfE/9HKx//Qycb/zcbD/8rD - wP/HwL3/xL26/8K7uP/Burf/w7u0/8G5sv++tq//u7Os/7iwqf+1rab/s6uk/7Gpov+uqKP/sami/7Ws - o/+uo5v/qaCX/62nov9STUz/BwUF/wQAAP9VUE3/tq6n/8e9s//GurD/x72z/8rBuP/Jwbr/ycG6/8zE - vf/Oxr//z8fA/8/HwP/QyMH/08vE/9XNxv/Yz8v/2tHN/9zTz//e1dH/4djU/+Pa1v/l3Nj/597a/+rh - 3f/p4Nz/597a/+Tb1//h2NT/39bS/93U0P/c08//1c3G/9TMxf/QyMH/zcW+/8rCu//Hv7j/xLy1/8K6 - s/+8tK3/v7at/7uxp/+3q6H/t62j/6ujnP9STUr/BQAB/wAAAP9tbW3/7u7u/+Li4v/c3Nz/19fX/9fX - 1//Z2dn/2tra/9zc3P/U1NT/1tbW/9zc3P/d29v/1NLS/9rY2P/d29v/3NjX/+Xg3f/m4Nv/6ePe/+nj - 3v/n4N3/5+Dd/+bk2v/k4dz/4d3j/+Tc5v/i2+D/49nf/93Y2f/Y3c7/3NnU/97Z0P/i2+L/1tfT/9LV - 0//Y0dj/3NrQ/9fUz//i4bv/0c7d/8vO1v/d1db/4tvS/+Hp2P9dYmX/BwUA/wAAAP9+fn7/6enp/2ho - aP8mJib/JiYm/ysrK/8pKSn/JiYm/yoqKv8pKSn/MjAw/yYkJP8sKir/NTMz/zEvL/8wLi7/VVFQ/4aB - fv95c27/fXdy/3lzbv9ya2j/e3Rx/3dvaP91cmr/dHJq/3FvZf99d2z/X1ZT/z01PP9BPUP/RT5L/0FE - Nf8+Qjz/OjhM/0FFP/9QVkX/QjtI/0tMSv9PQE7/TEZl/0tPUP9VT0j/hHt3/+bo6P92dYX/BAIA/wMD - A/9ycnL/3Nzc/zk5Of8AAAD/BAQE/wAAAP8BAQH/AgAA/wQCAv8CAAD/AwEB/wQCAv8CAAD/BAIC/wMB - Af8DAQH/Ih4d/0pFQv9IQj3/TEZB/09JRP9KQ0D/SEE+/0s/Pf9DOjf/RkE4/0Q+Mf9JQTT/OTAm/xkS - D/8fGiP/HxUi/xgfCv8iISv/LRpN/yUbLP8kIhr/IB0f/ygmJv8qHzn/JSM3/x4iHP8sJiH/XFRU/+Ti - 6P95dYj/BAAA/wMFBf9zdXX/4+Xl/zAyMv8AAAD/AQMD/wACAv8GCAj/W1lY/2xqaf9pZ2b/NzU0/wcF - BP8FAwL/DQsK/wcIBv8RDw//GhgX/yckIP8tKST/JiAb/yslIP80LSr/KiUi/zIpJv8yKSz/Ni4v/zQp - K/8tHyP/KyUY/zw+Kv+TlpT/q6aj/52hov+jpqr/in2N/11PUf+ioYz/rK+m/6Sjp/+mrLH/dn53/yos - Jv80KjD/YVxb/+Pi3v9vbXP/BwUE/wIDAf9tbmz/4+Ti/zk6OP8AAQD/AAEA/wMEAv8eHx3/cGxr/0E9 - PP9TT07/XVta/wgGBf8GBAP/CQcG/wsMCv8GBgb/YV9e/8bDv//KxsH/w724/7q0r/+5tLH/w767/7q0 - r/+1rrH/rKin/6+oq/++sr7/cG5k/1RaT//NzOb/mYzg/4F75v+mquX/vbjH/4iCff/S0+j/kYrl/4N9 - 3P+zt+f/pKyr/zUyLf8tIir/XVpW/+bj3v9wb2v/CQsF/xMUEv9pamj/2NnX/zk6OP8AAQD/AwQC/wME - Av8nKCb/RkFA/xINDP8gHBv/VFBP/wQCAf8VExL/BwgG/wgJB/8LCwv/fnx7/+Xi3v+Cfnn/Z2Ne/2ll - YP+KhYL/zsnG/3l2bv9dWlb/YGJP/4aFd//Ty9L/fn15/0ZIU/+GecX/Hhi9/wANof8kJrr/gYek/3aC - bP9gX7v/DhKt/wkRsv8/L73/hoak/z85NP8zLi3/YF1Z/+Td4P9wa2r/Cw4F/wkHBv9pZ2b/4d/e/zo4 - N/8NCwr/UU9O/1BOTf9oZmX/TUhH/yIdHP8qJST/cm5t/15cW/9aWFf/MTIw/wwNC/8KCgr/eXd2/+jl - 4f+sqKP/pKCb/6Sgm/+wq6j/2NPQ/6ymof+WkJH/nZ6K/7Ctnv/Qxc//fnx0/0tNVf9hUaX/BADM/wAE - xv8QCs3/bGic/3Bxb/9GO7//BAjL/wAAx/8lEr//dHOV/zkyKf8yLSr/YWJZ/+Xb4f9nYWL/CgwM/xkV - FP9jX17/3dnY/0I+Pf8YFBP/YFxb/zMvLv87Nzb/MCsq/xwXFv8lIB//My8u/y8tLP9APj3/U1RS/wkK - CP8NDQ3/QUJA/39+ev+Kh4L/hIB7/4J+ef+GgX7/gHt4/4R4eP+LfYj/f3Zy/4V5ef+EcYT/U1BB/09X - Rv+bksr/JyTe/w4H+P88RMf/npWq/4N3bf+JiMz/GRLl/xEW4/9XVtz/iZGY/0M6MP80LTD/YGRZ/+Xf - 2v9lXV3/ExEd/xYWFv9aWFj/2dXU/0E/Pv8SExH/UFFN/ysoJP8wJyT/LSQg/y8mIv8rJSD/LCYh/ykk - If84MzD/UUxJ/xYTD/8bGBD/IyIU/zMzJ/8oKyn/Jyo4/ycoPP8uLzn/NzU0/y40L/81Ozr/MDQ1/zU1 - Nf8+Ozf/Mi0q/0E8Pf9vbXP/Y12A/1tYbv9xb3X/YWJZ/0tMQ/93dnj/ZGBz/11Xdv93dXT/XFhX/zw3 - NP82Lyz/aWJf/+Db2P9aWFf/FhcV/x4eHv9cV1j/1dHQ/0NBQP8dHhz/VVZS/zs4NP8+NTL/Rz84/0Q7 - N/86NC//QTs2/zk0Mf9ST0v/YF1Z/y8rKv8zLyr/QzlF/1xJdP9VPIb/UDeN/0w5fv9USmj/XllW/1E8 - ev9QOYP/SDF7/006a/9USlb/Pzwu/yopH/8wLzP/My81/yolJ/82Lyz/Ny4q/ygfG/87MDL/MSkw/zEp - NP80MjH/NjIx/zUwLf86MzD/aGFe/9nU0f9XVVT/Hh8d/x4fHf9RTUz/0c3M/1ZSUf85Ojj/X2Be/1lW - Uv9lXlv/TkY//0Q8Nf9GQDv/aWNe/1RPTP9YVFP/SUdG/zAuLf87ODT/RkI9/1lVUP9VUFL/Uk5a/05K - Vv9STFH/V05K/09EVP9QRlf/SkJT/01FT/9UTEz/R0E8/zQxLf8uLi7/MjYq/zAxJ/8wLSn/OTI1/zct - M/8yKy7/NzIz/zQyMf8tKyr/NjIx/zo1Mv8/ODX/bWZj/9jT0P9RT07/HR4c/ygpJ/9LR0b/z8rJ/15a - Wf85Ojj/Ozw6/zw6Of9PSkn/ZFxV/01FPv9HQTz/XVhV/z47N/87OTj/NTU1/z4+Pv8xKjf/OzQ3/01H - QP9JRDv/SkZB/0dAQ/9KPUX/SzpD/0c/OP9GQjf/Q0I0/0M/NP9COTX/OjIz/zMuL/8wMS//Li8z/zUy - O/80LTr/NCo7/zkvQP8xKjf/OjU+/zEvNf86ODf/Ozc2/zgzMP86MzD/bWZj/9nU0f9OTEv/ICEf/ygp - J/9DPz7/zcjH/2NeXf9DQUD/Ozw6/0JAP/9QTEv/WVNO/1JMR/9WUk3/WVZS/z87Ov87OTj/MzMz/zU1 - Nf85OjH/S0k//2hhWP9oXlf/Zl1Z/2FZUv9kW1H/aV5Q/2RZUf9cUlL/WU5W/15TVv9YUUj/SkQ5/zg0 - M/8uKzT/GBSR/x0bk/8hHpL/FxOE/yAdiv8eG4j/IR6L/xsbh/81MzL/OjY1/zs2M/88NTL/bWZj/9PO - y/9HRUT/KSoo/y8wLP9DQDz/zcXF/11YV/9APj3/QUJA/0NEQv9EQD//U05L/0xHRP9OS0f/TElF/0A+ - Pf89Ozr/Ojs5/zs8Ov81NDb/RT9A/2BUUv9eUkz/XlVM/1tSSf9aT0v/Xk9N/1xVQv9VTj3/U01A/1hS - R/9XTkX/SD87/zkzNP8zMjb/MCxP/ywqR/8yM0f/Ky04/zI1Pf8wMzv/LjA7/zMzQ/87OTj/Pzs6/0A7 - OP9AOTb/cGlm/8/Kx/9APj3/LS4s/zM0MP8/PDj/zcbD/2JaWv9CQD//R0hG/0RERP9CQED/R0VE/0A+ - Pf89Ozr/Q0FA/0E/Pv88Ozf/PDs3/z8+Ov88QDX/RkI9/1tNTv9ZSkj/W09J/1lQRv9WTkH/VEs+/1VD - UP9RR0f/TUo8/05HPv9MPkL/QDI9/zkzNP86PjL/PTY5/zgyM/89ODX/Ozcy/z06Mv89NzL/PTcy/0A5 - Nv89Ozr/Ozc2/zo1Mv8+NzT/cmto/87Jxv89Ozr/MzQy/zY3M/85NjL/zMXC/2piYv9HQ0L/QUJA/zs7 - O/9EQkL/Ojo6/0RERP89PT3/QD49/zs5OP9APzv/QD87/z06Nf84ODj/S0ZF/2peWv9rX1X/amJR/2Ve - T/9iW1L/ZFhY/2BXTv9hWVL/XFZR/1pUTf9dVEv/UEhB/z86N/86ODj/PDov/z89M/8/Ojf/QDo7/z84 - O/9COjv/Rj4+/0A5Nv8+PDv/QDw7/0I9Ov9GPzz/dm9s/8rFwv84NjX/Njc1/zs6Nv80MS3/ysPA/7qv - q/+Xi4X/loyF/5mSif+TjoX/mJCJ/5iQif+YkIn/mJCJ/5iQif+YkIn/mJCJ/5iQif+Zj4j/oJaP/6ie - l/+roZr/qqCZ/6iel/+nnZb/qJ6X/6ael/+mnpf/pp6X/6Sclf+impP/npaP/5uTjP+ZkYr/nZWO/52V - jv+dlY7/nZWO/52Vjv+dlY7/nZWO/52Vjv+cl47/oJmQ/6CWj/+glI7/uq+r/8nCv/82My//Ozo2/0ZH - Rf8lISD/wLu4/+Pa1//h1tL/5dzY/9rUzf/e29P/39fQ/9/X0P/f19D/39fQ/9/X0P/f19D/39fQ/9/X - 0P/c1M3/39fQ/+La0//i2tP/4NjR/9/X0P/g2NH/4trT/97Wz//f19D/4NjR/+HZ0v/h2dL/4NjR/9/X - 0P/f19D/39fQ/9/X0P/f19D/39fQ/9/X0P/f19D/39fQ/9/X0P/Y1c3/39nS/+Tb1//d0s7/6N/c/8G8 - uf8hHRz/TU5M/4SEhP8RDw7/ZmJh/6mhof+mn5z/pp+c/6qmof+in5r/p6Kf/6ein/+nop//p6Kf/6ei - n/+nop//p6Kf/6ein/+nop//p6Kf/6ahnv+loJ3/pJ+c/6Oem/+loJ3/pqGe/6Wgnf+loJ3/pqGe/6ah - nv+moZ7/p6Kf/6ahnv+moZ7/p6Kf/6ein/+nop//p6Kf/6ein/+nop//p6Kf/6ein/+mo57/pqKd/6eg - nf+qo6D/o5ub/2RgX/8VExL/f39//9ra2gdcXFzXCQcH/wkEBf8ZFRT/DQkI/xAODf8PDQz/EAwL/xAM - C/8QDAv/EAwL/xAMC/8QDAv/EAwL/xAMC/8SDg3/Eg4N/xENDP8RDQz/Eg4N/xIODf8RDQz/EAwL/xIO - Df8SDg3/Eg4N/xENDP8RDQz/EAwL/xAMC/8QDAv/EQ0M/xENDP8RDQz/EQ0M/xENDP8RDQz/EQ0M/xEN - DP8NCwr/EQ8O/wsHBv8XExL/DQgJ/wwKCv9cXFzX////AwAAAAAAAAAAtbW1SZyZmXScmZl0kpCQhJmZ - mXSYmJV3mJWVd5iVlXeYlZV3mJWVd5iVlXeYlZV3mJWVd5iVlXeXlZV7l5WVe5eVlXuYlZV3mpiYd5qY - mHeYlZV3l5WVe5eVlXuXlZV7l5WVe5eVlXuXlZV7l5WVe5iVlXeYlZV3mJWVd5iVlXeYlZV3mJWVd5iV - lXeYlZV3mJWVd5iVlXeXl5V7mZmZdJCOjoiYlZV3n5ycbba2tkYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// - /////wAA5P/5/9/nAACAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAgAAAAAABAAD7/////98AAP///////wAAKAAAADAAAAA4AAAAAQAIAAAA - AACACgAAAAAAAAAAAAAAAAAAAAAAAAMCAf8JBgX/BwgG/woLBv8GCAj/DAsK/xENDP8VEg7/FBMR/xkV - FP8aGBP/ExEd/x0dHP8hHRz/KB8b/x4iHP8lIhv/Hxci/ykdJ/8qHzn/JiQj/yslIv8nKCb/Kikl/yIh - K/8tIir/Kysq/zAnJP8yKSb/Mi0s/y4yLf8xMif/OTAm/zMyLf85Myz/PTwt/yUjN/8uLTP/Jyk6/ywu - OP8yKzP/NCs6/y4wO/80MzL/OjQz/zw5Nf8yMzv/PDU7/zU7Ov87Ojn/Qjo0/0AyPf9BPTv/ST88/zxA - Nf8+Qjz/Q0I1/0lBNP9EQTz/SkQ8/0xJPf9UTD3/LRpN/ywqR/85L0D/MCxP/zIzRf86OEz/QzxC/0s8 - Q/9DPEn/TTpr/0o1fP9RPHr/REJB/0pGQv9HSEb/TUlF/05CTv9NS0r/UUdH/1NMQv9STUv/W01L/09X - Rv9RU0P/WVJF/1NQTf9bU0v/VFpP/0tIU/9SRFP/U0tT/1tOU/9STlr/VVNR/1tUUv9cWFb/XFdY/1xa - Wv9gV07/ZV5P/2BUUv9iWlL/aV5U/2JcW/9qXlr/X2Be/2BiT/9qYlH/YmJb/2hhXP9MRmX/VEpo/1tY - bv9cSXT/XVd2/11iZf9mYWH/amVj/21oZf9ra2r/cGxl/3Jtav93c2z/a2hz/3Fvdf90dHP/fHZy/3Z+ - d/9+enT/d3Z4/359e/+Dd23/g3t4/3aCbP+GgXz/FxOE/xsbh/8eG4j/GBSR/x0bk/8gHYr/IR6S/wAN - of8OEq3/CRGy/x4Yvf8lEr//JCa6/z8vvf9ROYf/Rju//2NdgP93dYb/bGic/3Rzlf9hUaX/YF+7/wID - yf8QCs3/JyTe/xUU5P8OB/j/PETH/1dW3P+IeYj/hnnF/4N93P+Be+b/hISE/4uFgv+OiYb/lIuF/5KM - iv+Yj4r/lpGO/5qSi/+dnor/iZGY/5WUlP+Ylpb/l5iW/52Zlv+bmZn/oJWO/6SclP+onZb/o52a/6Kh - jP+poJf/pqGe/6uim/+wrZ7/g4ak/56Vqv+doaL/paSm/6qkof+sqaT/o6aq/6Ssq/+vqKv/tKuj/7Cr - qP+6r6v/u7Os/6assf+1rrH/tbS1/7u0sf+7tLv/wLe0/8O6s//DvLn/yL+8/8bBvv/Kwrz/4uG7/4mI - zP+bksr/vbjH/5WL4v+mquX/s7fn/8zFwf/Oycb/z8rJ/9DHxP/SysT/0MXP/9LNy//Yz8v/19TP/9vT - zf/Y3c7/y87W/9LM1//U1NT/3dbQ/9zZ0//Y0dj/29ra/+HW0v/h2dP/5Nza/+jf3P/m4tz/zczm/9LT - 6P/j2+L/3uDg/+bm5v//////AAAA/wAAAP/9/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39 - /f39/f39/f39/f39/f397sW0tbW1tLW1t7S0tLS4tbW1tbW0tLS0tLa0tri4trW0tLW0tLW1tLS1sLDH - 7v3TGgEDBwYHAwYGBgYGBgYGBgYGBgcICAkICAYIBgUGBggHBwUHBwYFBQcGBgYBGtEaDHiIiHyCiIiI - iKytra+xtbW8vLzAwMbGxsa8vLy3tbGwsLCsrqyrq4aGiKt7DBkATb+6u8C+v8DHy8vLzc7O0tTV19fZ - 5OTl5eHh2dbW1tXVzs7Oy8vLx8vLwb7HUgEAV87X1dXZ2NjZ4uXi5eXo6urv7/T19fb29/X18/Pv7+fl - 5eHZ1tbVzs7Oy8vAVwAAfvz78vLu8vLy7u7y8u7x8vD19vf19vb39fz69frw6/Dr+u7u7+vu2u3s8PT3 - dQEAhPx5FBYaFhQaGSsVGiseJVeqfICAe3x8fHt6fGUvREY4N0NKVEZPTnBaWIb8mgAAfvIxAAAAAAAA - AAAAAAAAAA1LO0tRO0s7Mjk5OSAHEQ0KGD4SEAwUEyQQEGD8mgAAgfweAAAAAmN5eSsAAAUCBgwQFw4Q - IRAcHSgdEhAjtsfExaZgvcrFz4EXKGn3fgAAefwwAAAAD3s0UmMFAAUFAmPY4tjS0tjS0MbL3XhZ+N6p - 392I+d6o4MkhGWH8eQMIee4xAAAAGUoGDVwACAQFBYT8gm5uq+J8Y2yI54Rap5OQlcKHnpGSmMIyHWf6 - ewUFefUvBV9Xd0sNFXxjYCEFBIT3x7+/zOrGsbLB5oJanZ+foJt+mJ+flJwgHW71dwUJbvI3CGMoMR0J - EB0dSl8DBjqIrIaEiISGpoaGpj1U3KGjpMOF26KipbMyKG71aQsIYe9ECFQXGxUbFRwQIVcHBxAfFycm - KiweLiUrNB06fZlyfm5NgHR0f2MsIHfyYwgRY+5KDF8tLDk0IjIsV2EaHURzl5eXcWBJl0hHWyMVKCsX - IR0OLCgoKyshLGrvXwwPT+NXLXZgaVEyOm9XYE8lLTphXF5aW1NbWlpaUjUhHiEdHSwsKCsrGiEsMnfu - Xw8WTuNjMDExT2c7O2ExMSs3JSw7O01LRUU1OTgyMiwdJSUuKSlAJy8oLS8iLHjvTxEXOuN2SjA6UldS - V2ExMSsrLU1qaGdmZW1lYF1mVjsrJYyNjYmOi46KKy0sLHjnShoeOuRgN0pMN1JNUk00MTAxK0RmZGRT - U1NWPT1XVjUsK0E/QiUuLilCLzI0MnrhSh4rMeFpOkxKSk0xMTo3LS06NjpTU1NWUT1bUDw9RTMsLS0s - MiwsMiwyNC8sLHvjMSsrLeF3RToxOjFMMTQtOjotLUtqaGxtZWlYZ2FYWFE0LS0jNC80NDQyMTQ0NXvh - KystIdnNr62wra+vsa+vra+tr7q+wMC7u7rAvru6urGxsbm1srqxurm1srm5uc3hLDFMDdP18/Xq8O/z - 7/T09PT06ur09PTw9PTq7/Pw9PTv7+rq6urq6urr6vD16vbWDVSqCHbGvMDGv8W/v7+/v7+/xsa/v7y8 - v7+/v8XAv7+/v8bGxsbGxsbGv8a8xrx2CITyYwMBCQEGBQYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYG - BgYGBgYGBQUFCAUFY/v9/dG4uLS2t7W1tbW1tbW1tbW1tbi4tbW1tbS0tbW1tbW1tbW1tbW1triuuLjR - /f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f3///////8AAOT/ - +f/f5wAAgAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAIAAAAAAAQAA+//////fAAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAACAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzAWoqKhBlpSUaZeUlGeUlJRplJSUZZeXl2OWlpZmlpaWZpaW - lmaWlpZmmJaWZpiWlmaYlpZmlpSUaZeUlGeWlpZmlpaWZpaWlmaWmJZmlpiWZpaWlmaXlJRnl5SUZ5iW - lmaYlpZmlpaWZpaWlmaYlZNolZKSaqenp0C/v78Ea2tuUSIhH8gpJCLYKyck1yomJdgnIiLWJyMi1Sgk - I9YpJSTXKicl1yonJdcpJSTXKicl1ysoJ9csKSjYLikp1yopKNcpKCfXKSgn1ygnJdcoJyTXKicn1yon - JdcpJSXXKSUl1yklJNcnIyPXKSUk1yklI9cpJSLYJCIiyGxsbFI4ODjCOTUz/1JNSP9OSET/UEtJ/1JL - Sf9VTUv/V1BO/1lSUP9cVVP/XldV/15aWP9iXVv/ZF9d/2ZiYP9pZGL/Z2Rh/2ZiYP9kYF7/YV1b/2Bc - Wv9eWlj/XFhW/1pWVP9ZVFL/V1NR/1VQTv9TTUv/UEtG/1VQS/89OTf/ODY4wyAeH/9xbGn/k4yF/5CI - gf+Ri4b/lo6J/5qSjf+elpH/oZmU/6WcmP+poJz/q6Sh/6+opf+yq6j/trCt/7qzsP+6tLH/uLKv/7Su - q/+wqqf/rqil/6uloP+oop3/pZ6a/6Gblv+emJP/m5WQ/5iRjf+Xj4j/mZGK/3Zxbv8gHh//FxMT/5WP - i/+wpp3/s6mg/7Kqo/+0rKX/uLCp/7y0rf++tq//wbmy/8W9t//Hvrv/y8K//8/Gwv/Tysb/1s3K/9jQ - zf/Vzsr/0cnG/83Fwv/Kwr//yMC6/8a+t//BubL/vLSt/7iwqf+1raf/tKyl/7Wrov+upJv/lY+K/xkV - Ff8YFRT/pqCb/8vDuv/Kwbn/zMW+/8zFv//PyML/0MnD/9HLxf/TzMb/1s/K/9rSzv/e1dH/4dnV/+Tb - 1//m3dr/6OHc/+be2//j2tj/4NfU/9zU0P/X0Mr/1c3H/8/Jw//LxL//yMG7/8W+tv/CurT/vrWu/760 - q/+cmJH/GRQU/xsbG//Nzc3/19fX/83Nzf/MzMz/zs7O/87Ozv/Ly8v/0NDQ/8zKyv/Qzs7/08/O/9/Z - 1v/h29b/4dvW/+DZ1v/e3NP/2tfZ/9zV3P/a0db/0c/M/9HQyf/V0Mr/z87N/8rLy//Rzsn/0M7C/8zJ - zf/Hx83/2tLM/8DHvP8cHBn/Hx8f/87Ozv9gYGD/MTEx/zU1Nf8xMTH/NDQ0/zo4OP8yMDD/PDo6/zs5 - Of9UUVD/iIOA/4J8d/9+eHP/f3h1/312b/97eHH/endu/25lYf9HQUf/TUdR/0pMQP9ERFD/TVFJ/05L - T/9UUVL/VU1m/1VXVv9+dnH/ycvO/yAeIP8eHh7/w8PD/zMzM/8JCQn/CAgI/wgHB/8KCQn/CwkJ/woI - CP8MCgr/CwkJ/yMgH/9UTkv/VE5J/1VPSv9RSkf/UUdD/05IQf9OSDv/RDwy/yEaG/8lHSn/ISYZ/y0h - Rf8qJSz/JyQl/y8rMP8tKD7/KSsm/1dPTv/Jx8//IR0h/x4gIP/Fxsb/Jicn/wECAv8BAgL/MC8u/0pI - SP8vLSz/BQMC/wgGBf8HBwX/GBYV/zIuKv8yLSj/NzEs/zUvLP85Ly3/OjIx/zguK/8wKB//QEA1/3t2 - eP91eXb/cGV7/1dNTv9+f3b/fXyB/2Vpbf8pKCT/U01N/8fFx/8hHiD/HR8e/8bHxv8nKSj/AAEA/wYH - Bv9RUE7/VlJR/1BOTf8HBQT/CQcG/wkKCP80MjH/gX56/4B6df98dnH/f3p3/312dP95cnP/enB0/11W - UP9kZ1//pZ7E/5OSyP+moLX/h4B//6Six/+Ylsf/l56j/zAsKv9TTU3/x8XC/yEhH/8hIiD/wcLA/yor - Kv8AAQD/CgsJ/05LSv8wLCv/UU5N/wcFBP8JCAb/CQoI/1RSUv/JxsH/npmU/5qUkP++ubb/mZSQ/4uJ - gv+noaD/ioaD/2Vncv91bNL/UVTK/5WVvv+IiY3/aWjO/1pZzP+Rk7P/NjEu/1JOTP/Hw8H/IyQe/yYm - JP++vrz/LCwq/xUVFP8jIyH/REFA/xoVFP9OSkn/IiAf/xkZGP8JCgj/YF5d/9DMyP9/e3b/gn15/8K9 - uv+Cfnj/cnJj/6Kflv+Tj43/VFJt/y8nwP8HDrH/Y2Wp/21ygP8eILf/EhK5/25ppv86NC//VFJN/8a/ - wv8jJB//IiAf/8K/vv8wLi3/QkA//09NTP9NSUj/Ih0c/1ZSUf9VU1L/Pj89/wsLCv9VVFP/yMXB/5+b - lv+gnJf/v7q3/6CZlv+Wk4f/rqeh/4iEgP9TUmj/IhzG/wgIzv9eWan/a2eD/xoZzP8NCsr/ZWKh/zgx - Kv9VVU3/xbzA/yIhI/8rJyb/vrq5/zczMv9NSUj/NDAv/zItLP8fGhj/Lyop/zIwL/9OTUz/CgsJ/zIz - Mf98e3b/f3x4/315dv98d3X/gHV3/3xzc/9/cnf/XFVP/2BjZf9GQdP/HRrk/4N/rP+BeIH/ODLY/yYp - 2v96gKT/PjYw/1VWTv/Evrr/JyQs/ycmJv+5trX/NTMy/0FCPv8sKCT/LiUh/y0kIP8rJiH/LSgl/0pG - Q/8WEw7/IiAV/zU1LP8tLzj/Li8//zk4Of81OTb/Njk6/zw6Of83Mi//TUpM/2Negv9cWXf/Z2Zl/1hY - U/9lYnr/X1p8/2RhYv86NTH/W1VS/766t/8nJyX/LCsr/7ezsv84Nzb/RUZD/zg0MP9AODL/PTUx/zs1 - MP87NzP/WVVR/ysnJP85Mjb/UkFp/0k1ev9HOW3/VE5T/0o6bv9FM2//Sjxc/0E8Nf8xMCv/OzhC/zYx - Nf8/ODT/NCwp/z01Pf87ND//PTo5/zcxLv9cVVL/ubWy/ysrKf8rKyn/sq6t/0hFRP9QUU//UU1K/09H - Qf9DOzb/VU9K/05JRv9RT03/MS8t/0E8O/9YT13/Ukdo/05GX/9XT1D/T0Fh/0s+YP9ORFX/SEI9/zAu - Kv8xMi3/Ly0n/zYvL/8yKSz/NS4x/zIuMP80MC//OTQx/19YVf+2srD/Kiop/y4tLP+vqqn/Uk9O/0ZH - Rf9MSUf/WVJM/0hAOv9bVVH/R0RB/0A+Pv83NTb/PTc4/1FMRv9NSUr/SkRL/09CR/9KQUT/R0JC/0hB - P/9COjj/Mi8u/y8xLv8yMDL/NS02/zYtOP82MTf/MjAy/zc0M/85NDH/YFlW/7ayr/8qKyn/Ly8t/6yn - pv9XVFL/Ozw6/0JAP/9bVE//TkhC/1dTT/89Ojj/NTU1/zg3OP8+Ojj/WFFJ/1ZPSv9TSkn/V0lJ/1JK - Qv9NR0L/TkZB/0M8N/8zMDD/JyVR/yonYf8oIVz/LCZe/y0pXv8rKk//OTY1/zk0Mf9gWVb/s6+s/y0t - LP8wMC3/qqWk/1lVVP8+Pjz/RENB/1RPS/9QS0f/VFFN/z47Ov82NjX/Nzc1/0RCPP9lXFX/Y1pU/19W - T/9kWE//X1ZM/1dOTv9bUk7/TEU8/zYyM/8jH2r/IiB7/x8db/8lJHH/JCNx/ycnYv86NjX/PDc0/2Fa - V/+uqqf/MDEv/zQ0MP+qo6L/VlFR/0FBQP9DQ0H/TUlH/0pFQ/9KR0T/Pz08/zo7OP86Ojj/QT09/15S - T/9dU0v/WlBI/1tOSf9ZUEP/Ukw//1VORf9KQD3/NzM0/zIvRf8vLUP/LzA6/zM1Ov8xMTn/NjU+/z06 - Of8/OTb/ZF1a/6qmpP8yMjD/NjYy/6mjoP9aU1P/RUVE/0NCQv9FQ0L/Pz08/0E/Pv8/PTz/PDs3/z4+ - OP9DQTv/W01N/1tOSf9ZUEX/VUxA/1RFTf9OSj//TkU//0Q2Pv85NTP/PDg2/zk0M/87NzP/PTky/z03 - Mv8/OTf/Ozg3/zs2M/9lXlv/qaWi/zU1NP82NjL/p6Ge/2BZWf9CQkD/PT09/z08PP9CQUH/Pz09/zw6 - OP8/Pjr/Ozk1/0ZCQf9pXVf/aWBR/2NcT/9iV1X/X1ZO/1xVUP9ZU0v/UklD/z05N/87OTH/Pjsz/z85 - Of8/ODr/RDw8/z85N/8/Ozr/Qj06/2liX/+loZ//NjY0/zg3M/+ln5v/opeU/4Z9eP+GgXn/hX95/4eB - e/+HgHr/hn95/4eAev+Gf3n/jYR//52Si/+elIv/m5GJ/5qQiv+YkIn/mJCJ/5WOh/+QiIH/iYF7/4mD - e/+LhH3/i4N+/4uDfv+MhH7/i4R9/42Hf/+OhX7/pZuX/6Sem/85NzT/PDs5/5yXlP/TycX/y8G9/8XA - uP/Iwbr/yMC5/8jAuf/IwLn/yMC5/8jAuf/Kwbr/0MfA/8/Gv//Nxb7/z8a//8zEvf/Nxb7/zcW+/8vD - vP/Jwbr/ysK7/8rCu//Kwrv/ysK7/8rCu//Jwrr/ycS8/83Dvv/Vy8j/nJeU/z8+PP9VVFP/cGxq/8G5 - t//BubX/vrmz/765tP+/ubT/v7m0/7+5tP+/ubT/v7i0/7+4tP/AubX/vriz/723sv+/ubT/vrey/7+4 - tP+/ubT/v7m0/764s/+/ubT/v7m0/7+5tP+/ubT/v7m0/765s/++ubP/wbm1/8C4tv9wbGr/VVVU/2Zm - Zqk4NjX7ZF1d/2ReXP9lYl//ZGBd/2RgXv9kYF7/ZGBe/2RgXv9lYF7/ZWFf/2RgXf9kX13/Y19d/2Rf - Xf9kYF7/ZWBe/2RgXv9kYF7/ZF9d/2VgXv9lYF7/ZWBe/2VgXv9lYF7/ZGBe/2RhXv9kXlz/Y11c/zk2 - NvtkYmKoaWlpKSkmJrolICDUKCMj1yYlJNQnIyLVJyMi1ScjItUnIyLVJyMi1ScjI9UpJiTWKCUj1Sgl - JdUoJSXVJyMj1SkmJNYoJiTWKCQj1igkI9YnIyLVJyMj1SclI9UnJSPVJyUj1SclI9UnIyPVJiYl1CYj - ItgmISPSKikpuWJiYicAAAAAs7OzLJ2aml6Tk5NomJiYX5iVlWGYlZVhmJWVYZiVlWGYlZVhlpaWYpiW - lmSXlZVjmJWVYZiVlWGXlZVjmJaWZJaTk2SWk5NkmJaWZJiVlWGYlZVhmJWVYZiVlWGYlZVhmJWVYZaW - lmKXl5dgkY6Oa5yamlu3t7crAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////+AAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAB//////////8oAAAAIAAAAEAAAAABAAgAAAAAAAAI - AAAAAAAAAAAAAAAAAAAAAAAAAQIC/wgGBf8HCQj/DAwL/xEPD/8UExP/HRoW/x0bGv8hHR3/JSAf/yQj - I/8rJiP/LCkm/ysrKv80LCb/Mi0s/zIwLv88NC//Liww/zMuM/80LDn/LzEx/zExMP81MjH/NjQy/zMx - Nf82MjT/NjU1/zgyMf84NDL/PTYx/zk2Nf89NzT/Nzg2/zw4Nf81MDn/OTc4/zo7OP89OTj/PTw6/z05 - Pf8+Pj3/QDc0/0I7Nv9BPDv/SDw//0NBPf9KQz3/KCdP/y0rTv8yL0b/My5J/zIyQP85NUf/PTlA/yok - Xf8rKVv/JyNg/yonYf8lI2n/JSNz/0E8Rf9APk7/QD5Q/0g9Vv9MP13/RDZm/0U6ZP9JPWL/Rjdt/0VD - Q/9KRUP/TEhF/0ZETP9KRUr/SklI/01KSf9LTEn/TkxK/05KTP9OTE3/UUpE/1lPRv9QREj/U01K/1hL - Sf9WUEz/W1FL/05DVf9PSVL/Vk5S/1ZMXP9UUlH/WVRT/1xZVP9XV1j/W1VY/1paWv9dWlj/XVhd/11d - XP9iVk7/YVpU/2FaWP9gXVv/ZF1a/2JdXP9mX1z/aF5Z/2VhXv9rYVv/cGZa/09GYP9QQmD/UUZo/1lX - Yv9OS3//XFl0/2FeY/9jXW7/YGBg/2diYP9jYmT/ZGRk/2llY/9taGb/aWxn/2Fhaf9ybGn/dnBv/3ly - bv97em3/bGN3/21ufP90b3L/eG9y/29ydf9xcXH/dnNz/3d1c/92dHT/enJy/3x3cv98cnT/eHZ2/3l4 - c/95eHf/fHh1/3d2f/95eHj/fHx9/4V+ef+FgHr/iYJ9/xIXuf8cGr3/KSq8/1JPgf9ZVYL/YF2f/21q - jP9ucYv/eXOD/2xtlv9yb57/XVqq/2Zhov9gYan/DQ7O/xUSy/8vKMb/JCLL/ykny/8wMMf/OTLA/0A9 - xf9KRcP/VVfJ/11by/9sa8z/d2/P/4B/gP+LhoL/kouE/5OMif+XkY3/mZGM/4qLlv+PlZ3/k5GR/5WR - kP+WlZX/mZOR/5mVkf+dlZH/mJaW/5yXlv+XmJb/mJiX/56Zlf+ZmJj/nZqa/56cnP+glpP/opqW/6Oe - m/+moZ3/qaKd/7Cmnv+HiKz/npmv/42Nuf+loaD/q6Wj/66ppv+op6j/rayr/7Oqo/+yrKr/tbGu/7qz - rf+1rrD/srGx/7Wysf+2tLL/tbK1/7W1tf+6tLD/vLi1/7m3vv+8vLz/wbev/8K6tP/Fvrn/yL+4/8bA - tv/DwLz/ycG8/5OTxP+gnMD/w8HA/8zEwf/OyMT/zcbJ/83JyP/RysX/1c3K/9bQyv/Z0s7/0dDS/93U - 0v/h2dX/49vZ/wAAAP8AAAD/AAAA//nYv7+/xca/v7/DxsbDw8G/xcXFxcbDw8bDv8O/wNj5tZKSkpCQ - kpWSkpCVlZOVlpWVlZWVlZWSlZKSlZOSlZZfDRgRHRAQGB0dHxwiHyIkIB8fGx0fHxgYGxAQHRAPXxsi - UUhIVlZXXV1mYmpqfHx7fGttaF5eXl1XXVZRViIbCXy3t7e3ubrCzM3V1dna3Nza2tXVz8/MzMK6ubq3 - gAoHttbQ2drc3Ofk6Ort8vX3+Pf08e3t6Ojc3NnZ2c+2CQrO7e3x7fLy8vb3+Pr7/Pz8/Pz6+Pj19e3s - 7Onj58EICubs3t7e4t7i3+Pm8vL19fX08fHm5OTl4uTc4+Lp4AoN5ohGS0lGT0dOTHm2tpiZmJiXgmBi - XnNoZHl3erblDQ3iKQMEBAcFAwQEClZSVlRRUVErCxQQNRQeKDUQZ+UNDd4WAAANLA0BAQIGIiIrKysq - KhEuhoWEXZKifw9d4g0N3hUAAkhcSwMCAhuTjoGTjYqHXn7v7tK27+68HV3hDQ3YFQADRhFIAwIDXOTH - udvAmdS2hbSx07uzstEfXeMNDdgYBg0uCEYMBwNk7Ji247aDzrh1rpqnoZybpite3Q0N2B8bRy8JR00n - A1bbwcHawLfPtnWqqKWgq6mfIl7aDQ/YJy4fEAkREUYFGJGLi5OPhodmf7CspKKvraMrXtoNEtQpJxAO - CwwQRgYLRj8/SklKSidQnp1/Yp6ddiJm2BAW1C4uIh4RIiJWDBpBRUNZREJAKx09KCsqPT0sHWnUFRDN - UE1WSCtRSFQYLFtycVpxRFgvEBYNEw8TExcdZ9QQFsldRkhXL1ZIKSMsSE9KU0dHLywQFRMUFCQaGxxr - zhUXxF4pRlZIViwhISZXV1RSUUhIKxMwOjc6ODEfHmvNFhDBaClGVk5WJyQhLmZlZWVlUlcvHzk8Ozs7 - OCIfa8kYIcBgLkZIR0YuIicvV2VXUlJRUi0fMjM0NDQ0JitswhgYwWdGRkYuRiknIi5VZVJSUlFRLR0i - JSIiJCsmIHzDGyG6fUxIS1BIR0hHVW9vbm5sZmZXSC8vSEhRSEhRgMEhIr7LmZmYmJiYmJe2urq6urq6 - t7eZmZmZmZmZmbbLviInuPHo5Ojo6Ojo6Ojt7ert6urp6ejo6Ojo6OTp6vG4J1B93ePc3Nzj49zc3OPj - 4+Pj49zj4+Pj4+Pj3Nzj3H1QZCZrbXltfHlufHl8bW1tbW1rfGtteXl5eXl5eW1rJmR4GxcdGB0XFxcX - HB8fHR0dHx8dHxccHR0dHRcYFxcbZHiMlYySkJWVlZWVkJCSkpCQkJCQlZWVlZWVlZKMlZV44t7Jv8jG - w8PDw8PDw8jIw8O/v8PDw8PDw8PDxr3K3uL//////////4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAH//////////ygAAAAQAAAAIAAAAAEAIAAAAAAAAAgAAAAA - AAAAAAAAAAAAAAAAAADGxsYJlJSUMJSUlDCVlZUukpKSL5eXki+Xl5IvlJSUMJeXki+Xl5cvl5eXL5SU - lDCXl5cvkpKSL5OTkzLf398IKSkp/yQeG/8cGRj/IBsZ/yIcG/8hHRz/JCAf/ygkIv8lIyL/IyAf/yAe - Hf8iHh3/IR0c/xsZGP8iHRr/Kyoq/0dDQv+jmZH/oZyX/62lnv+zq6T/ubGu/8G4tf/JwL3/y8TB/8K7 - uP+8tbL/uLGq/7Coov+po57/qZ+X/0tGRf9kYmH/08/L/9PQzf/Rzsz/2NPR/9vW1f/j29f/5t7b/+Xg - 3P/h2dv/2dnO/9vT1f/Rysz/09C1/87Fwv9YWlr/eXl5/xcXF/8aGhr/GhkZ/xwaGv8fHR3/ZmBb/2Nc - Wf9iXVb/aWJX/zQvN/8zNTX/P0I0/0EzRv9FPzn/d3WG/3J0c/8AAAD/CQoK/2ZkY/8FAwL/Dw0N/0A8 - N/9EPTr/Qjk8/z8xNv+anJ7/o6ax/6inl/+nrbf/Mykv/29tcv9pamj/AAEA/yUmJP8mIiH/ExEQ/woK - Cv+Lh4L/j4qH/2hkYf/Qx8//joPJ/zQ2v/9ubcD/TUDC/zIsLP9wa2r/ZWJh/xMQD/9LSEf/JiEg/0lH - Rv8LCwv/lpOO/5WQjf+PhIv/oJCg/4V5vP8rLsn/b2vH/0Q80f8zLS3/ZV5e/1pXWP8WFxX/NSwp/zAq - Jf9BPTr/JCAZ/zgxS/88OUr/PzpV/0ZAQv9XVVv/WldZ/2BbXf9dW1r/NzAt/1hWVf9QTEv/OTo4/2Jb - WP9GQDv/VFBP/zk2NP9TTk//UUpP/05FU/9RSUn/Li4u/zAtK/8xKi//Liwr/z43NP9QTk3/REA//0FA - P/9PS0r/VE9K/zs5OP84ODH/ZFpT/2BXT/9ZUE7/VU5F/y4rM/8jH4f/IBx9/zUzMv87NDH/R0VE/0A9 - Of9BPz7/QkA//0NBPv88Ozj/OTs1/1pNSf9XTkT/UklD/1BEQ/83OTP/ODY7/zg1Nf88Ojn/Pjc0/z48 - O/83NDD/ZV5b/2FeW/9fXFn/YV1Y/1xYVv+Dd27/e3Nr/3pya/92bmb/XVlW/2JcV/9kXFr/YV5a/2de - Wv83NDL/Ih4d/9nPy//W08v/2NDJ/9jQyf/Vzcf/2tLM/9jRyv/X0Mn/2dLL/9fQyf/Y0Mn/2NDJ/9HO - x//WzMj/Hxsa/1FPT9wqJiX/IR8d/yIeHf8iHh3/JCAf/yMfHv8jHx7/JCAf/yMfHv8iHh3/Ix8e/yMf - Hv8gHhz/KSUj/1FRUdwAAAAAnJycLJiYmC2YmJgtmJiYLZWVlS6YmJgtmJiYLZWVlS6VlZUumJiYLZiY - mC2YmJgtlZWVLpiYmC0AAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA//8AACgAAAAQAAAAIAAAAAEACAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAA - AAAHBQX/EhMS/xMSEf8WFRT/GBcX/xgZF/8bGRn/ICEg/yUlJP8oJCD/KCYl/ysrK/8tLSz/NS4p/zEt - LP8wLi3/MTAu/zIrMv8zLzD/NS4z/zQxMf8yMTf/NzU0/zc2Nf86NTT/ODY2/zk2Nf86Njb/OTk3/zo4 - N/8/Ojb/NTI6/zg1Of88ODn/Pjk4/zw6OP8+Ojn/Pzs6/z08Ov8/Pjr/Pzk//0A7N/9BOzr/Qz88/0Q+ - PP9DQD//RUE//0ZCPP9IQj//LSpG/zIwRf89N0b/PzpN/z01Uv89N1T/JiJr/yklaP9DQUH/Q0JB/0ZB - QP9FQ0H/RkNB/0ZEQ/9GRUT/SUFD/0hDQv9NQ0D/SEVD/0lEQ/9LRUL/TEZD/09HQf9IRUT/SUVE/0pH - Rf9OSEL/SUhG/0pIR/9LSEb/TUlH/09JRv9OSkf/SUVN/0pJSP9NSEv/TEpJ/05KSP9PTEj/T0tO/1NL - Q/9SSUb/WU9G/1BMSv9TTUn/U05J/1ZNSP9cVUv/XFBM/15WT/9LQVL/UEdQ/1BMU/9SS1X/W1NS/1tV - Uf9aVlH/YVtV/2BdW/9kXlr/YF5c/2VgWv9jYl3/ZGFd/2VhXP9nYV3/ZmJf/2diXP9pYV//aGJe/2ll - Yv9oZmP/aWZl/2pnZP9qaGb/bGlo/2xqaP9ta2n/b2xs/3Rtav93b2j/cG5s/3Jvbv95cGz/fXZv/3Nu - cf9xcnD/cnNz/3Rycv91cnD/dXV1/3V0ev92dHr/gXhw/4V7cv+Fgnv/TUqf/1JOr/9fWqL/REO//1NW - u/9cWrr/Y2Sp/z48xf+FgYb/i4KB/5CIhv+Iipv/ioif/5WVlf+WlJT/l5WU/5aXlf+Xlpb/mpWS/5iW - lf+Zl5f/l5iW/5iYl/+dmpX/mZiY/5+bmf+imZH/o5uW/6WclP+noJr/pqGd/6ujnf+tpqD/rKij/66u - rv+xqaP/ta6o/7iwrP+0tLT/tra2/7u0sP+/t7T/wLq2/8O+t//Fvbj/xL+4/8W+uP/Gvrn/yb+8/8fA - uv/Iwbv/yMG+/8nAvf/LxMD/zsnA/9DMyP/Sz8v/087K/9PQzf/W0s//19LO/9rV0v/b1tH/49zY/+ff - 2//i2tz/5uDd/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/s6Ceop6ipaCipqKipJ+fsxYeIiosO0NVTUg9Li0lJRlWq6ywtLa6wMS7ubWxrq1cecrJy8zO - 0NHT0s/NyMfGb4sLBAYGCnZsamARFRczV4yIAQdNAANpaGhajZ2ZnB6JhwUOGAIMsq+QqpOVl5YsioMZ - OQ4/CKijm5qRmJKUL4Z/HA0NKwk1NDYoUlhUZUGCfVNdS0obZmRjQBASExRFfnlMUV4dI2JhX0cxNzgy - Rn16VT48JidhW1lCIB8XIVB7d4Bwc3Fyj46FgW50dXaEeGvBvL+/vcPCwMK/wMC+xW06RENERElERElJ - REREQ0E5t6SppaWkpaWkpKWlpaeguP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/NES/NESPPU.Designer.cs b/BizHawk.Client.EmuHawk/tools/NES/NESPPU.Designer.cs index 163084553e..937a052889 100644 --- a/BizHawk.Client.EmuHawk/tools/NES/NESPPU.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/NES/NESPPU.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NesPPU)); this.PatternGroup = new System.Windows.Forms.GroupBox(); this.Table1PaletteLabel = new System.Windows.Forms.Label(); this.Table0PaletteLabel = new System.Windows.Forms.Label(); @@ -436,7 +435,7 @@ this.txtScanline.Size = new System.Drawing.Size(79, 22); this.txtScanline.TabIndex = 6; this.txtScanline.Text = "0"; - this.txtScanline.TextChanged += new System.EventHandler(this.ScanlineTextbox_TextChanged); + this.txtScanline.TextChanged += new System.EventHandler(this.ScanlineTextBox_TextChanged); // // groupBox1 // @@ -755,7 +754,7 @@ this.cHRROMTileViewerToolStripMenuItem.Name = "cHRROMTileViewerToolStripMenuItem"; this.cHRROMTileViewerToolStripMenuItem.Size = new System.Drawing.Size(227, 26); this.cHRROMTileViewerToolStripMenuItem.Text = "CHR ROM Tile Viewer"; - this.cHRROMTileViewerToolStripMenuItem.Click += new System.EventHandler(this.cHRROMTileViewerToolStripMenuItem_Click); + this.cHRROMTileViewerToolStripMenuItem.Click += new System.EventHandler(this.ChrROMTileViewerToolStripMenuItem_Click); // // NesPPUStatusBar // @@ -813,7 +812,7 @@ this.numericUpDownCHRROMBank.Name = "numericUpDownCHRROMBank"; this.numericUpDownCHRROMBank.Size = new System.Drawing.Size(160, 22); this.numericUpDownCHRROMBank.TabIndex = 1; - this.numericUpDownCHRROMBank.ValueChanged += new System.EventHandler(this.numericUpDownCHRROMBank_ValueChanged); + this.numericUpDownCHRROMBank.ValueChanged += new System.EventHandler(this.NumericUpDownChrRomBank_ValueChanged); // // CHRROMView // @@ -840,7 +839,7 @@ this.Controls.Add(this.PalettesGroup); this.Controls.Add(this.PatternGroup); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.NESControllerIcon_MultiSize; this.KeyPreview = true; this.MainMenuStrip = this.NesPPUMenu; this.Margin = new System.Windows.Forms.Padding(4); diff --git a/BizHawk.Client.EmuHawk/tools/NES/NESPPU.cs b/BizHawk.Client.EmuHawk/tools/NES/NESPPU.cs index ec28b1c2cd..ccf0d86115 100644 --- a/BizHawk.Client.EmuHawk/tools/NES/NESPPU.cs +++ b/BizHawk.Client.EmuHawk/tools/NES/NESPPU.cs @@ -10,14 +10,14 @@ namespace BizHawk.Client.EmuHawk public partial class NesPPU : Form, IToolFormAutoConfig { // TODO: - // If 8/16 sprite mode, mouse over should put 32x64 version of prite + // If 8/16 sprite mode, mouse over should put 32x64 version of sprite // Speedups // Smarter refreshing? only refresh when things of changed, perhaps peek at the ppu to when the pattern table has changed, or sprites have moved // Maybe 48 individual bitmaps for sprites is faster than the overhead of redrawing all that transparent space - private readonly byte[] _ppuBusprev = new byte[0x3000]; + private readonly byte[] _ppuBusPrev = new byte[0x3000]; private readonly byte[] _palRamPrev = new byte[0x20]; - int scanline; + private int _scanline; private Bitmap _zoomBoxDefaultImage = new Bitmap(64, 64); private bool _forceChange; @@ -34,12 +34,12 @@ namespace BizHawk.Client.EmuHawk set => RefreshRate.Value = value; } - private bool _chrromview; + private bool _chrRomView; [ConfigPersist] private bool ChrRomView { - get => _chrromview; - set { _chrromview = value; CalculateFormSize(); } + get => _chrRomView; + set { _chrRomView = value; CalculateFormSize(); } } public NesPPU() @@ -52,18 +52,18 @@ namespace BizHawk.Client.EmuHawk { ClearDetails(); Generate(true); - CHRROMViewReload(); + ChrRomViewReload(); } #region Public API - public bool AskSaveChanges() { return true; } + public bool AskSaveChanges() => true; public bool UpdateBefore => true; public void NewUpdate(ToolFormUpdateType type) { } public void UpdateValues() { - _ppu.InstallCallback2(() => Generate(), scanline); + _ppu.InstallCallback2(() => Generate(), _scanline); } public void FastUpdate() @@ -74,22 +74,22 @@ namespace BizHawk.Client.EmuHawk public void Restart() { Generate(true); - CHRROMViewReload(); + ChrRomViewReload(); } #endregion - private byte GetBit(byte[] PPUBus, int address, int bit) + private byte GetBit(byte[] ppuBus, int address, int bit) { - return (byte)((PPUBus[address] >> (7 - bit)) & 1); + return (byte)((ppuBus[address] >> (7 - bit)) & 1); } - private bool CheckChange(byte[] PALRAM, byte[] PPUBus) + private bool CheckChange(byte[] palRam, byte[] ppuBus) { bool changed = false; for (int i = 0; i < 0x20; i++) { - if (_palRamPrev[i] != PALRAM[i]) + if (_palRamPrev[i] != palRam[i]) { changed = true; break; @@ -100,7 +100,7 @@ namespace BizHawk.Client.EmuHawk { for (int i = 0; i < 0x2000; i++) { - if (_ppuBusprev[i] != PPUBus[i]) + if (_ppuBusPrev[i] != ppuBus[i]) { changed = true; break; @@ -108,8 +108,8 @@ namespace BizHawk.Client.EmuHawk } } - Buffer.BlockCopy(PALRAM, 0, _palRamPrev, 0, 0x20); - Buffer.BlockCopy(PPUBus, 0, _ppuBusprev, 0, 0x3000); + Buffer.BlockCopy(palRam, 0, _palRamPrev, 0, 0x20); + Buffer.BlockCopy(ppuBus, 0, _ppuBusPrev, 0, 0x3000); if (_forceChange) { @@ -126,12 +126,12 @@ namespace BizHawk.Client.EmuHawk byte value; int cvalue; - var bmpdata = dest.pattern.LockBits( - new Rectangle(new Point(0, 0), dest.pattern.Size), + var bmpdata = dest.Pattern.LockBits( + new Rectangle(new Point(0, 0), dest.Pattern.Size), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); - int* framebuf = (int*)bmpdata.Scan0; + int* frameBuf = (int*)bmpdata.Scan0; for (int z = 0; z < 2; z++) { int pal; @@ -152,14 +152,14 @@ namespace BizHawk.Client.EmuHawk value = (byte)(b0 + (b1 << 1)); cvalue = FinalPalette[PALRAM[value + (pal << 2)]]; int adr = (x + (j << 3)) + (y + (i << 3)) * (bmpdata.Stride >> 2); - framebuf[adr + (z << 7)] = cvalue; + frameBuf[adr + (z << 7)] = cvalue; } } } } } - dest.pattern.UnlockBits(bmpdata); + dest.Pattern.UnlockBits(bmpdata); dest.Refresh(); } @@ -173,17 +173,17 @@ namespace BizHawk.Client.EmuHawk if (_emu.Frame % RefreshRate.Value != 0 && !now) return; - byte[] PALRAM = _ppu.GetPalRam(); - int[] FinalPalette = _ppu.GetPalette(); - byte[] OAM = _ppu.GetOam(); - byte[] PPUBus = _ppu.GetPPUBus(); + byte[] palRam = _ppu.GetPalRam(); + int[] finalPalette = _ppu.GetPalette(); + byte[] oam = _ppu.GetOam(); + byte[] ppuBus = _ppu.GetPPUBus(); int b0; int b1; byte value; int cvalue; - if (CheckChange(PALRAM, PPUBus)) + if (CheckChange(palRam, ppuBus)) { _forceChange = false; @@ -192,8 +192,8 @@ namespace BizHawk.Client.EmuHawk { PaletteView.BgPalettesPrev[i].Value = PaletteView.BgPalettes[i].Value; PaletteView.SpritePalettesPrev[i].Value = PaletteView.SpritePalettes[i].Value; - PaletteView.BgPalettes[i].Value = FinalPalette[PALRAM[PaletteView.BgPalettes[i].Address]]; - PaletteView.SpritePalettes[i].Value = FinalPalette[PALRAM[PaletteView.SpritePalettes[i].Address]]; + PaletteView.BgPalettes[i].Value = finalPalette[palRam[PaletteView.BgPalettes[i].Address]]; + PaletteView.SpritePalettes[i].Value = finalPalette[palRam[PaletteView.SpritePalettes[i].Address]]; } if (PaletteView.HasChanged()) @@ -201,13 +201,13 @@ namespace BizHawk.Client.EmuHawk PaletteView.Refresh(); } - DrawPatternView(PatternView, PPUBus, FinalPalette, PALRAM); + DrawPatternView(PatternView, ppuBus, finalPalette, palRam); } - var bmpdata2 = SpriteView.sprites.LockBits(new Rectangle(new Point(0, 0), SpriteView.sprites.Size), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); - var framebuf2 = (int*)bmpdata2.Scan0.ToPointer(); + var bmpData2 = SpriteView.Sprites.LockBits(new Rectangle(new Point(0, 0), SpriteView.Sprites.Size), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); + var frameBuf2 = (int*)bmpData2.Scan0.ToPointer(); - int pt_add = _ppu.SPBaseHigh ? 0x1000 : 0; + int ptAdd = _ppu.SPBaseHigh ? 0x1000 : 0; bool is8x16 = _ppu.SPTall; @@ -216,36 +216,36 @@ namespace BizHawk.Client.EmuHawk { for (int r = 0; r < 16; r++) { - int BaseAddr = (r << 2) + (n << 6); - int TileNum = OAM[BaseAddr + 1]; + int baseAddr = (r << 2) + (n << 6); + int tileNum = oam[baseAddr + 1]; int patternAddr; if (is8x16) { - patternAddr = (TileNum >> 1) * 0x20; - patternAddr += 0x1000 * (TileNum & 1); + patternAddr = (tileNum >> 1) * 0x20; + patternAddr += 0x1000 * (tileNum & 1); } else { - patternAddr = TileNum * 0x10; - patternAddr += pt_add; + patternAddr = tileNum * 0x10; + patternAddr += ptAdd; } - int Attributes = OAM[BaseAddr + 2]; - int Palette = Attributes & 0x03; + int attributes = oam[baseAddr + 2]; + int palette = attributes & 0x03; for (int x = 0; x < 8; x++) { for (int y = 0; y < 8; y++) { int address = patternAddr + y; - b0 = (byte)((PPUBus[address] >> (7 - x)) & 1); - b1 = (byte)((PPUBus[address + 8] >> (7 - x)) & 1); + b0 = (byte)((ppuBus[address] >> (7 - x)) & 1); + b1 = (byte)((ppuBus[address + 8] >> (7 - x)) & 1); value = (byte)(b0 + (b1 << 1)); - cvalue = FinalPalette[PALRAM[16 + value + (Palette << 2)]]; + cvalue = finalPalette[palRam[16 + value + (palette << 2)]]; - int adr = (x + (r * 16)) + (y + (n * 24)) * (bmpdata2.Stride >> 2); - framebuf2[adr] = cvalue; + int adr = (x + (r * 16)) + (y + (n * 24)) * (bmpData2.Stride >> 2); + frameBuf2[adr] = cvalue; } if (is8x16) @@ -254,13 +254,13 @@ namespace BizHawk.Client.EmuHawk for (int y = 0; y < 8; y++) { int address = patternAddr + y; - b0 = (byte)((PPUBus[address] >> (7 - x)) & 1); - b1 = (byte)((PPUBus[address + 8] >> (7 - x)) & 1); + b0 = (byte)((ppuBus[address] >> (7 - x)) & 1); + b1 = (byte)((ppuBus[address + 8] >> (7 - x)) & 1); value = (byte)(b0 + (b1 << 1)); - cvalue = FinalPalette[PALRAM[16 + value + (Palette << 2)]]; + cvalue = finalPalette[palRam[16 + value + (palette << 2)]]; - int adr = (x + (r << 4)) + ((y + 8) + (n * 24)) * (bmpdata2.Stride >> 2); - framebuf2[adr] = cvalue; + int adr = (x + (r << 4)) + ((y + 8) + (n * 24)) * (bmpData2.Stride >> 2); + frameBuf2[adr] = cvalue; } patternAddr -= 0x10; @@ -269,7 +269,7 @@ namespace BizHawk.Client.EmuHawk } } - SpriteView.sprites.UnlockBits(bmpdata2); + SpriteView.Sprites.UnlockBits(bmpData2); SpriteView.Refresh(); HandleSpriteViewMouseMove(SpriteView.PointToClient(MousePosition)); @@ -515,14 +515,14 @@ namespace BizHawk.Client.EmuHawk if (found != null) { - var meth = found.GetType().GetMethod("ScreenshotToClipboard", Type.EmptyTypes); - if (meth != null) + var method = found.GetType().GetMethod("ScreenshotToClipboard", Type.EmptyTypes); + if (method != null) { - meth.Invoke(found, null); + method.Invoke(found, null); } - else if (found is PictureBox) + else if (found is PictureBox box) { - Clipboard.SetImage((found as PictureBox).Image); + Clipboard.SetImage(box.Image); } else { @@ -575,20 +575,20 @@ namespace BizHawk.Client.EmuHawk if (e.X >= SpriteView.ClientRectangle.Right) return; if (e.Y >= SpriteView.ClientRectangle.Bottom) return; - byte[] OAM = _ppu.GetOam(); - byte[] PPUBus = _ppu.GetPPUBus(); // caching is quicker, but not really correct in this case + byte[] oam = _ppu.GetOam(); + byte[] ppuBus = _ppu.GetPPUBus(); // caching is quicker, but not really correct in this case bool is8x16 = _ppu.SPTall; var spriteNumber = ((e.Y / 24) * 16) + (e.X / 16); - int x = OAM[(spriteNumber * 4) + 3]; - int y = OAM[spriteNumber * 4]; - var color = OAM[(spriteNumber * 4) + 2] & 0x03; - var attributes = OAM[(spriteNumber * 4) + 2]; + int x = oam[(spriteNumber * 4) + 3]; + int y = oam[spriteNumber * 4]; + var color = oam[(spriteNumber * 4) + 2] & 0x03; + var attributes = oam[(spriteNumber * 4) + 2]; var flags = "Flags: "; - int h = GetBit(PPUBus, attributes, 6); - int v = GetBit(PPUBus, attributes, 7); - int priority = GetBit(PPUBus, attributes, 5); + int h = GetBit(ppuBus, attributes, 6); + int v = GetBit(ppuBus, attributes, 7); + int priority = GetBit(ppuBus, attributes, 5); if (h > 0) { flags += "H "; @@ -608,7 +608,7 @@ namespace BizHawk.Client.EmuHawk flags += "Front"; } - int tile = OAM[spriteNumber * 4 + 1]; + int tile = oam[spriteNumber * 4 + 1]; if (is8x16) { if ((tile & 1) != 0) @@ -626,12 +626,12 @@ namespace BizHawk.Client.EmuHawk if (is8x16) { ZoomBox.Image = Section( - SpriteView.sprites, new Rectangle(new Point((e.X / 8) * 8, (e.Y / 24) * 24), new Size(8, 16)), true); + SpriteView.Sprites, new Rectangle(new Point((e.X / 8) * 8, (e.Y / 24) * 24), new Size(8, 16)), true); } else { ZoomBox.Image = Section( - SpriteView.sprites, new Rectangle(new Point((e.X / 8) * 8, (e.Y / 8) * 8), new Size(8, 8)), false); + SpriteView.Sprites, new Rectangle(new Point((e.X / 8) * 8, (e.Y / 8) * 8), new Size(8, 8)), false); } } @@ -671,17 +671,17 @@ namespace BizHawk.Client.EmuHawk var bmp = new Bitmap(64, 64); var g = Graphics.FromImage(bmp); - byte[] PALRAM = _ppu.GetPalRam(); + byte[] palRam = _ppu.GetPalRam(); if (baseAddr == 0x3F00) { - val = PALRAM[PaletteView.BgPalettes[column].Address]; + val = palRam[PaletteView.BgPalettes[column].Address]; ValueLabel.Text = $"ID: BG{column / 4}"; g.FillRectangle(new SolidBrush(PaletteView.BgPalettes[column].Color), 0, 0, 64, 64); } else { - val = PALRAM[PaletteView.SpritePalettes[column].Address]; + val = palRam[PaletteView.SpritePalettes[column].Address]; ValueLabel.Text = $"ID: SPR{column / 4}"; g.FillRectangle(new SolidBrush(PaletteView.SpritePalettes[column].Color), 0, 0, 64, 64); } @@ -774,14 +774,14 @@ namespace BizHawk.Client.EmuHawk Value3Label.Text = $"Tile {tile:X2}"; Value4Label.Text = usage; - ZoomBox.Image = Section(PatternView.pattern, new Rectangle(new Point((e.X / 8) * 8, (e.Y / 8) * 8), new Size(8, 8)), false); + ZoomBox.Image = Section(PatternView.Pattern, new Rectangle(new Point((e.X / 8) * 8, (e.Y / 8) * 8), new Size(8, 8)), false); } - private void ScanlineTextbox_TextChanged(object sender, EventArgs e) + private void ScanlineTextBox_TextChanged(object sender, EventArgs e) { - if (int.TryParse(txtScanline.Text, out scanline)) + if (int.TryParse(txtScanline.Text, out _scanline)) { - _ppu.InstallCallback2(() => Generate(), scanline); + _ppu.InstallCallback2(() => Generate(), _scanline); } } @@ -792,10 +792,10 @@ namespace BizHawk.Client.EmuHawk #endregion - MemoryDomain CHRROM; - readonly byte[] chrromcache = new byte[8192]; + private MemoryDomain _chrRom; + private readonly byte[] _chrRomCache = new byte[8192]; - private void cHRROMTileViewerToolStripMenuItem_Click(object sender, EventArgs e) + private void ChrROMTileViewerToolStripMenuItem_Click(object sender, EventArgs e) { ChrRomView ^= true; } @@ -805,41 +805,41 @@ namespace BizHawk.Client.EmuHawk Width = ChrRomView ? 861 : 580; } - private void CHRROMViewReload() + private void ChrRomViewReload() { - CHRROM = _ppu.GetCHRROM(); - if (CHRROM == null) + _chrRom = _ppu.GetCHRROM(); + if (_chrRom == null) { numericUpDownCHRROMBank.Enabled = false; - Array.Clear(chrromcache, 0, 8192); + Array.Clear(_chrRomCache, 0, 8192); } else { numericUpDownCHRROMBank.Enabled = true; numericUpDownCHRROMBank.Minimum = 0; - numericUpDownCHRROMBank.Maximum = CHRROM.Size / 8192 - 1; + numericUpDownCHRROMBank.Maximum = _chrRom.Size / 8192 - 1; numericUpDownCHRROMBank.Value = Math.Min(numericUpDownCHRROMBank.Value, numericUpDownCHRROMBank.Maximum); } - CHRROMViewRefresh(); + ChrRomViewRefresh(); } - private void CHRROMViewRefresh() + private void ChrRomViewRefresh() { - if (CHRROM != null) + if (_chrRom != null) { int offs = 8192 * (int)numericUpDownCHRROMBank.Value; for (int i = 0; i < 8192; i++) - chrromcache[i] = CHRROM.PeekByte(offs + i); + _chrRomCache[i] = _chrRom.PeekByte(offs + i); - DrawPatternView(CHRROMView, chrromcache, _ppu.GetPalette(), _ppu.GetPalRam()); + DrawPatternView(CHRROMView, _chrRomCache, _ppu.GetPalette(), _ppu.GetPalRam()); } } #endregion - private void numericUpDownCHRROMBank_ValueChanged(object sender, EventArgs e) + private void NumericUpDownChrRomBank_ValueChanged(object sender, EventArgs e) { - CHRROMViewRefresh(); + ChrRomViewRefresh(); } } } diff --git a/BizHawk.Client.EmuHawk/tools/NES/NESPPU.resx b/BizHawk.Client.EmuHawk/tools/NES/NESPPU.resx index f58e0c7418..987024afb2 100644 --- a/BizHawk.Client.EmuHawk/tools/NES/NESPPU.resx +++ b/BizHawk.Client.EmuHawk/tools/NES/NESPPU.resx @@ -135,299 +135,4 @@ 704, 17 - - - - AAABAAYAMBwAAAEAIAAIFgAAZgAAADAcAAABAAgASAoAAG4WAAAgIAAAAQAgAKgQAAC2IAAAICAAAAEA - CACoCAAAXjEAABAQAAABACAAaAQAAAY6AAAQEAAAAQAIAGgFAABuPgAAKAAAADAAAAA4AAAAAQAgAAAA - AAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADU1NQYpKSkY5aUlIGWlJKBl5WVfpSS - koGUlJSBlpaWepaWlnqWlpZ6lZWVfpWVlX6VlZV+lZWVfpWVlX6XlZV+mZeVfpmXlX6XlZV+l5WVfpaU - lIGWlJSBl5WVfpWXlX6Vl5V+lZeVfpWXlX6Xl5V+l5eVfpeXlX6Xl5V+l5WVfpeVlX6WlJSBl5WVfpeV - lX6XlZV+l5WVfpeVlX6VlZV+l5WVfpeVlX6Vk5GFlJKSgaSkpGPY2NgUAAAAALe3t0QsLCz/CAQD/w4L - B/8WEQ7/Ew4L/xQQD/8NCwr/DwoJ/xALCv8RDAv/Eg0M/xINDP8SDQz/FA8O/xUQD/8QDAv/EQ0M/xMP - Dv8TDw7/FBAP/xUREP8WEhH/FxMS/xMREP8TERD/EhAP/xIQD/8RDw7/EA4N/xAODf8PDQz/FBAP/xMP - Dv8SDg3/Eg4N/xIODf8SDg3/EQ0M/xAMC/8MCgn/Ew8O/xEMCf8UDwz/DwwI/wsHBv8tLS3/s7O3Ry0s - Lv8bGRn/bWhl/4aAe/+Gfnf/eXNu/4B5dv+FgH3/h357/4qBfv+NhIH/j4aD/5GIhf+Tiof/lo2K/5iP - jP+blpP/nJeU/5+al/+hnJn/o56b/6ahnv+oo6D/qqWi/6qlov+ppKH/p6Kf/6Wgnf+inZr/oJuY/5+a - l/+emZb/mJOQ/5eSj/+VkI3/k46L/5GMif+Qi4j/jomG/4yHhP+KhYL/hX57/395dP+Lg3z/jIaB/3Nu - a/8dGxv/KSgq/wQCAv9OSUj/qaOe/6Wck/+onZX/rKOa/6igmf+moJv/rKSd/66mn/+yqqP/tKyl/7au - p/+4sKn/u7Os/762r/++tbL/wLe0/8O6t//Gvbr/yL+8/8vCv//OxcL/0MfE/9HKx//Qycb/zcbD/8rD - wP/HwL3/xL26/8K7uP/Burf/w7u0/8G5sv++tq//u7Os/7iwqf+1rab/s6uk/7Gpov+uqKP/sami/7Ws - o/+uo5v/qaCX/62nov9STUz/BwUF/wQAAP9VUE3/tq6n/8e9s//GurD/x72z/8rBuP/Jwbr/ycG6/8zE - vf/Oxr//z8fA/8/HwP/QyMH/08vE/9XNxv/Yz8v/2tHN/9zTz//e1dH/4djU/+Pa1v/l3Nj/597a/+rh - 3f/p4Nz/597a/+Tb1//h2NT/39bS/93U0P/c08//1c3G/9TMxf/QyMH/zcW+/8rCu//Hv7j/xLy1/8K6 - s/+8tK3/v7at/7uxp/+3q6H/t62j/6ujnP9STUr/BQAB/wAAAP9tbW3/7u7u/+Li4v/c3Nz/19fX/9fX - 1//Z2dn/2tra/9zc3P/U1NT/1tbW/9zc3P/d29v/1NLS/9rY2P/d29v/3NjX/+Xg3f/m4Nv/6ePe/+nj - 3v/n4N3/5+Dd/+bk2v/k4dz/4d3j/+Tc5v/i2+D/49nf/93Y2f/Y3c7/3NnU/97Z0P/i2+L/1tfT/9LV - 0//Y0dj/3NrQ/9fUz//i4bv/0c7d/8vO1v/d1db/4tvS/+Hp2P9dYmX/BwUA/wAAAP9+fn7/6enp/2ho - aP8mJib/JiYm/ysrK/8pKSn/JiYm/yoqKv8pKSn/MjAw/yYkJP8sKir/NTMz/zEvL/8wLi7/VVFQ/4aB - fv95c27/fXdy/3lzbv9ya2j/e3Rx/3dvaP91cmr/dHJq/3FvZf99d2z/X1ZT/z01PP9BPUP/RT5L/0FE - Nf8+Qjz/OjhM/0FFP/9QVkX/QjtI/0tMSv9PQE7/TEZl/0tPUP9VT0j/hHt3/+bo6P92dYX/BAIA/wMD - A/9ycnL/3Nzc/zk5Of8AAAD/BAQE/wAAAP8BAQH/AgAA/wQCAv8CAAD/AwEB/wQCAv8CAAD/BAIC/wMB - Af8DAQH/Ih4d/0pFQv9IQj3/TEZB/09JRP9KQ0D/SEE+/0s/Pf9DOjf/RkE4/0Q+Mf9JQTT/OTAm/xkS - D/8fGiP/HxUi/xgfCv8iISv/LRpN/yUbLP8kIhr/IB0f/ygmJv8qHzn/JSM3/x4iHP8sJiH/XFRU/+Ti - 6P95dYj/BAAA/wMFBf9zdXX/4+Xl/zAyMv8AAAD/AQMD/wACAv8GCAj/W1lY/2xqaf9pZ2b/NzU0/wcF - BP8FAwL/DQsK/wcIBv8RDw//GhgX/yckIP8tKST/JiAb/yslIP80LSr/KiUi/zIpJv8yKSz/Ni4v/zQp - K/8tHyP/KyUY/zw+Kv+TlpT/q6aj/52hov+jpqr/in2N/11PUf+ioYz/rK+m/6Sjp/+mrLH/dn53/yos - Jv80KjD/YVxb/+Pi3v9vbXP/BwUE/wIDAf9tbmz/4+Ti/zk6OP8AAQD/AAEA/wMEAv8eHx3/cGxr/0E9 - PP9TT07/XVta/wgGBf8GBAP/CQcG/wsMCv8GBgb/YV9e/8bDv//KxsH/w724/7q0r/+5tLH/w767/7q0 - r/+1rrH/rKin/6+oq/++sr7/cG5k/1RaT//NzOb/mYzg/4F75v+mquX/vbjH/4iCff/S0+j/kYrl/4N9 - 3P+zt+f/pKyr/zUyLf8tIir/XVpW/+bj3v9wb2v/CQsF/xMUEv9pamj/2NnX/zk6OP8AAQD/AwQC/wME - Av8nKCb/RkFA/xINDP8gHBv/VFBP/wQCAf8VExL/BwgG/wgJB/8LCwv/fnx7/+Xi3v+Cfnn/Z2Ne/2ll - YP+KhYL/zsnG/3l2bv9dWlb/YGJP/4aFd//Ty9L/fn15/0ZIU/+GecX/Hhi9/wANof8kJrr/gYek/3aC - bP9gX7v/DhKt/wkRsv8/L73/hoak/z85NP8zLi3/YF1Z/+Td4P9wa2r/Cw4F/wkHBv9pZ2b/4d/e/zo4 - N/8NCwr/UU9O/1BOTf9oZmX/TUhH/yIdHP8qJST/cm5t/15cW/9aWFf/MTIw/wwNC/8KCgr/eXd2/+jl - 4f+sqKP/pKCb/6Sgm/+wq6j/2NPQ/6ymof+WkJH/nZ6K/7Ctnv/Qxc//fnx0/0tNVf9hUaX/BADM/wAE - xv8QCs3/bGic/3Bxb/9GO7//BAjL/wAAx/8lEr//dHOV/zkyKf8yLSr/YWJZ/+Xb4f9nYWL/CgwM/xkV - FP9jX17/3dnY/0I+Pf8YFBP/YFxb/zMvLv87Nzb/MCsq/xwXFv8lIB//My8u/y8tLP9APj3/U1RS/wkK - CP8NDQ3/QUJA/39+ev+Kh4L/hIB7/4J+ef+GgX7/gHt4/4R4eP+LfYj/f3Zy/4V5ef+EcYT/U1BB/09X - Rv+bksr/JyTe/w4H+P88RMf/npWq/4N3bf+JiMz/GRLl/xEW4/9XVtz/iZGY/0M6MP80LTD/YGRZ/+Xf - 2v9lXV3/ExEd/xYWFv9aWFj/2dXU/0E/Pv8SExH/UFFN/ysoJP8wJyT/LSQg/y8mIv8rJSD/LCYh/ykk - If84MzD/UUxJ/xYTD/8bGBD/IyIU/zMzJ/8oKyn/Jyo4/ycoPP8uLzn/NzU0/y40L/81Ozr/MDQ1/zU1 - Nf8+Ozf/Mi0q/0E8Pf9vbXP/Y12A/1tYbv9xb3X/YWJZ/0tMQ/93dnj/ZGBz/11Xdv93dXT/XFhX/zw3 - NP82Lyz/aWJf/+Db2P9aWFf/FhcV/x4eHv9cV1j/1dHQ/0NBQP8dHhz/VVZS/zs4NP8+NTL/Rz84/0Q7 - N/86NC//QTs2/zk0Mf9ST0v/YF1Z/y8rKv8zLyr/QzlF/1xJdP9VPIb/UDeN/0w5fv9USmj/XllW/1E8 - ev9QOYP/SDF7/006a/9USlb/Pzwu/yopH/8wLzP/My81/yolJ/82Lyz/Ny4q/ygfG/87MDL/MSkw/zEp - NP80MjH/NjIx/zUwLf86MzD/aGFe/9nU0f9XVVT/Hh8d/x4fHf9RTUz/0c3M/1ZSUf85Ojj/X2Be/1lW - Uv9lXlv/TkY//0Q8Nf9GQDv/aWNe/1RPTP9YVFP/SUdG/zAuLf87ODT/RkI9/1lVUP9VUFL/Uk5a/05K - Vv9STFH/V05K/09EVP9QRlf/SkJT/01FT/9UTEz/R0E8/zQxLf8uLi7/MjYq/zAxJ/8wLSn/OTI1/zct - M/8yKy7/NzIz/zQyMf8tKyr/NjIx/zo1Mv8/ODX/bWZj/9jT0P9RT07/HR4c/ygpJ/9LR0b/z8rJ/15a - Wf85Ojj/Ozw6/zw6Of9PSkn/ZFxV/01FPv9HQTz/XVhV/z47N/87OTj/NTU1/z4+Pv8xKjf/OzQ3/01H - QP9JRDv/SkZB/0dAQ/9KPUX/SzpD/0c/OP9GQjf/Q0I0/0M/NP9COTX/OjIz/zMuL/8wMS//Li8z/zUy - O/80LTr/NCo7/zkvQP8xKjf/OjU+/zEvNf86ODf/Ozc2/zgzMP86MzD/bWZj/9nU0f9OTEv/ICEf/ygp - J/9DPz7/zcjH/2NeXf9DQUD/Ozw6/0JAP/9QTEv/WVNO/1JMR/9WUk3/WVZS/z87Ov87OTj/MzMz/zU1 - Nf85OjH/S0k//2hhWP9oXlf/Zl1Z/2FZUv9kW1H/aV5Q/2RZUf9cUlL/WU5W/15TVv9YUUj/SkQ5/zg0 - M/8uKzT/GBSR/x0bk/8hHpL/FxOE/yAdiv8eG4j/IR6L/xsbh/81MzL/OjY1/zs2M/88NTL/bWZj/9PO - y/9HRUT/KSoo/y8wLP9DQDz/zcXF/11YV/9APj3/QUJA/0NEQv9EQD//U05L/0xHRP9OS0f/TElF/0A+ - Pf89Ozr/Ojs5/zs8Ov81NDb/RT9A/2BUUv9eUkz/XlVM/1tSSf9aT0v/Xk9N/1xVQv9VTj3/U01A/1hS - R/9XTkX/SD87/zkzNP8zMjb/MCxP/ywqR/8yM0f/Ky04/zI1Pf8wMzv/LjA7/zMzQ/87OTj/Pzs6/0A7 - OP9AOTb/cGlm/8/Kx/9APj3/LS4s/zM0MP8/PDj/zcbD/2JaWv9CQD//R0hG/0RERP9CQED/R0VE/0A+ - Pf89Ozr/Q0FA/0E/Pv88Ozf/PDs3/z8+Ov88QDX/RkI9/1tNTv9ZSkj/W09J/1lQRv9WTkH/VEs+/1VD - UP9RR0f/TUo8/05HPv9MPkL/QDI9/zkzNP86PjL/PTY5/zgyM/89ODX/Ozcy/z06Mv89NzL/PTcy/0A5 - Nv89Ozr/Ozc2/zo1Mv8+NzT/cmto/87Jxv89Ozr/MzQy/zY3M/85NjL/zMXC/2piYv9HQ0L/QUJA/zs7 - O/9EQkL/Ojo6/0RERP89PT3/QD49/zs5OP9APzv/QD87/z06Nf84ODj/S0ZF/2peWv9rX1X/amJR/2Ve - T/9iW1L/ZFhY/2BXTv9hWVL/XFZR/1pUTf9dVEv/UEhB/z86N/86ODj/PDov/z89M/8/Ojf/QDo7/z84 - O/9COjv/Rj4+/0A5Nv8+PDv/QDw7/0I9Ov9GPzz/dm9s/8rFwv84NjX/Njc1/zs6Nv80MS3/ysPA/7qv - q/+Xi4X/loyF/5mSif+TjoX/mJCJ/5iQif+YkIn/mJCJ/5iQif+YkIn/mJCJ/5iQif+Zj4j/oJaP/6ie - l/+roZr/qqCZ/6iel/+nnZb/qJ6X/6ael/+mnpf/pp6X/6Sclf+impP/npaP/5uTjP+ZkYr/nZWO/52V - jv+dlY7/nZWO/52Vjv+dlY7/nZWO/52Vjv+cl47/oJmQ/6CWj/+glI7/uq+r/8nCv/82My//Ozo2/0ZH - Rf8lISD/wLu4/+Pa1//h1tL/5dzY/9rUzf/e29P/39fQ/9/X0P/f19D/39fQ/9/X0P/f19D/39fQ/9/X - 0P/c1M3/39fQ/+La0//i2tP/4NjR/9/X0P/g2NH/4trT/97Wz//f19D/4NjR/+HZ0v/h2dL/4NjR/9/X - 0P/f19D/39fQ/9/X0P/f19D/39fQ/9/X0P/f19D/39fQ/9/X0P/Y1c3/39nS/+Tb1//d0s7/6N/c/8G8 - uf8hHRz/TU5M/4SEhP8RDw7/ZmJh/6mhof+mn5z/pp+c/6qmof+in5r/p6Kf/6ein/+nop//p6Kf/6ei - n/+nop//p6Kf/6ein/+nop//p6Kf/6ahnv+loJ3/pJ+c/6Oem/+loJ3/pqGe/6Wgnf+loJ3/pqGe/6ah - nv+moZ7/p6Kf/6ahnv+moZ7/p6Kf/6ein/+nop//p6Kf/6ein/+nop//p6Kf/6ein/+mo57/pqKd/6eg - nf+qo6D/o5ub/2RgX/8VExL/f39//9ra2gdcXFzXCQcH/wkEBf8ZFRT/DQkI/xAODf8PDQz/EAwL/xAM - C/8QDAv/EAwL/xAMC/8QDAv/EAwL/xAMC/8SDg3/Eg4N/xENDP8RDQz/Eg4N/xIODf8RDQz/EAwL/xIO - Df8SDg3/Eg4N/xENDP8RDQz/EAwL/xAMC/8QDAv/EQ0M/xENDP8RDQz/EQ0M/xENDP8RDQz/EQ0M/xEN - DP8NCwr/EQ8O/wsHBv8XExL/DQgJ/wwKCv9cXFzX////AwAAAAAAAAAAtbW1SZyZmXScmZl0kpCQhJmZ - mXSYmJV3mJWVd5iVlXeYlZV3mJWVd5iVlXeYlZV3mJWVd5iVlXeXlZV7l5WVe5eVlXuYlZV3mpiYd5qY - mHeYlZV3l5WVe5eVlXuXlZV7l5WVe5eVlXuXlZV7l5WVe5iVlXeYlZV3mJWVd5iVlXeYlZV3mJWVd5iV - lXeYlZV3mJWVd5iVlXeXl5V7mZmZdJCOjoiYlZV3n5ycbba2tkYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// - /////wAA5P/5/9/nAACAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAgAAAAAABAAD7/////98AAP///////wAAKAAAADAAAAA4AAAAAQAIAAAA - AACACgAAAAAAAAAAAAAAAAAAAAAAAAMCAf8JBgX/BwgG/woLBv8GCAj/DAsK/xENDP8VEg7/FBMR/xkV - FP8aGBP/ExEd/x0dHP8hHRz/KB8b/x4iHP8lIhv/Hxci/ykdJ/8qHzn/JiQj/yslIv8nKCb/Kikl/yIh - K/8tIir/Kysq/zAnJP8yKSb/Mi0s/y4yLf8xMif/OTAm/zMyLf85Myz/PTwt/yUjN/8uLTP/Jyk6/ywu - OP8yKzP/NCs6/y4wO/80MzL/OjQz/zw5Nf8yMzv/PDU7/zU7Ov87Ojn/Qjo0/0AyPf9BPTv/ST88/zxA - Nf8+Qjz/Q0I1/0lBNP9EQTz/SkQ8/0xJPf9UTD3/LRpN/ywqR/85L0D/MCxP/zIzRf86OEz/QzxC/0s8 - Q/9DPEn/TTpr/0o1fP9RPHr/REJB/0pGQv9HSEb/TUlF/05CTv9NS0r/UUdH/1NMQv9STUv/W01L/09X - Rv9RU0P/WVJF/1NQTf9bU0v/VFpP/0tIU/9SRFP/U0tT/1tOU/9STlr/VVNR/1tUUv9cWFb/XFdY/1xa - Wv9gV07/ZV5P/2BUUv9iWlL/aV5U/2JcW/9qXlr/X2Be/2BiT/9qYlH/YmJb/2hhXP9MRmX/VEpo/1tY - bv9cSXT/XVd2/11iZf9mYWH/amVj/21oZf9ra2r/cGxl/3Jtav93c2z/a2hz/3Fvdf90dHP/fHZy/3Z+ - d/9+enT/d3Z4/359e/+Dd23/g3t4/3aCbP+GgXz/FxOE/xsbh/8eG4j/GBSR/x0bk/8gHYr/IR6S/wAN - of8OEq3/CRGy/x4Yvf8lEr//JCa6/z8vvf9ROYf/Rju//2NdgP93dYb/bGic/3Rzlf9hUaX/YF+7/wID - yf8QCs3/JyTe/xUU5P8OB/j/PETH/1dW3P+IeYj/hnnF/4N93P+Be+b/hISE/4uFgv+OiYb/lIuF/5KM - iv+Yj4r/lpGO/5qSi/+dnor/iZGY/5WUlP+Ylpb/l5iW/52Zlv+bmZn/oJWO/6SclP+onZb/o52a/6Kh - jP+poJf/pqGe/6uim/+wrZ7/g4ak/56Vqv+doaL/paSm/6qkof+sqaT/o6aq/6Ssq/+vqKv/tKuj/7Cr - qP+6r6v/u7Os/6assf+1rrH/tbS1/7u0sf+7tLv/wLe0/8O6s//DvLn/yL+8/8bBvv/Kwrz/4uG7/4mI - zP+bksr/vbjH/5WL4v+mquX/s7fn/8zFwf/Oycb/z8rJ/9DHxP/SysT/0MXP/9LNy//Yz8v/19TP/9vT - zf/Y3c7/y87W/9LM1//U1NT/3dbQ/9zZ0//Y0dj/29ra/+HW0v/h2dP/5Nza/+jf3P/m4tz/zczm/9LT - 6P/j2+L/3uDg/+bm5v//////AAAA/wAAAP/9/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39 - /f39/f39/f39/f39/f397sW0tbW1tLW1t7S0tLS4tbW1tbW0tLS0tLa0tri4trW0tLW0tLW1tLS1sLDH - 7v3TGgEDBwYHAwYGBgYGBgYGBgYGBgcICAkICAYIBgUGBggHBwUHBwYFBQcGBgYBGtEaDHiIiHyCiIiI - iKytra+xtbW8vLzAwMbGxsa8vLy3tbGwsLCsrqyrq4aGiKt7DBkATb+6u8C+v8DHy8vLzc7O0tTV19fZ - 5OTl5eHh2dbW1tXVzs7Oy8vLx8vLwb7HUgEAV87X1dXZ2NjZ4uXi5eXo6urv7/T19fb29/X18/Pv7+fl - 5eHZ1tbVzs7Oy8vAVwAAfvz78vLu8vLy7u7y8u7x8vD19vf19vb39fz69frw6/Dr+u7u7+vu2u3s8PT3 - dQEAhPx5FBYaFhQaGSsVGiseJVeqfICAe3x8fHt6fGUvREY4N0NKVEZPTnBaWIb8mgAAfvIxAAAAAAAA - AAAAAAAAAA1LO0tRO0s7Mjk5OSAHEQ0KGD4SEAwUEyQQEGD8mgAAgfweAAAAAmN5eSsAAAUCBgwQFw4Q - IRAcHSgdEhAjtsfExaZgvcrFz4EXKGn3fgAAefwwAAAAD3s0UmMFAAUFAmPY4tjS0tjS0MbL3XhZ+N6p - 392I+d6o4MkhGWH8eQMIee4xAAAAGUoGDVwACAQFBYT8gm5uq+J8Y2yI54Rap5OQlcKHnpGSmMIyHWf6 - ewUFefUvBV9Xd0sNFXxjYCEFBIT3x7+/zOrGsbLB5oJanZ+foJt+mJ+flJwgHW71dwUJbvI3CGMoMR0J - EB0dSl8DBjqIrIaEiISGpoaGpj1U3KGjpMOF26KipbMyKG71aQsIYe9ECFQXGxUbFRwQIVcHBxAfFycm - KiweLiUrNB06fZlyfm5NgHR0f2MsIHfyYwgRY+5KDF8tLDk0IjIsV2EaHURzl5eXcWBJl0hHWyMVKCsX - IR0OLCgoKyshLGrvXwwPT+NXLXZgaVEyOm9XYE8lLTphXF5aW1NbWlpaUjUhHiEdHSwsKCsrGiEsMnfu - Xw8WTuNjMDExT2c7O2ExMSs3JSw7O01LRUU1OTgyMiwdJSUuKSlAJy8oLS8iLHjvTxEXOuN2SjA6UldS - V2ExMSsrLU1qaGdmZW1lYF1mVjsrJYyNjYmOi46KKy0sLHjnShoeOuRgN0pMN1JNUk00MTAxK0RmZGRT - U1NWPT1XVjUsK0E/QiUuLilCLzI0MnrhSh4rMeFpOkxKSk0xMTo3LS06NjpTU1NWUT1bUDw9RTMsLS0s - MiwsMiwyNC8sLHvjMSsrLeF3RToxOjFMMTQtOjotLUtqaGxtZWlYZ2FYWFE0LS0jNC80NDQyMTQ0NXvh - KystIdnNr62wra+vsa+vra+tr7q+wMC7u7rAvru6urGxsbm1srqxurm1srm5uc3hLDFMDdP18/Xq8O/z - 7/T09PT06ur09PTw9PTq7/Pw9PTv7+rq6urq6urr6vD16vbWDVSqCHbGvMDGv8W/v7+/v7+/xsa/v7y8 - v7+/v8XAv7+/v8bGxsbGxsbGv8a8xrx2CITyYwMBCQEGBQYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYG - BgYGBgYGBQUFCAUFY/v9/dG4uLS2t7W1tbW1tbW1tbW1tbi4tbW1tbS0tbW1tbW1tbW1tbW1triuuLjR - /f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f3///////8AAOT/ - +f/f5wAAgAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAIAAAAAAAQAA+//////fAAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAACAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzAWoqKhBlpSUaZeUlGeUlJRplJSUZZeXl2OWlpZmlpaWZpaW - lmaWlpZmmJaWZpiWlmaYlpZmlpSUaZeUlGeWlpZmlpaWZpaWlmaWmJZmlpiWZpaWlmaXlJRnl5SUZ5iW - lmaYlpZmlpaWZpaWlmaYlZNolZKSaqenp0C/v78Ea2tuUSIhH8gpJCLYKyck1yomJdgnIiLWJyMi1Sgk - I9YpJSTXKicl1yonJdcpJSTXKicl1ysoJ9csKSjYLikp1yopKNcpKCfXKSgn1ygnJdcoJyTXKicn1yon - JdcpJSXXKSUl1yklJNcnIyPXKSUk1yklI9cpJSLYJCIiyGxsbFI4ODjCOTUz/1JNSP9OSET/UEtJ/1JL - Sf9VTUv/V1BO/1lSUP9cVVP/XldV/15aWP9iXVv/ZF9d/2ZiYP9pZGL/Z2Rh/2ZiYP9kYF7/YV1b/2Bc - Wv9eWlj/XFhW/1pWVP9ZVFL/V1NR/1VQTv9TTUv/UEtG/1VQS/89OTf/ODY4wyAeH/9xbGn/k4yF/5CI - gf+Ri4b/lo6J/5qSjf+elpH/oZmU/6WcmP+poJz/q6Sh/6+opf+yq6j/trCt/7qzsP+6tLH/uLKv/7Su - q/+wqqf/rqil/6uloP+oop3/pZ6a/6Gblv+emJP/m5WQ/5iRjf+Xj4j/mZGK/3Zxbv8gHh//FxMT/5WP - i/+wpp3/s6mg/7Kqo/+0rKX/uLCp/7y0rf++tq//wbmy/8W9t//Hvrv/y8K//8/Gwv/Tysb/1s3K/9jQ - zf/Vzsr/0cnG/83Fwv/Kwr//yMC6/8a+t//BubL/vLSt/7iwqf+1raf/tKyl/7Wrov+upJv/lY+K/xkV - Ff8YFRT/pqCb/8vDuv/Kwbn/zMW+/8zFv//PyML/0MnD/9HLxf/TzMb/1s/K/9rSzv/e1dH/4dnV/+Tb - 1//m3dr/6OHc/+be2//j2tj/4NfU/9zU0P/X0Mr/1c3H/8/Jw//LxL//yMG7/8W+tv/CurT/vrWu/760 - q/+cmJH/GRQU/xsbG//Nzc3/19fX/83Nzf/MzMz/zs7O/87Ozv/Ly8v/0NDQ/8zKyv/Qzs7/08/O/9/Z - 1v/h29b/4dvW/+DZ1v/e3NP/2tfZ/9zV3P/a0db/0c/M/9HQyf/V0Mr/z87N/8rLy//Rzsn/0M7C/8zJ - zf/Hx83/2tLM/8DHvP8cHBn/Hx8f/87Ozv9gYGD/MTEx/zU1Nf8xMTH/NDQ0/zo4OP8yMDD/PDo6/zs5 - Of9UUVD/iIOA/4J8d/9+eHP/f3h1/312b/97eHH/endu/25lYf9HQUf/TUdR/0pMQP9ERFD/TVFJ/05L - T/9UUVL/VU1m/1VXVv9+dnH/ycvO/yAeIP8eHh7/w8PD/zMzM/8JCQn/CAgI/wgHB/8KCQn/CwkJ/woI - CP8MCgr/CwkJ/yMgH/9UTkv/VE5J/1VPSv9RSkf/UUdD/05IQf9OSDv/RDwy/yEaG/8lHSn/ISYZ/y0h - Rf8qJSz/JyQl/y8rMP8tKD7/KSsm/1dPTv/Jx8//IR0h/x4gIP/Fxsb/Jicn/wECAv8BAgL/MC8u/0pI - SP8vLSz/BQMC/wgGBf8HBwX/GBYV/zIuKv8yLSj/NzEs/zUvLP85Ly3/OjIx/zguK/8wKB//QEA1/3t2 - eP91eXb/cGV7/1dNTv9+f3b/fXyB/2Vpbf8pKCT/U01N/8fFx/8hHiD/HR8e/8bHxv8nKSj/AAEA/wYH - Bv9RUE7/VlJR/1BOTf8HBQT/CQcG/wkKCP80MjH/gX56/4B6df98dnH/f3p3/312dP95cnP/enB0/11W - UP9kZ1//pZ7E/5OSyP+moLX/h4B//6Six/+Ylsf/l56j/zAsKv9TTU3/x8XC/yEhH/8hIiD/wcLA/yor - Kv8AAQD/CgsJ/05LSv8wLCv/UU5N/wcFBP8JCAb/CQoI/1RSUv/JxsH/npmU/5qUkP++ubb/mZSQ/4uJ - gv+noaD/ioaD/2Vncv91bNL/UVTK/5WVvv+IiY3/aWjO/1pZzP+Rk7P/NjEu/1JOTP/Hw8H/IyQe/yYm - JP++vrz/LCwq/xUVFP8jIyH/REFA/xoVFP9OSkn/IiAf/xkZGP8JCgj/YF5d/9DMyP9/e3b/gn15/8K9 - uv+Cfnj/cnJj/6Kflv+Tj43/VFJt/y8nwP8HDrH/Y2Wp/21ygP8eILf/EhK5/25ppv86NC//VFJN/8a/ - wv8jJB//IiAf/8K/vv8wLi3/QkA//09NTP9NSUj/Ih0c/1ZSUf9VU1L/Pj89/wsLCv9VVFP/yMXB/5+b - lv+gnJf/v7q3/6CZlv+Wk4f/rqeh/4iEgP9TUmj/IhzG/wgIzv9eWan/a2eD/xoZzP8NCsr/ZWKh/zgx - Kv9VVU3/xbzA/yIhI/8rJyb/vrq5/zczMv9NSUj/NDAv/zItLP8fGhj/Lyop/zIwL/9OTUz/CgsJ/zIz - Mf98e3b/f3x4/315dv98d3X/gHV3/3xzc/9/cnf/XFVP/2BjZf9GQdP/HRrk/4N/rP+BeIH/ODLY/yYp - 2v96gKT/PjYw/1VWTv/Evrr/JyQs/ycmJv+5trX/NTMy/0FCPv8sKCT/LiUh/y0kIP8rJiH/LSgl/0pG - Q/8WEw7/IiAV/zU1LP8tLzj/Li8//zk4Of81OTb/Njk6/zw6Of83Mi//TUpM/2Negv9cWXf/Z2Zl/1hY - U/9lYnr/X1p8/2RhYv86NTH/W1VS/766t/8nJyX/LCsr/7ezsv84Nzb/RUZD/zg0MP9AODL/PTUx/zs1 - MP87NzP/WVVR/ysnJP85Mjb/UkFp/0k1ev9HOW3/VE5T/0o6bv9FM2//Sjxc/0E8Nf8xMCv/OzhC/zYx - Nf8/ODT/NCwp/z01Pf87ND//PTo5/zcxLv9cVVL/ubWy/ysrKf8rKyn/sq6t/0hFRP9QUU//UU1K/09H - Qf9DOzb/VU9K/05JRv9RT03/MS8t/0E8O/9YT13/Ukdo/05GX/9XT1D/T0Fh/0s+YP9ORFX/SEI9/zAu - Kv8xMi3/Ly0n/zYvL/8yKSz/NS4x/zIuMP80MC//OTQx/19YVf+2srD/Kiop/y4tLP+vqqn/Uk9O/0ZH - Rf9MSUf/WVJM/0hAOv9bVVH/R0RB/0A+Pv83NTb/PTc4/1FMRv9NSUr/SkRL/09CR/9KQUT/R0JC/0hB - P/9COjj/Mi8u/y8xLv8yMDL/NS02/zYtOP82MTf/MjAy/zc0M/85NDH/YFlW/7ayr/8qKyn/Ly8t/6yn - pv9XVFL/Ozw6/0JAP/9bVE//TkhC/1dTT/89Ojj/NTU1/zg3OP8+Ojj/WFFJ/1ZPSv9TSkn/V0lJ/1JK - Qv9NR0L/TkZB/0M8N/8zMDD/JyVR/yonYf8oIVz/LCZe/y0pXv8rKk//OTY1/zk0Mf9gWVb/s6+s/y0t - LP8wMC3/qqWk/1lVVP8+Pjz/RENB/1RPS/9QS0f/VFFN/z47Ov82NjX/Nzc1/0RCPP9lXFX/Y1pU/19W - T/9kWE//X1ZM/1dOTv9bUk7/TEU8/zYyM/8jH2r/IiB7/x8db/8lJHH/JCNx/ycnYv86NjX/PDc0/2Fa - V/+uqqf/MDEv/zQ0MP+qo6L/VlFR/0FBQP9DQ0H/TUlH/0pFQ/9KR0T/Pz08/zo7OP86Ojj/QT09/15S - T/9dU0v/WlBI/1tOSf9ZUEP/Ukw//1VORf9KQD3/NzM0/zIvRf8vLUP/LzA6/zM1Ov8xMTn/NjU+/z06 - Of8/OTb/ZF1a/6qmpP8yMjD/NjYy/6mjoP9aU1P/RUVE/0NCQv9FQ0L/Pz08/0E/Pv8/PTz/PDs3/z4+ - OP9DQTv/W01N/1tOSf9ZUEX/VUxA/1RFTf9OSj//TkU//0Q2Pv85NTP/PDg2/zk0M/87NzP/PTky/z03 - Mv8/OTf/Ozg3/zs2M/9lXlv/qaWi/zU1NP82NjL/p6Ge/2BZWf9CQkD/PT09/z08PP9CQUH/Pz09/zw6 - OP8/Pjr/Ozk1/0ZCQf9pXVf/aWBR/2NcT/9iV1X/X1ZO/1xVUP9ZU0v/UklD/z05N/87OTH/Pjsz/z85 - Of8/ODr/RDw8/z85N/8/Ozr/Qj06/2liX/+loZ//NjY0/zg3M/+ln5v/opeU/4Z9eP+GgXn/hX95/4eB - e/+HgHr/hn95/4eAev+Gf3n/jYR//52Si/+elIv/m5GJ/5qQiv+YkIn/mJCJ/5WOh/+QiIH/iYF7/4mD - e/+LhH3/i4N+/4uDfv+MhH7/i4R9/42Hf/+OhX7/pZuX/6Sem/85NzT/PDs5/5yXlP/TycX/y8G9/8XA - uP/Iwbr/yMC5/8jAuf/IwLn/yMC5/8jAuf/Kwbr/0MfA/8/Gv//Nxb7/z8a//8zEvf/Nxb7/zcW+/8vD - vP/Jwbr/ysK7/8rCu//Kwrv/ysK7/8rCu//Jwrr/ycS8/83Dvv/Vy8j/nJeU/z8+PP9VVFP/cGxq/8G5 - t//BubX/vrmz/765tP+/ubT/v7m0/7+5tP+/ubT/v7i0/7+4tP/AubX/vriz/723sv+/ubT/vrey/7+4 - tP+/ubT/v7m0/764s/+/ubT/v7m0/7+5tP+/ubT/v7m0/765s/++ubP/wbm1/8C4tv9wbGr/VVVU/2Zm - Zqk4NjX7ZF1d/2ReXP9lYl//ZGBd/2RgXv9kYF7/ZGBe/2RgXv9lYF7/ZWFf/2RgXf9kX13/Y19d/2Rf - Xf9kYF7/ZWBe/2RgXv9kYF7/ZF9d/2VgXv9lYF7/ZWBe/2VgXv9lYF7/ZGBe/2RhXv9kXlz/Y11c/zk2 - NvtkYmKoaWlpKSkmJrolICDUKCMj1yYlJNQnIyLVJyMi1ScjItUnIyLVJyMi1ScjI9UpJiTWKCUj1Sgl - JdUoJSXVJyMj1SkmJNYoJiTWKCQj1igkI9YnIyLVJyMj1SclI9UnJSPVJyUj1SclI9UnIyPVJiYl1CYj - ItgmISPSKikpuWJiYicAAAAAs7OzLJ2aml6Tk5NomJiYX5iVlWGYlZVhmJWVYZiVlWGYlZVhlpaWYpiW - lmSXlZVjmJWVYZiVlWGXlZVjmJaWZJaTk2SWk5NkmJaWZJiVlWGYlZVhmJWVYZiVlWGYlZVhmJWVYZaW - lmKXl5dgkY6Oa5yamlu3t7crAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////+AAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAB//////////8oAAAAIAAAAEAAAAABAAgAAAAAAAAI - AAAAAAAAAAAAAAAAAAAAAAAAAQIC/wgGBf8HCQj/DAwL/xEPD/8UExP/HRoW/x0bGv8hHR3/JSAf/yQj - I/8rJiP/LCkm/ysrKv80LCb/Mi0s/zIwLv88NC//Liww/zMuM/80LDn/LzEx/zExMP81MjH/NjQy/zMx - Nf82MjT/NjU1/zgyMf84NDL/PTYx/zk2Nf89NzT/Nzg2/zw4Nf81MDn/OTc4/zo7OP89OTj/PTw6/z05 - Pf8+Pj3/QDc0/0I7Nv9BPDv/SDw//0NBPf9KQz3/KCdP/y0rTv8yL0b/My5J/zIyQP85NUf/PTlA/yok - Xf8rKVv/JyNg/yonYf8lI2n/JSNz/0E8Rf9APk7/QD5Q/0g9Vv9MP13/RDZm/0U6ZP9JPWL/Rjdt/0VD - Q/9KRUP/TEhF/0ZETP9KRUr/SklI/01KSf9LTEn/TkxK/05KTP9OTE3/UUpE/1lPRv9QREj/U01K/1hL - Sf9WUEz/W1FL/05DVf9PSVL/Vk5S/1ZMXP9UUlH/WVRT/1xZVP9XV1j/W1VY/1paWv9dWlj/XVhd/11d - XP9iVk7/YVpU/2FaWP9gXVv/ZF1a/2JdXP9mX1z/aF5Z/2VhXv9rYVv/cGZa/09GYP9QQmD/UUZo/1lX - Yv9OS3//XFl0/2FeY/9jXW7/YGBg/2diYP9jYmT/ZGRk/2llY/9taGb/aWxn/2Fhaf9ybGn/dnBv/3ly - bv97em3/bGN3/21ufP90b3L/eG9y/29ydf9xcXH/dnNz/3d1c/92dHT/enJy/3x3cv98cnT/eHZ2/3l4 - c/95eHf/fHh1/3d2f/95eHj/fHx9/4V+ef+FgHr/iYJ9/xIXuf8cGr3/KSq8/1JPgf9ZVYL/YF2f/21q - jP9ucYv/eXOD/2xtlv9yb57/XVqq/2Zhov9gYan/DQ7O/xUSy/8vKMb/JCLL/ykny/8wMMf/OTLA/0A9 - xf9KRcP/VVfJ/11by/9sa8z/d2/P/4B/gP+LhoL/kouE/5OMif+XkY3/mZGM/4qLlv+PlZ3/k5GR/5WR - kP+WlZX/mZOR/5mVkf+dlZH/mJaW/5yXlv+XmJb/mJiX/56Zlf+ZmJj/nZqa/56cnP+glpP/opqW/6Oe - m/+moZ3/qaKd/7Cmnv+HiKz/npmv/42Nuf+loaD/q6Wj/66ppv+op6j/rayr/7Oqo/+yrKr/tbGu/7qz - rf+1rrD/srGx/7Wysf+2tLL/tbK1/7W1tf+6tLD/vLi1/7m3vv+8vLz/wbev/8K6tP/Fvrn/yL+4/8bA - tv/DwLz/ycG8/5OTxP+gnMD/w8HA/8zEwf/OyMT/zcbJ/83JyP/RysX/1c3K/9bQyv/Z0s7/0dDS/93U - 0v/h2dX/49vZ/wAAAP8AAAD/AAAA//nYv7+/xca/v7/DxsbDw8G/xcXFxcbDw8bDv8O/wNj5tZKSkpCQ - kpWSkpCVlZOVlpWVlZWVlZWSlZKSlZOSlZZfDRgRHRAQGB0dHxwiHyIkIB8fGx0fHxgYGxAQHRAPXxsi - UUhIVlZXXV1mYmpqfHx7fGttaF5eXl1XXVZRViIbCXy3t7e3ubrCzM3V1dna3Nza2tXVz8/MzMK6ubq3 - gAoHttbQ2drc3Ofk6Ort8vX3+Pf08e3t6Ojc3NnZ2c+2CQrO7e3x7fLy8vb3+Pr7/Pz8/Pz6+Pj19e3s - 7Onj58EICubs3t7e4t7i3+Pm8vL19fX08fHm5OTl4uTc4+Lp4AoN5ohGS0lGT0dOTHm2tpiZmJiXgmBi - XnNoZHl3erblDQ3iKQMEBAcFAwQEClZSVlRRUVErCxQQNRQeKDUQZ+UNDd4WAAANLA0BAQIGIiIrKysq - KhEuhoWEXZKifw9d4g0N3hUAAkhcSwMCAhuTjoGTjYqHXn7v7tK27+68HV3hDQ3YFQADRhFIAwIDXOTH - udvAmdS2hbSx07uzstEfXeMNDdgYBg0uCEYMBwNk7Ji247aDzrh1rpqnoZybpite3Q0N2B8bRy8JR00n - A1bbwcHawLfPtnWqqKWgq6mfIl7aDQ/YJy4fEAkREUYFGJGLi5OPhodmf7CspKKvraMrXtoNEtQpJxAO - CwwQRgYLRj8/SklKSidQnp1/Yp6ddiJm2BAW1C4uIh4RIiJWDBpBRUNZREJAKx09KCsqPT0sHWnUFRDN - UE1WSCtRSFQYLFtycVpxRFgvEBYNEw8TExcdZ9QQFsldRkhXL1ZIKSMsSE9KU0dHLywQFRMUFCQaGxxr - zhUXxF4pRlZIViwhISZXV1RSUUhIKxMwOjc6ODEfHmvNFhDBaClGVk5WJyQhLmZlZWVlUlcvHzk8Ozs7 - OCIfa8kYIcBgLkZIR0YuIicvV2VXUlJRUi0fMjM0NDQ0JitswhgYwWdGRkYuRiknIi5VZVJSUlFRLR0i - JSIiJCsmIHzDGyG6fUxIS1BIR0hHVW9vbm5sZmZXSC8vSEhRSEhRgMEhIr7LmZmYmJiYmJe2urq6urq6 - t7eZmZmZmZmZmbbLviInuPHo5Ojo6Ojo6Ojt7ert6urp6ejo6Ojo6OTp6vG4J1B93ePc3Nzj49zc3OPj - 4+Pj49zj4+Pj4+Pj3Nzj3H1QZCZrbXltfHlufHl8bW1tbW1rfGtteXl5eXl5eW1rJmR4GxcdGB0XFxcX - HB8fHR0dHx8dHxccHR0dHRcYFxcbZHiMlYySkJWVlZWVkJCSkpCQkJCQlZWVlZWVlZKMlZV44t7Jv8jG - w8PDw8PDw8jIw8O/v8PDw8PDw8PDxr3K3uL//////////4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAH//////////ygAAAAQAAAAIAAAAAEAIAAAAAAAAAgAAAAA - AAAAAAAAAAAAAAAAAADGxsYJlJSUMJSUlDCVlZUukpKSL5eXki+Xl5IvlJSUMJeXki+Xl5cvl5eXL5SU - lDCXl5cvkpKSL5OTkzLf398IKSkp/yQeG/8cGRj/IBsZ/yIcG/8hHRz/JCAf/ygkIv8lIyL/IyAf/yAe - Hf8iHh3/IR0c/xsZGP8iHRr/Kyoq/0dDQv+jmZH/oZyX/62lnv+zq6T/ubGu/8G4tf/JwL3/y8TB/8K7 - uP+8tbL/uLGq/7Coov+po57/qZ+X/0tGRf9kYmH/08/L/9PQzf/Rzsz/2NPR/9vW1f/j29f/5t7b/+Xg - 3P/h2dv/2dnO/9vT1f/Rysz/09C1/87Fwv9YWlr/eXl5/xcXF/8aGhr/GhkZ/xwaGv8fHR3/ZmBb/2Nc - Wf9iXVb/aWJX/zQvN/8zNTX/P0I0/0EzRv9FPzn/d3WG/3J0c/8AAAD/CQoK/2ZkY/8FAwL/Dw0N/0A8 - N/9EPTr/Qjk8/z8xNv+anJ7/o6ax/6inl/+nrbf/Mykv/29tcv9pamj/AAEA/yUmJP8mIiH/ExEQ/woK - Cv+Lh4L/j4qH/2hkYf/Qx8//joPJ/zQ2v/9ubcD/TUDC/zIsLP9wa2r/ZWJh/xMQD/9LSEf/JiEg/0lH - Rv8LCwv/lpOO/5WQjf+PhIv/oJCg/4V5vP8rLsn/b2vH/0Q80f8zLS3/ZV5e/1pXWP8WFxX/NSwp/zAq - Jf9BPTr/JCAZ/zgxS/88OUr/PzpV/0ZAQv9XVVv/WldZ/2BbXf9dW1r/NzAt/1hWVf9QTEv/OTo4/2Jb - WP9GQDv/VFBP/zk2NP9TTk//UUpP/05FU/9RSUn/Li4u/zAtK/8xKi//Liwr/z43NP9QTk3/REA//0FA - P/9PS0r/VE9K/zs5OP84ODH/ZFpT/2BXT/9ZUE7/VU5F/y4rM/8jH4f/IBx9/zUzMv87NDH/R0VE/0A9 - Of9BPz7/QkA//0NBPv88Ozj/OTs1/1pNSf9XTkT/UklD/1BEQ/83OTP/ODY7/zg1Nf88Ojn/Pjc0/z48 - O/83NDD/ZV5b/2FeW/9fXFn/YV1Y/1xYVv+Dd27/e3Nr/3pya/92bmb/XVlW/2JcV/9kXFr/YV5a/2de - Wv83NDL/Ih4d/9nPy//W08v/2NDJ/9jQyf/Vzcf/2tLM/9jRyv/X0Mn/2dLL/9fQyf/Y0Mn/2NDJ/9HO - x//WzMj/Hxsa/1FPT9wqJiX/IR8d/yIeHf8iHh3/JCAf/yMfHv8jHx7/JCAf/yMfHv8iHh3/Ix8e/yMf - Hv8gHhz/KSUj/1FRUdwAAAAAnJycLJiYmC2YmJgtmJiYLZWVlS6YmJgtmJiYLZWVlS6VlZUumJiYLZiY - mC2YmJgtlZWVLpiYmC0AAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA//8AACgAAAAQAAAAIAAAAAEACAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAA - AAAHBQX/EhMS/xMSEf8WFRT/GBcX/xgZF/8bGRn/ICEg/yUlJP8oJCD/KCYl/ysrK/8tLSz/NS4p/zEt - LP8wLi3/MTAu/zIrMv8zLzD/NS4z/zQxMf8yMTf/NzU0/zc2Nf86NTT/ODY2/zk2Nf86Njb/OTk3/zo4 - N/8/Ojb/NTI6/zg1Of88ODn/Pjk4/zw6OP8+Ojn/Pzs6/z08Ov8/Pjr/Pzk//0A7N/9BOzr/Qz88/0Q+ - PP9DQD//RUE//0ZCPP9IQj//LSpG/zIwRf89N0b/PzpN/z01Uv89N1T/JiJr/yklaP9DQUH/Q0JB/0ZB - QP9FQ0H/RkNB/0ZEQ/9GRUT/SUFD/0hDQv9NQ0D/SEVD/0lEQ/9LRUL/TEZD/09HQf9IRUT/SUVE/0pH - Rf9OSEL/SUhG/0pIR/9LSEb/TUlH/09JRv9OSkf/SUVN/0pJSP9NSEv/TEpJ/05KSP9PTEj/T0tO/1NL - Q/9SSUb/WU9G/1BMSv9TTUn/U05J/1ZNSP9cVUv/XFBM/15WT/9LQVL/UEdQ/1BMU/9SS1X/W1NS/1tV - Uf9aVlH/YVtV/2BdW/9kXlr/YF5c/2VgWv9jYl3/ZGFd/2VhXP9nYV3/ZmJf/2diXP9pYV//aGJe/2ll - Yv9oZmP/aWZl/2pnZP9qaGb/bGlo/2xqaP9ta2n/b2xs/3Rtav93b2j/cG5s/3Jvbv95cGz/fXZv/3Nu - cf9xcnD/cnNz/3Rycv91cnD/dXV1/3V0ev92dHr/gXhw/4V7cv+Fgnv/TUqf/1JOr/9fWqL/REO//1NW - u/9cWrr/Y2Sp/z48xf+FgYb/i4KB/5CIhv+Iipv/ioif/5WVlf+WlJT/l5WU/5aXlf+Xlpb/mpWS/5iW - lf+Zl5f/l5iW/5iYl/+dmpX/mZiY/5+bmf+imZH/o5uW/6WclP+noJr/pqGd/6ujnf+tpqD/rKij/66u - rv+xqaP/ta6o/7iwrP+0tLT/tra2/7u0sP+/t7T/wLq2/8O+t//Fvbj/xL+4/8W+uP/Gvrn/yb+8/8fA - uv/Iwbv/yMG+/8nAvf/LxMD/zsnA/9DMyP/Sz8v/087K/9PQzf/W0s//19LO/9rV0v/b1tH/49zY/+ff - 2//i2tz/5uDd/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/s6Ceop6ipaCipqKipJ+fsxYeIiosO0NVTUg9Li0lJRlWq6ywtLa6wMS7ubWxrq1cecrJy8zO - 0NHT0s/NyMfGb4sLBAYGCnZsamARFRczV4yIAQdNAANpaGhajZ2ZnB6JhwUOGAIMsq+QqpOVl5YsioMZ - OQ4/CKijm5qRmJKUL4Z/HA0NKwk1NDYoUlhUZUGCfVNdS0obZmRjQBASExRFfnlMUV4dI2JhX0cxNzgy - Rn16VT48JidhW1lCIB8XIVB7d4Bwc3Fyj46FgW50dXaEeGvBvL+/vcPCwMK/wMC+xW06RENERElERElJ - REREQ0E5t6SppaWkpaWkpKWlpaeguP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/NES/NameTableViewer.cs b/BizHawk.Client.EmuHawk/tools/NES/NameTableViewer.cs index 541542d680..1ca7e0eb4f 100644 --- a/BizHawk.Client.EmuHawk/tools/NES/NameTableViewer.cs +++ b/BizHawk.Client.EmuHawk/tools/NES/NameTableViewer.cs @@ -12,15 +12,13 @@ namespace BizHawk.Client.EmuHawk { public Bitmap Nametables; - private readonly Size pSize; - public NameTableViewer() { - pSize = new Size(512, 480); + var pSize = new Size(512, 480); Nametables = new Bitmap(pSize.Width, pSize.Height); SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.UserPaint, true); - SetStyle(ControlStyles.DoubleBuffer, true); + SetStyle(ControlStyles.OptimizedDoubleBuffer, true); SetStyle(ControlStyles.SupportsTransparentBackColor, true); SetStyle(ControlStyles.Opaque, true); Size = new Size(256, 224); @@ -84,36 +82,32 @@ namespace BizHawk.Client.EmuHawk } var file = new FileInfo(sfd.FileName); - using (Bitmap b = new Bitmap(Width, Height)) + using Bitmap b = new Bitmap(Width, Height); + Rectangle rect = new Rectangle(new Point(0, 0), Size); + DrawToBitmap(b, rect); + + ImageFormat i; + string extension = file.Extension.ToUpper(); + switch (extension) { - Rectangle rect = new Rectangle(new Point(0, 0), Size); - DrawToBitmap(b, rect); - - ImageFormat i; - string extension = file.Extension.ToUpper(); - switch (extension) - { - default: - case ".PNG": - i = ImageFormat.Png; - break; - case ".BMP": - i = ImageFormat.Bmp; - break; - } - - b.Save(file.FullName, i); + default: + case ".PNG": + i = ImageFormat.Png; + break; + case ".BMP": + i = ImageFormat.Bmp; + break; } + + b.Save(file.FullName, i); } public void ScreenshotToClipboard() { - using(var b = new Bitmap(Width, Height)) - { - Rectangle rect = new Rectangle(new Point(0, 0), Size); - DrawToBitmap(b, rect); - Clipboard.SetImage(b); - } + using var b = new Bitmap(Width, Height); + var rect = new Rectangle(new Point(0, 0), Size); + DrawToBitmap(b, rect); + Clipboard.SetImage(b); } } } diff --git a/BizHawk.Client.EmuHawk/tools/NES/PaletteViewer.cs b/BizHawk.Client.EmuHawk/tools/NES/PaletteViewer.cs index 0f8b22c0a7..b527785d53 100644 --- a/BizHawk.Client.EmuHawk/tools/NES/PaletteViewer.cs +++ b/BizHawk.Client.EmuHawk/tools/NES/PaletteViewer.cs @@ -23,11 +23,11 @@ namespace BizHawk.Client.EmuHawk } } - public Palette[] BgPalettes = new Palette[16]; - public Palette[] SpritePalettes = new Palette[16]; + public Palette[] BgPalettes { get; set; } = new Palette[16]; + public Palette[] SpritePalettes { get; set; } = new Palette[16]; - public Palette[] BgPalettesPrev = new Palette[16]; - public Palette[] SpritePalettesPrev = new Palette[16]; + public Palette[] BgPalettesPrev { get; set; } = new Palette[16]; + public Palette[] SpritePalettesPrev { get; set; } = new Palette[16]; public PaletteViewer() { @@ -88,8 +88,8 @@ namespace BizHawk.Client.EmuHawk } var file = new FileInfo(sfd.FileName); - Bitmap b = new Bitmap(Width, Height); - Rectangle rect = new Rectangle(new Point(0, 0), Size); + var b = new Bitmap(Width, Height); + var rect = new Rectangle(new Point(0, 0), Size); DrawToBitmap(b, rect); ImageFormat i; @@ -110,14 +110,12 @@ namespace BizHawk.Client.EmuHawk public void ScreenshotToClipboard() { - Bitmap b = new Bitmap(Width, Height); - Rectangle rect = new Rectangle(new Point(0, 0), Size); + var b = new Bitmap(Width, Height); + var rect = new Rectangle(new Point(0, 0), Size); DrawToBitmap(b, rect); - using (var img = b) - { - Clipboard.SetImage(img); - } + using var img = b; + Clipboard.SetImage(img); } } } diff --git a/BizHawk.Client.EmuHawk/tools/NES/PatternViewer.cs b/BizHawk.Client.EmuHawk/tools/NES/PatternViewer.cs index 6ae8bddff3..7ff09e6f63 100644 --- a/BizHawk.Client.EmuHawk/tools/NES/PatternViewer.cs +++ b/BizHawk.Client.EmuHawk/tools/NES/PatternViewer.cs @@ -10,16 +10,14 @@ namespace BizHawk.Client.EmuHawk { public sealed class PatternViewer : Control { - public Bitmap pattern; - public int Pal0 = 0; //0-7 Palette choice - public int Pal1 = 0; - - private readonly Size pSize; + public Bitmap Pattern { get; set; } + public int Pal0 { get; set; } = 0; // 0-7 Palette choice + public int Pal1 { get; set; } = 0; public PatternViewer() { - pSize = new Size(256, 128); - pattern = new Bitmap(pSize.Width, pSize.Height); + var pSize = new Size(256, 128); + Pattern = new Bitmap(pSize.Width, pSize.Height); SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.OptimizedDoubleBuffer, true); @@ -32,7 +30,7 @@ namespace BizHawk.Client.EmuHawk private void PatternViewer_Paint(object sender, PaintEventArgs e) { - e.Graphics.DrawImage(pattern, 0, 0); + e.Graphics.DrawImage(Pattern, 0, 0); } public void Screenshot() @@ -52,8 +50,8 @@ namespace BizHawk.Client.EmuHawk } var file = new FileInfo(sfd.FileName); - Bitmap b = new Bitmap(Width, Height); - Rectangle rect = new Rectangle(new Point(0, 0), Size); + var b = new Bitmap(Width, Height); + var rect = new Rectangle(new Point(0, 0), Size); DrawToBitmap(b, rect); ImageFormat i; @@ -74,14 +72,12 @@ namespace BizHawk.Client.EmuHawk public void ScreenshotToClipboard() { - Bitmap b = new Bitmap(Width, Height); - Rectangle rect = new Rectangle(new Point(0, 0), Size); + var b = new Bitmap(Width, Height); + var rect = new Rectangle(new Point(0, 0), Size); DrawToBitmap(b, rect); - using (var img = b) - { - Clipboard.SetImage(img); - } + using var img = b; + Clipboard.SetImage(img); } } } diff --git a/BizHawk.Client.EmuHawk/tools/NES/SpriteViewer.cs b/BizHawk.Client.EmuHawk/tools/NES/SpriteViewer.cs index fe7d3aaea5..95f6ceda64 100644 --- a/BizHawk.Client.EmuHawk/tools/NES/SpriteViewer.cs +++ b/BizHawk.Client.EmuHawk/tools/NES/SpriteViewer.cs @@ -10,15 +10,13 @@ namespace BizHawk.Client.EmuHawk { public sealed class SpriteViewer : Control { - public Bitmap sprites; - - private readonly Size pSize; + public Bitmap Sprites { get; set; } public SpriteViewer() { SetStyle(ControlStyles.SupportsTransparentBackColor, true); - pSize = new Size(256, 96); - sprites = new Bitmap(pSize.Width, pSize.Height); + var pSize = new Size(256, 96); + Sprites = new Bitmap(pSize.Width, pSize.Height); SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.DoubleBuffer, true); @@ -29,7 +27,7 @@ namespace BizHawk.Client.EmuHawk private void Display(Graphics g) { - g.DrawImage(sprites, 1, 1); + g.DrawImage(Sprites, 1, 1); } private void SpriteViewer_Paint(object sender, PaintEventArgs e) @@ -54,8 +52,8 @@ namespace BizHawk.Client.EmuHawk } var file = new FileInfo(sfd.FileName); - Bitmap b = new Bitmap(Width, Height); - Rectangle rect = new Rectangle(new Point(0, 0), Size); + var b = new Bitmap(Width, Height); + var rect = new Rectangle(new Point(0, 0), Size); DrawToBitmap(b, rect); ImageFormat i; @@ -76,14 +74,12 @@ namespace BizHawk.Client.EmuHawk public void ScreenshotToClipboard() { - Bitmap b = new Bitmap(Width, Height); - Rectangle rect = new Rectangle(new Point(0, 0), Size); + var b = new Bitmap(Width, Height); + var rect = new Rectangle(new Point(0, 0), Size); DrawToBitmap(b, rect); - using (var img = b) - { - Clipboard.SetImage(img); - } + using var img = b; + Clipboard.SetImage(img); } } } diff --git a/BizHawk.Client.EmuHawk/tools/PCE/PCEBGViewer.Designer.cs b/BizHawk.Client.EmuHawk/tools/PCE/PCEBGViewer.Designer.cs index 80537e5736..38becd32c5 100644 --- a/BizHawk.Client.EmuHawk/tools/PCE/PCEBGViewer.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/PCE/PCEBGViewer.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PceBgViewer)); this.PceBgViewerMenu = new MenuStripEx(); this.ViewerSubMenu = new System.Windows.Forms.ToolStripMenuItem(); this.VDC1MenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -255,7 +254,7 @@ this.Controls.Add(this.groupBox5); this.Controls.Add(this.groupBox1); this.Controls.Add(this.PceBgViewerMenu); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.pce_MultiSize; this.MainMenuStrip = this.PceBgViewerMenu; this.Name = "PceBgViewer"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; diff --git a/BizHawk.Client.EmuHawk/tools/PCE/PCEBGViewer.resx b/BizHawk.Client.EmuHawk/tools/PCE/PCEBGViewer.resx index 5bde5fb32b..13fa02dfe3 100644 --- a/BizHawk.Client.EmuHawk/tools/PCE/PCEBGViewer.resx +++ b/BizHawk.Client.EmuHawk/tools/PCE/PCEBGViewer.resx @@ -120,81 +120,4 @@ 17, 17 - - - - AAABAAEAICAAAAAAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAAAAAABILAAASCwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/6qqqv+qqqr/qqqq/6qqqv+qqqr/qqqq/6qqqv+qqqr/qqqq/6qqqv+qqqr/qqqq/6qq - qv+qqqr/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAMjIy/6qqqv+qqqr/qqqq/6qq - qv+qqqr/qqqq/6qqqv+qqqr///////////+enp7/np6e/56env+enp7/np6e/56env+enp7/np6e/56e - nv+enp7///////////+qqqr/qqqq/6qqqv+qqqr/qqqq/87Ozv/Ozs7/qqqq/zIyMv8yMjL///////// - /////////////////////////////////////////////2JiYv9iYmL/2tra/9ra2v/a2tr/2tra/9ra - 2v/a2tr/YmJi/2JiYv//////////////////////////////////////////////////////MjIy/zIy - Mv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP/a2tr/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8yMjL/MjIy/5KSkv+SkpL/////////////////kpKS/5KSkv+SkpL/kpKS/5KSkv+SkpL/kpKS/5KS - kv+SkpL/bm5u/25ubv+SkpL/kpKS/wCFAf8AhQH/kpKS/5KSkv+SkpL/kpKS/5KSkv+SkpL/kpKS/wAA - AP8AAAD/kpKS/zIyMv8yMjL/kpKS/5KSkv+SkpL/kpKS/5KSkv+SkpL/kpKS/5KSkv+SkpL/kpKS/5KS - kv+SkpL/kpKS/5KSkv9ubm7/bm5u/+bm5v+SkpL/kpKS/5KSkv+SkpL/kpKS/+bm5v/m5ub/kpKS/5KS - kv+SkpL/kpKS/5KSkv/m5ub/MjIy/zIyMv/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/25ubv9ubm7//////87Ozv/m5ub/5ubm/3h5ef94eXn///////// - ///m5ub/5ubm/+bm5v/m5ub/5ubm//////8yMjL/MjIy/2JiYv8lJSX///////////+enp7/np6e/56e - nv+enp7/np6e/56env///////////8DAwP/AwMD/bm5u/25ubv//////zs7O////////////eHl5//// - ////////9vr+///////m5ub///////////+qqqr//////zIyMv8yMjL//////2JiYv//////np6e/xoa - Gv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/56env////////////////9ubm7/bm5u///////Ozs7///////// - //94eXn//////////////////////+bm5v///////////6qqqv//////MjIy/zIyMv+enp7/pKai/25u - bv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/25ubv+enp7/np6e/25ubv9ubm7//////87O - zv///////////3h5ef//////////////////////5ubm////////////qqqq//////8yMjL/MjIy//// - //+enp7///////////9iYmL/Pj4+/xoaGv8lJSX/Pj4+/2JiYv///////////25ubv//////bm5u/25u - bv//////zs7O////////////JSUl/yUlJf8lJSX/JSUl/yUlJf/m5ub///////////+qqqr//////zIy - Mv8yMjL//////56env//////////////////////////////////////////////////////bm5u//// - //9ubm7/bm5u///////Ozs7///////////+SkpL/kpKS/5KSkv+SkpL/kpKS/+bm5v///////////6qq - qv//////MjIy/zIyMv//////np6e/////////////////8DAwP/AwMD//////8DAwP////////////// - //9ubm7//////25ubv9ubm7//////87Ozv//////zs7O/////////////////5GO/v///////////6qq - qv//////qqqq//////8yMjL/AAAA//////+enp7///////////////////////////////////////// - /////////////25ubv//////bm5u/5KSkv//////zs7O///////Ozs7//////5GO/v+Rjv7//////5GO - /v//////qqqq//////+qqqr/kpKS/wAAAP8AAAD///////////+enp7///////////////////////// - //////////////////9ubm7///////////9ubm7/kpKS///////Ozs7////////////Ozs7///////// - /////////////6qqqv///////////6qqqv//////AAAA/wAAAP////////////////+enp7///////// - ////////////////////////bm5u/////////////////25ubv+SkpL//////87Ozv////////////// - ///Ozs7/zs7O/6qqqv+qqqr/////////////////qqqq//////8AAAD/AAAA//////////////////// - //+enp7/np6e/56env+enp7/np6e/56env//////////////////////bm5u/5KSkv//////zs7O/87O - zv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7//////wAAAP8AAAD///////// - //////////////////////////////////////////////////////////////////9ubm7/kpKS//// - ////////////////////////////////////////////////////////////////////////AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/2JiYv+SkpL/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoa - Gv8+Pj7/Pj4+/z4+Pv8+Pj7/Ghoa/z4+Pv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoa - Gv8aGhr/VlZW/wAAAP8AAAD/YmJi/5KSkv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZW - Vv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Pj4+/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW//2P - a/9WVlb//Y9r/xoaGv9WVlb/AAAA/wAAAP9iYmL/kpKS/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZW - Vv9WVlb/VlZW/xoaGv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv8+Pj7/VlZW/1ZWVv9WVlb/VlZW/1ZW - Vv9WVlb/VlZW/1ZWVv9WVlb/Ghoa/1ZWVv8AAAD/AAAA/2JiYv+SkpL/VlZW/1ZWVv+Ghob/VlZW/4aG - hv+Ghob/hoaG/4aGhv9WVlb/Ghoa/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/z4+Pv9WVlb/VlZW/1ZW - Vv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv8aGhr/VlZW/wAAAP8AAAD/YmJi/2JiYv+SkpL/kpKS/5KS - kv+SkpL/kpKS/5KSkv+SkpL/kpKS/5KSkv9iYmL/hoaG/4aGhv+Ghob/hoaG/4aGhv+Ghob/YmJi/5KS - kv+SkpL/kpKS/5KSkv+SkpL/kpKS/5KSkv+SkpL/kpKS/25ubv9iYmL/AAAA/1ZWVv8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9WVlb/AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/////////////////4AB/4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////////////8= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/PCE/PCESoundDebugger.Designer.cs b/BizHawk.Client.EmuHawk/tools/PCE/PCESoundDebugger.Designer.cs index cf48a11aae..6554b846a7 100644 --- a/BizHawk.Client.EmuHawk/tools/PCE/PCESoundDebugger.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/PCE/PCESoundDebugger.Designer.cs @@ -64,7 +64,6 @@ "-", "-", "-"}, -1); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PCESoundDebugger)); this.btnExport = new System.Windows.Forms.Button(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.lvPsgWaveforms = new System.Windows.Forms.ListView(); @@ -264,7 +263,7 @@ this.Controls.Add(this.groupBox2); this.Controls.Add(this.groupBox1); this.Controls.Add(this.SoundMenuStrip); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.Bug_MultiSize; this.MainMenuStrip = this.SoundMenuStrip; this.Name = "PCESoundDebugger"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; diff --git a/BizHawk.Client.EmuHawk/tools/PCE/PCESoundDebugger.resx b/BizHawk.Client.EmuHawk/tools/PCE/PCESoundDebugger.resx index 5505616aab..3f5ba96652 100644 --- a/BizHawk.Client.EmuHawk/tools/PCE/PCESoundDebugger.resx +++ b/BizHawk.Client.EmuHawk/tools/PCE/PCESoundDebugger.resx @@ -120,29 +120,4 @@ 17, 17 - - - - AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABMLAAATCwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEpWMf/m5ub/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPUgo/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJBI/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEpWMf8AAAAAAAAAAAAAAAAyOSD/eWId/3hjHf95Yx3/eWId/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARU4t/wAAAAB5ZR//eWUg/4fJpv+Bx5//ecKV/yt8 - Ov94ZB//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADlFKP8AAAAAeWch/5zSuP+Z0rX/kc6u/zyN - U/95w5b/emYi/wAAAAAAAAAASk4x/wAAAAAAAAAAAAAAAAAAAAAyPiP/emgk/67cxv+038v/rtvH/1in - c/+Rzq//gcef/3poJP8yOSD/PU4t/wAAAAAAAAAAAAAAAAAAAABFTjH/OUUo/3tqJ//C59X/zOvb/3/B - kv+u28b/mdK2/4fJpv96ayf/AAAAAAAAAAAAAAAAAAAAAFNWOP9TVjj/AAAAAAAAAAB7bSr/zOrb/9vz - 5//M69v/tN/L/53SuP98bSr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9zH/yJq - Lv/M69v/wubV/67cxv97byz/AAAAAAAAAAA9Ti3/SlYx/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANvz - 5/+v28f/fHAt/3xwLf98cC3/8vLy/zI5IP85QSj/AAAAAAAAAAAAAAAAAAAAAEpWMf9KTjH/RU4t/z1I - KP98cC3/fHAt//Pz8/85RSj/8/Pz/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAPUgt/wAAAAAAAAAAAAAAAEVOMf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAEpOMf8AAAAAAAAAAAAAAABTVjj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABOVjj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA+f8AAP3/AAD9/wAA3B8AAOgPAADoDQAA4AMAAMAPAAAwHwAA8DMAAPAPAAAAfwAA938AAPd/ - AAD3/////////w== - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/PCE/PCETileViewer.Designer.cs b/BizHawk.Client.EmuHawk/tools/PCE/PCETileViewer.Designer.cs index da57bbdcec..c4df3ea4d2 100644 --- a/BizHawk.Client.EmuHawk/tools/PCE/PCETileViewer.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/PCE/PCETileViewer.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PCETileViewer)); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.bmpViewBGPal = new BizHawk.Client.EmuHawk.BmpView(); this.bmpViewBG = new BizHawk.Client.EmuHawk.BmpView(); @@ -183,7 +182,7 @@ this.Controls.Add(this.groupBox2); this.Controls.Add(this.groupBox1); this.Controls.Add(this.menuStrip1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.pce_MultiSize; this.KeyPreview = true; this.MainMenuStrip = this.menuStrip1; this.Name = "PCETileViewer"; diff --git a/BizHawk.Client.EmuHawk/tools/PCE/PCETileViewer.resx b/BizHawk.Client.EmuHawk/tools/PCE/PCETileViewer.resx index 9d64fd2552..0f6d8eb42b 100644 --- a/BizHawk.Client.EmuHawk/tools/PCE/PCETileViewer.resx +++ b/BizHawk.Client.EmuHawk/tools/PCE/PCETileViewer.resx @@ -120,81 +120,4 @@ 17, 17 - - - - AAABAAEAICAAAAAAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAAAAAABILAAASCwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/6qqqv+qqqr/qqqq/6qqqv+qqqr/qqqq/6qqqv+qqqr/qqqq/6qqqv+qqqr/qqqq/6qq - qv+qqqr/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAMjIy/6qqqv+qqqr/qqqq/6qq - qv+qqqr/qqqq/6qqqv+qqqr///////////+enp7/np6e/56env+enp7/np6e/56env+enp7/np6e/56e - nv+enp7///////////+qqqr/qqqq/6qqqv+qqqr/qqqq/87Ozv/Ozs7/qqqq/zIyMv8yMjL///////// - /////////////////////////////////////////////2JiYv9iYmL/2tra/9ra2v/a2tr/2tra/9ra - 2v/a2tr/YmJi/2JiYv//////////////////////////////////////////////////////MjIy/zIy - Mv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP/a2tr/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8yMjL/MjIy/5KSkv+SkpL/////////////////kpKS/5KSkv+SkpL/kpKS/5KSkv+SkpL/kpKS/5KS - kv+SkpL/bm5u/25ubv+SkpL/kpKS/wCFAf8AhQH/kpKS/5KSkv+SkpL/kpKS/5KSkv+SkpL/kpKS/wAA - AP8AAAD/kpKS/zIyMv8yMjL/kpKS/5KSkv+SkpL/kpKS/5KSkv+SkpL/kpKS/5KSkv+SkpL/kpKS/5KS - kv+SkpL/kpKS/5KSkv9ubm7/bm5u/+bm5v+SkpL/kpKS/5KSkv+SkpL/kpKS/+bm5v/m5ub/kpKS/5KS - kv+SkpL/kpKS/5KSkv/m5ub/MjIy/zIyMv/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/25ubv9ubm7//////87Ozv/m5ub/5ubm/3h5ef94eXn///////// - ///m5ub/5ubm/+bm5v/m5ub/5ubm//////8yMjL/MjIy/2JiYv8lJSX///////////+enp7/np6e/56e - nv+enp7/np6e/56env///////////8DAwP/AwMD/bm5u/25ubv//////zs7O////////////eHl5//// - ////////9vr+///////m5ub///////////+qqqr//////zIyMv8yMjL//////2JiYv//////np6e/xoa - Gv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/56env////////////////9ubm7/bm5u///////Ozs7///////// - //94eXn//////////////////////+bm5v///////////6qqqv//////MjIy/zIyMv+enp7/pKai/25u - bv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/25ubv+enp7/np6e/25ubv9ubm7//////87O - zv///////////3h5ef//////////////////////5ubm////////////qqqq//////8yMjL/MjIy//// - //+enp7///////////9iYmL/Pj4+/xoaGv8lJSX/Pj4+/2JiYv///////////25ubv//////bm5u/25u - bv//////zs7O////////////JSUl/yUlJf8lJSX/JSUl/yUlJf/m5ub///////////+qqqr//////zIy - Mv8yMjL//////56env//////////////////////////////////////////////////////bm5u//// - //9ubm7/bm5u///////Ozs7///////////+SkpL/kpKS/5KSkv+SkpL/kpKS/+bm5v///////////6qq - qv//////MjIy/zIyMv//////np6e/////////////////8DAwP/AwMD//////8DAwP////////////// - //9ubm7//////25ubv9ubm7//////87Ozv//////zs7O/////////////////5GO/v///////////6qq - qv//////qqqq//////8yMjL/AAAA//////+enp7///////////////////////////////////////// - /////////////25ubv//////bm5u/5KSkv//////zs7O///////Ozs7//////5GO/v+Rjv7//////5GO - /v//////qqqq//////+qqqr/kpKS/wAAAP8AAAD///////////+enp7///////////////////////// - //////////////////9ubm7///////////9ubm7/kpKS///////Ozs7////////////Ozs7///////// - /////////////6qqqv///////////6qqqv//////AAAA/wAAAP////////////////+enp7///////// - ////////////////////////bm5u/////////////////25ubv+SkpL//////87Ozv////////////// - ///Ozs7/zs7O/6qqqv+qqqr/////////////////qqqq//////8AAAD/AAAA//////////////////// - //+enp7/np6e/56env+enp7/np6e/56env//////////////////////bm5u/5KSkv//////zs7O/87O - zv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7//////wAAAP8AAAD///////// - //////////////////////////////////////////////////////////////////9ubm7/kpKS//// - ////////////////////////////////////////////////////////////////////////AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/2JiYv+SkpL/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoa - Gv8+Pj7/Pj4+/z4+Pv8+Pj7/Ghoa/z4+Pv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoa - Gv8aGhr/VlZW/wAAAP8AAAD/YmJi/5KSkv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZW - Vv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Pj4+/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW//2P - a/9WVlb//Y9r/xoaGv9WVlb/AAAA/wAAAP9iYmL/kpKS/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZW - Vv9WVlb/VlZW/xoaGv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv8+Pj7/VlZW/1ZWVv9WVlb/VlZW/1ZW - Vv9WVlb/VlZW/1ZWVv9WVlb/Ghoa/1ZWVv8AAAD/AAAA/2JiYv+SkpL/VlZW/1ZWVv+Ghob/VlZW/4aG - hv+Ghob/hoaG/4aGhv9WVlb/Ghoa/1ZWVv9WVlb/VlZW/1ZWVv9WVlb/VlZW/z4+Pv9WVlb/VlZW/1ZW - Vv9WVlb/VlZW/1ZWVv9WVlb/VlZW/1ZWVv8aGhr/VlZW/wAAAP8AAAD/YmJi/2JiYv+SkpL/kpKS/5KS - kv+SkpL/kpKS/5KSkv+SkpL/kpKS/5KSkv9iYmL/hoaG/4aGhv+Ghob/hoaG/4aGhv+Ghob/YmJi/5KS - kv+SkpL/kpKS/5KSkv+SkpL/kpKS/5KSkv+SkpL/kpKS/25ubv9iYmL/AAAA/1ZWVv8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9WVlb/AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/////////////////4AB/4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////////////8= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/SMS/VDPViewer.Designer.cs b/BizHawk.Client.EmuHawk/tools/SMS/VDPViewer.Designer.cs index efcc9c553c..340bdf93c2 100644 --- a/BizHawk.Client.EmuHawk/tools/SMS/VDPViewer.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/SMS/VDPViewer.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SmsVDPViewer)); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.bmpViewTiles = new BizHawk.Client.EmuHawk.BmpView(); this.groupBox2 = new System.Windows.Forms.GroupBox(); @@ -181,7 +180,7 @@ this.Controls.Add(this.groupBox1); this.Controls.Add(this.menuStrip1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.sms_MultiSize; this.KeyPreview = true; this.MainMenuStrip = this.menuStrip1; this.Name = "SmsVDPViewer"; diff --git a/BizHawk.Client.EmuHawk/tools/SMS/VDPViewer.resx b/BizHawk.Client.EmuHawk/tools/SMS/VDPViewer.resx index fef79c9ad8..0f6d8eb42b 100644 --- a/BizHawk.Client.EmuHawk/tools/SMS/VDPViewer.resx +++ b/BizHawk.Client.EmuHawk/tools/SMS/VDPViewer.resx @@ -120,100 +120,4 @@ 17, 17 - - - - AAABAAIAICAAAAEAIACoEAAAJgAAABAQAAABACAAaAQAAM4QAAAoAAAAIAAAAEAAAAABACAAAAAAAIAQ - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAICAv8CAgL/AgIC/wICAv8CAgL/AgIC/wICAv8CAgL/AgIC/wICAv8CAgL/AgIC/wIC - Av8CAgL/AgIC/wICAv8CAgL/AgIC/wICAv8CAgL/AgIC/wICAv8CAgL/AgIC/wICAv8CAgL/AgIC/wIC - Av8CAgL/AgIC/wAAAAACAgL/JCMg/yMjH/8iIh7/GxoX/xoZF/8aGRf/ISAd/x8fHP8eHhv/Hh4a/x0d - Gv9saGH/amVf/xoaGP8aGRf/YVxW/19aVP8YGBb/FxcV/xcXFf8WFhT/FhUU/xUVE/8TExH/FRUT/xUV - E/8VFRP/FRUT/xUVE/8VFRP/AgIC/wICAv+/vrL/V1RM/1VTS/9/fHP/fHlw/3l2bf9NS0T/TEpD/0pI - Qf9IRkD/RUM9/wwNDP8MDQz/amVf/z49N/8MDAz/DAwM/19aVP8PDw3/WlVQ/1hTTv9WUUz/VFBL/0xK - Rf8xMCv/MTAr/zEwK/8xMCv/MTAr/xUVE/8CAgL/AgIC/0lIQP8qKSX/Kikl/2hidP9oYnT/aGJ0/ycm - Iv8lJCH/JCMg/yQkIP8jIx//IiEe/yEgHf8hIB3/IB8c/x8fHP8eHhv/HR0a/w8PDf8PDw3/Dw8N/w4O - DP8NDQv/REI+/xkYFv8YGBb/GBgW/xgYFv8YGBb/FRUT/wICAv8CAgL/Q1Lt/ycv1f8nL9X/Jy/V/ycv - 1f8nL9X/Jy/V/ycv1f8nL9X/Jy/V/ycv1f8nL9X/Jy/V/ycv1f8nL9X/Jy/V/ycv1f8nL9X/Jy/V/ycv - 1f8nL9X/Jy/V/ycv1f8nL9X/Jy/V/ycv1f8nL9X/Jy/V/ycv1f8hJ8//AgIC/wICAv+pnpH/X1hR/15X - UP9dVk//WFJM/1dRS/9VT0n/UEtF/05JRP9MR0L/SUQ//0hDPv9DQDv/QT45/z47Nv88ODT/Ozgz/zo2 - Mv84NTH/NjMv/zUyLv8zMCz/Mi8s/zEuK/8vLSn/Liwo/y0rJ/8tKyf/LSsn/yYkIf8CAgL/AgIC/6me - kf9fWFH/XldQ/11WT/9YUkz/V1FL/1VPSf9QS0X/TklE/0xHQv9JRD//SEM+/0NAO/9BPjn/Pjs2/ysz - 1v90aeP/hHjl/y031/89Pdv/ICzU/ycy1f8tNdf/KDHW/y8tKf8uLCj/LSsn/y0rJ/8tKyf/JiQh/wIC - Av8CAgL/hXxw/0lEPv9LRj//S0ZA/0lEPv9IQz3/RkE8/0M/Ov9BPTj/Pjs2/zw5NP87ODP/OTYy/zg1 - Mf81Mi7/KDHW/01Hxv87NTX/dG+C/1NQ3v8wN9j/aGJ0/2VdZP86P9r/KCYj/yclIv8nJSL/JSMg/yQi - IP8eHBr/AgIC/wICAv9gWVH/OTQw/z05NP89OjX/Pjo1/zs3M/87NzP/OTUx/zg0MP82My//NTIu/zMw - LP8xLiv/Ly0p/y4rKP8rM9b/dGnj/4R45f8tN9f/PT3b/yAs1P8nMtX/LTXX/ygx1v8kIR//IyEe/yEf - Hf8dHBn/GxoY/xUUE/8CAgL/AgIC/2BZUf85NDD/PTk0/z06Nf8+OjX/Ozcz/zs3M/85NTH/ODQw/zYz - L/81Mi7/MzAs/zEuK/8vLSn/Liso/ysz1v90aeP/hHjl/y031/89Pdv/ICzU/ycy1f8tNdf/KDHW/yQh - H/8jIR7/IR8d/x0cGf8bGhj/FRQT/wICAv8CAgL/tbKn/y8sKP8xLir/MzAs/zMwLP8xLiv/MC0q/y4r - KP8tKyf/LSsn/yspJv8qKCX/KCYj/yclIv8lJCH/KzPW/y031/8tN9f/PT3b/z092/8gLNT/JzLV/y01 - 1/8oMdb/Hhwa/x0bGf8bGRf/GRgW/xcWFP8tLCn/AgIC/wICAv/R0M3/kY6G/ygmIv8qJyT/KCYj/9HO - yv/Qzcj/r6ym/6yoo/+dmZP/paGb/52alP8iIB7/ISAd/yAfHP8mLtX/Rkvd/0xR3f8nL9X/LDPW/yIq - 1f8eKNT/HSbT/ygt1f8YFxX/FxYV/xcWFP8VFBP/T01I/0A/O/8CAgL/AgIC/9TT0f+gnpj/nJmT/ygm - Iv8nJSL/JiQh/yUjIf8lIyH/JiMh/yMiH/8iIB7/ISAd/yEfHf8gHhz/Hx4c/yEgHf8gHxz/Hx4b/x4d - Gv8eHRr/HRwZ/x0cGf8cGxj/GxoX/xcWFP8WFRT/FhUT/1xZVP9jX1n/SkdD/wICAv8CAgL/19bU/6im - of+npKD/oqCa/yclIv8nJSL/JiQh/yUjIP8lIyD/JCIf/yIgHv8iIB7/IR8d/x8dG/8iIB7/Ji7V/0ZL - 3f9MUd3/Jy/V/ywz1v8iKtX/HijU/x0m0/8oLdX/FxYU/xYVE/9pZmD/bmtj/25qY/9RT0n/AgIC/wIC - Av/X1tT/qKah/6mnov+npKD/o6Gd/0hDPv9IQz7/R0I9/0ZCPf9EQDv/REA7/0I/Ov9BPTn/QDw4/z46 - Nv89OTX/IiEe/yEgHf8gHxz/Hx4b/x4dGv8eHRr/HRwZ/zIvLP8wLSr/dnNs/3FuZ/9yb2f/cG1l/1NQ - S/8CAgL/AgIC/9XU0v+ysKv/srCr/7Kwq/+npKD/SEM+/0hDPv9IQz7/R0I9/0ZCPf9EQDv/REA7/0I/ - Ov9BPTn/QDw4/yMiHv9STEf/UEtF/01IQ/9LRkH/SkVA/0hDPv9GQTz/HRwZ/zIvLP92c23/h4N8/4OA - eP+DgHj/tK+l/wICAv8CAgL/1dTS/7Kwq/+ysKv/srCr/6ekoP9IQz7/SEM+/0hDPv9HQj3/RkI9/0RA - O/9EQDv/Qj86/0E9Of9APDj/IyIe/1JMR/9QS0X/TUhD/0tGQf9KRUD/SEM+/0ZBPP8dHBn/Mi8s/3Zz - bf+Hg3z/g4B4/4OAeP+0r6X/AgIC/wICAv/V1NL/3dza/7Kwq/+ysKv/p6Sg/0hDPv9IQz7/SEM+/0dC - Pf9GQj3/REA7/0RAO/9CPzr/QT05/0A8OP8jIh7/UkxH/1BLRf9NSEP/S0ZB/0pFQP9IQz7/RkE8/x0c - Gf8yLyz/dnNt/4eDfP+DgHj/xsW+/7Svpf8CAgL/AAAAAAICAv8CAgL/2NfV/9jX1f/X1tT/f3dt/393 - bf9/d23/f3dt/310a/97c2r/enJp/3hwZ/91bmX/c2tj/yQjH/8jIh7/IiEe/yIhHv8hIB3/IB8c/x8e - G/8eHRr/Hh0a/1pUTf/Av7b/vr2z/7y6r/8CAgL/AgIC/wAAAAAAAAAAAAAAAAAAAAACAgL/AgIC/wIC - Av8CAgL/AgIC/wICAv8CAgL/AgIC/wICAv8CAgL/AgIC/wICAv8CAgL/AgIC/wICAv8CAgL/AgIC/wIC - Av8CAgL/AgIC/wICAv8CAgL/AgIC/wICAv8CAgL/AgIC/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////////////////////////4AA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAIAAAAHgAAAH////////////////////////////////KAAAABAAAAAgAAAAAQAgAAAA - AABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/NiwV/zInEv89Mhv/OjAZ/zow - Gf8yJxH/QjUf/zEnEf88MRz/NiwW/zYsFv80KxX/OjAZ/zowGf8AAAD/AAAA/1ZMX/82NIb/Vkxf/25h - SP9uYUj/bmFI/25hSP9uYUj/VEkw/05BKP9OQCf/Ukcv/25hSP9QQiv/AAAA/wAAAP85Osf/OTrH/zk6 - x/85Osf/OTrH/zk6x/85Osf/OTrH/zk6x/85Osf/OTrH/zk6x/85Osf/OTrH/wAAAP8AAAD/sKOP/5CD - av+Qgmn/joBn/4x+Zf+KfGL/X1E5/z9B0/9cUon/QETd/0lIvP9GRq//U0Qs/1BCK/8AAAD/AAAA/7Cj - j/+QgWn/jX9m/4p8Yf+Hd13/g3NZ/1tNNP9HStv/S0/X/ztA2P8rNtr/LzjY/1NELP9QQiv/AAAA/wAA - AP9gVDv/sKOP/7Cjj/+wo4//sKOP/7Cjj/9bTTT/Vkgv/1ZIL/9WSC//Vkgv/1ZIL/9WSC//UEIr/wAA - AP8AAAD/WEox/01AJ/+Gc1r/hnNa/4ZzWv+Gc1r/WEw0/0tP1/9LT9f/S0/X/0tP1/9LT9f/PjMc/1hJ - MP8AAAD/AAAA/01AJ/9NQCf/oJR//6CUf/+glH//oJR//2ZVPv84LRf/NisV/zQpE/80JxP/MiYR/01A - J/+glH//AAAA/wAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACAAQAA//8AAP//AAD//wAA - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.Designer.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.Designer.cs index 829f631671..34d55b1db2 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.Designer.cs @@ -163,7 +163,6 @@ this.BranchView.LagFramesToHide = 0; this.BranchView.LetKeysModifySelection = false; this.BranchView.Location = new System.Drawing.Point(6, 19); - this.BranchView.MaxCharactersInHorizontal = 1; this.BranchView.MultiSelect = false; this.BranchView.Name = "BranchView"; this.BranchView.RowCount = 0; diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs index fd44fc3715..884859aa53 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs @@ -19,9 +19,9 @@ namespace BizHawk.Client.EmuHawk private readonly ScreenshotForm _screenshot = new ScreenshotForm(); private TasMovie Movie => Tastudio.CurrentTasMovie; + private MainForm MainForm => GlobalWin.MainForm; // TODO: pass this in private TasBranch _backupBranch; private BranchUndo _branchUndo = BranchUndo.None; - private int _longestBranchText; private enum BranchUndo { @@ -45,7 +45,14 @@ namespace BizHawk.Client.EmuHawk public BookmarksBranchesBox() { InitializeComponent(); + SetupColumns(); + BranchView.QueryItemText += QueryItemText; + BranchView.QueryItemBkColor += QueryItemBkColor; + } + private void SetupColumns() + { + BranchView.AllColumns.Clear(); BranchView.AllColumns.AddRange(new[] { new RollColumn @@ -67,9 +74,6 @@ namespace BizHawk.Client.EmuHawk Width = 90 }, }); - - BranchView.QueryItemText += QueryItemText; - BranchView.QueryItemBkColor += QueryItemBkColor; } #region Query callbacks @@ -145,6 +149,7 @@ namespace BizHawk.Client.EmuHawk Select(Movie.CurrentBranch, true); BranchView.Refresh(); Tastudio.RefreshDialog(); + MainForm.UpdateStatusSlots(); } public TasBranch SelectedBranch => BranchView.AnyRowsSelected @@ -158,8 +163,8 @@ namespace BizHawk.Client.EmuHawk Frame = Tastudio.Emulator.Frame, CoreData = (byte[])(Tastudio.StatableEmulator.SaveStateBinary().Clone()), InputLog = Movie.CloneInput(), - CoreFrameBuffer = GlobalWin.MainForm.MakeScreenshotImage(), - OSDFrameBuffer = GlobalWin.MainForm.CaptureOSD(), + CoreFrameBuffer = MainForm.MakeScreenshotImage(), + OSDFrameBuffer = MainForm.CaptureOSD(), ChangeLog = new TasMovieChangeLog(Movie), TimeStamp = DateTime.Now, Markers = Movie.Markers.DeepClone(), @@ -184,7 +189,7 @@ namespace BizHawk.Client.EmuHawk if (Tastudio.Settings.OldControlSchemeForBranches && Tastudio.TasPlaybackBox.RecordingMode) Movie.Truncate(branch.Frame); - GlobalWin.MainForm.PauseOnFrame = null; + MainForm.PauseOnFrame = null; Tastudio.RefreshDialog(); } @@ -344,6 +349,7 @@ namespace BizHawk.Client.EmuHawk RemovedCallback?.Invoke(index); Tastudio.RefreshDialog(); GlobalWin.OSD.AddMessage($"Removed branch {index}"); + MainForm.UpdateStatusSlots(); } private void UndoBranchToolStripMenuItem_Click(object sender, EventArgs e) @@ -513,41 +519,26 @@ namespace BizHawk.Client.EmuHawk public void Restart() { - BranchView.DeselectAll(); BranchView.RowCount = Movie.Branches.Count; + + if (BranchView.RowCount == 0) + { + SetupColumns(); + } + BranchView.Refresh(); } public void UpdateTextColumnWidth() { - int temp = 0; - foreach (TasBranch b in Movie.Branches) + if (Movie.Branches.Any()) { - if (string.IsNullOrEmpty(b.UserText)) - { - continue; - } + var longestBranchText = Movie.Branches + .OrderBy(b => b.UserText?.Length ?? 0) + .Last() + .UserText; - if (temp < b.UserText.Length) - { - temp = b.UserText.Length; - } - } - - _longestBranchText = temp; - - int textWidth = (_longestBranchText * 12) + 14; // sorry for magic numbers. see TAStudio.SetUpColumns() - var column = BranchView.AllColumns.Single(c => c.Name == UserTextColumnName); - - if (textWidth < 90) - { - textWidth = 90; - } - - if (column.Width != textWidth) - { - column.Width = textWidth; - BranchView.AllColumns.ColumnsChanged(); + BranchView.ExpandColumnToFitText(UserTextColumnName, longestBranchText); } } @@ -593,7 +584,7 @@ namespace BizHawk.Client.EmuHawk if (e.Button == MouseButtons.Left) { - if (BranchView.CurrentCell != null && BranchView.CurrentCell.IsDataCell + if (BranchView.CurrentCell.IsDataCell() && BranchView.CurrentCell.Column.Name == BranchNumberColumnName) { BranchView.DragCurrentCell(); @@ -636,7 +627,7 @@ namespace BizHawk.Client.EmuHawk private void BranchView_CellDropped(object sender, InputRoll.CellEventArgs e) { - if (e.NewCell != null && e.NewCell.IsDataCell && e.OldCell.RowIndex < Movie.Branches.Count) + if (e.NewCell.IsDataCell() && e.OldCell.RowIndex < Movie.Branches.Count) { var guid = Movie.BranchGuidByIndex(Movie.CurrentBranch); Movie.SwapBranches(e.OldCell.RowIndex.Value, e.NewCell.RowIndex.Value); diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/DefaultGreenzoneSettings.Designer.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/DefaultGreenzoneSettings.Designer.cs index 52b8e909a2..f4e08e08a8 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/DefaultGreenzoneSettings.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/DefaultGreenzoneSettings.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DefaultGreenzoneSettings)); this.OkBtn = new System.Windows.Forms.Button(); this.CancelBtn = new System.Windows.Forms.Button(); this.DefaultsButton = new System.Windows.Forms.Button(); @@ -92,7 +91,7 @@ this.Controls.Add(this.DefaultsButton); this.Controls.Add(this.OkBtn); this.Controls.Add(this.CancelBtn); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.TAStudio_MultiSize; this.Name = "DefaultGreenzoneSettings"; this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; this.Text = "Default Savestate History Settings"; diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/DefaultGreenzoneSettings.resx b/BizHawk.Client.EmuHawk/tools/TAStudio/DefaultGreenzoneSettings.resx index 76776a95aa..29dcb1b3a3 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/DefaultGreenzoneSettings.resx +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/DefaultGreenzoneSettings.resx @@ -117,33 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA////AP64aABQUFAAwNjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAMDAAMDAwAAAAAAAAAAAAMCAgMDAwMDAwAAAAMDAAADAgICAwMDAwMDAwMCAgMAAAMCAwMD - AwMDAwMDAgIDAAMEBAQDAgMDAwMDAwICAgMDBAQEAwICAwQDAwQDAgIDAAMDAwICAgMCAgIDAwMDAAAA - AwICAgMCAgIDAgMAAAAAAAAAAwMEBAQEBAQCAwAAAAAAAwMEBAQDAwMDAwMAAAAAAwQEAwMEBAMEBAQC - AwAAAAMEBAMDBAMEBAQEAgMAAAAAAwMDBAQDBAMDAwIDAAAAAAMCAgICAgICAgMEBAMAAAAAAwICAgIC - AwMEBAQDAAAAAAADAwMDAwAAAwMDAJH/AAAAcwAAAAEAAIABAAAAAAAAAAAAAIABAADABwAA8AMAAOAD - AADAAQAAwAEAAOABAADgAAAA8AAAAPgxAAA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/GreenzoneSettings.Designer.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/GreenzoneSettings.Designer.cs index 7c77f6670b..2ef69f7e26 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/GreenzoneSettings.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/GreenzoneSettings.Designer.cs @@ -35,7 +35,6 @@ namespace BizHawk.Client.EmuHawk /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(StateHistorySettingsForm)); this.CancelBtn = new System.Windows.Forms.Button(); this.OkBtn = new System.Windows.Forms.Button(); this.MemCapacityNumeric = new System.Windows.Forms.NumericUpDown(); @@ -431,7 +430,7 @@ namespace BizHawk.Client.EmuHawk this.Controls.Add(this.NumStatesLabel); this.Controls.Add(this.OkBtn); this.Controls.Add(this.CancelBtn); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.TAStudio_MultiSize; this.MinimumSize = new System.Drawing.Size(225, 165); this.Name = "StateHistorySettingsForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/GreenzoneSettings.resx b/BizHawk.Client.EmuHawk/tools/TAStudio/GreenzoneSettings.resx index 76776a95aa..29dcb1b3a3 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/GreenzoneSettings.resx +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/GreenzoneSettings.resx @@ -117,33 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA////AP64aABQUFAAwNjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAMDAAMDAwAAAAAAAAAAAAMCAgMDAwMDAwAAAAMDAAADAgICAwMDAwMDAwMCAgMAAAMCAwMD - AwMDAwMDAgIDAAMEBAQDAgMDAwMDAwICAgMDBAQEAwICAwQDAwQDAgIDAAMDAwICAgMCAgIDAwMDAAAA - AwICAgMCAgIDAgMAAAAAAAAAAwMEBAQEBAQCAwAAAAAAAwMEBAQDAwMDAwMAAAAAAwQEAwMEBAMEBAQC - AwAAAAMEBAMDBAMEBAQEAgMAAAAAAwMDBAQDBAMDAwIDAAAAAAMCAgICAgICAgMEBAMAAAAAAwICAgIC - AwMEBAQDAAAAAAADAwMDAwAAAwMDAJH/AAAAcwAAAAEAAIABAAAAAAAAAAAAAIABAADABwAA8AMAAOAD - AADAAQAAwAEAAOABAADgAAAA8AAAAPgxAAA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/HeaderEditor.Designer.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/HeaderEditor.Designer.cs index ebc92380d9..a34016bbdd 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/HeaderEditor.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/HeaderEditor.Designer.cs @@ -35,7 +35,6 @@ namespace BizHawk.Client.EmuHawk /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MovieHeaderEditor)); this.CancelBtn = new System.Windows.Forms.Button(); this.OkBtn = new System.Windows.Forms.Button(); this.AuthorTextBox = new System.Windows.Forms.TextBox(); @@ -207,7 +206,7 @@ namespace BizHawk.Client.EmuHawk this.Controls.Add(this.AuthorTextBox); this.Controls.Add(this.OkBtn); this.Controls.Add(this.CancelBtn); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.TAStudio_MultiSize; this.MinimumSize = new System.Drawing.Size(150, 311); this.Name = "MovieHeaderEditor"; this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/HeaderEditor.resx b/BizHawk.Client.EmuHawk/tools/TAStudio/HeaderEditor.resx index 76776a95aa..29dcb1b3a3 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/HeaderEditor.resx +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/HeaderEditor.resx @@ -117,33 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA////AP64aABQUFAAwNjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAMDAAMDAwAAAAAAAAAAAAMCAgMDAwMDAwAAAAMDAAADAgICAwMDAwMDAwMCAgMAAAMCAwMD - AwMDAwMDAgIDAAMEBAQDAgMDAwMDAwICAgMDBAQEAwICAwQDAwQDAgIDAAMDAwICAgMCAgIDAwMDAAAA - AwICAgMCAgIDAgMAAAAAAAAAAwMEBAQEBAQCAwAAAAAAAwMEBAQDAwMDAwMAAAAAAwQEAwMEBAMEBAQC - AwAAAAMEBAMDBAMEBAQEAgMAAAAAAwMDBAQDBAMDAwIDAAAAAAMCAgICAgICAgMEBAMAAAAAAwICAgIC - AwMEBAQDAAAAAAADAwMDAwAAAwMDAJH/AAAAcwAAAAEAAIABAAAAAAAAAAAAAIABAADABwAA8AMAAOAD - AADAAQAAwAEAAOABAADgAAAA8AAAAPgxAAA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/MarkerControl.Designer.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/MarkerControl.Designer.cs index 28206f6351..370880e48b 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/MarkerControl.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/MarkerControl.Designer.cs @@ -202,7 +202,6 @@ this.MarkerView.LagFramesToHide = 0; this.MarkerView.LetKeysModifySelection = false; this.MarkerView.Location = new System.Drawing.Point(6, 19); - this.MarkerView.MaxCharactersInHorizontal = 1; this.MarkerView.MultiSelect = false; this.MarkerView.Name = "MarkerView"; this.MarkerView.RowCount = 0; diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/MarkerControl.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/MarkerControl.cs index 28837d9b79..7142a2bec8 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/MarkerControl.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/MarkerControl.cs @@ -18,7 +18,14 @@ namespace BizHawk.Client.EmuHawk public MarkerControl() { InitializeComponent(); + SetupColumns(); + MarkerView.QueryItemBkColor += MarkerView_QueryItemBkColor; + MarkerView.QueryItemText += MarkerView_QueryItemText; + } + private void SetupColumns() + { + MarkerView.AllColumns.Clear(); MarkerView.AllColumns.AddRange(new[] { new RollColumn @@ -34,9 +41,6 @@ namespace BizHawk.Client.EmuHawk Width = 125 } }); - - MarkerView.QueryItemBkColor += MarkerView_QueryItemBkColor; - MarkerView.QueryItemText += MarkerView_QueryItemText; } public InputRoll MarkerInputRoll => MarkerView; @@ -187,6 +191,7 @@ namespace BizHawk.Client.EmuHawk if (result == DialogResult.OK) { Markers.Add(new TasMovieMarker(markerFrame, i.PromptText)); + UpdateTextColumnWidth(); UpdateValues(); } } @@ -200,6 +205,19 @@ namespace BizHawk.Client.EmuHawk Tastudio.RefreshDialog(); } + public void UpdateTextColumnWidth() + { + if (Markers.Any()) + { + var longestBranchText = Markers + .OrderBy(b => b.Message?.Length ?? 0) + .Last() + .Message; + + MarkerView.ExpandColumnToFitText("LabelColumn", longestBranchText); + } + } + public void EditMarkerPopUp(TasMovieMarker marker, bool followCursor = false) { var markerFrame = marker.Frame; @@ -226,6 +244,7 @@ namespace BizHawk.Client.EmuHawk if (result == DialogResult.OK) { marker.Message = i.PromptText; + UpdateTextColumnWidth(); UpdateValues(); } } @@ -240,8 +259,9 @@ namespace BizHawk.Client.EmuHawk public void Restart() { - MarkerView.DeselectAll(); - UpdateValues(); + SetupColumns(); + MarkerView.RowCount = Markers.Count; + MarkerView.Refresh(); } private void MarkerView_SelectedIndexChanged(object sender, EventArgs e) diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Designer.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Designer.cs index 987d1276ff..220574b4b6 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TAStudio)); this.TASMenu = new MenuStripEx(); this.FileSubMenu = new System.Windows.Forms.ToolStripMenuItem(); this.NewTASMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -323,7 +322,6 @@ // this.RecentSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripSeparator3}); - this.RecentSubMenu.Image = ((System.Drawing.Image)(resources.GetObject("RecentSubMenu.Image"))); this.RecentSubMenu.Name = "RecentSubMenu"; this.RecentSubMenu.Size = new System.Drawing.Size(190, 22); this.RecentSubMenu.Text = "Recent"; @@ -357,7 +355,6 @@ // this.recentMacrosToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripSeparator22}); - this.recentMacrosToolStripMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Recent; this.recentMacrosToolStripMenuItem.Name = "recentMacrosToolStripMenuItem"; this.recentMacrosToolStripMenuItem.Size = new System.Drawing.Size(190, 22); this.recentMacrosToolStripMenuItem.Text = "Recent Macros"; @@ -430,7 +427,6 @@ // UndoMenuItem // this.UndoMenuItem.Name = "UndoMenuItem"; - this.UndoMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Z))); this.UndoMenuItem.Size = new System.Drawing.Size(280, 22); this.UndoMenuItem.Text = "&Undo"; this.UndoMenuItem.Click += new System.EventHandler(this.UndoMenuItem_Click); @@ -439,7 +435,6 @@ // this.RedoMenuItem.Enabled = false; this.RedoMenuItem.Name = "RedoMenuItem"; - this.RedoMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Y))); this.RedoMenuItem.Size = new System.Drawing.Size(280, 22); this.RedoMenuItem.Text = "&Redo"; this.RedoMenuItem.Click += new System.EventHandler(this.RedoMenuItem_Click); @@ -455,7 +450,6 @@ // this.SelectionUndoMenuItem.Enabled = false; this.SelectionUndoMenuItem.Name = "SelectionUndoMenuItem"; - this.SelectionUndoMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Q))); this.SelectionUndoMenuItem.Size = new System.Drawing.Size(280, 22); this.SelectionUndoMenuItem.Text = "Selection Undo"; // @@ -463,7 +457,6 @@ // this.SelectionRedoMenuItem.Enabled = false; this.SelectionRedoMenuItem.Name = "SelectionRedoMenuItem"; - this.SelectionRedoMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.W))); this.SelectionRedoMenuItem.Size = new System.Drawing.Size(280, 22); this.SelectionRedoMenuItem.Text = "Selection Redo"; // @@ -482,7 +475,6 @@ // SelectBetweenMarkersMenuItem // this.SelectBetweenMarkersMenuItem.Name = "SelectBetweenMarkersMenuItem"; - this.SelectBetweenMarkersMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.A))); this.SelectBetweenMarkersMenuItem.Size = new System.Drawing.Size(280, 22); this.SelectBetweenMarkersMenuItem.Text = "Select between Markers"; this.SelectBetweenMarkersMenuItem.Click += new System.EventHandler(this.SelectBetweenMarkersMenuItem_Click); @@ -491,8 +483,6 @@ // this.SelectAllMenuItem.Name = "SelectAllMenuItem"; this.SelectAllMenuItem.ShortcutKeyDisplayString = ""; - this.SelectAllMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) - | System.Windows.Forms.Keys.A))); this.SelectAllMenuItem.Size = new System.Drawing.Size(280, 22); this.SelectAllMenuItem.Text = "Select &All"; this.SelectAllMenuItem.Click += new System.EventHandler(this.SelectAllMenuItem_Click); @@ -500,7 +490,6 @@ // ReselectClipboardMenuItem // this.ReselectClipboardMenuItem.Name = "ReselectClipboardMenuItem"; - this.ReselectClipboardMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.B))); this.ReselectClipboardMenuItem.Size = new System.Drawing.Size(280, 22); this.ReselectClipboardMenuItem.Text = "Reselect Clipboard"; this.ReselectClipboardMenuItem.Click += new System.EventHandler(this.ReselectClipboardMenuItem_Click); @@ -581,8 +570,6 @@ // this.InsertNumFramesMenuItem.Name = "InsertNumFramesMenuItem"; this.InsertNumFramesMenuItem.ShortcutKeyDisplayString = ""; - this.InsertNumFramesMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) - | System.Windows.Forms.Keys.Insert))); this.InsertNumFramesMenuItem.Size = new System.Drawing.Size(280, 22); this.InsertNumFramesMenuItem.Text = "Insert # of Frames"; this.InsertNumFramesMenuItem.Click += new System.EventHandler(this.InsertNumFramesMenuItem_Click); @@ -1184,7 +1171,6 @@ // // TASEditorManualOnlineMenuItem // - this.TASEditorManualOnlineMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Help; this.TASEditorManualOnlineMenuItem.Name = "TASEditorManualOnlineMenuItem"; this.TASEditorManualOnlineMenuItem.Size = new System.Drawing.Size(206, 22); this.TASEditorManualOnlineMenuItem.Text = "TAS Editor Manual Online..."; @@ -1192,7 +1178,6 @@ // // ForumThreadMenuItem // - this.ForumThreadMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.TAStudio; this.ForumThreadMenuItem.Name = "ForumThreadMenuItem"; this.ForumThreadMenuItem.Size = new System.Drawing.Size(206, 22); this.ForumThreadMenuItem.Text = "Forum Thread..."; @@ -1237,9 +1222,9 @@ this.TasView.LagFramesToHide = 0; this.TasView.LetKeysModifySelection = true; this.TasView.Location = new System.Drawing.Point(3, 0); - this.TasView.MaxCharactersInHorizontal = 1; this.TasView.MultiSelect = false; this.TasView.Name = "TasView"; + this.TasView.Rotatable = true; this.TasView.RowCount = 0; this.TasView.ScrollSpeed = 1; this.TasView.SeekingCutoffInterval = 0; @@ -1383,7 +1368,6 @@ // SelectBetweenMarkersContextMenuItem // this.SelectBetweenMarkersContextMenuItem.Name = "SelectBetweenMarkersContextMenuItem"; - this.SelectBetweenMarkersContextMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.A))); this.SelectBetweenMarkersContextMenuItem.Size = new System.Drawing.Size(242, 22); this.SelectBetweenMarkersContextMenuItem.Text = "Select between Markers"; this.SelectBetweenMarkersContextMenuItem.Click += new System.EventHandler(this.SelectBetweenMarkersMenuItem_Click); @@ -1452,7 +1436,6 @@ // ClearContextMenuItem // this.ClearContextMenuItem.Name = "ClearContextMenuItem"; - this.ClearContextMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Delete; this.ClearContextMenuItem.Size = new System.Drawing.Size(242, 22); this.ClearContextMenuItem.Text = "Clear"; this.ClearContextMenuItem.Click += new System.EventHandler(this.ClearFramesMenuItem_Click); @@ -1460,7 +1443,6 @@ // InsertFrameContextMenuItem // this.InsertFrameContextMenuItem.Name = "InsertFrameContextMenuItem"; - this.InsertFrameContextMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Insert; this.InsertFrameContextMenuItem.Size = new System.Drawing.Size(242, 22); this.InsertFrameContextMenuItem.Text = "Insert"; this.InsertFrameContextMenuItem.Click += new System.EventHandler(this.InsertFrameMenuItem_Click); @@ -1468,7 +1450,6 @@ // DeleteFramesContextMenuItem // this.DeleteFramesContextMenuItem.Name = "DeleteFramesContextMenuItem"; - this.DeleteFramesContextMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Delete))); this.DeleteFramesContextMenuItem.Size = new System.Drawing.Size(242, 22); this.DeleteFramesContextMenuItem.Text = "Delete"; this.DeleteFramesContextMenuItem.Click += new System.EventHandler(this.DeleteFramesMenuItem_Click); @@ -1476,7 +1457,6 @@ // CloneContextMenuItem // this.CloneContextMenuItem.Name = "CloneContextMenuItem"; - this.CloneContextMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Insert))); this.CloneContextMenuItem.Size = new System.Drawing.Size(242, 22); this.CloneContextMenuItem.Text = "Clone"; this.CloneContextMenuItem.Click += new System.EventHandler(this.CloneFramesMenuItem_Click); @@ -1484,8 +1464,6 @@ // InsertNumFramesContextMenuItem // this.InsertNumFramesContextMenuItem.Name = "InsertNumFramesContextMenuItem"; - this.InsertNumFramesContextMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) - | System.Windows.Forms.Keys.Insert))); this.InsertNumFramesContextMenuItem.Size = new System.Drawing.Size(242, 22); this.InsertNumFramesContextMenuItem.Text = "Insert # of Frames"; this.InsertNumFramesContextMenuItem.Click += new System.EventHandler(this.InsertNumFramesMenuItem_Click); @@ -1600,7 +1578,6 @@ this.Controls.Add(this.MainVertialSplit); this.Controls.Add(this.TasStatusStrip); this.Controls.Add(this.TASMenu); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.KeyPreview = true; this.MainMenuStrip = this.TASMenu; this.MinimumSize = new System.Drawing.Size(200, 148); diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.IControlMainForm.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.IControlMainForm.cs index ed58dd96eb..e75103c97d 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.IControlMainForm.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.IControlMainForm.cs @@ -38,19 +38,22 @@ BookMarkControl.LoadBranchExternal(slot); } - public void SelectSlot(int slot) + public bool SelectSlot(int slot) { BookMarkControl.SelectBranchExternal(slot); + return false; } - public void PreviousSlot() + public bool PreviousSlot() { BookMarkControl.SelectBranchExternal(false); + return false; } - public void NextSlot() + public bool NextSlot() { BookMarkControl.SelectBranchExternal(true); + return false; } public bool WantsToControlReadOnly => true; diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.ListView.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.ListView.cs index 5b254cf6d8..a8118205c0 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.ListView.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.ListView.cs @@ -336,9 +336,9 @@ namespace BizHawk.Client.EmuHawk text = CurrentTasMovie.DisplayValue(index, columnName); if (column.Type == ColumnType.Float) { - // feos: this could be cashed, but I don't notice any slowdown this way either - ControllerDefinition.FloatRange range = Global.MovieSession.MovieControllerAdapter.Definition.FloatRanges - [Global.MovieSession.MovieControllerAdapter.Definition.FloatControls.IndexOf(columnName)]; + // feos: this could be cached, but I don't notice any slowdown this way either + ControllerDefinition.FloatRange range = ControllerType.FloatRanges + [ControllerType.FloatControls.IndexOf(columnName)]; if (text == range.Mid.ToString()) { text = ""; @@ -380,7 +380,7 @@ namespace BizHawk.Client.EmuHawk int frame = TasView.SelectedRows.FirstOrDefault(); string buttonName = TasView.CurrentCell.Column.Name; - if (Global.MovieSession.MovieControllerAdapter.Definition.BoolButtons.Contains(buttonName)) + if (ControllerType.BoolButtons.Contains(buttonName)) { if (ModifierKeys != Keys.Alt) { @@ -606,7 +606,7 @@ namespace BizHawk.Client.EmuHawk { bool wasPaused = Mainform.EmulatorPaused; - if (Global.MovieSession.MovieControllerAdapter.Definition.BoolButtons.Contains(buttonName)) + if (ControllerType.BoolButtons.Contains(buttonName)) { _patternPaint = false; _startBoolDrawColumn = buttonName; @@ -811,7 +811,7 @@ namespace BizHawk.Client.EmuHawk if (e.Button == MouseButtons.Right && !TasView.IsPointingAtColumnHeader && !_suppressContextMenu && TasView.SelectedRows.Any() && !_leftButtonHeld) { - if (Global.MovieSession.Movie.FrameCount < TasView.SelectedRows.Max()) + if (CurrentTasMovie.FrameCount < TasView.SelectedRows.Max()) { // trying to be smart here // if a loaded branch log is shorter than selection, keep selection until you attempt to call context menu @@ -833,9 +833,21 @@ namespace BizHawk.Client.EmuHawk } else { + if (!string.IsNullOrWhiteSpace(_startBoolDrawColumn)) + { + // If painting up, we have altered frames without loading states (for smoothness) + // So now we have to ensure that all the edited frames are invalidated + if (CurrentTasMovie.LastEditedFrame < Emulator.Frame) + { + GoToFrame(CurrentTasMovie.LastEditedFrame); + } + } + ClearLeftMouseStates(); } + + DoTriggeredAutoRestoreIfNeeded(); } @@ -925,11 +937,10 @@ namespace BizHawk.Client.EmuHawk private void TasView_PointedCellChanged(object sender, InputRoll.CellEventArgs e) { - // TODO: think about nullability - // For now return if a null because this happens OnEnter which doesn't have any of the below behaviors yet? - // Most of these are stupid but I got annoyed at null crashes - if (e.OldCell == null || e.OldCell.Column == null || e.OldCell.RowIndex == null || - e.NewCell == null || e.NewCell.RowIndex == null || e.NewCell.Column == null) + // TODO: If NewCell is null, it indicates that there was a mouse leave scenario, we may want to account for that + // For now return if a null because this happens OnEnter which doesn't have any of the below behaviors yet + if (e.OldCell?.Column == null || e.OldCell?.RowIndex == null + || e.NewCell?.Column == null || e.NewCell?.RowIndex == null) { return; } @@ -941,7 +952,7 @@ namespace BizHawk.Client.EmuHawk // skip rerecord counting on drawing entirely, mouse down is enough // avoid introducing another global - bool wasCountingRerecords = Global.MovieSession.Movie.IsCountingRerecords; + bool wasCountingRerecords = CurrentTasMovie.IsCountingRerecords; WasRecording = CurrentTasMovie.IsRecording || WasRecording; int startVal, endVal; @@ -967,33 +978,27 @@ namespace BizHawk.Client.EmuHawk if (_startCursorDrag && !Mainform.IsSeeking) { - if (e.NewCell.RowIndex.HasValue) - { - GoToFrame(e.NewCell.RowIndex.Value); - } + GoToFrame(e.NewCell.RowIndex.Value); } else if (_startSelectionDrag) { - if (e.OldCell.RowIndex.HasValue && e.NewCell.RowIndex.HasValue) + for (var i = startVal; i <= endVal; i++) { - for (var i = startVal; i <= endVal; i++) + TasView.SelectRow(i, _selectionDragState); + if (FloatEditingMode && (ModifierKeys == Keys.Control || ModifierKeys == Keys.Shift)) { - TasView.SelectRow(i, _selectionDragState); - if (FloatEditingMode && (ModifierKeys == Keys.Control || ModifierKeys == Keys.Shift)) + if (_selectionDragState) { - if (_selectionDragState) - { - _extraFloatRows.Add(i); - } - else - { - _extraFloatRows.Remove(i); - } + _extraFloatRows.Add(i); + } + else + { + _extraFloatRows.Remove(i); } } - - SetSplicer(); } + + SetSplicer(); } else if (_rightClickFrame != -1) { @@ -1105,66 +1110,60 @@ namespace BizHawk.Client.EmuHawk } // Left-click - else if (TasView.IsPaintDown && e.NewCell.RowIndex.HasValue && !string.IsNullOrEmpty(_startBoolDrawColumn)) + else if (TasView.IsPaintDown && !string.IsNullOrEmpty(_startBoolDrawColumn)) { - Global.MovieSession.Movie.IsCountingRerecords = false; + CurrentTasMovie.IsCountingRerecords = false; - if (e.OldCell.RowIndex.HasValue && e.NewCell.RowIndex.HasValue) + for (int i = startVal; i <= endVal; i++) // Inclusive on both ends (drawing up or down) { - for (int i = startVal; i <= endVal; i++) // Inclusive on both ends (drawing up or down) + bool setVal = _boolPaintState; + + if (_patternPaint && _boolPaintState) { - bool setVal = _boolPaintState; - - if (_patternPaint && _boolPaintState) + if (CurrentTasMovie[frame].Lagged.HasValue && CurrentTasMovie[frame].Lagged.Value) { - if (CurrentTasMovie[frame].Lagged.HasValue && CurrentTasMovie[frame].Lagged.Value) - { - setVal = CurrentTasMovie.BoolIsPressed(i - 1, _startBoolDrawColumn); - } - else - { - setVal = BoolPatterns[ControllerType.BoolButtons.IndexOf(_startBoolDrawColumn)].GetNextValue(); - } + setVal = CurrentTasMovie.BoolIsPressed(i - 1, _startBoolDrawColumn); } - - CurrentTasMovie.SetBoolState(i, _startBoolDrawColumn, setVal); // Notice it uses new row, old column, you can only paint across a single column - - if (!_triggerAutoRestore) + else { - JumpToGreenzone(); + setVal = BoolPatterns[ControllerType.BoolButtons.IndexOf(_startBoolDrawColumn)].GetNextValue(); } } - } - } - else if (TasView.IsPaintDown && e.NewCell.RowIndex.HasValue && !string.IsNullOrEmpty(_startFloatDrawColumn)) - { - Global.MovieSession.Movie.IsCountingRerecords = false; + CurrentTasMovie.SetBoolState(i, _startBoolDrawColumn, setVal); // Notice it uses new row, old column, you can only paint across a single column - if (e.OldCell.RowIndex.HasValue && e.NewCell.RowIndex.HasValue) - { - for (int i = startVal; i <= endVal; i++) // Inclusive on both ends (drawing up or down) + if (!_triggerAutoRestore) { - float setVal = _floatPaintState; - if (_patternPaint) - { - if (CurrentTasMovie[frame].Lagged.HasValue && CurrentTasMovie[frame].Lagged.Value) - { - setVal = CurrentTasMovie.GetFloatState(i - 1, _startFloatDrawColumn); - } - else - { - setVal = FloatPatterns[ControllerType.FloatControls.IndexOf(_startFloatDrawColumn)].GetNextValue(); - } - } - - CurrentTasMovie.SetFloatState(i, _startFloatDrawColumn, setVal); // Notice it uses new row, old column, you can only paint across a single column JumpToGreenzone(); } } } - Global.MovieSession.Movie.IsCountingRerecords = wasCountingRerecords; + else if (TasView.IsPaintDown && !string.IsNullOrEmpty(_startFloatDrawColumn)) + { + CurrentTasMovie.IsCountingRerecords = false; + + for (int i = startVal; i <= endVal; i++) // Inclusive on both ends (drawing up or down) + { + float setVal = _floatPaintState; + if (_patternPaint) + { + if (CurrentTasMovie[frame].Lagged.HasValue && CurrentTasMovie[frame].Lagged.Value) + { + setVal = CurrentTasMovie.GetFloatState(i - 1, _startFloatDrawColumn); + } + else + { + setVal = FloatPatterns[ControllerType.FloatControls.IndexOf(_startFloatDrawColumn)].GetNextValue(); + } + } + + CurrentTasMovie.SetFloatState(i, _startFloatDrawColumn, setVal); // Notice it uses new row, old column, you can only paint across a single column + JumpToGreenzone(); + } + } + + CurrentTasMovie.IsCountingRerecords = wasCountingRerecords; if (MouseButtonHeld) { @@ -1181,11 +1180,13 @@ namespace BizHawk.Client.EmuHawk { int increment = (_floatEditYPos - e.Y) / 4; if (_floatEditYPos == -1) + { return; + } float value = _floatPaintState + increment; - ControllerDefinition.FloatRange range = Global.MovieSession.MovieControllerAdapter.Definition.FloatRanges - [Global.MovieSession.MovieControllerAdapter.Definition.FloatControls.IndexOf(_floatEditColumn)]; + ControllerDefinition.FloatRange range = ControllerType.FloatRanges + [ControllerType.FloatControls.IndexOf(_floatEditColumn)]; // Range for N64 Y axis has max -128 and min 127. That should probably be fixed in ControllerDefinition.cs. // SuuperW: I really don't think changing it would break anything, but adelikat isn't so sure. @@ -1278,8 +1279,8 @@ namespace BizHawk.Client.EmuHawk float prev = value; string prevTyped = _floatTypedValue; - ControllerDefinition.FloatRange range = Global.MovieSession.MovieControllerAdapter.Definition.FloatRanges - [Global.MovieSession.MovieControllerAdapter.Definition.FloatControls.IndexOf(_floatEditColumn)]; + ControllerDefinition.FloatRange range = ControllerType.FloatRanges + [ControllerType.FloatControls.IndexOf(_floatEditColumn)]; float rMax = range.Max; float rMin = range.Min; diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs index 5f0b60ad3e..6fa87657f3 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs @@ -104,7 +104,7 @@ namespace BizHawk.Client.EmuHawk } else { - _autosaveTimer.Stop(); + _autosaveTimer?.Stop(); GlobalWin.Sound.StopSound(); MessageStatusLabel.Text = "Saving..."; Cursor = Cursors.WaitCursor; @@ -112,7 +112,7 @@ namespace BizHawk.Client.EmuHawk CurrentTasMovie.Save(); if (Settings.AutosaveInterval > 0) { - _autosaveTimer.Start(); + _autosaveTimer?.Start(); } MessageStatusLabel.Text = $"{CurrentTasMovie.Name} saved."; @@ -357,8 +357,14 @@ namespace BizHawk.Client.EmuHawk StateHistoryIntegrityCheckMenuItem.Visible = VersionInfo.DeveloperBuild; + UndoMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Undo"].Bindings; + RedoMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Redo"].Bindings; + SelectBetweenMarkersMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Select between Markers"].Bindings; + SelectAllMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Select All"].Bindings; + ReselectClipboardMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Reselect Clip."].Bindings; ClearFramesMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Clear Frames"].Bindings; InsertFrameMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Insert Frame"].Bindings; + InsertNumFramesMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Insert # Frames"].Bindings; DeleteFramesMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Delete Frames"].Bindings; CloneFramesMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Clone Frames"].Bindings; } @@ -373,6 +379,11 @@ namespace BizHawk.Client.EmuHawk InsertFrameMenuItem_Click(null, null); } + public void InsertNumFramesExternal() + { + InsertNumFramesMenuItem_Click(null, null); + } + public void DeleteFramesExternal() { DeleteFramesMenuItem_Click(null, null); @@ -383,6 +394,31 @@ namespace BizHawk.Client.EmuHawk CloneFramesMenuItem_Click(null, null); } + public void UndoExternal() + { + UndoMenuItem_Click(null, null); + } + + public void RedoExternal() + { + RedoMenuItem_Click(null, null); + } + + public void SelectBetweenMarkersExternal() + { + SelectBetweenMarkersMenuItem_Click(null, null); + } + + public void SelectAllExternal() + { + SelectAllMenuItem_Click(null, null); + } + + public void ReselectClipboardExternal() + { + ReselectClipboardMenuItem_Click(null, null); + } + private void UndoMenuItem_Click(object sender, EventArgs e) { if (CurrentTasMovie.ChangeLog.Undo() < Emulator.Frame) @@ -1099,7 +1135,7 @@ namespace BizHawk.Client.EmuHawk private void SubtitlesMenuItem_Click(object sender, EventArgs e) { var form = new EditSubtitlesForm { ReadOnly = false }; - form.GetMovie(Global.MovieSession.Movie); + form.GetMovie(CurrentTasMovie); form.ShowDialog(); } @@ -1294,7 +1330,7 @@ namespace BizHawk.Client.EmuHawk TasView.AllColumns.Find(c => c.Name == (string)sender.Tag).Visible = sender.Checked; TasView.AllColumns.ColumnsChanged(); CurrentTasMovie.FlagChanges(); - RefreshTasView(); + TasView.Refresh(); ColumnsSubMenu.ShowDropDown(); ((ToolStripMenuItem)sender.OwnerItem).ShowDropDown(); }; @@ -1453,7 +1489,14 @@ namespace BizHawk.Client.EmuHawk StartFromNowSeparator.Visible = StartNewProjectFromNowMenuItem.Visible || StartANewProjectFromSaveRamMenuItem.Visible; RemoveMarkersContextMenuItem.Enabled = CurrentTasMovie.Markers.Any(m => TasView.SelectedRows.Contains(m.Frame)); // Disable the option to remove markers if no markers are selected (FCEUX does this). CancelSeekContextMenuItem.Enabled = Mainform.PauseOnFrame.HasValue; - BranchContextMenuItem.Visible = TasView.CurrentCell.RowIndex == Emulator.Frame; + BranchContextMenuItem.Visible = TasView.CurrentCell?.RowIndex == Emulator.Frame; + + SelectBetweenMarkersContextMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Sel. bet. Markers"].Bindings; + InsertNumFramesContextMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Insert # Frames"].Bindings; + ClearContextMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Clear Frames"].Bindings; + InsertFrameContextMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Insert Frame"].Bindings; + DeleteFramesContextMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Delete Frames"].Bindings; + CloneContextMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Clone Frames"].Bindings; } private void CancelSeekContextMenuItem_Click(object sender, EventArgs e) diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Navigation.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Navigation.cs index 6f99a56731..8cee89a134 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Navigation.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Navigation.cs @@ -98,7 +98,9 @@ public void SetVisibleIndex(int? indexThatMustBeVisible = null) { if (TasView.AlwaysScroll && _leftButtonHeld) + { return; + } if (!indexThatMustBeVisible.HasValue) { diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs index 1b9e4b9a82..4404836dd0 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs @@ -114,8 +114,19 @@ namespace BizHawk.Client.EmuHawk public TAStudio() { + void SetImages() + { + RecentSubMenu.Image = Properties.Resources.Recent; + recentMacrosToolStripMenuItem.Image = Properties.Resources.Recent; + TASEditorManualOnlineMenuItem.Image = Properties.Resources.Help; + ForumThreadMenuItem.Image = Properties.Resources.TAStudio; + + Icon = Properties.Resources.TAStudio_MultiSize; + } + Settings = new TAStudioSettings(); InitializeComponent(); + SetImages(); InitializeSeekWorker(); _defaultMainSplitDistance = MainVertialSplit.SplitterDistance; @@ -136,7 +147,6 @@ namespace BizHawk.Client.EmuHawk TasView.QueryFrameLag += TasView_QueryFrameLag; TasView.PointedCellChanged += TasView_PointedCellChanged; TasView.MultiSelect = true; - TasView.MaxCharactersInHorizontal = 1; LastPositionFrame = -1; } @@ -252,17 +262,15 @@ namespace BizHawk.Client.EmuHawk SetColumnsFromCurrentStickies(); - if (VersionInfo.DeveloperBuild) + if (TasView.Rotatable) { - RightClickMenu.Items.AddRange(TasView.GenerateContextMenuItems().ToArray()); + RightClickMenu.Items.AddRange(TasView.GenerateContextMenuItems() + .ToArray()); RightClickMenu.Items - .OfType() - .First(t => t.Name == "RotateMenuItem") - .Click += (o, ov) => - { - CurrentTasMovie.FlagChanges(); - }; + .OfType() + .First(t => t.Name == "RotateMenuItem") + .Click += (o, ov) => { CurrentTasMovie.FlagChanges(); }; } TasView.InputPaintingMode = Settings.DrawInput; @@ -369,7 +377,7 @@ namespace BizHawk.Client.EmuHawk StartNewTasMovie(); } - if (Global.Emulator is NullEmulator) + if (Emulator.IsNull()) { DisengageTastudio(); return false; @@ -419,10 +427,10 @@ namespace BizHawk.Client.EmuHawk { ColumnType type; int digits; - if (Global.MovieSession.MovieControllerAdapter.Definition.FloatControls.Contains(kvp.Key)) + if (ControllerType.FloatControls.Contains(kvp.Key)) { - ControllerDefinition.FloatRange range = Global.MovieSession.MovieControllerAdapter.Definition.FloatRanges - [Global.MovieSession.MovieControllerAdapter.Definition.FloatControls.IndexOf(kvp.Key)]; + ControllerDefinition.FloatRange range = ControllerType.FloatRanges + [ControllerType.FloatControls.IndexOf(kvp.Key)]; type = ColumnType.Float; digits = Math.Max(kvp.Value.Length, range.MaxDigits()); } @@ -576,19 +584,19 @@ namespace BizHawk.Client.EmuHawk GoToFrame(CurrentTasMovie.Session.CurrentFrame); } - //if (TasView.AllColumns.Count == 0 || file.Extension != $".{TasMovie.Extension}") - //{ + // If we are loading an existing non-default movie, we will already have columns generated + // Only set up columns if needed + if (!TasView.AllColumns.Any()) + { SetUpColumns(); - //} - //else - //{ - SetUpToolStripColumns(); - //} + } + + SetUpToolStripColumns(); CurrentTasMovie.PropertyChanged += TasMovie_OnPropertyChanged; CurrentTasMovie.CurrentBranch = CurrentTasMovie.Session.CurrentBranch; BookMarkControl.UpdateTextColumnWidth(); - + MarkerControl.UpdateTextColumnWidth(); // clear all selections TasView.DeselectAll(); BookMarkControl.Restart(); @@ -678,6 +686,7 @@ namespace BizHawk.Client.EmuHawk { CurrentTasMovie.TasStateManager.Capture(); // Capture frame 0 always. BookMarkControl.UpdateTextColumnWidth(); + MarkerControl.UpdateTextColumnWidth(); } TastudioPlayMode(); @@ -822,12 +831,7 @@ namespace BizHawk.Client.EmuHawk private void RefreshTasView() { - CurrentTasMovie.UseInputCache = true; TasView.RowCount = CurrentTasMovie.InputLogLength + 1; - - CurrentTasMovie.FlushInputCache(); - CurrentTasMovie.UseInputCache = false; - _lastRefresh = Emulator.Frame; } @@ -917,7 +921,9 @@ namespace BizHawk.Client.EmuHawk public void LoadState(KeyValuePair state) { - StatableEmulator.LoadStateBinary(new BinaryReader(new MemoryStream(state.Value.ToArray()))); + using var ms = new MemoryStream(state.Value); + using var br = new BinaryReader(ms); + StatableEmulator.LoadStateBinary(br); if (state.Key == 0 && CurrentTasMovie.StartsFromSavestate) { diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.resx b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.resx index 30922f753b..13e8b47399 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.resx +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.resx @@ -120,56 +120,10 @@ 17, 17 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAQAA - CwEBNnBPWwAAAk1JREFUOE+VkktvUlEUhVsfsdHoREcOHJr4C/RPONHoXzBxoOlAJybOlAZtkdSa2piY - NsjjFiiX8qY8ChYL+ECB2lKB8rq0k5bEmiiRbtc+6b2B6MTBR/ZZa+919j3tEBH9RbudHD6E63/2qAwc - treT58BVRVnWl8vBbLEg7wNC/QPaMrwb4GT/jFa024mzQLe56c9GwjM7klXXlcw6ksyPSbLoKByc/lUq - +TbQMwrODARAGAF3SxtexSMbf8vOCVp9ZyK+/euaW9TO+SfksOlprSjvoteAjU5rAYqSuFyvR1PR8Ewv - GJii8rcAoYFSb+d4gDAgNI/8jGTHOFUroT3410QAHuk4Am4Vi/KOzz2JGxfFcLMZI3wK5T7ZqaXEhcYb - WU2PKJM2H7Ra8XE14AQO91dTpk4k9JLq9YgYHghoxcWZPa/bSCH/C2o0orPaBo1GbDQee9VJxF+zoYFP - wtpGWgpN0/uMRWgcyiG1WsSkBhxFwG0E7AV8z2lrKyxuYvgBs2kLr4z1XcLj4SA2gD+nBhxB8p1sxtKZ - t4xR/otTDNdqS1oQw7ezx2/AfxVok1oAmh+WSt7v/MKLLgOtr3tEQD+sseeyPyX0dqHdVAOGq9XQPazX - /JyzH9itY+SQ9LSSnKV8fkHANWvsoYc/JYaZERHAPzicBw9AoZBf+BnwTZEN/4G2N4egZg1eDz05cIHn - tACmUgmeAtdhRsvlwH6x6Dr4+EESoO5B68JLo+eSOjMQwKDpGLgCJtDoBysgBXzQDOBifz8zcPh/aOgP - 7nYTiVA2JaoAAAAASUVORK5CYII= - - 121, 17 249, 17 - - - AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA////AP64aABQUFAAwNjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAMDAAMDAwAAAAAAAAAAAAMCAgMDAwMDAwAAAAMDAAADAgICAwMDAwMDAwMCAgMAAAMCAwMD - AwMDAwMDAgIDAAMEBAQDAgMDAwMDAwICAgMDBAQEAwICAwQDAwQDAgIDAAMDAwICAgMCAgIDAwMDAAAA - AwICAgMCAgIDAgMAAAAAAAAAAwMEBAQEBAQCAwAAAAAAAwMEBAQDAwMDAwMAAAAAAwQEAwMEBAMEBAQC - AwAAAAMEBAMDBAMEBAQEAgMAAAAAAwMDBAQDBAMDAwIDAAAAAAMCAgICAgICAgMEBAMAAAAAAwICAgIC - AwMEBAQDAAAAAAADAwMDAwAAAwMDAJH/AAAAcwAAAAEAAIABAAAAAAAAAAAAAIABAADABwAA8AMAAOAD - AADAAQAAwAEAAOABAADgAAAA8AAAAPgxAAA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/TI83/TI83KeyPad.Designer.cs b/BizHawk.Client.EmuHawk/tools/TI83/TI83KeyPad.Designer.cs index d3a8c74bc6..ddbebccc90 100644 --- a/BizHawk.Client.EmuHawk/tools/TI83/TI83KeyPad.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/TI83/TI83KeyPad.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TI83KeyPad)); this.menuStrip1 = new MenuStripEx(); this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.KeyPadSubMenu = new System.Windows.Forms.ToolStripMenuItem(); @@ -1938,7 +1937,7 @@ this.Controls.Add(this.SecondButton); this.Controls.Add(this.YButton); this.Controls.Add(this.menuStrip1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.calculator_MultiSize; this.MainMenuStrip = this.menuStrip1; this.MaximizeBox = false; this.MaximumSize = new System.Drawing.Size(371, 581); diff --git a/BizHawk.Client.EmuHawk/tools/TI83/TI83KeyPad.resx b/BizHawk.Client.EmuHawk/tools/TI83/TI83KeyPad.resx index 3175b52de9..c0be39983b 100644 --- a/BizHawk.Client.EmuHawk/tools/TI83/TI83KeyPad.resx +++ b/BizHawk.Client.EmuHawk/tools/TI83/TI83KeyPad.resx @@ -123,80 +123,4 @@ 126, 17 - - - - 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 - DwDgAA8A4AAPAPAAHwA= - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/ToolBox.Designer.cs b/BizHawk.Client.EmuHawk/tools/ToolBox.Designer.cs index 804069b982..f421770a2d 100644 --- a/BizHawk.Client.EmuHawk/tools/ToolBox.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/ToolBox.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ToolBox)); this.ToolBoxStrip = new ToolStripEx(); this.SuspendLayout(); // @@ -57,7 +56,7 @@ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(140, 183); this.Controls.Add(this.ToolBoxStrip); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.ToolBox_MultiSize; this.MaximumSize = new System.Drawing.Size(270, 600); this.MinimumSize = new System.Drawing.Size(135, 38); this.Name = "ToolBox"; diff --git a/BizHawk.Client.EmuHawk/tools/ToolBox.resx b/BizHawk.Client.EmuHawk/tools/ToolBox.resx index 7295c6fd33..74c784a19b 100644 --- a/BizHawk.Client.EmuHawk/tools/ToolBox.resx +++ b/BizHawk.Client.EmuHawk/tools/ToolBox.resx @@ -120,29 +120,4 @@ 17, 17 - - - - AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABMLAAATCwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAACoTif8xF4//rKnKRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMrMzQdmSjb/nYl5owAA - AAAAAAAAAAAAAAAAAAAuMcb/NCCf/zIXj/+xr807AAAAAAAAAAAAAAAAAAAAAAAAAABsUj7/AAAAALqh - k3MAAAAAAAAAAAAAAAAAAAAAipLffkdIy/g9NrX/MheP/7KxzjcAAAAAAAAAAM3Q0ARmSjb/AAAAAL+m - mWcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACLk+B6R0jL+D02tf8yFo//tLLPNwAAAABsUj7/AAAAALqh - k3MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyU4XpHSMv4PTa1/zcchf92XEj7AAAAAL+m - mWcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnKPjXGFhx8uAZ1X//fz8/8Gq - nmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMc2LP/fz8/8Wv - o/9EMqH/AAAAAAAAAAAAAAAAAAAAANDHwh6VemfEAAAAAAAAAAAAAAAAAAAAAAAAAACXgG+1AAAAAMm0 - qUqboulcU2Pg4U4+YP/PxsEeAAAAAAAAAACZfmy8AAAAAJV6Z8TQzcsLmoFwtYRpV+GIb13WAAAAAMq3 - rUMAAAAAAAAAAKKdqFzh083/qo9/mKSJeKaih3aqn4RysZh9a7zTzckPt6GQesKuolnArJ1gwq+gXJZ+ - bLwAAAAAAAAAAAAAAADUzckPs5iJheHTzf/ZysP/08K4/6mRgJgAAAAAAAAAALehkHoAAAAAAAAAAMGt - n1yYfm25AAAAAAAAAAAAAAAAAAAAALOYiYXs5uL/5t3Y/wAAAAC8qJxkAAAAAAAAAAAAAAAAAAAAAAAA - AADJtalKsJmJhQAAAAAAAAAAAAAAAAAAAAC3nY969/Xz/wAAAADDrqNVAAAAAAAAAAAAAAAAAAAAAAAA - AAC3oZB6t6GQesrEwR4AAAAAAAAAAM3BuizAqJxkAAAAANLDuSzPvbQ3AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAANfIwCHUw7ks1MS8KdbGvSXRxsAhAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA//8AAJ/nAACP3wAAx78AAON/AADw/wAA+P8AAPh9AAD3OgAAj4EAAPeDAAD3jwAA998AAP// - AAD//wAA//8AAA== - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/ToolManager.cs b/BizHawk.Client.EmuHawk/tools/ToolManager.cs index cb454fbaf4..9e79908447 100644 --- a/BizHawk.Client.EmuHawk/tools/ToolManager.cs +++ b/BizHawk.Client.EmuHawk/tools/ToolManager.cs @@ -49,7 +49,7 @@ namespace BizHawk.Client.EmuHawk throw new ArgumentException($"Type {toolType.Name} does not implement {nameof(IToolForm)}."); } - // The type[] in parameter is used to avoid an ambigous name exception + // The type[] in parameter is used to avoid an ambiguous name exception MethodInfo method = GetType().GetMethod("Load", new Type[] { typeof(bool) }).MakeGenericMethod(toolType); return (IToolForm)method.Invoke(this, new object[] { focus }); } @@ -118,9 +118,9 @@ namespace BizHawk.Client.EmuHawk return null; } - if (newTool is Form) + if (newTool is Form form) { - (newTool as Form).Owner = GlobalWin.MainForm; + form.Owner = _owner; } if (isExternal) @@ -132,16 +132,15 @@ namespace BizHawk.Client.EmuHawk string toolType = typeof(T).ToString(); // auto settings - if (newTool is IToolFormAutoConfig) + if (newTool is IToolFormAutoConfig tool) { - ToolDialogSettings settings; - if (!Global.Config.CommonToolSettings.TryGetValue(toolType, out settings)) + if (!Global.Config.CommonToolSettings.TryGetValue(toolType, out var settings)) { settings = new ToolDialogSettings(); Global.Config.CommonToolSettings[toolType] = settings; } - AttachSettingHooks(newTool as IToolFormAutoConfig, settings); + AttachSettingHooks(tool, settings); } // custom settings @@ -212,12 +211,11 @@ namespace BizHawk.Client.EmuHawk { var form = (Form)tool; ToolStripItemCollection dest = null; - var oldsize = form.Size; // this should be the right time to grab this size + var oldSize = form.Size; // this should be the right time to grab this size foreach (Control c in form.Controls) { - if (c is MenuStrip) + if (c is MenuStrip ms) { - var ms = c as MenuStrip; foreach (ToolStripMenuItem submenu in ms.Items) { if (submenu.Text.Contains("Settings")) @@ -319,7 +317,7 @@ namespace BizHawk.Client.EmuHawk { settings.RestoreDefaults(); RefreshSettings(form, dest, settings, idx); - form.Size = oldsize; + form.Size = oldSize; form.GetType() .GetMethodsWithAttrib(typeof(RestoreDefaultsAttribute)) @@ -347,7 +345,7 @@ namespace BizHawk.Client.EmuHawk object val; if (data.TryGetValue(prop.Name, out val)) { - if (val is string && prop.PropertyType != typeof(string)) + if (val is string str && prop.PropertyType != typeof(string)) { // if a type has a TypeConverter, and that converter can convert to string, // that will be used in place of object markup by JSON.NET @@ -356,7 +354,7 @@ namespace BizHawk.Client.EmuHawk // back on regular object serialization when needed. so try to undo a TypeConverter // operation here var converter = TypeDescriptor.GetConverter(prop.PropertyType); - val = converter.ConvertFromString(null, System.Globalization.CultureInfo.InvariantCulture, (string)val); + val = converter.ConvertFromString(null, System.Globalization.CultureInfo.InvariantCulture, str); } else if (!(val is bool) && prop.PropertyType.IsPrimitive) { @@ -543,7 +541,7 @@ namespace BizHawk.Client.EmuHawk /// public bool AskSave() { - if (Global.Config.SupressAskSave) // User has elected to not be nagged + if (Global.Config.SuppressAskSave) // User has elected to not be nagged { return true; } @@ -560,7 +558,7 @@ namespace BizHawk.Client.EmuHawk /// Type of tool public bool AskSave() where T : IToolForm { - if (Global.Config.SupressAskSave) // User has elected to not be nagged + if (Global.Config.SuppressAskSave) // User has elected to not be nagged { return true; } @@ -820,11 +818,13 @@ namespace BizHawk.Client.EmuHawk public void LoadRamWatch(bool loadDialog) { - if (!IsLoaded()) + if (IsLoaded()) { - Load(); + return; } + Load(); + if (IsAvailable()) // Just because we attempted to load it, doesn't mean it was, the current core may not have the correct dependencies { if (Global.Config.RecentWatches.AutoLoad && !Global.Config.RecentWatches.Empty) diff --git a/BizHawk.Client.EmuHawk/tools/TraceLogger.Designer.cs b/BizHawk.Client.EmuHawk/tools/TraceLogger.Designer.cs index adeabb1aec..f83c2e163b 100644 --- a/BizHawk.Client.EmuHawk/tools/TraceLogger.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/TraceLogger.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TraceLogger)); this.TracerBox = new System.Windows.Forms.GroupBox(); this.TraceView = new InputRoll(); this.TraceContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components); @@ -321,7 +320,7 @@ this.Controls.Add(this.groupBox2); this.Controls.Add(this.TracerBox); this.Controls.Add(this.menuStrip1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.pencil_MultiSize; this.KeyPreview = true; this.MainMenuStrip = this.menuStrip1; this.MinimumSize = new System.Drawing.Size(400, 230); diff --git a/BizHawk.Client.EmuHawk/tools/TraceLogger.cs b/BizHawk.Client.EmuHawk/tools/TraceLogger.cs index c7bad8fa36..0c004e1bd3 100644 --- a/BizHawk.Client.EmuHawk/tools/TraceLogger.cs +++ b/BizHawk.Client.EmuHawk/tools/TraceLogger.cs @@ -26,7 +26,7 @@ namespace BizHawk.Client.EmuHawk [ConfigPersist] private List Columns { - get { return TraceView.AllColumns; } + get => TraceView.AllColumns; set { TraceView.AllColumns.Clear(); @@ -42,7 +42,7 @@ namespace BizHawk.Client.EmuHawk private FileInfo _logFile; private FileInfo LogFile { - get { return _logFile; } + get => _logFile; set { _logFile = value; @@ -94,10 +94,7 @@ namespace BizHawk.Client.EmuHawk }); } - public bool UpdateBefore - { - get { return false; } - } + public bool UpdateBefore => false; public bool AskSaveChanges() { diff --git a/BizHawk.Client.EmuHawk/tools/TraceLogger.resx b/BizHawk.Client.EmuHawk/tools/TraceLogger.resx index 26e010e9a5..184e4623ff 100644 --- a/BizHawk.Client.EmuHawk/tools/TraceLogger.resx +++ b/BizHawk.Client.EmuHawk/tools/TraceLogger.resx @@ -123,100 +123,4 @@ 17, 17 - - - - AAABAAIAEBAAAAAAIABoBAAAJgAAACAgAAAAACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAEAE - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAyEEBwgvAAAALwAAADMAAAA1AAAAMwAAAC8AAAArAAAAJQAA - AB0AAAAXAAAADwAAAAkAAAAD////Af///wEAAAADEBYZwR43Pzv///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////AUJLTT16rLz7N3WJef///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bl6mwoX2yxP8SJy2vAAAAA/// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AVJZXBM/REbfHR0d8SAg - IJn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BExMTKRgY - GNklJSXzJCQki////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wETExM1GRkZ3SUlJfExMTF9////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////ARMTE0McHBzjHh4e6zQ0NGf///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8BExMTUx4eHusaGhrlJiYmVf///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wETExNjICAg7xAQEN0DAwNB////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////ARMTE3UiIiLzDQ0N2QAAADP///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BFxcXhSMjI/ULCwvVAAAAJ/// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEYGBiXIiIi8wkJ - Cc8AAAAd////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BExMTBRQU - FKUfHx/tXFxc0VNTUx3///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wETExMJX19fw39/f/cGBga5////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////AUtLSxUNDQ3DIiIifQAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA - //8AAP//AAD//wAA//8AAP//AAD//wAA//8oAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAA - AAAAAAAA////AQAAAAcAAAATAAAAIwAAADEAAAA5AAAAPQAAAD8AAAA/AAAAQQAAAEEAAABBAAAAPwAA - AD8AAAA7AAAAOQAAADUAAAAxAAAALwAAACkAAAAlAAAAIQAAAB0AAAAZAAAAFQAAABEAAAAPAAAACwAA - AAcAAAAFAAAAA////wH///8B////Af///wEGBgZLDxcbPQAAABUAAAAdAAAAIQAAACUAAAAnAAAAKQAA - ACkAAAApAAAAJwAAACUAAAAlAAAAIwAAACEAAAAfAAAAGwAAABkAAAAXAAAAFQAAABEAAAAPAAAACwAA - AAkAAAAFAAAAA////wH///8B////Af///wH///8B////AQAAAAcVHB71Fycsm////wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////ASInKXUBAQL/HzlA3RcX - Lwv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AUVO - UduDusz/QYGV9SFCTUf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8BMjIyG6G4wf2DvM7/R5ix/yhWZKH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8BYmtvkbzW4P+CvM7/SaK9/yhebucACQkb////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wEAAAADkqCm773W4P9tl6X/ERkc5QAAANcAAAAN////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFSWVxNlKGo/ygqKvElJSX/BQUFzxkZ - GcUAAAAH////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEeICClExMT5yMj - I/kkJCT9ICAg2ysrK78AAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wETExOfExMT3yQkJP0jIyP5LS0t4yQkJKv///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////ARMTEwMTExOvFBQU2yUlJf8iIiLzISEh5yoqKp3///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////ARMTEwcTExO/FRUV1yYmJv8gICDtMzMz7zQ0NI////8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////ARMTEw0TExPNFxcX1SUlJf8fHx/nMjIy8y8v - L3X///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////ARMTExUTExPZGxsb1SUl - Jf8cHBzfFxcX8zU1NWP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////ARMT - Ex8TExPlHR0d1SUlJf8gICDbOTk59yQkJEX///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////ARMTEysTExPtICAg2SUlJf8bGxvVDg4O8Tk5OT3///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////ARMTEzcTExPzIyMj3yUlJf8bGxvRJCQk7xwcHCf///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////ARMTE0UTExP1JCQk5SUlJf8ODg7LAAAA4RYW - Fhv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////ARMTE1UTExPzJycn6SUl - Jf8LCwvLAAAA1Q0NDRP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////ARMT - E2cTExPxJycn7yUlJf8HBwfNAAAAyQQEBAv///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////ARMTE3sUFBTrKCgo9SQkJP8FBQXPAAAAuwAAAAf///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////ARMTE48dHR3lJCQk+yQkJP0DAwPVAAAAqQAAAAP///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////ARMTE6EiIiLhJCQk/SMjI/cCAgLdAAAAmf// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BExMTBRMTE7MiIiLdJSUl/yEh - IfMBAQHjAAAAhf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BExMTCRMT - E8MfHx/ZJiYm/yAgIO0BAQHrAAAAcf///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8BExMTDxMTE88ZGRnVJSUl/x4eHuUAAADvLi4ub////wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8BExMTFxMTE9sUFBTVJSUl/1paWuvJycn/U1NTc////wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8BExMTIRMTE+ViYmLp4uLi/4eHh/EDAwPzAAAAP/// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BT09PQaWlpf9ubm7vJSUl/xMT - E9kAAADb////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BS0tLURMT - E/MLCwvjExMT9Q0NDXn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// - /wH///8BERERUwkJCeFRUVGH////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.Designer.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.Designer.cs index 54814b0fd8..3d4b2d2d28 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(VirtualpadTool)); this.ControllerBox = new System.Windows.Forms.GroupBox(); this.PadBoxContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components); this.clearAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -170,7 +169,7 @@ this.ClientSize = new System.Drawing.Size(452, 312); this.Controls.Add(this.ControllerBox); this.Controls.Add(this.PadMenu); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController_MultiSize; this.Name = "VirtualpadTool"; this.Text = "Virtual Pads"; this.Load += new System.EventHandler(this.VirtualpadTool_Load); diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.resx b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.resx index f8a7b41a54..b26c771ac5 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.resx +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.resx @@ -123,508 +123,4 @@ 17, 17 - - - - AAABAAwAMDAQAAAABABoBgAAxgAAACAgEAAAAAQA6AIAAC4HAAAYGBAAAAAEAOgBAAAWCgAAEBAQAAAA - BAAoAQAA/gsAADAwAAAAAAgAqA4AACYNAAAgIAAAAAAIAKgIAADOGwAAGBgAAAAACADIBgAAdiQAABAQ - AAAAAAgAaAUAAD4rAAAwMAAAAAAgAKglAACmMAAAICAAAAAAIACoEAAATlYAABgYAAAAACAAiAkAAPZm - AAAQEAAAAAAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAQAAAAEAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAHR3AAAAAAAAAAAAAAAAAAAAAAAAAAAAdHdEcAAAAAAAAAAAAAAAAA - AAAAAAAAAHd0d3QAAAAAAAAAAAAAAAAAAAAAAAAAAEd8d3UAAAAAAAAAAAAAAAAAAAAAAAAAB3yHfHZw - AAAAAAAAAAAAAAAAAAAAAAAAd3fIyHVwAAAAAAAAAAAAAAAAAAAAAAAAfHh3jIxwAAAAAAAAAAAAAAAA - AAAAAAAHd8jIyHdgAAAAAAAAAAAAAAAAAAAAAAAHd4yHfIdAAAAAAAAAAAAAAAAAAAAAAAAHyMjIyMhQ - AAAAAAAAAAAAAAAAAAAAAAB3d3eMh4dgAAAAAAAAAAAAAAAAAAAAAAB8jIyIfIdQAAAAAAAAAAAAAAAA - AAAAAAB3h4jIiMh3AAAAAAAAAAAAAAAAAAAAAAB8jIeHeIjHAAAAAAAAAAAAAAAAAAAAAAeIiHh4eMiE - AAAAAAAAAAAAB0dHcAAAAAd8h4eIiIiHcAAAAAAAAAB0d3d3RwAAAAeIeIiIiIh3RwAAAAAAAHR3d8h3 - dAAAAAfIh4iIiHiIx0cAAAAAdHh3eIeHhwAAAAeHiIiIiIiId3R3dHR0eHd4h4eHhAAAAAd4eIiIiIiH - x3d2d3eId4iIiIiIhwAAAAd4eIiI+IiIh3d3eHh3iIiIiIeHwAAAAAfIjHeIiIiIyIeHh4iIiIiIiIiI - cAAAAAeIQ0R3h3iIiMiIiIiIiIiIiIiEAAAAAAfIR3d3d0iIiIh4iIeIiIiIiHhAAAAAAAB4d3d3SHiI - h4fTiIi3iIiIeIwAAAAAAAB3h4d3eIeIiHiJiIuIiIh4jHAAAAAAAAAHyId3h3h4iIh4iIiIiIiHeAAA - AAAAAAAAB8iMiMjIiIiIh4h3aMjHAAAAAAAAAAAAAAdYyIeIiIiMjId6d4eAAAAAAAAAAAAAAAAHdsjH - eIeH6MiId3AAAAAAAAAAAAAAAIiIh4V8jIh4eIfHcAAAAAAAAAAAAACIiIh3AAAHd3h3fHcAAAAAAAAA - AAAAAAiIjHgAAAAAAHx8eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAA - AAd0dAAAAAAAAAAAAAAAAAB3x3cAAAAAAAAAAAAAAAAAd3fHcAAAAAAAAAAAAAAAB3yMh3AAAAAAAAAA - AAAAAAfIeMdwAAAAAAAAAAAAAAAHjIyHQAAAAAAAAAAAAAAAfId4yHAAAAAAAAAAAAAAAHjIyIdQAAAA - AAAAAAAAAAB3iId4YAAAAAAAAAdwAAAAjIiIiIUAAAAAAHd3dAAAB4iIiHh8cAAAAHd3x4dwAAd4iIiI - h3Z3d3R3yIh4cAAHh4iIiIfHd3d4iIiIh3AAB3jHiIiIiHeHiIiIiIwAAAh3dXh4iMiIiIiIiIhwAAAA - yGd0d4iIeIi4iIiMAAAAAIeHd4iIh32IiIiIcAAAAAAAd4jIyIiIiHeHyAAAAAAAAAB3h4iIh8h3dwAA - AAAAAAAIh8fIh4eIaAAAAAAAAACIiHAAB8jIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////////////////////n////g////wP///8B///+Af///gH///4B///8Af///AH///wB//n8AP/A+AB - /AHgAAAB4AAAAeAAAAPgAAAH8AAAD/AAAB/8AAA//wAA//4AA//weA////////////////////////// - //8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRwAAAAAAAAAAAAB3dAAAAAAAAAAAAA - d8dwAAAAAAAAAAAAfId3AAAAAAAAAAAHeMjHAAAAAAAAAAAHyHh3AAAAAAAAAAAHh3eEAAAAAAAAAAAI - yIiHAAAAAHd2cAAIiIiIQAAAd3d4UACHiIiId3d3eHiIcACHh4iIyHeHiIiIcAAIR3d4iIiIiIiMAAAH - d3eIh3iIiIhwAAAAeMh4iIiHiMAAAAAAAHfIiMh4aAAAAAAAiIgHyIfIAAAAAAAIgAAAAIAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD8f/8A+H//APB/ - /wDwP/8A4D//AOA//wDgP/8A4D/BAOAfAQDAAAEAwAABAOAAAwDgAAcA8AAfAPwAPwDwgP8A5/f/AP// - /wD///8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAd1AAAAAAAAB8cAAAAAAAB4eAAAAAAAAHyMgAAAAAAAiIhwAAAHcACI - iHcAd3hwAIz4jIeIiIAAd3eIiIiIAACHeIiIiHAAAACMeMh4AAAAiAAIgAAAAAAAAAAAAAAAAAAAAAAA - AAD//wAA//8AAP//AADj/wAA4/8AAMP/AADB/wAAwfkAAMDBAADAAQAAwAMAAMAHAADwDwAAzn8AAP// - AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAA9OzsAZD8/AGg8 - PABtPj4AQkNDAEZIRwBWQkIAV0REAF5AQABbRkYAVklJAFxPTwBTU1MAXFJSAF5ZWQBkQEAAYUREAGZF - RQBqQkEAYEtLAGNPTwBwQUEAfUZGAHJKSgB2SUkAfU9PAGBRUQBgVFQAZlZWAGZYWABqWVkAclZWAHpU - VAB9W1oAbmJiAGtoaABtaWkAcWdnAHdnZwB8Y2MAe2pqAHJxcQB+dHQAd3l5AHl6egCGT08AiU9PAIFP - UACGU1MAjVFRAIlWVgCMV1cAg1xbAIxaWQCQUlIAlVJSAJFXVgCXVVUAmVVVAJZaWQCSXV0AlV9eAJpZ - WgCeW1sAml5eAKBZWgCgXFwAql9fAIRmZQCIZWQAhWtrAI5ragCTYmEAnGBhAJ9kYwCaZmYAk25uAJ1s - awCFdHQAiXd3AIt+fgCWd3cAmHR0AJV5eQCbfHwAo2JhAKZhYQChZWUApGVkAKplZACsZGQAqmhnAKZr - agCnbGsAqmloAKlubQCsbW0AtGZnALhsbACxb3AAv29wAKVxcACrc3IAr35+ALN0cwC5c3MAvXBxALR4 - dgC1fHsAunt6AMNtbgDGb3AAw3FyAMZwcQDGdXUAyHR1AMp3eADBeXkAxnt7AMB/fgDLensANLBSAEWf - TgBBtFwAPMdnADHkdgDciiIAvoF/AISrdwDln0sA35lhAN2XfADgmmEA8LdlAO61cAArWPIALWT+AEh5 - +gDOf4AAfoCAAHiA1ABZv9wAZrnUAGK+2ABxnv4Ad6P/ADPX/QBw0OcAW+D7AIKEgwCPgoIAjI2NAJuC - ggCUiIgAmYqKAJGSkgCjhIQAqoKCAKKLiwC+hIMAsoqKALaSgQCum5sAsZubALqqlQCdgr4Ar6ytALGh - oAC6pKQAwoSDAMyBggDGiIYAyYiHAMWMigDMjIoA0ISFANKHiADUjIwA2Y6NAMCUjQDIk44A0JCPANaP - kADHlZQAzpSSAMScmwDUkpIA2ZSVANWYlgDampcA2ZeYANWcnADam5sA4p2cAMChjwDeoJ4A5aCFAOaj - jQDlpJoA2p6hAMOkowDOoaEAy62tANegoADdoqEA2aGpANGsrwDdq6kAwbG4ANGysQDdtLQA2ri3AOGk - owDjqKYA66ylAOGnqADjq6oA6a2rAOOwrwDssK4A5K+wAOaztADttLIA57i2AO24tgDmurgA6rq6APC1 - swDyuLYA9Ly5APi+uwD1wL0A+cC9AKKMwACkk8QAqprMALSayACptsEAlaDkAOy/wACRxtQAgOv9AJnr - 9wDEwsoA5sbGAOzCwgDuyMcA7MzMAPPEwgDxy8oA9dPTAPja2gAAAAAAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAADLytDi9tOemQAAAAAAUy9EecLEsa1uPTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj11Mme - VakAAAAAAAAAAAAATS84M0akAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// - AAD///////8AAP///////wAA//h/////AAD/4D////8AAP/AP////wAA/8A/////AAD/gB////8AAP8A - H////wAA/wAf////AAD+AB////8AAP4AH////wAA/gAf////AAD8AB////8AAPwAH////wAA/AAP//// - AAD8AA////8AAPgAD//+BwAA+AAH//ADAAD4AAP/wAMAAPgAAP8AAwAA+AAAAAADAAD4AAAAAAMAAPgA - AAAABwAA+AAAAAAHAAD4AAAAAA8AAPgAAAAAHwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/4AAAAP/ - AAD/4AAAB/8AAP/4AAAf/wAA/8AAAH//AAD8A+AD//8AAPgP/A///wAA////////AAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE - AAAAAAAAAAAAAAABAAAAAQAAAAAAAFFNTQBRUlIAU1RUAGJHRwBiT08Aa0lIAGJTUwBrVlYAYllZAGZc - XABpWloAb1xbAHNTUwB7V1YAc1hXAHFbWwBkZWUAaWFhAG5kZABpamkAcGFhAHlubgB2cHAAf3V1AH55 - eQB8fX0AgUpKAI1PTwCLWFcAhlhYAI9ZWQCKXFsAm1ZWAJJZWQCWWVgAmlpbAJtcWwCiXFwAl2BfAIBg - YACAZ2YAgG9vAI9oaACWZWQAmGBhAJ5kZACcaWoAmm9vAIV0dACNcHAAiXZ2AIB8fACac3IAm3V0AJ51 - dQCZfHwAnHx8AKNmZgCnZmYAqmJiAK5jYwCvb24AtWVmALBtbgC5bW0AvmxtAKx+fQCxcnIAtHBwALZz - dACydXQAtnd2ALlwcAC5dnYAt3p5ALh5eAC8fHsAun18ALx+fQDGb3AAxnBxAMdzdADAd3YAyHJzAMlz - dADJdXYAynd4AMd/fwDMe3wAzXx9AHunbwBhvHIAYsN4ANuLOwC2hn4A4Zt5APC3ZABte9sAX47+AHWM - 5QAl0foAY+P8AIeDgwCFhoYAioSEAJOIiACWi4sAmpKRAKGCgQCmhYUAqYGBAKuDhACniooApYyMAKiO - jQCyhYMAvoWEALeNjQCrj5AAr5eXALSVlAC9lJMAmbCEAK6RugDBgYAAwoSCAMWDhADChoQAxYeFAM6A - gQDFiIYAxoqIAMqIiQDMi4oAy4yKAMiPjQDPj44A0ISFANKJigDUi4wA04+NANWNjgDKkY8A0JCOANud - iQDWj5AAzJSTAM2XlgDGm5oA1pGSANOUkgDVl5EA1pOUANiVlgDYmJUA2ZeYANKenADbmpsA3pmYANuc - mgDbn5wA1aacAN6gngDqqZoA3Z+gAMyjowDCra0AxqysAMqpqQDboaAA3qKiAN6logDbp6UA3aWkANer - qgDWsbMA0rW0ANe0tADfs7IA4aSiAOGlpQDkp6UA46imAOWopgDsraIA6qimAOGoqADhrqwA6a2rAOqv - rADpsK4A7LGuAOGzswDlsbEA7bKxAO+1sgDotrYA5rm3AO+4twDot7sA6bq5AOu9uwDrv70A8bazAPG2 - tADxuLUA9Lm2APC9uwD2vboA9L+9APi+uwD4v7wA8sC+APXAvgD5wL0AkILJAKqXzACsu8cAqr/LALLV - 3QDawMIA48XFAOvDwQDswMAA7cTDAO/ExQDgxsgA8cbEAPTGxADwyskA9MvJAPLNzQD21dYA+NjZAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAMEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHCEcBQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAayU9PSYbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQlBSQiJpAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAM0pSUlJQPRcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnUlJSUlJGFQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAFJSUlJSUkoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzUlJSWVJZfxAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5XWYqKioqGDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoqMkpqa - mqAsAAAAAAAAAAAAAAAAAABoNAAAAAAAAACMjJyuvLy2toYHAAAAAAAAAAAAABcOIDouBgAAAAAAc4yc - tsHKysPAriIKAAAAAAAAABYgRk1LTX+DEAAAAABukqXB4ejo4dHPQCIEChcXEwggTXV/k66unKMpAAAA - AG6Srsro6ero0dN/Rk1NRk2Dg4STrsbh4cHAt2sAAAAAbpKuOXPe6ajW15KGg4OGk528yuHo5eHPz882 - AAAAAAB4jCkDAxSoMabXt5yjt8ro3ePo5dbT09HTdAAAAAAAAABGcBFoGgFwdtfDwHxi2dpmZcrX09HP - z0MAAAAAAAAAAHh/qWwaOa6cz9PNZGPYsdzbzc3DwLk2AAAAAAAAAAAAAAAvhpKakoyg19HNyKS5wHtb - orZ/cwAAAAAAAAAAAAAAAAAANkaKWVm5zb1gYV6cXVxfNgAAAAAAAAAAAAAAAAAAALGvlTIuP1K5tqCR - l4xfLwAAAAAAAAAAAAAAAAAAsbPBenkAAAAAcCVYjE0scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////+f///+D////A////wH - ///4B///+Af///gH///wB///8Af///AH/+fwA/8D4AH8AeAAAAHgAAAB4AAAA+AAAAfwAAAP8AAAH/wA - AD//AAD//gAD//B4D////////////////////////////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAAWlJSAHBJSQB1SEgAe1dXAHdYWAB5WlkAel1dAGBiYgB1bGwAfWtrAHh2 - dgB9fn4Ag01NAIRXVwCIV1cAhV9eAItbWgCgX14ApV1dAJhgXwCNYGAAnWtqAJhtbQCCdnYAh3x8AI15 - eACeensAqGBgAKhoZwCga2oArGpqALNqagCzb28AtG1tALltbQCxb3AApnVzAKlzcwCqdHMApnp6AKd+ - fgCpensAq3x7ALZ3dgC8dHQAvH59AMZvcADGcHEAxXN0AMhycwDJdncAynh5AMx5egDNfn8Ajo1wAOek - VgDGgH8A4p53AEZ2+gB8u4AAd8PaAIuEhACOh4cAjo6OAJ+DggCejo4Ao4SEAKSIiACsi4sAqo2MAK6P - jgC+gYAAvoaGAL+KiACskJAAtJeXALWenQC5np4At6iOAKmyjgC9nroAwYSDAMaGhADOhoYAxomHAMiK - iQDJjYwA0oeIANOOjwDUjY0A2ZiPANaPkADGkZEAx5eXAMySkADGnZwA1ZOSANeTlADWl5YA2JSVANGZ - mADan50A3J6dAOCcmwDVoJ8A7K2fAMOtrQDXo6IA3aCgAN+kpADVq6oA3ay3AMu0tADPtrYA3L+/AOCi - oQDhpqUA5KelAOinpgDlq6gA46usAOOvrQDqrqwA7LGuAOayswDjtrQA5re1AOqysQDts7EA57y6AO+8 - ugDrvL0A8LOwAPC1sgDwtrQA87q3APS6twD2vboA8b69APi/vAD2wb4A+cC9AJmTzwDHqMMAu8PMAIHf - 8QDByNAA7cLCAO3FwwDvxsQA5cjIAOzOzgDwxcQA9cbEAPPP0AD10tIAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - BQMJAAAAAAAAAAAAAAAAAAAAAAAAAAAPHBMNAAAAAAAAAAAAAAAAAAAAAAAAABojLy8TAAAAAAAAAAAA - AAAAAAAAAAAAAB0wMDAiPgAAAAAAAAAAAAAAAAAAAAAAQjAwMDAtGAAAAAAAAAAAAAAAAAAAAAAAFzIy - NTU5CgAAAAAAAAAAAAAAAAAAAAAAIjZYWFxcBwAAAAAAAAAAAAAAAAAAAAAANlxtdW11JQAAAAAAAAAA - PgcRDgkAAAAAXG1/lISAZgMAAAAAABkVLC5SVhcAAABNY3WWnJuLfB8UBAcQHkhWaX91dSsAAABNY2BM - mJeCiVJSVl9laX+WloSJgEIAAAAAXAEIC0tGjnR0dJaRk5qNjIyJQwAAAAAAJkNADBtdjIaPO1GSPYuJ - hnVEAAAAAAAAAClISWRcd4xwkGp8UE90VwAAAAAAAAAAAAAAKSQ1NYZ7OjhbPDdGAAAAAAAAAAAAAHNv - YGsAKyJoXFYmRwAAAAAAAAAAAAAAcnIAAAAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// - /wD///8A////APx//wD4f/8A8H//APA//wDgP/8A4D//AOA//wDgP8EA4B8BAMAAAQDAAAEA4AADAOAA - BwDwAB8A/AA/APCA/wDn9/8A////AP///wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAABjZGQAdmRjAHtpaQB/eHgAgU9PAKBaWgCFbm0AlWtqAKptbgCwZ2cAsGhoAKxw - cACteHkAvnJyAMZvcADGcHEAy3l5AMx9fgCFmXQAwIB/ANeUfQDhoX8AlIqJAJWMjACYiIgAoIaGAK2K - igCxh4cAvoGAALKKigC4iYgAuJWVAL2cnACss50AuqKhAL+mpgDLgoIAxImHAMeNjADLkI8AxpWTANCS - kQDYlZUA1J6dANqZmgDdnp4A1J+oAMaiogDOr68AzLKyANi5uADhpaIA4qypAOWtqADrrqsA4bKwAOay - sgDtuLYA57++AOy4uADxtLIA8be0APa9ugDswL4A9sG+ALCcxwC5ncIA06zBALnH0QC2ytQA7sPDAPLS - 0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAZBgUAAAAAAAAAAAAAAAAACw8KAAAAAAAAAAAAAAAAGhAQDgAAAAAAAAAAAAAAAAkRESUYAAAA - AAAAAAAAAAAlKy4uBwAAAAAAAAcDAAAAKzlHPCYCAAAYCB0oKgAAAC0wSDs0FB0nLDlAOiwAAAANAQQb - Pi9DRkVBPzUAAAAAJB4cKz5EQjMiNSkAAAAAAAAAHwwRNxYVEyQAAAAAAAAxMgAAACEgAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA4/8AAOP/AADD/wAAwf8AAMH5 - AADAwQAAwAEAAMADAADABwAA8A8AAM5/AAD//wAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAkAAAAJAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAUAAAAOAEBAVUAAABUAAAANQAAABAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkFBSUvGRl5TCkpwlYuLtxDJCTQFw0NmQAA - AEkAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAwMKE8rK6V6RET2klJR/5ZS - U/+OT0//ZDc38B0QEJoAAAAyAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDAwYVzAwoopP - T/ygXVz/oFtb/55ZWf+bWFf/k1NT/1UvL9wGAwNcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AARNKipxhk5O+adkY/+uZWX/tWdo/7VmZ/+qYWH/nltb/3hERPcfERGCAAAAFgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADEZGS1zQ0LXqGdm/7ptbf/Fb3D/x3Bx/8hwcf/BbW7/q2Vl/4hPT/82HR2gAAAAIAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAB1gxMYyYXl3/vXFx/8Zwcf/HcHH/x3Bx/8dwcf/HcHH/uG1t/5NY - V/9EJia2AAAAKQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPB8fNH1MS+K4cnH/x3Fy/8dwcf/HcHH/x3Bx/8dw - cf/HcHH/wHBx/51gX/9PLCzGAAAAMwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAMAAAAAAAAAAAAAAAAAAAAALhAQFIZXVs/RjIz/1Y2O/9qYmP/eoaL/46qr/+aysv/ot7f/6rm5/+m4 - uf/otbX/5q+v/+uvrf/jqab/wYeF/28/P/QhEhKvAAAAXwAAACgAAAANAAAABQAAAAMAAAACAAAAAwAA - AAUAAAAKAAAAFQAAADAdDg9oSSkptHZHRu2dYmL+t3Z1/758e/+6enn/tnh3/7d5eP+8fn3/w4SD/7Z6 - ef9eODfbBgICTgAAAAgAAAAAAAAAAAAAAAAAAAAAPhwcJJVjYuPXkZH/2JOU/92fn//iqqr/57O0/+u8 - vP/uwsL/78XG/+/Exf/twMD/67i4/+60sv/wtrP/zZKQ/5taWv9xQED2MRsaxAgEBIcAAABaAAAAQQAA - ADcAAAA2AAAAOwAAAEUEAgJZHA4OfUcnJ7l5SkntqGxr/8CAfv/DgoH/vH59/7p+ff/DiIb/zZGP/9GT - kf/UlJP/1peV/9eZl/+GVlbuGQsLVwAAAAcAAAAAAAAAAAAAAAAAAAAARiIiLZ9rauvZk5P/2peY/+Ck - pP/lsLD/6ru7/+/Fxf/yzMz/9NDQ//PPz//xycr/7sDA//K5tv/1u7j/36Kg/6dmZf+mZWX/j1ZW/WM6 - OutDJSXQNBwcvDAaGrQ0HBy1PiIivUwsLMtkPDzfh1VU9a1xcP/EhIP/xIWE/7+Cgf/Ch4b/zZST/9mk - ov/grq3/4a6t/96lo//eoJ7/36Kg/+Cjof+IWVjnGwwMQwAAAAIAAAAAAAAAAAAAAAAAAAAARyQkL6Br - auzZk5P/25qb/+GnqP/ntLT/7cDA//LLy//209T/+NjY//fX1//00ND/8cbG//W9u//4vrz/46ak/7d0 - c/+vb27/s3Jy/7d2df+ucXD/pWpp/6Npaf+nbWz/sHVz/7p9fP/EhYT/yImI/8WIhv/DiIb/ypGP/9eg - n//hr63/57q5/+rCwP/rwsD/6bq4/+evrf/nq6n/6q6r/9qgnv9wRkbDBwAAHgAAAAAAAAAAAAAAAAAA - AAAAAAAASCQkLZ1nZuvYkpP/25uc/+Opqv/qtrf/7cHB//TOzv/52Nj/+tzc//na2v/xz9D/8MfH//fA - vv/6wb7/6a6r/8OBgP/DgoD/vX58/7h7ev+8fn3/woOC/8aHhv/HiYj/xoqJ/8aLif/Ijoz/zZST/9eg - nv/hrav/6Lm3/+zCwf/uyMf/78nH/+/Dwf/uvLr/7ba0/+60sf/vtLL/8ri1/7J+fflMKSltAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAQyEhI5JcXOPWj5D/3Juc/8qVlf+BZmb/bl5e/4l4eP/AqKj/8tPT//LO - zv+5p6b/w6qq//fBv//7wr//8LWy/86Ojf/Ojoz/0ZGP/9GSkP/OkY//zpOR/9GamP/VoJ//2qel/+Gv - rf/nt7X/6727/+3Dwf/wycf/8czL//LLyf/yxsT/8cC+//G7uf/yubf/87m3//S7uP/4vrv/1J6c/3JH - RrAdCgsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANRcXEYJNTcvPiIn/15aW/2VNTf85Ojr/Q0VF/0JF - RP9dXFz/n5GR/+S/v/+bh4f/hXp6/+25uP/7wr//9bu4/9qcmv/Zmpj/252b/96gnf/ipKH/5q+s/+u+ - vP/vycf/8srI/+3Hxv/wysj/9c7M//TNy//0ysj/9MbE//TBv//1vrz/9r26//e9u//4vrv/+L+8//vB - vv/hqqf/g1ZVzDwcHC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW4+Ppq/env/05OT/2ZX - V/9rbm7/fX9//3l6ev99f3//cHJy/5F9ff+ff3//XFhY/9eop//8wr//+L+8/+Wppv/ipaP/5qil/96i - pP/Kmaz/1qi1//LGxP/tyMf/qb3J/23E3P9kw9//vMTN//jDwP/3wb//+MC9//i/vf/5v73/+b+8//i/ - vP/3vrv/+L68/92mo/+IWlnRRSMjOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcv - L0mbX1/y15GS/6GAgP9XV1b/iYuL/4CBgf98fX3/cnR0/1dPT/++j4//km9w/9Sfnv/6wL3/+cC9/+6z - sP/ssK3/0Z+u/4OH1P9YffD/QGPs/7KYyv/Ct7z/Ytrz/3Ts//8s2f//cbvU//m+u//4v7z/+L67//e9 - uv/1vLn/9Lq3//O5tv/zuLX/0puZ/4RVVctGIyM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAADIXFwdrPDySq2ts/diZmf/ApKT/sKur/4CBgP95enr/iYiI/49zdP/do6P/36Ch/96e - nv/zuLX/+sK///W7uP/1ubT/qZC//2qY+/9tnf//MGT6/56FxP/esK//nMbS/57n8/9+z+T/ybG3//a6 - t//zubb/8re0//C1s//utLH/7rKw/+qvrP++iIb9dklJtkMgISoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHIyMSazw8kZ5hYvXNjI3/2aSk/7OMjP+bd3f/sIKC/9KV - lv/cnJz/2peY/9aRkf/koqL/+sG+//nAvf/5v7z/4amw/6qZx/+aouP/qpvP/+mxtv/2urj/6rGv/+S6 - u//ptrX/466n/+Ovqf/ssK7/6q6s/+isqv/oq6n/2J2b/6JubfFoPT2NOxoaFwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBoaCFowMFd7SEjAomZm9sWC - gv/XkZL/25SV/9iSk//Wj5D/1IyN/9KHiP/UiIj/8bOx//rCv//3vbv/9ru4//O3s//xuLX/7q6e/+ej - hf/npIn/7bCp/+Otp/+KsX3/ULdm/1WjWv+7oYz/5KWk/9uenP+4gH79glJRzVYuLlQgCAkGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAA8HBwQVy4uS3FBQaCPV1fjsG5v/cmAgf/ShYb/0YKD/85+f//LeXr/2I2M//e8uf/1vLn/7rOx/+2y - sP/lpJX/5qFY/+6xXP/djS3/35h9/86gl/9SwW7/Nd90/0WxXP+vlH//wYSE/49cW+VlOTmBQR4eHAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGk7OhqIWFd8oG5u8J5qav+eX2D/tmts/8Z0df/KdHX/yXJz/92T - k//3vLn/7LGu/+Snpf/dm5L/4Z1q/+61dP/fmmX/15WM/9eYlv/Bm43/r6uR/6uNgP+WYWDtbkBAnUwn - JzQVAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiFJSBnhC - QgpqNDQJWSUlB08dHQdfKisKfENDFJJWViinbGtRvYOCjtOcm8/pt7X157y6/7eOjfhxRUW7aTk5m4RK - StehWlr6uGdo/8Zwcf/dkpH/8bSx/+OnpP/YmZj/1ZWT/9ealP/Vl5X/0JCP/8eIhv+zdnb/lFtc6nA/ - QKRSKio/JQwNBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADTn6AB2qioDMuUlCHBhYU8voCAWcCBgXTEhoaLzZGQqdeensngrKvn47Sz/NOop/+yiIfyi2Bgs2k+ - PlZXKysPAAAAAUYlJRxcMTFYcj4+pYpMTeWmXF3+xnl5/9+Zl//dnJr/z46M/8KCgf+vc3L/ll9e831L - S8hlOTl/TigoMy0REQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABzQUIDnmprDriGhifHlpZMzp6eeNCgoZ7On5+2yJqaybuPj9WnfHzVj2RkunVJ - SYNbLy8/PRQUCgAAAAAAAAAAAAAAAAAAAAAAAAAAKRUVBU0pKSphNDRtd0BAsotNTd2ZW1vrkVlY4HtJ - Sb5lOTmCUysrQTsbGxEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCwsA2Y4OA5xQkImdkhIRHhKSll0R0dibUBAWWI2 - NkNUKCgoOhISDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhkZB0km - Jh5LJiYsRSEhITATFAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// - /////wAA////////AAD///////8AAP///////wAA////////AAD/+H////8AAP/gH////wAA/8Af//// - AAD/gA////8AAP+AD////wAA/wAP////AAD/AA////8AAP4AB////wAA/gAH////AAD8AAf///8AAPwA - B////wAA/AAH////AAD8AAf///8AAPgAB////wAA+AAH//4HAAD4AAP/8AEAAPgAAf/AAQAA8AAA/wAA - AADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAEAAPAAAAAAAQAA8AAAAAADAADwAAAAAAcAAPAA - AAAADwAA+AAAAAAfAAD4AAAAAD8AAPwAAAAAfwAA/gAAAAD/AAD/gAAAA/8AAP/gAAAH/wAAgAAAAB// - AAAAAAAAf/8AAAAD4AP//wAAgB/8H///AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAYAAAAZAAAAGQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAARCQkYOh8fb0ooKK80HByiCQUFTAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAIhERFmA2Np2ITUz3lVNT/4dLS/5IKCi9AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAANjODiBllhY+61kZP+vY2P/pV5e/3xHRvEhEhJfAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAASSgoN41VVeS6bW3/xW9w/8dwcf+9bG3/klZW/jogIIEAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1RkWcs2xs/8dxcv/HcHH/x3Bx/8Zwcf+iYWH/SSkpmAAA - AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUC0tMZtgX+fGcnP/x3Bx/8dwcf/HcHH/x3Fy/61q - av9UMTGqAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxRER1tm9v/8hxcv/HcHH/x3Bx/8dw - cf/HcnP/tnRz/185OboAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAACIxXV7TEdHT/yHJz/8l1 - dv/Kd3j/ynd4/8p4eP/Bf37/bURDywAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNKysjo2Zm4Mt4 - ef/NfH3/z4GC/9GFhf/RhYb/0YWF/82Mi/9+UVHeCAICOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAACwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGc+ - Pkm1c3P30IGC/9OJiv/XkZL/2ZaW/9mWl//YlJX/2JmY/5hnZfMeEBBrAAAABwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA0FAgItHhAQWzAbG4IqFxeHDQcHWwAAABkAAAAAAAAAAAAA - AAAAAAAAek1MdMN/f//VjI3/2piZ/9+io//hqKn/4qmp/+Clpf/jpqT/wImH/04xMLwAAAA6AAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABEbDg5GRygokW5CQs+MVlbxnGJh/JdfXvxnPz7hHA8PbgAA - AAwAAAAAAAAAAAAAAACMW1qbz4qK/9qXl//gpqb/5rKz/+q6u//rvLz/6La2/+qxr//epKL/j1lZ+DUc - HLACAQFPAAAAHQAAAA8AAAAPAAAAEwAAACIbDg5MVDExnYZUU+SpbWz+uXl4/7x+fP/AgoD/xoeF/72A - f/9fOzu1AAAAHAAAAAAAAAAAAAAABJhkZK/VkZH/3Z+g/+axsf/twMD/8svL//LNzf/vxcX/8Lq4/+6z - sf+1dHP/j1VU+144N9g7IiKqMhwclDcfH5RGKSmiYTw7v4tZWOiydXT+woOC/8aKiP/Ol5X/2aWj/9ui - of/cnpz/2pyb/35TUrgAAAAVAAAAAAAAAAAAAAAFmmVkstaTk//hpaX/7Lm6//TLy//419f/+NnZ//TP - z//1wb//9Lq3/8aGhP+1dHP/s3Rz/6xwb/+pb27+rnNy/7Z7ev/BhIL/yY2L/8+WlP/apqT/5be2/+vB - v//rvrz/6bKw/+uvrf/Um5n/bUVEgAAAAAMAAAAAAAAAAAAAAAOTXV2q1ZGR/9CYmP+dfX7/o4yM/9e8 - vP/z0tL/zLOz/+u8u//5v7z/1peV/8uLif/Ki4r/yoyL/86Ukv/TnJv/2qSi/+Gtq//nuLb/7cPB//DJ - x//xxsT/8b+9//G6t//zubf/77az/6d1dM89Hx8lAAAAAAAAAAAAAAAAAAAAAIJOTojNiIn/jGlp/01O - Tv9UVlb/dnNz/7uhof+Pfn7/xJ+e//zCv//lqKb/3J2b/+Chnv/hpaT/7Ly5/+vHxv/MxMn/0MjN//LK - yf/1x8X/9sLA//a/vP/3vrv/+L+8//S7uP+5hoXhYTo5RwAAAAAAAAAAAAAAAAAAAAAAAAAAaTs7RrVz - dPKmfn7/cXJx/4SGhv97fX3/b2Zm/516ev+7kJD/+sG+//C2s//lqqr/rpbA/3aB2/+ql83/tMHK/2jc - 9P9OzOz/2r3B//q/vP/3vrv/9ry6//a8uf/ss7D/tYGA32c+Pk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAvEhIHg01Njbp9fvrCn5//nI+P/4R7ev+fgID/2Jyd/9ybnP/ytrT/+b+8/+ewtf+Mld3/ZI36/5eI - zv/Ttrn/sNLc/6/Czv/stLT/8re0/++0sf/tsq//2qCe/6Rxb8phODg+AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABCIB8MeUZGbqRpata8gYH8x4mJ/9eTk//YkpP/04qL/+Cbmv/5wL3/9726/+Sw - t//Zrrn/56qY/+2smf/lr6n/nLWJ/4Gtdf/Pppn/3qGf/7yEg/KJWViYTyoqIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQh0dGXJAQGOXXl7NtnR1/8V7fP/MfH3/znt8/+il - o//0urj/7LCu/+Whg//rq13/35VX/9Kek/9yvXz/ZbNv/6iCdfqYY2O/aj4+TCUJCgcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACcamsBjFRVB4FERAh9PT0JjU1ND6VnZx+/hINF0JqZiNOjoty0iIf2hFBQw5lX - V8+wY2P4xXR0/+aioP/oq6j/2pqT/92fif/Vlor/yYqJ/7N8efiVZmPGdERFYkEfHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALiFhgXFkJEdx5CQSMqSknbNlZWbz5uaws2cnOXBlJPnqH18r4dc - XFFULy8OSCUlFm07O0+FSUmeoV1d3sF9fPrGhoX/snZ295xkZNiFUlKbbD4+T0UdHxIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc0JDA5FgYRKdbm46onR0Zp9ycnuWampzhFlZVmY6 - OikvDAwHAAAAAAAAAAAAAAAAAAAAAB0ODgRULCwhbjo7UXhERGVrPDxHTCYmGxAAAQMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP//////////////////////D////gf///wH///4A///+AP///AD///wA///8AP//+AD - ///gA//D4AH+AeAA+ADgAAAAwAAAAMAAAADAAAAB4AAAA+AAAAfgAAAP8AAAH/wAAD8AAAD/AAAD/wB4 - D//H////////////////////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABMAAAAtAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgIO1cwMM1qOjrsHhAQmwAA - ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAATCgogfUhI6ahgYP6lXV3+f0hI9wIBAT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGBgFPLy6kuW1t/sZv - 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 - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadTargetScreen.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadTargetScreen.cs index 0ec7705863..87f993612b 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadTargetScreen.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadTargetScreen.cs @@ -10,7 +10,6 @@ namespace BizHawk.Client.EmuHawk public partial class VirtualPadTargetScreen : UserControl, IVirtualPadControl { private readonly Pen BlackPen = new Pen(Brushes.Black, 2); - private readonly Pen WhitePen = new Pen(Brushes.White, 2); private readonly Pen GrayPen = new Pen(Brushes.Gray, 2); private readonly Pen RedPen = new Pen(Brushes.Red, 2); @@ -19,8 +18,8 @@ namespace BizHawk.Client.EmuHawk private bool _readonly; private bool _isSet; // The tool has to keep track of this because there is currently no way to know if a float button is being autoheld or just held - private int? _overrideX = null; - private int? _overrideY = null; + private int? _overrideX; + private int? _overrideY; public VirtualPadTargetScreen() { diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/IntvSchema.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/IntvSchema.cs index 6299da5f5f..178f9bdd75 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/IntvSchema.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/IntvSchema.cs @@ -10,7 +10,6 @@ namespace BizHawk.Client.EmuHawk [Schema("INTV")] public class IntvSchema : IVirtualPadSchema { - private string UnpluggedControllerName => typeof(UnpluggedController).DisplayName(); private string StandardControllerName => typeof(StandardController).DisplayName(); private string AnalogControllerName => typeof(FakeAnalogController).DisplayName(); diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/O2Schema .cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/O2Schema.cs similarity index 100% rename from BizHawk.Client.EmuHawk/tools/VirtualPads/schema/O2Schema .cs rename to BizHawk.Client.EmuHawk/tools/VirtualPads/schema/O2Schema.cs diff --git a/BizHawk.Client.EmuHawk/tools/Watch/RamPoke.Designer.cs b/BizHawk.Client.EmuHawk/tools/Watch/RamPoke.Designer.cs index 83c5fea7ac..b4bddf2a3a 100644 --- a/BizHawk.Client.EmuHawk/tools/Watch/RamPoke.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/Watch/RamPoke.Designer.cs @@ -28,7 +28,6 @@ namespace BizHawk.Client.EmuHawk /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RamPoke)); this.label1 = new System.Windows.Forms.Label(); this.OK = new System.Windows.Forms.Button(); this.Cancel = new System.Windows.Forms.Button(); @@ -227,7 +226,7 @@ namespace BizHawk.Client.EmuHawk this.Controls.Add(this.AddressBox); this.Controls.Add(this.label1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.poke_MultiSize; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "RamPoke"; diff --git a/BizHawk.Client.EmuHawk/tools/Watch/RamPoke.resx b/BizHawk.Client.EmuHawk/tools/Watch/RamPoke.resx index cbbfa54f5f..c7e0d4bdf1 100644 --- a/BizHawk.Client.EmuHawk/tools/Watch/RamPoke.resx +++ b/BizHawk.Client.EmuHawk/tools/Watch/RamPoke.resx @@ -117,543 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAQAQEAAAAAAIAAoQgAARgAAADAwAAAAACAAqCUAAG5CAAAgIAAAAAAgAKgQAAAWaAAAEBAAAAAA - IABoBAAAvngAACgAAABAAAAAgAAAAAEAIAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBHh4PQx4eJAAA - AAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAaUNDO2A+P5AAAAAtAAAAEwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIZoaHOAaGjfGA0NYwAAAEQAAAAoAAAADwAAAAIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgEAweXf3+xkX9//UIsLIQAAABXAAAAVAAA - ADkAAAAVAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6UFAnq5ma4paI - if9mSkupAQAAQwAAAFkAAABWAAAAPAAAABUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAi2tsXruvsPyajI3/cFVW2jYcHDUAAAA9AAAAVgAAAFQAAAA5AAAAFAAAAAIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAA5h+f6DFvb3/nZCR/25XWPpcNzdcAAAAEwAAADwAAABSAAAATwAA - ADcAAAAUAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFYiIhSij4/QysPD/6CTlP9sWFn/WTc3oCMC - AQYAAAAYAAAAOwAAAE8AAABMAAAANAAAABMAAAAFAAAABAAAAAMAAAACAAAAAQAAAAEAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYKSkZppSU18vE - xP+hlJX/bVhZ/1IzNLsNBAQkAAAAJgAAADgAAABLAAAATgAAAEcAAAA1AAAAJQAAACEAAAAfAAAAGwAA - ABYAAAATAAAADwAAAAsAAAAIAAAABQAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAADMxgYK6aUlNzLxMX/oJSV/21ZWv9MLzDCBAEBTwAAAEwAAABNAAAATQAAAEwAAABJAAAARQAA - AEEAAAA+AAAAOwAAADcAAAAzAAAALwAAACsAAAAmAAAAIQAAABsAAAAUAAAADQAAAAcAAAADAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABnPT0prJuc58zFxf+gk5T/bFhZ/1k4OJgAAAAAAAAAAAAAAAAAAAAAAAAAAgAA - ABMAAAArAAAAMQAAAC8AAAAsAAAAKgAAACcAAAAkAAAAIQAAAB8AAAAcAAAAGgAAABcAAAAVAAAAEgAA - ABAAAAAMAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZzw9KaybnOfMxcX/oJOU/21YWf9aODmOAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAFAAAAGQAAACwAAAAtAAAAKgAAACgAAAAlAAAAIgAAAB8AAAAdAAAAGgAA - ABgAAAAVAAAAEwAAABEAAAAOAAAADAAAAAkAAAAFAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGk/Pymunp7nycPD/5qO - j/9nU1T/WDc3jQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAABoAAAAqAAAAKwAAACgAAAAlAAAAIwAA - ACAAAAAdAAAAGwAAABgAAAAWAAAAEwAAABEAAAAPAAAADQAAAAsAAAAJAAAABwAAAAQAAAACAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABmPT4tk4WG6pSPkf9rY2T/SDo7/0ssLY0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAfAAAAKgAA - ACkAAAAmAAAAIwAAACAAAAAeAAAAGwAAABkAAAAWAAAAFAAAABEAAAAPAAAADQAAAAsAAAAJAAAABwAA - AAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/y - 3AX/79QV/+zKK//ov0L/6b1V3b+dg7CbhvSnloL/m4hz/4x1Yf+nhWy1/9elTf/ToDn/0J0i/86aDv/Q - mgIAAAAAAAAACwAAAB0AAAAkAAAAIwAAACEAAAAeAAAAHAAAABkAAAAXAAAAFAAAABIAAAAQAAAADQAA - AAsAAAAKAAAACAAAAAYAAAAEAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// - /wH//PYU//rvQ//353z/89+u//DV0v/sy+n/6cD2/+a7/P/juP7/4bT//9+x///drv//2qr//9em/v/V - o/r/0qDx/9Cd4v/Omcb/zJie/86ZafXHljSNdFcUAAAADgAAABUAAAAZAAAAGQAAABgAAAAWAAAAFAAA - ABIAAAAQAAAADgAAAAwAAAAKAAAACAAAAAYAAAAFAAAAAwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA//frAv/8+Cz//vyB//34zP/68PT/9+j///Pf///w1f//7Mv//+nA///mu///47j//+G0///f - sf//3K3//9qq///Xp///1aP//9Kg///QnP//zZn//8yY///Omf7/z5zs/9Gfu/vQn27eu5AkIR0XBgAA - AAgAAAALAAAACwAAAAsAAAALAAAACgAAAAkAAAAIAAAABwAAAAUAAAAEAAAAAwAAAAEAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA//DdG//26ob/+/bj//78///9+P//+vD///fo///z3///8NX//+zL///p - wP//5rv//+O3///htP//3rH//9yt///aqv//16f//9Wj///SoP//0Jz//82Z///MmP//zpn//8+c///S - n///1KP9/9em1//aqnP82qwVAAAAAAAAAAEAAAABAAAAAgAAAAIAAAACAAAAAgAAAAIAAAABAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+fKM//u2MP/9ej+//v1///+/P///fj///rw///3 - 6P//89////DV///sy///6cD//+a6///jt///4bT//96w///crf//2an//9em///Uo///0qD//9Cc///N - mf//zJj//86Z///PnP//0p///9Si///Xpv//2qv8/92vuv/gszAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9+2Jv/lxM3/7db///Xo///7 - 9f///vz///34///68P//9+j///Tf///w1f//7Mv//+nC///nv///5b7//+O8///iuv//4Lf//960///b - sP//2Kr//9Sk///Rnv//zZn//8yX///NmP//z5z//9Kf///Uov//16b//9qr///esP//4bTQ/+S4LwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/d - so//5ML//+3W///16P//+/b///79///9+P//+e3///Tj///w2v//7tX//+zS///r0P//6s///+nP///p - zv//6c7//+jO///ozv//6M7//+jO///nzP//5Mf//9++///asv//1Kf//9Gg///Sn///1KL//9em///a - q///3rD//+K1///kua3/5r0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP/VnwX/3bG2/+TC///t1///9ej///rz///58f//9OT//+/a///t1P//69H//+rO///o - zP//58n//+bF///kw///48H//+K////hvf//4Lz//+C8///gvP//4b///+PE///my///6dH//+rT///n - zf//4b///9qw///YqP//2qr//96w///itf//5bru/+a8NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/1Z8F/92xtv/kwf//7db///Pi///z3///79n//+3V///s - 0v//69D//+rO///ozP//58n//+bH///lxP//5MH//+K////hvf//4Lv//9+5///etv//3LT//9uy///a - sP//2a///9qx///duP//48X//+rU///t2f//6M3//+C5///esP//4bT//+W6+v/nvUkAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9afBf/csLb/5cT///DZ///x - 2///8Nj//+7W///t1P//7NL//+vQ///qzv//6cz//+fK///mx///5cT//+TB///iv///4b3//+C7///f - uf//3rf//920///bs///2rD//9mu///YrP//1qn//9Wo///XrP//373//+rV///v3v//6Mv//+O4///l - ufr/571JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/P - kgX/4Le2/+7U///y3f//8dv///DZ///u1v//7dT//+zS///r0P//6s7//+nM///nyf//5sf//+XE///k - wf//47///+G9///gu///37n//963///dtf//3LP//9qw///Zrv//2Kz//9eq///VqP//1KX//9Oj///V - qf//48b///Dh///t1f//5r36/+a8SQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD/2KYF/+3Stv/z3///89////Ld///x2v//79f//+3V///s0v//69D//+rO///o - y///58n//+fI///lxP//47///+C6///dtv//27L//9qx///asP//27H//9uy///asf//2a7//9is///X - qv//1aj//9Sm///To///0qH//9Gh///fvf//8eT//+3T+v/nvUkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//XhBf/04bb/9OL///Th///z3v//8dz///DZ///u - 1v//7dP//+vQ///qz///7db///DZ///t0///5sf//+C6///ar///1af//9Kh///Pnf//zpv//86b///Q - n///1KX//9eq///Xqv//1qr//9ao///Upv//06T//9Ki///Qn///0J7//+PH///z5fr/7tNJAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/13wX/9eK2//Xk///1 - 4///8+D///Le///x2///79j//+7V///u1v//9ur///v1///36P//79f//+bH///fuf//2a///9Wn///R - oP//z5z//82Z///Ml///zJf//86a///Tof//1aT//86d///Pnv//0aH//9Ki///Sof//0Z///8+c///V - qf//8eL3//XqRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD/9N4E//Xisf/25v//9eX///Ti///z4P//8d3///Da///v2P//9uj///78///9+P//9+j//+/X///m - x///37n//9mu///Vpv//0aD//8+c///Nmf//zJf//8yX///Omv//06H//9ur///Wpf//wor//8ON///H - k///y5f//82a///Om///0KD//+zY6v/48jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/04WP/9eT3//bm///15P//8+H///Lf///x3P//8dz///nt///+ - +////ff///fn///u1v//5sb//9+5///Zrv//1Kb//9Gg///PnP//zZn//8yX///Ml///zpr//9Oh///b - rP//47f//8qV//++hf//wYr//8SO///Hkv//y5b//9Gi///s2K3///8KAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/898J//Tgi//15Pj/9eX///Tj///z - 4f//8t7///Ld///57f///vz///z3///25///7tb//+bG///fuP//2a7//9Sm///RoP//z5z//82Z///M - l///zJf//86a///Tof//26z//+S5///Rn///v4j//8KM///Ej///yJL//8uW///WrNX/798yAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/y - 3Ar/8t5w//Ph5P/04///9OP///Lh///y3v//+e7///78///89///9ub//+7W///mxv//37j//9mu///U - pv//0aD//8+c///Nmf//zJf//8yX///Omv//1KH//9us///luf//1aT//8GL///Ej///yJP//8uX/f/O - m7//1qs1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/+/WAv/x2jP/8dya//Le6P/y3/7/8t7///nu///+/P///Pb///bm///u - 1f//5cX//9+4///Zrv//1Kb//9Gg///PnP//zZn//8yX///Ml///zpr//9Si///brP//5br//9qr///H - kv//y5f8/82b1v/PnXf/0J4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+3TBf/u1TD/7tZ///Ha5v/5 - 7////vz///z2///25v//7dX//+XF///euP//2a3//9Sm///RoP//zpz//82Z///Ml///zJf//86a///U - ov//263//+W6///gtPT/z563/9Cfaf/SoR//2KoBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/+rEC//x2cD/+u////78///89v//9uX//+3V///lxf//3rf//9mt///Upv//0aD//86c///N - mf//zJf//8yX///Pm///1KL//9yt///luf//573E/9+zEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/rxhb/8dnT//rw///+/P///PX///bl///t1P//5cT//963///Z - rf//1KX//9Gg///Om///zZn//8yX///Ml///z5v//9Si///crf//5br//+i+zP/ovhIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/6sUl//HY5P/68P///vz///z1///2 - 5P//7dT//+XE///et///2K3//9Sl///RoP//zpv//82Z///Ml///zJf//8+b///Uov//3K7//+W6///o - vtv/6L4bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+rDOP/x - 1/D/+vH////8///89f//9eT//+3T///lw///3rf//9it///Upf//0Z///8+b///Nmf//zJf//8yX///P - m///1KP//9yu///luv//6L7n/+i+KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP/pw03/8df6//vx/////P///PT///Xk///t0///5MP//922///Xq///06P//9Ce///O - mv//zJj//8yX///Ml///z5v//9Wj///crv//5br//+i+8P/ovjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/6cJn//HX///78v////z///z0///14///6s3//963///W - qP//0J7//8uX///Ikv//xo7//8SM///EjP//xY7//8qU///Sn///3K3//+a7///ovvn/6L5IAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+nBgP/x1///+/P///78///4 - 7P//6Mn//9qu///Sn///zJb//8eP///Cif//v4T//72B//+7fv//unz//7p8//+9gP//xIn//9CY///f - r///5739/+i+XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/p - wZn/8dj///ry///47f//6s3//+O7///gtP//3q///9ys///Zqf//1qT//9Og///Pm///y5T//8WN///A - hf//vH///719///Cgf//zI3//9um///mu3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP/ltwX/68ez//Xj///78v//9+j///Pe///w1P//7Mj//+e9///kuf//4bX//96x///b - rP//2Kj//9Wk///SoP//z5z//8yX///KlP//yZH//8mL///Pkv//4rOEAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/r1Aj/8+Rc//nu5f/9+////Pb///ns///14f//8NX//+vI///n - vv//5bv//+K4///ftP//3bD//9qs///Xp///06H//8+b///Ml///zZj//9Cc///SoP//1aL//9yttf/d - rxoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/huw3/6tCK//Li9f/79P///vz///v0///2 - 5///8dz//+7V///s0f//68///+rQ///qz///6c///+nP///ozv//58v//+TH///gv///2rT//9Wp///S - ov//06D//9ak///Zqv3/3a/C/+C0NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4Lh3/+jL+//y - 4f//+e////fr///y3v//7tf//+zU///r0f//6c7//+jL///nyP//5cb//+XF///kxP//5MX//+XH///n - zP//6dH//+vW///r1v//6ND//+LC///csv//2qv//92v///itc3/5bkmAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD/16cY/9600//oy///8d3///Hd///v2P//7dT//+zR///qzv//6Mz//+fJ///lxf//5MH//+K////h - vP//4Lr//963///dtP//27P//9uz///dt///4cD//+jP///t2///7tv//+jN///huf//4rb//+W6hQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/9elKP/gt+f/7tb///Hc///w2f//79f//+3U///s0v//6s///+nM///n - yf//5cX//+TC///jv///4b3//+C6///et///3bX//9uy///ar///2Kz//9eq///Xqv//27X//+fN///w - 4P//793//+fF///mu7P/6cAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/brin/687n//Pf///y3v//8t3///Da///v - 1///7dT//+vR///pzf//6Mr//+bG///kwv//47///+G8///guv//3rf//921///bsv//2q///9it///X - qv//1af//9Ok///Upf//3rz//+/g///x4f//6si2/+GoBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/79Uq//Pf6P/0 - 4v//9OL///Pg///x3f//8Nr//+7X///s0///69D//+nN///nyf//5cX//+PA///hvf//4Lr//963///d - tf//27L//9qv///Yrf//16r//9Wo///Upf//0qL//9Gg///duf//8uX///Lgtv/muQUAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA//XiJ//14uX/9ub///Xk///z4v//8t////Hc///v2f//7tb//+zT///q0P//6M3//+fJ///l - xf//48D//+G9///fuf//3bb//9uy///asP//2K3//9eq///VqP//1KX//9Kj///RoP//0J///+jR///2 - 7Kv/9OYDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/14Qr/9eGw//bm///25v//9OT///Ph///y3///8Nz//+/Z///t - 1v//7NP//+rQ///ozf//58n//+XF///jwf//4b3//9+6///dtv//27L//9mu///Xq///1qj//9Sl///S - ov//0aD//8+c///hwv//9u18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//TfN//149f/9uf///Xm///0 - 5P//8+H///He///w3P//7tn//+3W///r0///6tD//+jN///myv//5cb//+PB///hvv//37r//923///b - s///2a///9ap///Upf//0qL//9Gg///Qnv//4cLE//n0HwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD/8t01//Pguf/05Pr/9eX///Tk///z4f//8d////Dc///u2f//7db//+vT///q0P//6M3//+fK///l - xv//48L//+G+///gu///3bf//9qx///Wqf//1KX//9Ki///RoPr/0Z+0/9+8KwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/w2RL/8dtl//Hdwv/y3/T/8uD///Lg///x3///8Nz//+7a///t - 1///7NT//+rS///pz///58v//+XI///jwv//4Lz//9y0///XrP//1aj//9Sl9//So8f/0aBo/9CeEQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/s0hD/7dRE/+3VhP/t - 1rv/7dbe/+3V8v/s1Pv/69P+/+rQ///ozf//5sr//+TF///hv/7/3rj8/9ux9P/YreP/16rC/9Wojv/U - pUv/06MTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD/5scM/+fJJf/nyUb/5sZk/+XDff/jwI7/4b6R/+C7kf/et5D/3LSC/9uxa//a - r0z/2K0r/9erD//WqAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////D// - ///////8H/////////wH////////+AP////////4Af////////gA////////8AB////////wAAD///// - //AAAAf/////4AAAAP/////gAAAAf////+AAAAA/////4AAAAB/////wAAAAH/////AAAAAf////8AAA - AD/////wAAAAf/////A8AAA/////8D4AAA/////wPgAAB/////A+AAAH///+AAEAAA///+AAAAAAH/// - gAAAAAAf//8AAAACAP///gAAAAH////8AAAAAP////wAAAAAf///+AAAAAB////4AAAAAH////gAAAAA - f///+AAAAAB////4AAAAAH////gAAAAAf///+AAAAAB////4AAAAAH////wAAAAAf////AAAAAD////+ - AAAAAf////8AAAAD/////8AAAAf/////8AAAP//////wAAA///////AAAD//////8AAAP//////wAAA/ - //////AAAD//////8AAAP//////wAAA//////+AAAD//////wAAAH/////+AAAAP/////4AAAAf///// - AAAAB/////8AAAAD/////wAAAAP/////AAAAA/////8AAAAD/////wAAAAf/////gAAAB//////AAAAP - /////+AAAB//////+AAAf///////AAH///8oAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE0nKAhOKSk1CgUFDQAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHhUVR9yVVanFg4OSQAA - AB4AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI9y - c06Pe3zsNycnegAAAFEAAAA2AAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAKSNjo6djo//YUhJlwAAAEgAAABXAAAAOgAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAZjg5ErKhocukmJn/blRVySURESsAAABEAAAAUwAAADYAAAAOAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/PkQL/5sZq/+/a7//47////vv///z3///5 - 7P//9OH//+/T///rxf//5rz//+S5///htf//3rH//9us///Xp///06H//8+b///Ml///zZj//9Cc///T - of//16b//9us/v/fsbn/47YkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/csDP/48Dn/+7Z///4 - 7////vz///z2///36P//8t3//+7U///rzv//6cz//+jL///nyv//58n//+bI///lxv//48P//9+8///Z - sf//1Kf//9Kg///ToP//1qX//9us///gsv//5Lip/+e9CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/c - rlX/4779/+7Z///37P//+Oz///Lf///u1v//69H//+nO///oyv//5sb//+TD///jwP//4b7//+C8///g - vP//4L3//+LB///kx///5sz//+bL///hwP//3LH//9us///fsv//5Lnt/+a8MgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP/brlb/47/9/+/Z///y3f//79f//+3U///r0f//6s7//+jL///nyP//5cT//+TB///i - vv//4Lv//9+4///dtf//27L//9qv///Yrf//2a7//9y3///kyP//69X//+fK///it///5Lj1/+e8PQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/dslb/6cv9//Lc///x2v//79f//+3U///r0f//6s7//+jL///n - yP//5cT//+TB///ivv//4bz//9+5///dtv//3LP//9qw///Yrf//16r//9Wn///Upf//2bD//+jP///t - 2P//58D1/+a7PQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/t0lb/8t39//Pf///x3P//79j//+3U///s - 0f//6s7//+nM///oy///5sb//+G9///dtf//2a///9is///YrP//2a7//9mv///Yrf//16v//9Wo///U - pP//0qH//9Ok///mzP//79r1/+nDPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/14lb/9eP9//Ti///y - 3v//8Nv//+7X///s0///79r///Xl///x3P//6Mr//963///Xq///0qH//86b///Nmf//zZn//9Gg///V - p///06T//9Ok///TpP//0qL//9Ce///Upv//7tv0//PjPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/1 - 4VL/9uX8//Xk///z4P//8d3//+/Z///x3f///PX///z2///z3///58n//963///Xqv//0qH//86b///N - mP//zJf//8+b///Wpf//1aT//8WP///Ik///zJn//86b///PnP//5svq//n0LQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP/04B//9ePL//bl///04///8uD///Hc///15P///fn///z0///z3///58n//963///X - qv//0qH//86b///NmP//zJf//8+b///Xpv//4bT//8iU//+/iP//w43//8iT///OnP//5Mip////CgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8983//TiyP/05P7/9OL///Lf///15f///fn///v0///y - 3v//58j//962///Xqv//0qH//86b///NmP//zJf//8+b///Xpv//4rb//8+c///Bi///xZD//8qV/v/Q - n73/5MknAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//HbHf/y3oT/8t/e//Le/f/2 - 5f///fr///v0///y3v//58j//962///Xqv//0qH//86b///MmP//zJf//8+b///Xp///47f//9Sk///H - kv7/zJjg/86bg//PnBoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/s - zwL/7tYj/+/Wff/15PX//vr///vz///y3f//58j//922///Xqf//0aH//86b///MmP//zJf//8+c///Y - p///47f//96x1//PnXL/0aAn/9WmAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/+7PNv/25fD//vr///vz///y3f//5sf//921///Wqf//0aH//86b///M - mP//zJf//8+c///Yp///47f//+i+nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+3NTP/25Pr//vv///vy///x3P//5sf//921///W - qf//0aD//86b///MmP//zJf//8+c///YqP//47j//+i+rv/ovgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+zLZP/25P///vv///vy///x - 3P//5sb//921///Wqf//0aD//86b///NmP//zJj//9Cc///YqP//5Lj//+i+wP/ovgoAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+zJf//2 - 5f///vv///vy///x2///5ML//9mu///Sof//zZn//8qU///Jkv//yZP//86a///YqP//5Ln//+i+0P/o - vhMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/+vImf/25f///vv///bn///kwf//1qf//82Z///Hj///won//7+E//+8gP//vH///8CF///M - lP//3q3//+e93v/ovx4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD/4akF/+vHsf/25v//+O3//+zQ///kvf//4LP//92u///YqP//1KL//9Cc///K - lP//xIv//8CE///Bg///yov//9ql6v/ovSsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8d0j//Th0v/78///+ez///Te///uz///6L///+S5///g - tP//3K7//9io///Uov//z5z//8yX///NmP//zpb//9Se9f/hs0UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/nyjn/8eDH//z2/v/9+f//9+r///Hc///t - 0v//6sz//+nL///nyf//5sj//+XG///iwf//3bn//9et///TpP//06H//9al///brMz/37JBAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9qtG//kwsr/8N3///fq///z - 4v//7tf//+zS///qzv//6Mv//+bH///kxP//48P//+PD///kxf//5sn//+jP///p0f//5cn//9+6///d - sP//4bTa/+W6LwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9mrS//l - wvn/8Nv///Da///u1f//7NL//+rO///oyv//5sb//+TB///ivf//4Lr//962///cs///2rD//9qw///d - t///5Mf//+zZ///r0///5b7//+W6fQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/+G6U//u1fz/8t7///Hc///v2P//7dT//+vQ///oy///5sf//+TB///ivv//4Lr//963///c - s///2rD//9is///WqP//1Kb//9mw///p0///8N3//+nHjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA//LbVf/04fz/9OP///Pf///x3P//7tf//+zT///qz///6Mr//+XF///j - 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 - nv9lTU+8RBESCAAAAAAAAAAEAAAAIgAAACsAAAAlAAAAIAAAABoAAAAVAAAAEQAAAAwAAAAHAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9OAK/+3OH//o - vDG2oZCmmYt//4NqW8vrv5M2/9OeGrGOaQsAAAAYAAAAIgAAACEAAAAcAAAAFwAAABIAAAANAAAACQAA - AAYAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/47gX//vs4//vzhP/1 - 47//7s/f/+e+7/zfs/r416r/+dOk/P/Toe3/z5vb/82Zt/fJmH7KqIE8NCwjEgAAAA8AAAAPAAAADAAA - AAkAAAAGAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/58gX//Pkkv/8 - +O3/+/T///Xk///u0P//577//+K2///er///2aj//9Oh///Omv//zZj//9Gd///Wpej+26yL+NquFwAA - AAAAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8+SBP/k - wZf/8d////z4///68v//8+D//+3R///px///5sT//+TB///hvv//3rj//9mw///Upv//06L//9ak///c - rf//4rWg/+i+CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD/2KUP/+K9zP/w3P//9ef///Db///s0v//6cz//+bH///kwv//4r///+C8///fu///37z//+HA///i - w///4b7//9+0///jtur/5rwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP/YphD/5sbN//Da///v1///7dP//+rP///oyv//5cX//+PA///hvP//3rj//9y0///Z - r///16v//9es///duf//6M3//+jE7//mujIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/+3QEP/y3c3/89////Da///t1P//69H//+zS///oyf//37n//9it///V - p///1af//9er///Wqv//1ab//9Ki///Xrf//69Pv/+7TMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9eEP//Xkyv/04///8t3//+/Y///26P//+O3//+vP///c - tP//06P//86a///Ml///0Z///9Wk///Ll///zZr//86b///fvuj/9+8qAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/y1gH/9eN5//Xk+P/z4f//8t7///vz///5 - 7///6s7//9yz///To///zpr//8yX///Rnv//3a7//8iT///DjP//ypb//9qzov///wkAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/z3Qn/8+Bm//Pg0v/z - 4Pv/+/P///nu///qzv//3LP//9Oj///Omv//zJf//9Ge///fsf//0J7//8iT6P/MmY3/1qoYAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD/7tYY//LclP/79P//+e7//+nN///cs///06P//86a///Ml///0Z7//+Cz///dsKT/zZot/9OjBAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD/8tp8//v0///57f//6cz//9uy///To///zpr//8yX///Sn///4LP//+i+dgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/x15f/+/T///nt///py///2rD//9Gh///Nmf//zJf//9Kf///h - tP//6L6LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/2pYE//DUsP/79P//8+H//962///Qnv//x5H//8KJ///A - hv//x47//9up///nvKD//+0BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/ovQ7/8trH//jt///t0f//47j//92u///W - pf//0Jz//8iR///Eif//yo///9mks//32AUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/37kJ//Heev/78/P/+e3///Ha///r - yv//58T//+TA///gu///27P//9Wo///Tof//16Xl/96vT//xzAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/fuFz/7dX4//Tk///v - 2f//69D//+jK///lxf//48H//+K////iwP//48X//+XI///jwv//4bfk/+S4NQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+bEhv/w - 2f//8Nr//+3U///qzv//5sf//+PA///gu///3bX//9qw///YrP//2a///+LE///s1P//6cZiAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD/9N+E//Xj///y3///79n//+zT///pzf//5cX//+G9///et///27H//9is///Upv//0qL//+LE///z - 5WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP/14kX/9eXp//Tk///y3///79n//+vT///ozf//5cX//+G9///dtv//2a///9Wn///R - oP//2K/h//LlMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA//LaAv/z4Uj/8+K6//Lg8f/w3f7/7tn//+vT///ozv//5cb//+C9///a - sf//1afz/9KhvP/TpUX///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/u1g//79hG/+3XhP/s07H/6c3J/+bIz//i - v8v/3bW0/9itiP/Vp0r/0qMRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD//D////wf///8D////AD///wAD//4AAf//AAD//wAB//8AAf//CAD/+AAA/8AAAP+AACP/AAAf/wA - AH/8AAB//AAAf/wAAH/8AAB//gAA//+AAf//wAf//8AH//+AA///gAP//wAB//8AAf//AAH//wAB//8A - Af//AAH//8AH/ygAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAeWJjQDsvLzsAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ6NjZJYSUl4AAAAJwAAAAcAAAADAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFZDQwmfkZK8WkpKmAAAAEQAAAA2AAAAKAAAABsAAAANAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+ZWUHpJWWul5NTZAAAAA3AAAAOQAAAC4AAAAjAAAAFgAA - AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnn+AB5+Rkrp1YGFsAAAABAAAACYAAAAlAAAAGgAA - AA8AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAD//Pgc//jpWv3oxYnUu5zj2bWPvP7NmG++nHVJOzInGwAA - AA8AAAAJAAAAAwAAAAAAAAAAAAAAAAAAAAD/5sY1//fszv/36fz/68r//+O7///csP//06X//9Wl7v3b - rYrZxaAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+fGcP/w3P//7dX//+fJ///iv///3rj//9y0///d - t///477l/+e/JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/z327/8t3///Db///t1P//2rH//9Kh///U - pf//0J///9u05f/u2CUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9eQr//Phvf/36vn/8d7//9is///N - mf//1aT//8uY7//Onon/8uMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/u1BX/+ezA//Hd///Y - q///zZn//9io+v/esWP/tXsEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/57wM//fpxf/s - 0///0qH//8iQ///Uofz/5blTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+/ZNv/2 - 6OT/683//960///Upv//0Z7//9qpgf/1ywIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9KYBP/t - 1Kn/8Nz//+nN///jwf//37n//923///jwej/6ccwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/s - zQP/9OGe//Le///s0///5cX//963///Wqf//2bDm/+zWLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA//TjIv/y4I7/7tnS/+nO6P/hvuL/2Ky6/9KjVv/ixQQAAAAAAAAAAAAAAAAAAAAA/j8AAP4H - AAD8AQAA/AEAAPwBAADwAQAA4AcAAOAHAADgBwAA4AcAAPAPAADwHwAA8A8AAOAPAADgDwAA8A8AAA== - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.Designer.cs b/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.Designer.cs index c4157747a6..9711014bc0 100644 --- a/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.Designer.cs @@ -30,7 +30,6 @@ { this.components = new System.ComponentModel.Container(); System.Windows.Forms.ToolStripMenuItem SearchMenuItem; - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RamSearch)); this.TotalSearchLabel = new System.Windows.Forms.Label(); this.WatchListView = new InputRoll(); this.ListViewContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components); @@ -256,7 +255,7 @@ // this.AddToRamWatchContextMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.FindHS; this.AddToRamWatchContextMenuItem.Name = "AddToRamWatchContextMenuItem"; - this.AddToRamWatchContextMenuItem.ShortcutKeyDisplayString = "Ctrl+R"; + this.AddToRamWatchContextMenuItem.ShortcutKeyDisplayString = "Ctrl+W"; this.AddToRamWatchContextMenuItem.Size = new System.Drawing.Size(217, 22); this.AddToRamWatchContextMenuItem.Text = "Add to RAM Watch"; this.AddToRamWatchContextMenuItem.Click += new System.EventHandler(this.AddToRamWatchMenuItem_Click); @@ -1008,7 +1007,7 @@ // DoSearchToolButton // this.DoSearchToolButton.Enabled = false; - this.DoSearchToolButton.Image = ((System.Drawing.Image)(resources.GetObject("DoSearchToolButton.Image"))); + this.DoSearchToolButton.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.search; this.DoSearchToolButton.ImageTransparentColor = System.Drawing.Color.Magenta; this.DoSearchToolButton.Name = "DoSearchToolButton"; this.DoSearchToolButton.Size = new System.Drawing.Size(65, 22); @@ -1048,7 +1047,7 @@ // ClearChangeCountsToolBarItem // this.ClearChangeCountsToolBarItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; - this.ClearChangeCountsToolBarItem.Image = ((System.Drawing.Image)(resources.GetObject("ClearChangeCountsToolBarItem.Image"))); + this.ClearChangeCountsToolBarItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.placeholder_bitmap; this.ClearChangeCountsToolBarItem.ImageTransparentColor = System.Drawing.Color.Magenta; this.ClearChangeCountsToolBarItem.Name = "ClearChangeCountsToolBarItem"; this.ClearChangeCountsToolBarItem.Size = new System.Drawing.Size(23, 22); @@ -1354,7 +1353,7 @@ this.Controls.Add(this.WatchListView); this.Controls.Add(this.TotalSearchLabel); this.Controls.Add(this.RamSearchMenu); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.search_MultiSize; this.MainMenuStrip = this.RamSearchMenu; this.MinimumSize = new System.Drawing.Size(290, 399); this.Name = "RamSearch"; diff --git a/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.cs b/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.cs index 6d455a25a9..c33812e9be 100644 --- a/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.cs +++ b/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.cs @@ -296,7 +296,7 @@ namespace BizHawk.Client.EmuHawk } _forcePreviewClear = false; - WatchListView.Invalidate(); + WatchListView.RowCount = _searches.Count; } } @@ -832,8 +832,8 @@ namespace BizHawk.Client.EmuHawk SetRemovedMessage(indices.Count); _searches.RemoveRange(indices); - UpdateList(); WatchListView.DeselectAll(); + UpdateList(); ToggleSearchDependentToolBarItems(); } } diff --git a/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.resx b/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.resx index 99f4bc1a57..db23b6f695 100644 --- a/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.resx +++ b/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.resx @@ -132,539 +132,4 @@ 428, 17 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAI3SURBVDhPlZLRS9NRHMW3hwgKBxXRH1BR0UMvPfoQVBAJ - PbiXWETgQw/2MJopjdksa7RyuNQIIlC2alu2dJrQFslklmvQXOthtqlskjORam5jma46nfv7JbathA58 - Xu4953u/33uvYj0ZDG6d5WFwpt01jm5vCl2OcK7pkrOTW9vJBsn0L7V3+G3T6Szmi0D4G/DiCzCWBx5E - Cjiv743RsodslMzlslpH6gKJDIQWlgD/J8CdBDwfgOFFwPUuj5oa7TNaRZFK3XNGR8NfgYkc4GPInwUC - BSC4DLxkwTHuXbg5lKf1lJwoldLhTyPEgG+OrbORMDuZIJPkPYl+B7rcb0BvqxwplfL+sFygd1o+OcZQ - mnASfCRxcndQKiAutELKW92vQwG2PTDLdtm2OFmEeZ/gBEgQk7V/id6/F2hutl9xhDIY4R2ImUXb84SP - ISnxOY/q6tOT9FaOUOw73vq03/nc3PYYjyJZvOII0R9yF1MklSlA29C2QKuNaKTQqlaeHLP/9KoRsZyE - Xqeb0Wga45ctvsIdzzj6gin09Lwt1qq1U7TaST3ZLXKSVlxHpXDs6hE49XqcqzcnudxBLpJrRMx7m5iI - eD4Rlj+SaBs+NeKmw1K4pcWRq6ra5ubWWbKf7CR7yT6yi6x95WXPiTp4a0vCKtXWQW7pyQEiTlGWsaah - zjOjSfMhuJoa/gwbyEGyiZQGymU0Gr03GkXYtqhSbRng0mp4M1k//Fs7iLiU60RH/iOsUPwCTRuEcdPL - 7RYAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== - - - - - AAABAAwAMDAQAAAAAABoBgAAxgAAACAgEAAAAAAA6AIAAC4HAAAYGBAAAAAAAOgBAAAWCgAAEBAQAAAA - AAAoAQAA/gsAADAwAAABAAgAqA4AACYNAAAgIAAAAQAIAKgIAADOGwAAGBgAAAEACADIBgAAdiQAABAQ - AAABAAgAaAUAAD4rAAAwMAAAAQAgAKglAACmMAAAICAAAAEAIACoEAAATlYAABgYAAABACAAiAkAAPZm - AAAQEAAAAQAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAAAAAAAP//AP8AAAD/AP8A//8AAP// - /wAREREREREREREREREREREREREREREREREREQAAAREREREREREREREREREREREREREREHeEQBERERER - ERERERERERERERERERERB3hMhAERERERERERERERERERERERERERB4RMyEARERERERERERERERERERER - ERERCEREzIQBERERERERERERERERERERERERBGZETMhAERERERERERERERERERERERERTuZkRMyEARER - ERERERERERERERERERERTO5mREzIQBERERERERERERERERERERERFM7mZETMhAERERERERERERERERER - EREREUzuZkRMyEARERERERERERERERERERERERTO5mREzIQBERERERERERERERERERERERFM7mZETMhA - EREREREREREREREREREREREUzuZkRMyEARERERERERERERERERERERERTO5mREzIARERERERERERERER - ERERERERFM7mZETMAREREREREREREREREREREREREUzuZkRMAREREQAAAAARERERERERERERERTO5mRE - QBEQAGZmZmYAARERERERERERERFM7mZEdwEGZujo6OhmYBEREREREREREREUzu5IhwBujo6Ojo6OhgAR - ERERERERERERRET/h2jo6Ojo6Ojo6GYBERERERERERERERF/do6Oju7u7u6OjohgEREREREREREREREX - 6Oju7u7u7u7o6OhgEREREREREREREREXjo7u7u7u7u7ujo6GARERERERERERERF46O7u7u7u7u7u6Ojo - YBERERERERERERF+jo7u7u7u7u7u7o6IYBERERERERERERF46O7u7u7u7u7u7ujoYBEREREREREREReO - ju7u7u7u7u7u7u6OhgERERERERERERfo7u7u/u7u7u7u7ujo5gEREREREREREReOju7+7u7v7u7u7u6O - hgERERERERERERfo7u7v7+/u7u7u7u7o5gEREREREREREReO7v7u7u7v7+7u7u6OhgERERERERERERfo - 7u7+/v7u7u7u7u7o5gEREREREREREReO7u/v7+/v7v7+/u6OhgERERERERERERfo7v7+/v7+/u7u7v7o - 5gERERERERERERF+j+/v7+/v7+7+7+6OgBERERERERERERF47v7+//7+/v7u7u7oYBERERERERERERF4 - 7+/v////7+/u/u6OYBEREREREREREREXjv7+///+/v7+7ujmARERERERERERERERf+/v////7+/u7o6A - ERERERERERERERERfv7+///+/v7+6OhgERERERERERERERERF+/v7+/v7+/ujo4BERERERERERERERER - EXeO/v7+/o7u6HARERERERERERERERERERF4iOjo6OjohxEREREREREREREREREREREXd46Ojoh3cRER - EREREREREREREREREREREXd3d3cRERERERERERERERERERERERERERERERERERERERERERERERERERER - ERERERERERERERERERH///////8AAPB//////wAA4D//////AADAH/////8AAMAP/////wAAwAf///// - AADAA/////8AAMAB/////wAAwAD/////AADgAH////8AAPAAP////wAA+AAf////AAD8AA////8AAP4A - B////wAA/wAH////AAD/gAf///8AAP/AB/AP/wAA/+ADgAH/AAD/8AEAAP8AAP/4AAAAPwAA//wAAAAf - AAD//8AAAA8AAP//4AAADwAA///gAAAHAAD//8AAAAMAAP//wAAAAwAA///AAAADAAD//4AAAAEAAP// - gAAAAQAA//+AAAABAAD//4AAAAEAAP//gAAAAQAA//+AAAABAAD//4AAAAEAAP//gAAAAQAA///AAAAD - AAD//8AAAAMAAP//wAAAAwAA///gAAAHAAD///AAAA8AAP//8AAADwAA///4AAAfAAD///wAAD8AAP// - /wAA/wAA////gAH/AAD////wD/8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAAA - AAAA//8A/wAAAP8A/wD//wAA////ABEQABERERERERERERERERERB3gBEREREREREREREREREHZMgBER - ERERERERERERERRmZMgBEREREREREREREREU7mZMgBERERERERERERERFM7mZMgBERERERERERERERFM - 7mZMgBERERERERERERERFM7mZMgBERERERERERERERFM7mZMgBERERERERERERERFM7mZMARERERERER - ERERERFM7mZMAREAAAABERERERERFM7mZHAAZmZmYAERERERERFM7khwZo6OjoZgERERERERFET3Bujo - 6OjohgERERERERERcI6Oju7ujo5gEREREREREXjo7u7u7ujo5gERERERERF+ju7u7u7ujoYBEREREREX - 6O7u/v7u7ujoYBERERERF47u7u7u7u7uiGARERERERfu7+/v7v7u6OhgEREREREXju7u7u7u7u6IYBER - ERERF+7+/v7+/v7u6GAREREREReP7+/v7+/u7uhgEREREREXjv7+//7+/v7oYBEREREREX/v7////+7u - 5gERERERERF+/v7///7+/oYBERERERERF+/v////7u5gERERERERERF+/v///v7mARERERERERERF+/v - 7+/uhxERERERERERERF3/v7+93EREREREREREREREXd3d3ERERERERERERERERERERERERER4////8H/ - //+A////gH///4A///+AH///wA///+AH///wA///+AP///wBwH/+AAAf/wAAD/+AAAf/8AAD//AAAf/w - AAH/4AAA/+AAAP/gAAD/4AAA/+AAAP/gAAD/4AAA//AAAf/wAAH/+AAD//wAB//+AA///wAf///Af/// - //8oAAAAGAAAADAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAAAAAAA//8A/wAAAP8A/wD//wAA////ABEAARERERERERERERDI - QBEREREREREREQDMhAEREREREREREU5syEAREREREREREUjmzIQBERERERERERSObMhAERERERERERFI - 5syEAREREREREREUjmzIARERERERERERSObHARAAAAERERERFI54cAZmZmABEREREUR/eOjo6OZgERER - EREXjo6Ojo6GAREREREX6O7u7ujmARERERF+ju7u7u6OYBERERF47u7+7u7oYBERERF+7+7u7u7uYBER - ERF+/u/v7+7+YBERERF+7v7+/v7uYBERERF+7+//7+7+YBEREREX/v///v7uAREREREX7+//7+7oARER - ERERfv7+/v6HERERERERF3/v7+dxERERERERERd3d3EREcf//xGD///uAf//7gD//2AAf/8RgD//78Af - //7gH/9g8BgfEfgAB+78AAPu/4ABYP+AARH/AAD+/wAA/v8AAGD/AAAR/wAA7/8AAO//gAFg/4ABEf/A - A/7/4Af+//gfYCgAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAAAAAAD//wD/AAAA/wD/AP//AAD///8AEAARERER - EREMhAEREREREUbIQBERERERTmyEAREREREU5shAERERERFObHcAAAERERTkgI7ugBEREUcO7u7oARER - F47u7u6AEREX7u/u7uARERfu7u/u4BERF+7+/v7gEREXju//7oARERF+/v7+AREREReP74cREREREXd3 - cRGP/2ARB/8REQP/jo4B/4YBgP8REcAH7u7gA+YB8AEREfgA7u74AI5g+AAREfgA7v74AOhg/AEREf4D - 7u7/B+5gKAAAADAAAABgAAAAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AeHWZAIOA - owB/eqUAbGZuANaY2gCgh6AAg0B5AKNXjwDXjrIAY2FiAIpTbQC0cpAAn2V9AKNrfQC5fIwAyIubAMCU - mwCog4cAnWltAJlmZgCdamoAoW5uAKVycgCba2sAo3FxAKl2dgCfb28ApnZ2ALSBgQCCXV0AtoODALiF - hQC1g4MAeFdXAJ5zcwCAXV0Ag2BgAMGOjgCyg4MAx5SUAMaTkwDLmJgAyZaWALCHhwC1kpIAYU9PAMek - pAB1YWEAbFxcAKakpAB0c3MAtrW1ALF/fgC+i4oAp3VyAKNybwCtfHkAvImGAK+AewCqfHcAu4+KAMma - lADMnpcAu5KKANGkmgDCkYMAto2AANSkkwDEmIUAw5uKANW0pADer5EAyqWOANqzmwDhu6MA0KyTAMin - kQDnt5UA8b+WAOrDoADjybEA/86bAP/RngD/0qAA+NGlAODEpgD/1KEA/9WiAP/WowD706MA/9ipAP/Z - qgD306cA9dKpAOvNqADXwagA/9ekAP/ZpgD51aUA/9qrAP/dsAD/26gA/9ypAP/dqgD/3awA/+G1AP/e - qwD/36wA/+CtAP/jtwD/5b0A/+GuAP/irwD/47AA/+S2AP/luADu1q4A/+i+AP/ksQD/5bIA/+azAP/q - wgD/8dYA/+e0AP/otQD/6LcA/+m6AP/uygD/8NEA/+q3AP/ruAD/67oA++i4AP/svQD/7L8A/+7DAPTk - vAD/7sYA7ODDAP/suQD/7boA/+6/AP/yzQD99uIA/+67AP/vvAD/8cQA//LKAP/wvQD/8b4A//XUAP/6 - 6AD//fYA//K/AP/zwAD/9McA//fYAP/99QD/9MEA//bNAP/30QD/+NkA//neAPr36QD/9cIA//bDAPnx - xQD38MoA//jTAPTuzQD/+MUA8+3EAP/97wD//fAA//nGAP/6xwD/+8gA//vTAP/81QD//MkA//zQAP/8 - 0gD//dcA//3aAP/9ygD//cwA//7LAP//zAD//88A///RAP//0wD//9UA///WAP//2QD//9sA///cAP// - 3wD//+EA///iAP//5QD//+YA///pAP//6gD//+0A///uAP//8AD///MA///0AP//9wD///gA///6AP// - /QAAAAAAYcf/AFG3/wBVu/8AWaziAG/C+QBluPQAQqj/AE+b6QC7wccANpT2AECM2wBkaG0AZ2twAEB9 - 0gBkZmoAlZaYAElqtQBOaqcAUm2qAF9tqgCClP8Aipz9AIuLiwCEhIQAe3t7AGtrawBeXl4AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADW1tbW1tbW1tbW - 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbWBQUFBQXW1tbW1tbW1tbW1tbW - 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tYF7fALEzEF1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW - 1tbW1tbW1tbW1tbW1tbW1gU08OUCBxIxBdbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW - 1tbW1ubu4ujqBAcSBQXW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1u3j4eTn6gQH - EjEF1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1uPa3eDk5+oEBxIxBdbW1tbW1tbW - 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tzX2d3g5OfqBAcSMQXW1tbW1tbW1tbW1tbW1tbW1tbW - 1tbW1tbW1tbW1tbW1tbW1uvY19nd4OTn6gQHEjEF1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW - 1tbW1tbr2NfZ3eDk5+oEBxIxBdbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW69jX2d3g - 5OfqBAcSMQXW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1uvY19nd4OTn6gQHEjEF1tbW - 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbr2NfZ3eDk5+oEBxIxBdbW1tbW1tbW1tbW1tbW - 1tbW1tbW1tbW1tbW1tbW1tbW1tbW69jX2d3g5OfqBAcSMQXW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW - 1tbW1tbW1tbW1uvY19nd4OTn6gQHEjHW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbr - 2NfZ3eDk5+oEBxPW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW69jX2d3g5OfqAzTW - 1tbW1tYFBQUFBQUFBQUF1tbW1tbW1tbW1tbW1tbW1tbW1tbW1uvY19nd4OTp4/AF1tbWBQUZFhUaIior - KRMFBQXW1tbW1tbW1tbW1tbW1tbW1tbW1tbr2NfZ3d7mNO3xMzIFGzxKV3acsqiKUkI3KAUFBdbW1tbW - 1tbW1tbW1tbW1tbW1tbW69jX29/m7+0zLjZDUXiDk6e6vb7AwMCpSCAkBQXW1tbW1tbW1tbW1tbW1tbW - 1tbW1uvsBgY1NTQtHklocYCht8DCwsPCxcXEw4w+HQUF1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbWNS07 - UGJyqr+6vb3Aw8TGxsTFzM2RQRoFBdbW1tbW1tbW1tbW1tbW1tbW1tbW1tbWMCdQVXe3spewvb/CxMfI - ysrRAQEBpT4cBQXW1tbW1tbW1tbW1tbW1tbW1tbW1tbWJ09Tdb+ghJe8vsDExsnLzc0BAQEBAas9JgXW - 1tbW1tbW1tbW1tbW1tbW1tbW1tYRRVRmwKB6jaa9v8PFyMvNz9EBAQEBAcRhFwUF1tbW1tbW1tbW1tbW - 1tbW1tbW1tYqVli0sHJ5kqe9wMPGyczP0tPVAQEBz8XCPCUF1tbW1tbW1tbW1tbW1tbW1tbW1gpCZ3u7 - g215kqe9wMPGyszP09XV1NPPxMXCYRYFBdbW1tbW1tbW1tbW1tbW1tbW1ixRZ7Snbmx5kqe9wMPGyczP - 0tPT0c7LyMPCrRYvBdbW1tbW1tbW1tbW1tbW1tbW1ixfdb+WWml5jaa9v8PGyMvNz9DQz8zKyMLCvj0j - BdbW1tbW1tbW1tbW1tbW1tbWPyxzi7V9WWl4hJe8vsHEx8nLzc3NzMvIxsLCvUQfBdbW1tbW1tbW1tbW - 1tbW1tbWPyx4kLF4VWdyfZOxvcDDxcjIysrKycjGxMDCvE4fBdbW1tbW1tbW1tbW1tbW1tbWPyx5qrBy - VGNseY2cvL7Aw8TGyMjIx8bEwr/CrE0fBdbW1tbW1tbW1tbW1tbW1tbWPyx6orF5U1ltg5KTp72+wMLD - xMTExMPBv72zl0cfBdbW1tbW1tbW1tbW1tbW1tbWPyyDlbWNVXuVf4SWp6y8vr/AwMHBwMC+vbudjkQf - BdbW1tbW1tbW1tbW1tbW1tbW1ix2ib+TnnBaaGp5hKygtb29vr6+vr28sL+PfTkMBdbW1tbW1tbW1tbW - 1tbW1tbW1ixMhcO0pGtrZl1qeYOgk6CssrWysqebp7Z6YBYI1tbW1tbW1tbW1tbW1tbW1tbW1j9AjqLK - mIKRgW9lanOXfo2SkpOTko6Tu4lxRhUN1tbW1tbW1tbW1tbW1tbW1tbW1tYqYI+vnwEBAXxvXGmXc3l5 - fX19fXqws2xkOAzW1tbW1tbW1tbW1tbW1tbW1tbW1tY/P4aZAQEBAZp3XWOUaWxucXFxeKe/dGJDFA3W - 1tbW1tbW1tbW1tbW1tbW1tbW1tbWJ0ujAQEBAZ97XItmWWJjY2l+rL91WEkYCdbW1tbW1tbW1tbW1tbW - 1tbW1tbW1tbWPzdX0wEBAaSHmJBVWFpoeZy6tmtTUDoO1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1j8h - SK7V1dDNuaCbm6awur+QXFNPNg/W1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tY/HkeKlYGiuMLCwsKz - lW9jW0U2DdbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbWPxA6SnaNfXmIgG5taV5LNyAN1tbW1tbW - 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tY/EBg6R0pNS0xMQic3DdbW1tbW1tbW1tbW1tbW1tbW1tbW - 1tbW1tbW1tbW1tbW1tbW1tY/IhUaIioKCgrW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW - 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW - 1tbW1tbW1tbW1tbW1tb///////8AAPB//////wAA4D//////AADAH/////8AAMAP/////wAAwAf///// - AADAA/////8AAMAB/////wAAwAD/////AADgAH////8AAPAAP////wAA+AAf////AAD8AA////8AAP4A - B////wAA/wAH////AAD/gAf///8AAP/AB+AH/wAA/+ADgAH/AAD/8AAAAH8AAP/4AAAAPwAA//wAAAAf - AAD//+AAAA8AAP//4AAABwAA///gAAAHAAD//8AAAAMAAP//wAAAAwAA//+AAAABAAD//4AAAAEAAP// - gAAAAQAA//8AAAABAAD//wAAAAEAAP//AAAAAQAA//8AAAABAAD//wAAAAEAAP//gAAAAQAA//+AAAAD - AAD//4AAAAMAAP//wAAABwAA///AAAAHAAD//+AAAA8AAP//4AAAHwAA///wAAA/AAD///gAAH8AAP// - /AAA/wAA////AAP/AAD////gD/8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wB4dZkAg4CjAH96pQBsZm4A1pjaAKCHoACDQHkAo1ePANeO - sgBjYWIAilNtALRykACfZX0Ao2t9ALl8jADIi5sAwJSbAKiDhwCdaW0AmWZmAJ1qagChbm4ApXJyAJtr - awCjcXEAqXZ2AJ9vbwCmdnYAtIGBAIJdXQC2g4MAuIWFALWDgwB4V1cAnnNzAIBdXQCDYGAAwY6OALKD - gwDHlJQAxpOTAMuYmADJlpYAsIeHALWSkgBhT08Ax6SkAHVhYQBsXFwApqSkAHRzcwC2tbUAsX9+AL6L - igCndXIAo3JvAK18eQC8iYYAr4B7AKp8dwC7j4oAyZqUAMyelwC7kooA0aSaAMKRgwC2jYAA1KSTAMSY - hQDDm4oA1bSkAN6vkQDKpY4A2rObAOG7owDQrJMAyKeRAOe3lQDxv5YA6sOgAOPJsQD/zpsA/9GeAP/S - oAD40aUA4MSmAP/UoQD/1aIA/9ajAPvTowD/2KkA/9mqAPfTpwD10qkA682oANfBqAD/16QA/9mmAPnV - pQD/2qsA/92wAP/bqAD/3KkA/92qAP/drAD/4bUA/96rAP/frAD/4K0A/+O3AP/lvQD/4a4A/+KvAP/j - sAD/5LYA/+W4AO7WrgD/6L4A/+SxAP/lsgD/5rMA/+rCAP/x1gD/57QA/+i1AP/otwD/6boA/+7KAP/w - 0QD/6rcA/+u4AP/rugD76LgA/+y9AP/svwD/7sMA9OS8AP/uxgDs4MMA/+y5AP/tugD/7r8A//LNAP32 - 4gD/7rsA/++8AP/xxAD/8soA//C9AP/xvgD/9dQA//roAP/99gD/8r8A//PAAP/0xwD/99gA//31AP/0 - wQD/9s0A//fRAP/42QD/+d4A+vfpAP/1wgD/9sMA+fHFAPfwygD/+NMA9O7NAP/4xQDz7cQA//3vAP/9 - 8AD/+cYA//rHAP/7yAD/+9MA//zVAP/8yQD//NAA//zSAP/91wD//doA//3KAP/9zAD//ssA///MAP// - zwD//9EA///TAP//1QD//9YA///ZAP//2wD//9wA///fAP//4QD//+IA///lAP//5gD//+kA///qAP// - 7QD//+4A///wAP//8wD///QA///3AP//+AD///oA///9AAAAAABhx/8AUbf/AFW7/wBZrOIAb8L5AGW4 - 9ABCqP8AT5vpALvBxwA2lPYAQIzbAGRobQBna3AAQH3SAGRmagCVlpgASWq1AE5qpwBSbaoAX22qAIKU - /wCKnP0Ai4uLAISEhAB7e3sAa2trAF5eXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAANbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tYiBQXW - 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW7wUQEAXW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1u3j - 6gMSEAXW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbWNODn6gMSEAXW1tbW1tbW1tbW1tbW1tbW1tbW1tbW - 1tbc3eDn6gMSEAXW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tzZ2ODn6gMSEAXW1tbW1tbW1tbW1tbW1tbW - 1tbW1tbW1tzZ3eDk6gMSEAXW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tzZ2ODn6gMSEAXW1tbW1tbW1tbW - 1tbW1tbW1tbW1tbW1tzZ3eDk6gMSEAXW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tzX3eDn6gMSENbW1tbW - 1tbW1tbW1tbW1tbW1tbW1tbW1tzZ2ODk6gMN1tYFBQUFBQUFBQXW1tbW1tbW1tbW1tbW1tzZ3eDn4wIF - BSpEREQ6KisNFQwF1tbW1tbW1tbW1tbW1tzX3ezuBzMPHktgl7G7oYxIHhQF1tbW1tbW1tbW1tbW1tjc - BjXvIkVsh6G3wMLCw8OrQQ4F1tbW1tbW1tbW1tbW1tbWNTtPZZW7ur7CxcbGy9KlPw4F1tbW1tbW1tbW - 1tbW1tYuT122m5e7wMTIy80BAQGlRAwF1tbW1tbW1tbW1tbW1kVYoZd+pr7CxsrO0QEBAc6MFAXW1tbW - 1tbW1tbW1tYKUXencoOnvsPGzNDU1dXTxcI+FAXW1tbW1tbW1tbW1itntn1tg6e+w8bLz9PTz8vEw2EM - BdbW1tbW1tbW1tZCQnWyaWx+nL3CxsnMzs7MycXBihQF1tbW1tbW1tbW1ktMibBaZ3iSur/DxsnKysnG - w7+yFQXW1tbW1tbW1tbWQleVsFliboOgu8DDxcbGxcO/vZwVBdbW1tbW1tbW1tZLQoixanuJg6axu77A - wcHAvr2hYBUF1tbW1tbW1tbW1tZAhbajb2ZleJugsbq9vbqwspRLDtbW1tbW1tbW1tbW1kt2oZmCfHBl - c5yElpaWk5a2c0QM1tbW1tbW1tbW1tbW1kKU1QEBmWtjj3J4eXl9sn9RFNbW1tbW1tbW1tbW1tbWEUya - AQGucHBmYmNofrGJUzwM1tbW1tbW1tbW1tbW1tbWEYwBAa6eqm1pfqa2dVNDPNbW1tbW1tbW1tbW1tbW - 1tbWEEienrS3tra2lGxRQzzW1tbW1tbW1tbW1tbW1tbW1tbWESJLdn54cmZRRRDW1tbW1tbW1tbW1tbW - 1tbW1tbW1tbW1hE6FToqKwrW1tbW1tbW1tb/////x////4P///8B////AP///wB///8AP///gB///8AP - ///gB///8Af///gGAP/8AAA//gAAH/8AAA//4AAH/+AAA//gAAP/wAAB/8AAAf+AAAH/gAAB/4AAAf+A - AAH/wAAD/8AAA//gAAf/4AAH//AAD//4AB///AB///8B/ygAAAAYAAAAMAAAAAEACAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AHh1mQCDgKMAf3qlAGxmbgDWmNoAoIegAINAeQCjV48A146yAGNh - YgCKU20AtHKQAJ9lfQCja30AuXyMAMiLmwDAlJsAqIOHAJ1pbQCZZmYAnWpqAKFubgClcnIAm2trAKNx - cQCpdnYAn29vAKZ2dgC0gYEAgl1dALaDgwC4hYUAtYODAHhXVwCec3MAgF1dAINgYADBjo4AsoODAMeU - lADGk5MAy5iYAMmWlgCwh4cAtZKSAGFPTwDHpKQAdWFhAGxcXACmpKQAdHNzALa1tQCxf34AvouKAKd1 - cgCjcm8ArXx5ALyJhgCvgHsAqnx3ALuPigDJmpQAzJ6XALuSigDRpJoAwpGDALaNgADUpJMAxJiFAMOb - igDVtKQA3q+RAMqljgDas5sA4bujANCskwDIp5EA57eVAPG/lgDqw6AA48mxAP/OmwD/0Z4A/9KgAPjR - pQDgxKYA/9ShAP/VogD/1qMA+9OjAP/YqQD/2aoA99OnAPXSqQDrzagA18GoAP/XpAD/2aYA+dWlAP/a - qwD/3bAA/9uoAP/cqQD/3aoA/92sAP/htQD/3qsA/9+sAP/grQD/47cA/+W9AP/hrgD/4q8A/+OwAP/k - tgD/5bgA7tauAP/ovgD/5LEA/+WyAP/mswD/6sIA//HWAP/ntAD/6LUA/+i3AP/pugD/7soA//DRAP/q - twD/67gA/+u6APvouAD/7L0A/+y/AP/uwwD05LwA/+7GAOzgwwD/7LkA/+26AP/uvwD/8s0A/fbiAP/u - uwD/77wA//HEAP/yygD/8L0A//G+AP/11AD/+ugA//32AP/yvwD/88AA//THAP/32AD//fUA//TBAP/2 - zQD/99EA//jZAP/53gD69+kA//XCAP/2wwD58cUA9/DKAP/40wD07s0A//jFAPPtxAD//e8A//3wAP/5 - xgD/+scA//vIAP/70wD//NUA//zJAP/80AD//NIA//3XAP/92gD//coA//3MAP/+ywD//8wA///PAP// - 0QD//9MA///VAP//1gD//9kA///bAP//3AD//98A///hAP//4gD//+UA///mAP//6QD//+oA///tAP// - 7gD///AA///zAP//9AD///cA///4AP//+gD///0AAAAAAGHH/wBRt/8AVbv/AFms4gBvwvkAZbj0AEKo - /wBPm+kAu8HHADaU9gBAjNsAZGhtAGdrcABAfdIAZGZqAJWWmABJarUATmqnAFJtqgBfbaoAgpT/AIqc - /QCLi4sAhISEAHt7ewBra2sAXl5eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW - 1tbW1tbW1vDxBdbW1tbW1tbW1tbW1tbW1tbW1tbW7ujo7gXW1tbW1tbW1tbW1tbW1tbW1tbW6eDk6O0F - 1tbW1tbW1tbW1tbW1tbW1tbW3Nng5OjtBdbW1tbW1tbW1tbW1tbW1tbW1tzY3eTo7QXW1tbW1tbW1tbW - 1tbW1tbW1tbc2d3k6O4F1tbW1tbW1tbW1tbW1tbW1tbW3Nng5OjtBdbW8AUFBQXW1tbW1tbW1tbW1tzZ - 4OTo8TQFLy8vLy8FBdbW1tbW1tbW1tbc2N0C7u08S3awrXYwLwXW1tbW1tbW1tbW3NzmPUl4nbvCw8PG - jBkF1tbW1tbW1tbW1tYzSXSxp7/EycvVAYwyBdbW1tbW1tbW1tZKZqyDscHHzdEBActHL9bW1tbW1tbW - 1khRsHh+tcLIztTU0cOpLwXW1tbW1tbW1u1+pml+scDGzM/Py8PAJgXW1tbW1tbW1u2OnFp5nL7Dx8rJ - xsG8RAXW1tbW1tbW1u2HoGqJoLW+wsPDwb6mPQXW1tbW1tbW1jB2u5hsbpestbu7srt+MgXW1tbW1tbW - 1tZLva6ud2ygjY6Ol51JL9bW1tbW1tbW1tbtigEBfHR/aW1+slskBdbW1tbW1tbW1tbWR54Bmap6fqCU - WzwF1tbW1tbW1tbW1tbW1u1PipyPh3RPRAXW1tbW1tbW1tbW1tbW1tZCRERERERC1tbW1tbW////1v// - /9aP//9RB///gwP//8YB///VgP//wsB//9bgMH/W8AAf1vgAD2f8AAeD/wADxv8AA9P+AAHD/gAB1v4A - Adb+AAHW/gABdf8AA37/AAPG/4AHzv/AD8H/4D/WKAAAABAAAAAgAAAAAQAIAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AeHWZAIOAowB/eqUAbGZuANaY2gCgh6AAg0B5AKNXjwDXjrIAY2FiAIpT - bQC0cpAAn2V9AKNrfQC5fIwAyIubAMCUmwCog4cAnWltAJlmZgCdamoAoW5uAKVycgCba2sAo3FxAKl2 - dgCfb28ApnZ2ALSBgQCCXV0AtoODALiFhQC1g4MAeFdXAJ5zcwCAXV0Ag2BgAMGOjgCyg4MAx5SUAMaT - kwDLmJgAyZaWALCHhwC1kpIAYU9PAMekpAB1YWEAbFxcAKakpAB0c3MAtrW1ALF/fgC+i4oAp3VyAKNy - bwCtfHkAvImGAK+AewCqfHcAu4+KAMmalADMnpcAu5KKANGkmgDCkYMAto2AANSkkwDEmIUAw5uKANW0 - pADer5EAyqWOANqzmwDhu6MA0KyTAMinkQDnt5UA8b+WAOrDoADjybEA/86bAP/RngD/0qAA+NGlAODE - pgD/1KEA/9WiAP/WowD706MA/9ipAP/ZqgD306cA9dKpAOvNqADXwagA/9ekAP/ZpgD51aUA/9qrAP/d - sAD/26gA/9ypAP/dqgD/3awA/+G1AP/eqwD/36wA/+CtAP/jtwD/5b0A/+GuAP/irwD/47AA/+S2AP/l - uADu1q4A/+i+AP/ksQD/5bIA/+azAP/qwgD/8dYA/+e0AP/otQD/6LcA/+m6AP/uygD/8NEA/+q3AP/r - uAD/67oA++i4AP/svQD/7L8A/+7DAPTkvAD/7sYA7ODDAP/suQD/7boA/+6/AP/yzQD99uIA/+67AP/v - vAD/8cQA//LKAP/wvQD/8b4A//XUAP/66AD//fYA//K/AP/zwAD/9McA//fYAP/99QD/9MEA//bNAP/3 - 0QD/+NkA//neAPr36QD/9cIA//bDAPnxxQD38MoA//jTAPTuzQD/+MUA8+3EAP/97wD//fAA//nGAP/6 - xwD/+8gA//vTAP/81QD//MkA//zQAP/80gD//dcA//3aAP/9ygD//cwA//7LAP//zAD//88A///RAP// - 0wD//9UA///WAP//2QD//9sA///cAP//3wD//+EA///iAP//5QD//+YA///pAP//6gD//+0A///uAP// - 8AD///MA///0AP//9wD///gA///6AP///QAAAAAAYcf/AFG3/wBVu/8AWaziAG/C+QBluPQAQqj/AE+b - 6QC7wccANpT2AECM2wBkaG0AZ2twAEB90gBkZmoAlZaYAElqtQBOaqcAUm2qAF9tqgCClP8Aipz9AIuL - iwCEhIQAe3t7AGtrawBeXl4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADWL/Ht1tbW1tbW1tbW1tbWLwIT8e3W1tbW1tbW1tbW1tzhBBPx7dbW1tbW1tbW - 1tbr2OEEE/Ht1tbW1tbW1tbW1uvY4QQt8e3W1tbW1tbW1tbW69nkBBMFBQUFBe3W1tbW1tbr2OHt70ZN - Ukg0BdbW1tbW1uvrLV+dtsTFkRMF1tbW1tbWTWCbp8PL0wGrMe3W1tbW1kiUeLDEzdTSxEcF1tbW1tZN - oWmmwsnNysNNBdbW1tbWSJ11k73CxMO2TQXW1tbW1kihfG+XprCnrETt1tbW1tZLjAGZiG1zll8k1tbW - 1tbW1kirmaGSnVZB1tbW1tbW1tbWSEhKTEvt1tbWj/8vBQf/1tYD/9bWAf/c3ID/SXjAB8LD4AOMGfAB - 1tb4ANbW+ADW1vgAdLH4AMTJ+AABjPgB1tb8A9bW/gfW1igAAAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAkAAAAXAAAAHQAAAB0AAAAgAAAAHgAA - ABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAADQAAABjAAAAdAAA - AHQAAAB8AAAAdgAAAE4AAAAbAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMzQHBw - cMyGhobpX19f4lxaW/Glf4XxXkdHzwAAAJcAAABWAAAAHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAHb29v5nV1df9sbGz/ZGZq/3h1mf+gh6D/wJSb/11GRtMAAACYAAAAVgAAABwAAAAEAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAB7e3tFk5OT/4SEhP9kaG3/Tmqn/19tqv9/eqX/oIeg/8CUm/9dRkbTAAAAmAAA - AFYAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDg4MkjIyM/2RqcP9AjNv/QH3S/0lqtf9fbar/f3ql/6CH - oP/AlJv/XUZG0wAAAJgAAABWAAAAHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdXV0jZmxw/1ms4v9CqP//NpT2/0B9 - 0v9JarX/X22q/396pf+gh6D/wJSb/11GRtMAAACYAAAAVgAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtiOMSUa3w42HH - //9Vu///Qqj//zaU9v9AfdL/SWq1/19tqv9/eqX/oIeg/8CUm/9dRkbTAAAAmAAAAFYAAAAcAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAwkPARP6X90VG3//9hx///Vbv//0Ko//82lPb/QH3S/0lqtf9fbar/f3ql/6CHoP/AlJv/XUZG0wAA - AJgAAABWAAAAHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - //9CqP//T5vp/5GVmv9xcXH/hYWF8zs7O8empqbpVkJCy51vb/Wpdnb/sIB6/8qijP/gxKH/7NWs///z - wP//+8j/+fHF//Llv//jybH/zaSc/76Li/+xgYH7ak1N3AAAAKUAAAB7AAAAQAAAABIAAAACAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCQ - 8BE/pf3RUbf//2HH//9vwvn/u8HH/5ubm/97e3v/iIiI/6OgoP+1kpL/sX5+/8KShf/qw53//+Sx///q - t///77z///bD///9yv///8z////Q////0////9P////T//fwyv/UtKP/toOD/5dsbPMsHx/AAAAAiQAA - AEQAAAASAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAwkPARP6X90U6x+NWvtrrJsLCwyLa2tv+4uLj/d3R0/6+Ghv+0gYH/3a6S///c - qf//4a7//+m6///3zf///NL///7T////1v///9f////Y////1////9z////c////2////9r/7ODD/7uP - iv+ldHT7Kh0dwgAAAIsAAABDAAAADwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMJDwES2I4xIAAAACAAAAAaWlpZC0sLD/sIeH/7yJ - hv/xwpn//9ek///hsf//+NL////S///9y////8z////N////0////9j////b////3v///97////b//// - 3f///+r////t//r34/+8k4z/oXBw+ykcHMIAAACFAAAANQAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ+f - n/HHpKT/wY6L//K/lf//06D//+i+///90v//+8j///G+///5xv///8z////S////1////9v////h//// - 4////+b////n////9P/////////////////69+n/uZCI/51tbfsPCgqyAAAAbQAAACAAAAADAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAABZJ0dKXBjo7/57eX///Nmv//5Lj////S///0wf//67j///G+///+y////8/////U//// - 2////+D////l////6f///+z////t////////////////////////////9O7N/6p7eP95UlLqAAAAmgAA - AEYAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAZEtLIMGPj/TRoJT//9Cd///csf///9P///TB///ms///7Ln///XC//// - zP///9H////Y////3f///+L////p////7f////H////0///////////////////////////////b/9fB - qf+hbm7/MyMjxAAAAHIAAAAfAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpHp6dcWSkv/40aX//9Oi///81f//+cb//+Kv///l - sv//7rv///bD////zP///9P////Z////3////+X////q////8P////f////5/////f////////////// - //////D////c////1v+tgHv/dk9P6gAAAJQAAAA3AAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHv46O2dSlmP//26j//+nB///9 - zP//6rf//9+s///lsv//7rv///bD////zP///9P////Z////4P///+b////r////8P////j////+//// - /P////r////4////8f///9v////d////1//WwKf/nWpq/xwSErAAAABSAAAAEAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYcnIryZaW/+rD - o///26j///zU///3xP//4K3//96r///lsv//7rv///bD////zP///9P////Z////3////+X////q//// - 8P////f////5////+P////T////u////6f///+L////Z////1//z7cT/nWpq/0gwMMwAAABqAAAAGQAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAGvg4NdyZaW//XSqf//5rn////S///wvf//1qP//92q///lsv//7Ln///XC////zP///9L////Y//// - 3v///+L////p////7f////H////z////8v////D////q////5v///+L////X////1v///8//qX12/2tI - SOIAAAB3AAAAHgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAG+jo6KyZaW///jsP//7sb///zK///ntP//1aL//92q///ksf//67j///G+///+ - y////9D////V////2////+H////l////6f///+z////t////7f///+r////o////4v///9/////W//// - 1v///83/to+D/3xSUuwAAAB6AAAAHwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG+jo6KyZaW///ksf//8sz///rH///ksf//06D//9uo///i - r///57T//++8///6x////8z////T////2P///9z////i////4////+b////n////5////+X////i//// - 3////9v////T////1v///sv/yKeR/3xSUuwAAAB6AAAAHwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG+jo6KyZaW///lsv//+NT///nG///i - r///0Z7//9mm///eq///5bL//+y5///zwP///sv////P////1P///9n////b////3////+L////i//// - 4v///+H////e////2////9b////R////1v//+MX/zq2U/3xSUuwAAAB6AAAAHwAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG+j4+JyZaW///m - s///99L///rH///lsv//zpv//9Wi///frP//6rj//+67///vvP//9sP////M////z////9P////X//// - 2v///9v////b////2////9v////Z////1f///9L////N///80///8b7/wpyI/3xSUuwAAAB2AAAAHgAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADEk5OFyZaW///qt///8sn///zK///suf//0aD//+vD///zyv//6Lf//+u5///wvf//9sP///jF///+ - y////87////R////0////9T////V////1f///9T////T////0P///8z///7N///0x///7br/top9/31T - U+oAAABkAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADGlJRCyZaW//HXsf//7cL////R///vvP//99j//+W9///WpP//3Kr//96s///l - sv//67j///jF///0wf///Mn////M////zf///87////Q////0P///87////M///+y///+cb////R///w - wP//57T/o3Jv/2dERNUAAABJAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByZaW/9+7pP//67r////Z///81v//+N3//+G2///g - tP//3rD//9mq///crP//5bL//+q3///0wf//77z///TB///4xf//+8j///zJ///7yP//+8j///bD///y - v///98T///vQ///ms//tzqX/nWpq/0YvL68AAAAsAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw5GRs8yel///7br///bQ//// - 5v//9NP///DR///04P//7Mv//+O4///aq///3az//+Ow///xvv//6LX//+y5///uu///7rv//++8///v - vP//7rv//+26///vvP///s3//+/D///hrv/EmIX/lmVl+gAAAGcAAAAZAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwpCQQsWS - kv/oy6v//+6////98P///fT///////////////////HW///it///2an//92q///wv///47D//+Wy///l - sv//57T//+e0///ntP//57T//+az///5xv//+9L//96r//nVpf+ndXL/dk9P1AAAADoAAAAJAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMGPj8LJmpT/++i4///66P////////////////////////32///nvv//2ar//9im///x - xP//3ar//96r///grf//4a7//+Gu///hrv//5LH///bD////0v//5Lb//9ek/8GQgP+bamr5LB4ecQAA - ABgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALyLizLBjo7/1rCd///42f////////////////////////z1///q - wf//2Kn//+3G///erv//1aL//9ek///Zpv//2qf//92q///otf//+MX////S///kuP//1KH/3rCQ/6Vy - cv9vTEy5AAAAKAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC9i4tyvYqK/+DEqv///vj///////// - //////////nf///svf//9dX///LN///Sn///1KH//9aj///cqf//5bL///PA///9yv///ND//+G2///P - nP/vvZP/rnt4/49jY94AAAAyAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuIaGoriF - hf/VtKX///3v/////f////z////z////7f///dr///TB///yv///8r////XC///5xv///cr////S///0 - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPZ/1Mkuw/vBdw///Sa///zmU8/9Edcb/YW+r/4t/ - o/+6kpz/YUlJywAAAGQAAAAXAAAAAwAAAAoAAAAZAAAAIwAAACgAAAAqAAAAKgAAACgAAAAfAAAAEAAA - AAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPZ/1Mkuw/vBdw///Sa///zmU - 8/9Edcb/YW+r/4t/o/99Zm/hAAAAdAAAADQAAAAnAAAAQgAAAGkAAACFAAAAkgAAAJUAAACVAAAAjwAA - AHcAAABTAAAAMAAAABUAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPZ/1Mkuw - /vBdw///Sa///zmU8/9Edcb/Y2yQ/1RUVNsAAACiAAAAiDUlJZt6VFTZkWJi9ZpnZ/+senr/xpOT/8qX - l/+edXXuWEBA0BINDakAAACJAAAAWAAAACIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAPZ/1Mkuw/vBdw///Sa///4erz/+CgoL/mZmZ+p+cnPKQa2vttoV//9iylf/t0qj///G+///6 - x////sz//PjM/+3dvf/WtqX/r39/+1xCQtcAAACfAAAAZwAAACcAAAAGAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAANZf1Mkit/vCLvNjIsbGx16ysrP+Fe3v/tISE/9iqkf//3qv//+u8///3 - yv///dL////T////1v///9b////a////2f/y6Mn/v5eP/3hVVeUAAACjAAAAZgAAAB8AAAAEAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMJDwEQAAAAJ4eHg5wLa2/7iIiP/ktJT//9uq///1 - yv///Mz///3K////z////9b////c////4P///97////p////9v/69+z/wJqT/3NQUOUAAACbAAAATgAA - ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFVVVT+8kpL/47GU///Z - qv///ND///K////xvv///sz////U////2////+P////p////7P////7////////////69+f/tYyE/z8r - K8wAAACBAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoXh4ddKi - lf//06L///jO///xvv//6bb///XC////zv///9f////f////5////+/////1//////////////////// - 7v/o277/j2Fh9wAAAKEAAABPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAa+jY3Z8Mii///ovP//98T//+Kv///qt///9sP////Q////2f///+D////r////8/////r////8//// - /P////n////d////1/+3kIX/STExzgAAAG8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAm3R0KsuZlv//26j///zQ///ntP//36z//+q3///2w////9D////Y////4P///+n////x//// - +P////j////x////6P///9v////Y/9rHqv90Tk7pAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAGnfX1O1qmc///muf//+sr//92q///eq///6LX///PA////zf///9b////e//// - 5f///+v////u////7v///+v////l////3P///9X/7eO6/4NYWPMAAACRAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAb6Pj4nkvaT//+7E///5xv//1qP//9uo///ksf//7rv///3K//// - 0f///9r////f////5P///+b////m////5P///9/////Z////0f//+8j/mmdn/wAAAJEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw5KShuS/pf//8sn///nG///Vov//16T//+Ct///q - t///9MH///7M////0////9n////d////3////9/////d////2P///9L///7O///zwP+aZ2f/AAAAggAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkJBE1quf///sv///+cj//96t///r - w///78L//+q4///1wv//+sf///7M////0P///9T////V////1f///9T////Q////zP//+Mr/7dSq/4VZ - WfAAAABvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMaUlCHOoJn//+u6///9 - 0f//+dj//+O5///brP//26v//+Sx///yv///9MH///rH///9yv///83////N///9yv//+cb///vJ///w - w//at5f/d1BQ4gAAAE8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMSS - ktLw1rD///fO///85///8NP///Lb///kvP//26z//+Ow///zwP//67j///C9///wvf//8L3//++8///w - vf///M///+Ow/7eIfP9VOTmwAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAwY+PYtKnm///8cL////8//////////////nt///htf//2qj///DA///ir///5LH//+Wy///l - sv//57T///vJ///ouf/ov5n/k2Rk8gAAAE4AAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAwI6O0ePDpv////n/////////////+e7//+a7///mu///36///9il///a - p///3Kn//+i1///6yP//78X/+s6e/7WEev9WOzuWAAAAHwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4h4cyu4iI8OTPxP/////////////87f//9tf///jU///f - rP//3ar//+i1///1wv///c///+a6//rImf/AjYH/hVxcxgAAACcAAAAGAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACygYEytYKC8Ni6pv//99j///ba///8 - 2P///dL///zP///90f//+8////HH///bq//yxpz/v4+F/49lZcAAAAAiAAAABgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACpeXkRrXt7sraH - gf/YuJz/7dOq///otf//5LH//+Kv//zcrP/txqP/1qmW/7SCgvSOZmaLAAAAFQAAAAQAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAo3JyMqJwcKOda2vimmdn/6x6ev/Gk5P/ypeX/7qKismkeHiBW0JCIQAAAAYAAAABAAAAAAAA - AAAAAAAAAAAAAAD///8Af///AD///wAf//8AD///AAf//wAD//+AAf//wAD//+AAwH/wAAAP+AAAB/wA - AAP+AAAB/wAAAP+AAAD/4AAA/8AAAP/AAAD/wAAA/4AAAP+AAAD/wAAA/8AAAP/AAAD/4AAA/+AAAP/w - AAD/8AAB//gAA//8AAf//wAPKAAAABgAAAAwAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAQAAAARAAAAHwAAACEAAAAWAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAABGAAAAbQAAAHMAAABYAAAAKAAA - AAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAF1dXXdycnLdbGRo6oRjY90AAACdAAAAZwAAACkAAAAHAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhPFKcYz/LXKb/5+O - mf+OamrlAAAAoQAAAGgAAAApAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGCLpuI+pPn/FnzE/y1ym/+fjpn/jmpq5QAAAKEAAABoAAAAKQAA - AAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEmt - +qJZv///PqT5/xZ8xP8tcpv/n46Z/45qauUAAAChAAAAaAAAACkAAAAHAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKrvqiWb///z6k+f8WfMT/LXKb/5+O - mf+OamrlAAAAoQAAAGcAAAAoAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAASq76olm///8+pPn/FnzE/y1ym/+fjpn/jmpq5QAAAJoAAABSAAAAEwAA - AAYAAAAQAAAAFgAAABgAAAAWAAAAEAAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEqu - +qJZv///PqT5/xZ8xP8tcpv/n46Z/4ZkZNsAAAByAAAAPAAAADcAAABOAAAAXAAAAF8AAABcAAAATwAA - ADYAAAAaAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKrvqiWb///z6k+f8WfMT/MXGX/1JS - VtYAAACZEw0Nj1Q5OblgQEDOa0xM03tcXNNeRUXIEw4OpQAAAIsAAABhAAAALQAAAAoAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAASq76olm///9GpfT/domY/4mJie2ji4vxrYB5+926mv/s1q3///nG//Xr - xP/p1br/zKWb/3JSUuEAAACkAAAAcwAAADIAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEqu - +pKOscWJnZ2d86GBgf/esJP//+Oy///3yf///c7////W////2P///9n////g/+fXxP+Xb2zzEAsLrQAA - AGoAAAAiAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHtp6e5uKwk///5bb///nJ///3 - xP///9H////b////5P///+n////8///////p3M7/e1VV6gAAAJUAAABGAAAADQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABfR0ci0KGU9P/fsP//+Mb//+q3///6x////9X////h////7f////X///////// - /////+v/xKSV/zQjI8AAAABnAAAAGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACugoKB6sCg///4 - yv//5LL//+m2///8yf///9f////j////7/////r////6////9P///9r/8+3I/2xJSeQAAAB9AAAAJgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+jo66++G2///3xf//3ar//+m2///6x////9T////g//// - 6v////H////w////6P///9r////T/5FsZvIAAACJAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADCkZHH/+q6///zwP//1qP//+Wy///zwP///8/////Z////4f///+b////l////4P///9X///3O/7OK - fv8AAACGAAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEkpLF/+y+///0wf//3Kz//+/B///0 - wf///Mn////Q////1v///9j////Y////1f///8////XH/6Z8c/oAAABzAAAAIQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADBkJCF8dWw///6zf//9dX//96r///grf//8b7///jF///8yv///cz///3M///7 - yP///M3//+m2/4BWVucAAABTAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkJAy27Wi///3 - 0////O////vu///pwP//3qv///TC///suf//7br//+26///xvv//88f/27SU/1c6Oq0AAAAuAAAABgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv42NwvPgwP/////////////z2v//5bb//+e4///d - qv//36z//+m2///6zP/606T/o3Vv8CAVFU8AAAAQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAtISEEcidkvD27+L////+///65f//+dX//+az///otf//9ML///HC//rQov+1hHr3TTY2ZwAA - ABMAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALOCgiG3h4PR27uf//np - v///88T///HB///vwP//5bf/5bqa/7mJgvVeQkJYAAAAEAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqHZ2YqBubsO0iXz/w5eL/9irn//Bko7XnnNzhFQ9 - PSMAAAAHAAAAAQAAAAAAAAAAAAAAAAP//wAB//8AAP//AAB//wAAP/8AAB//AIAP/wDAAA8A4AAHAPAA - AQD4AAEG/AAA2f4AAP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//wAA//8AAf//gAP//+AH/ygA - AAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAWwAAAIcAAAByAAAANAAA - AAsAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfn5+uHN1if+jf4bwEg4OsQAA - AHsAAAA0AAAACwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGCStMNAiN//c3ao/6Z/ - hfISDg6yAAAAewAAADQAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNsfpiUrj//0OF - 2f95eaf/pn+F8hIODrIAAAB5AAAALwAAAAcAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAEqu - +4JTuf//Q4XZ/3l5p/+mf4XyEw4OrAAAAGYAAAArAAAAIwAAACgAAAApAAAAJAAAABUAAAAFAAAAAAAA - AAAAAAAARqr6olO4/v9Eg9b/eXmn/4hqb98AAACRAAAAeAAAAIQAAACSAAAAlAAAAIUAAABbAAAAJQAA - AAcAAAAAAAAAAAAAAABJrfqiU7j+/1iMz/91dXnhd11d2bmUgPXOsJb/4Meu/9CyoftvVVLcAAAAogAA - AGoAAAAlAAAAAAAAAAAAAAAAAAAAAEuv+4Knr7W6q4uI//HPqf//9cX///3R////2////9z/9e/g/5B0 - b+oAAAChAAAAWgAAAAAAAAAAAAAAAAAAAAAAAAABo319ge/Jpv//8sD///fE////2P///+j////4//// - ///z7dr/XT8/2wAAAIIAAAAAAAAAAAAAAAAAAAAAAAAAAcqeksn/8cL//+Sx///5xv///9v////s//// - +/////f////a/7KYhfcAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAHlvaP///XJ///dqv//9cL////W//// - 5f///+z////n////2f/Mspn/AAAAkgAAAAAAAAAAAAAAAAAAAAAAAAAB5b+m///1yf//5rn//++8//// - zf///9f////b////2P///NH/zKyT/wAAAIIAAAAAAAAAAAAAAAAAAAAAAAAAANGom8P/9s3///LX///j - uf//8b////XC///5x///98T///bG/7WQfPMAAABbAAAAAAAAAAAAAAAAAAAAAAAAAADBj49i79rC//// - ////9+r//+y////frP//47D///C9//PSqP9vS0u3AAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+R - jqHx5d3///vo///4zf//7rz///PG//XPpP+qfHHWAAAAJwAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAArHp6csmlj+HOqI7/4Lie/9esmPKofXeSAAAAFQAAAAUAAAAAAf+6/wD/m/8Af1LhAAcApIAB - AHPAAAAy4AAACfAAAADwAAAA8AAAAPAAAADwAAAA+AAAAPgAAAD8APqS/gHFiQ== - - \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.Designer.cs b/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.Designer.cs index e7d7774296..9d8487c910 100644 --- a/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RamWatch)); this.WatchCountLabel = new System.Windows.Forms.Label(); this.ListViewContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components); this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -273,7 +272,7 @@ // // MoveTopContextMenuItem // - this.MoveTopContextMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("MoveTopContextMenuItem.Image"))); + this.MoveTopContextMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.MoveTop; this.MoveTopContextMenuItem.Name = "MoveTopContextMenuItem"; this.MoveTopContextMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) | System.Windows.Forms.Keys.Up))); @@ -351,7 +350,7 @@ // newToolStripButton // this.newToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.newToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("newToolStripButton.Image"))); + this.newToolStripButton.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.NewFile; this.newToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; this.newToolStripButton.Name = "newToolStripButton"; this.newToolStripButton.Size = new System.Drawing.Size(23, 22); @@ -361,7 +360,7 @@ // openToolStripButton // this.openToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.openToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("openToolStripButton.Image"))); + this.openToolStripButton.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.OpenFile; this.openToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; this.openToolStripButton.Name = "openToolStripButton"; this.openToolStripButton.Size = new System.Drawing.Size(23, 22); @@ -371,7 +370,7 @@ // saveToolStripButton // this.saveToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.saveToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("saveToolStripButton.Image"))); + this.saveToolStripButton.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.SaveAs; this.saveToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; this.saveToolStripButton.Name = "saveToolStripButton"; this.saveToolStripButton.Size = new System.Drawing.Size(23, 22); @@ -397,7 +396,7 @@ // editWatchToolStripButton // this.editWatchToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.editWatchToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("editWatchToolStripButton.Image"))); + this.editWatchToolStripButton.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.CutHS; this.editWatchToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; this.editWatchToolStripButton.Name = "editWatchToolStripButton"; this.editWatchToolStripButton.Size = new System.Drawing.Size(23, 22); @@ -418,7 +417,7 @@ // clearChangeCountsToolStripButton // this.clearChangeCountsToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; - this.clearChangeCountsToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("clearChangeCountsToolStripButton.Image"))); + this.clearChangeCountsToolStripButton.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.placeholder_bitmap; this.clearChangeCountsToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; this.clearChangeCountsToolStripButton.Name = "clearChangeCountsToolStripButton"; this.clearChangeCountsToolStripButton.Size = new System.Drawing.Size(23, 22); @@ -429,7 +428,7 @@ // duplicateWatchToolStripButton // this.duplicateWatchToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.duplicateWatchToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("duplicateWatchToolStripButton.Image"))); + this.duplicateWatchToolStripButton.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.Duplicate; this.duplicateWatchToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; this.duplicateWatchToolStripButton.Name = "duplicateWatchToolStripButton"; this.duplicateWatchToolStripButton.Size = new System.Drawing.Size(23, 22); @@ -750,7 +749,7 @@ // // MoveTopMenuItem // - this.MoveTopMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("MoveTopMenuItem.Image"))); + this.MoveTopMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.MoveTop; this.MoveTopMenuItem.Name = "MoveTopMenuItem"; this.MoveTopMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) | System.Windows.Forms.Keys.Up))); @@ -912,7 +911,7 @@ this.Controls.Add(this.toolStrip1); this.Controls.Add(this.RamWatchMenu); this.Controls.Add(this.WatchListView); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = global::BizHawk.Client.EmuHawk.Properties.Resources.watch_MultiSize; this.Name = "RamWatch"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = " RAM Watch"; diff --git a/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.cs b/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.cs index d913a66ebf..9894d6ed62 100644 --- a/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.cs +++ b/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.cs @@ -266,7 +266,7 @@ namespace BizHawk.Client.EmuHawk return; } - WatchListView.Invalidate(); + WatchListView.RowCount = _watches.Count; } } diff --git a/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.resx b/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.resx index 92ce557e9a..e2d59d5a5f 100644 --- a/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.resx +++ b/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.resx @@ -120,233 +120,13 @@ 264, 17 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH - DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp - bGUAAEjHnZZ3VFTXFofPvXd6oc0wAlKG3rvAANJ7k15FYZgZYCgDDjM0sSGiAhFFRJoiSFDEgNFQJFZE - sRAUVLAHJAgoMRhFVCxvRtaLrqy89/Ly++Osb+2z97n77L3PWhcAkqcvl5cGSwGQyhPwgzyc6RGRUXTs - AIABHmCAKQBMVka6X7B7CBDJy82FniFyAl8EAfB6WLwCcNPQM4BOB/+fpFnpfIHomAARm7M5GSwRF4g4 - JUuQLrbPipgalyxmGCVmvihBEcuJOWGRDT77LLKjmNmpPLaIxTmns1PZYu4V8bZMIUfEiK+ICzO5nCwR - 3xKxRoowlSviN+LYVA4zAwAUSWwXcFiJIjYRMYkfEuQi4uUA4EgJX3HcVyzgZAvEl3JJS8/hcxMSBXQd - li7d1NqaQffkZKVwBALDACYrmcln013SUtOZvBwAFu/8WTLi2tJFRbY0tba0NDQzMv2qUP91829K3NtF - ehn4uWcQrf+L7a/80hoAYMyJarPziy2uCoDOLQDI3fti0zgAgKSobx3Xv7oPTTwviQJBuo2xcVZWlhGX - wzISF/QP/U+Hv6GvvmckPu6P8tBdOfFMYYqALq4bKy0lTcinZ6QzWRy64Z+H+B8H/nUeBkGceA6fwxNF - hImmjMtLELWbx+YKuGk8Opf3n5r4D8P+pMW5FonS+BFQY4yA1HUqQH7tBygKESDR+8Vd/6NvvvgwIH55 - 4SqTi3P/7zf9Z8Gl4iWDm/A5ziUohM4S8jMX98TPEqABAUgCKpAHykAd6ABDYAasgC1wBG7AG/iDEBAJ - VgMWSASpgA+yQB7YBApBMdgJ9oBqUAcaQTNoBcdBJzgFzoNL4Bq4AW6D+2AUTIBnYBa8BgsQBGEhMkSB - 5CEVSBPSh8wgBmQPuUG+UBAUCcVCCRAPEkJ50GaoGCqDqqF6qBn6HjoJnYeuQIPQXWgMmoZ+h97BCEyC - qbASrAUbwwzYCfaBQ+BVcAK8Bs6FC+AdcCXcAB+FO+Dz8DX4NjwKP4PnEIAQERqiihgiDMQF8UeikHiE - j6xHipAKpAFpRbqRPuQmMorMIG9RGBQFRUcZomxRnqhQFAu1BrUeVYKqRh1GdaB6UTdRY6hZ1Ec0Ga2I - 1kfboL3QEegEdBa6EF2BbkK3oy+ib6Mn0K8xGAwNo42xwnhiIjFJmLWYEsw+TBvmHGYQM46Zw2Kx8lh9 - rB3WH8vECrCF2CrsUexZ7BB2AvsGR8Sp4Mxw7rgoHA+Xj6vAHcGdwQ3hJnELeCm8Jt4G749n43PwpfhG - fDf+On4Cv0CQJmgT7AghhCTCJkIloZVwkfCA8JJIJKoRrYmBRC5xI7GSeIx4mThGfEuSIemRXEjRJCFp - B+kQ6RzpLuklmUzWIjuSo8gC8g5yM/kC+RH5jQRFwkjCS4ItsUGiRqJDYkjiuSReUlPSSXK1ZK5kheQJ - yeuSM1J4KS0pFymm1HqpGqmTUiNSc9IUaVNpf+lU6RLpI9JXpKdksDJaMm4ybJkCmYMyF2TGKQhFneJC - YVE2UxopFykTVAxVm+pFTaIWU7+jDlBnZWVkl8mGyWbL1sielh2lITQtmhcthVZKO04bpr1borTEaQln - yfYlrUuGlszLLZVzlOPIFcm1yd2WeydPl3eTT5bfJd8p/1ABpaCnEKiQpbBf4aLCzFLqUtulrKVFS48v - vacIK+opBimuVTyo2K84p6Ss5KGUrlSldEFpRpmm7KicpFyufEZ5WoWiYq/CVSlXOavylC5Ld6Kn0Cvp - vfRZVUVVT1Whar3qgOqCmrZaqFq+WpvaQ3WCOkM9Xr1cvUd9VkNFw08jT6NF454mXpOhmai5V7NPc15L - Wytca6tWp9aUtpy2l3audov2Ax2yjoPOGp0GnVu6GF2GbrLuPt0berCehV6iXo3edX1Y31Kfq79Pf9AA - bWBtwDNoMBgxJBk6GWYathiOGdGMfI3yjTqNnhtrGEcZ7zLuM/5oYmGSYtJoct9UxtTbNN+02/R3Mz0z - llmN2S1zsrm7+QbzLvMXy/SXcZbtX3bHgmLhZ7HVosfig6WVJd+y1XLaSsMq1qrWaoRBZQQwShiXrdHW - ztYbrE9Zv7WxtBHYHLf5zdbQNtn2iO3Ucu3lnOWNy8ft1OyYdvV2o/Z0+1j7A/ajDqoOTIcGh8eO6o5s - xybHSSddpySno07PnU2c+c7tzvMuNi7rXM65Iq4erkWuA24ybqFu1W6P3NXcE9xb3Gc9LDzWepzzRHv6 - eO7yHPFS8mJ5NXvNelt5r/Pu9SH5BPtU+zz21fPl+3b7wX7efrv9HqzQXMFb0ekP/L38d/s/DNAOWBPw - YyAmMCCwJvBJkGlQXlBfMCU4JvhI8OsQ55DSkPuhOqHC0J4wybDosOaw+XDX8LLw0QjjiHUR1yIVIrmR - XVHYqLCopqi5lW4r96yciLaILoweXqW9KnvVldUKq1NWn46RjGHGnIhFx4bHHol9z/RnNjDn4rziauNm - WS6svaxnbEd2OXuaY8cp40zG28WXxU8l2CXsTphOdEisSJzhunCruS+SPJPqkuaT/ZMPJX9KCU9pS8Wl - xqae5Mnwknm9acpp2WmD6frphemja2zW7Fkzy/fhN2VAGasyugRU0c9Uv1BHuEU4lmmfWZP5Jiss60S2 - dDYvuz9HL2d7zmSue+63a1FrWWt78lTzNuWNrXNaV78eWh+3vmeD+oaCDRMbPTYe3kTYlLzpp3yT/LL8 - V5vDN3cXKBVsLBjf4rGlpVCikF84stV2a9021DbutoHt5turtn8sYhddLTYprih+X8IqufqN6TeV33za - Eb9joNSydP9OzE7ezuFdDrsOl0mX5ZaN7/bb3VFOLy8qf7UnZs+VimUVdXsJe4V7Ryt9K7uqNKp2Vr2v - Tqy+XeNc01arWLu9dn4fe9/Qfsf9rXVKdcV17w5wD9yp96jvaNBqqDiIOZh58EljWGPft4xvm5sUmoqb - PhziHRo9HHS4t9mqufmI4pHSFrhF2DJ9NProje9cv+tqNWytb6O1FR8Dx4THnn4f+/3wcZ/jPScYJ1p/ - 0Pyhtp3SXtQBdeR0zHYmdo52RXYNnvQ+2dNt293+o9GPh06pnqo5LXu69AzhTMGZT2dzz86dSz83cz7h - /HhPTM/9CxEXbvUG9g5c9Ll4+ZL7pQt9Tn1nL9tdPnXF5srJq4yrndcsr3X0W/S3/2TxU/uA5UDHdavr - XTesb3QPLh88M+QwdP6m681Lt7xuXbu94vbgcOjwnZHokdE77DtTd1PuvriXeW/h/sYH6AdFD6UeVjxS - fNTws+7PbaOWo6fHXMf6Hwc/vj/OGn/2S8Yv7ycKnpCfVEyqTDZPmU2dmnafvvF05dOJZ+nPFmYKf5X+ - tfa5zvMffnP8rX82YnbiBf/Fp99LXsq/PPRq2aueuYC5R69TXy/MF72Rf3P4LeNt37vwd5MLWe+x7ys/ - 6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAlwSFlzAAALEQAACxEBf2RfkQAAAH1JREFUOE/NkVEKwCAM - Q73/qbzJjtIZaEqrkU32s8JjNkvih83MPlGW3vtQ2iPwMVMKQkwzzJcfY4o3LyH6ePiaS4o3LxmG4ccX - u/ItApjCRJaUBWzCZCnZhVVJ6LmkFGS8LArmm8kikN8UsOTsGQlCRP0HUjxBiidI8T3WbqWyfy/jHSM0 - AAAAAElFTkSuQmCC - - 434, 17 159, 17 - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAERSURBVDhPrZDbSgJRGIXnpewd6jXsjSQvIrwoI0RQMChU - 0iiDPCGiE3ZCRkvR8VzTeBhnyR5/ccaZNnPhB4t9sdf6Ln5hb8QeathNJFVFKF5C8DqL4ksDVHWGDf7j - LHyPg6NjviSaFqlu5yQYR+KpupaIkrMknCxT3Y7v/NYYb0ITK1c3BarbWWhLQ7IR0cTKReyZ6lZ0XYei - ztHpK4bAc+h1FgQijzSxMptrGIxVSO0xX3AaStFki7bUMVFmaMm/eJMGfIH/MkGzLep0AXn4h/r3CJV3 - mS9gn2bY4UY/UzQ7E9TqfeTFtnuB+XAfzSHKr11kSl/uBebDiZ89ZCst3OUkdwL28sIVsE83ock+EIQV - 2Mz2wxeg6/UAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJHSURBVDhPxZBdSNNhFMb/F110ZZEVhVBgeeHNICiiuggp - olAUyyxI0oSaH1QYC3N+tKnp5ubm1JUua5uuqdNKMwr7kApFItTUkWZqVhSVYmao5Nevvy7UoYR3HXh4 - 4XCe33nOKyy3lAY7l9RWMo0O/raWXxEyo5spVYTNvOGyfIRPfW+ptOkXqaPl6T83hcRmExSdgzAz3NVm - YWyoYla/B+1M9JtxWLPpaH22JORIjI6gKAMB0jyEimIdo4OlbuaprwVMOOMovammpDADc34qppwUrmnl - 5Kni3aFlFg2j3y1z5mnRTJccnNIltQhwq0jFry+mOXNtpWZWDx1Z1NhV3C3JwGFOw25SYjVe5oYhiUKd - HKMmwQUrMWUw/CF3NnZvvYKqUh1TvUroS3fXe7HXkwidMngTS2t5KLbregSzMY2f3Wr4qKW6LJvGR1rX - 0MLor8OhKYTJBn/GHvvxrliCTBrsOqXIoOBHh5K+hmSq7FqmexTQHuUytkaKxuNMNgYyVneA4Qd7GKjc - hjLaRzxH7gIU6JIZaEvgtk1D8wsxSWecCDgNzWFMvwxm/PkhRmr3Mli1nW9lvjRdWc0Jf+/5jzRmyWmv - S+GOLQu6U6BFjPvqKOP1AYw88WOoZif9DgmfLVtxaj1RSLdwNvrkPCA3M54KqxrnvRia9MKcGrUrqFOt - 5H7qKsqT1mGO9+Lqhc2ELdw+U/r0i+gVZ8hMiCDx3DHORwZyKnQ/hw/uYt9uCTskPvh6e7Fp41rWr/Fg - g6eHO+A/lyD8ARfG3mk9fv1YAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIySURBVDhPrZLfS5NRGMfff6H7boIuuq2pMZyL1eAt11CW - DcOKsB9vpFmaLtNExco0av6CbIVLJ61Wk3BSkT/AFCkRZSpZmrmiJQ41xSaCwdfznL15XEUX0Reem5f3 - 8znnec4j/Zc8fxYGla91CS3eRTx0z6OpMYS7jmnU1X6B/VYA18snUVoyjsKCt8jLHcH5c36ouCQR2NUJ - 1Nas4G9ZXlmFKbULh1Kf8lJxSfI+WeCCyopv6q+/h+DQ/DJ2WV5Ao1FgPegRAveDOS4oLfmq/h6dn/DH - 4AJizD4UXJrCAUuzEDgbZrjgou2DiohshIcnQtgme5GTPYbkJKcQ1N8OckHW2REVi+RXuM8fxGaDG4oy - ALPZIQQ11Z+5QDk1oKJ/hjv7P2FTfCMOH3mFxMQ6IbhROYWOdrCnBI4dfwPr0V4+bRoY9UzXppMjcDdS - rC8hy3YhuFI2gTYf2A4Aza4f7N2/o/zaLB8qDYx6zszwr8P7k1thNFYIweXCMXgeAfedq2xxwjClZUeV - Jd2GtDNFETiJwfs8MBjKhMCWN8pgoLoqzE8miH1GjE7G4PsZjE7OQsm9ij2mFg7rdrug1xcJAa2l4w7W - r00Cgk/n38S7wBwC04u4UGxHrMHF4CbEJtyDLj5fCDIzhljfSxzeavRgyw4Zj9t64GvvQ0d3P3pfD2Kv - 2QqNvgFxDN6urYdWmyMElJMnevh60obRktA701PRtGlg1DOdSkXwzrisaMG/RZLWAE60OMW5fNhvAAAA - AElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGDSURBVDhPrZFNSwJRGIX9NYGbFoUlFElY1EJQKEYhCJsi - LaVsERnRF5iCaSZJO1toCDVGFkgoFpWQWWRR2aIvUxm1BKN1wSnHCFw4TOCzue+9nPNw4eVVnav4Izzb - QfxeGZ5TWaxT/rK3irzmC7CsusvC1G4IkbNLboIiDieF4GGUKeTeClDpppF8eeEu2PIfwfrzizSdw3Hk - EnKlFpkMzV2wH77AosOFTV8A+vkl9CiHuJeLJNNZjM8tYWB0FkTvMAwmy/8ERTR6CwjlGAi1Ccence6C - 1NsXzN4PKIxJLLgeIJ2MoXvmFraNBKK3eXZRIveJPvs7FIYniEkXZENOdE+GIZ2Ko10TwLK7tJmKmL0F - EEYarYM+NMnt0C1sQzpx/lcSEnZ2gcKY/gs0dlmZuWvmjjmpwA1qxVp2AWFIMAF/OAGBzMjMI7ZrtJCb - 4Df3o4Zfxy7QrdxDRFKol5khkpR2H4qmIOzUQNBGwrsXYxccnNOQqNbQ0KGGZ+eEPVwdeLxvqqrf4wGh - TNAAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHkSURBVDhPvZHfS1NhHIf3p5QypLr2D4goMwoMCi/qIugH - Xe1Cr7qKDIMkZixwNhfWLGWbnuki0kXKzLU023KubBNPJrbRdOzocm6e2dPOO21mMS+CHvjcvOf9PF++ - 79H9M+7RT2iRRsIi9sEAXe43yAvf2LpSHq28G9uAnytNT4jMLewtcQ2Ht2pF8ps/aOt+gccX5lxD694S - +1BQFD1RkN5DSFa4Z3uONKbgHE3h8KZ4OJTC1J8UiSzmfhd2uf1CoJHbyKOsZokl0kKwm+aeJaov+wjO - rpQkVqdXfOz0bWAcVLghfaXxkUz3y2VxvpMGSwL3uMKh+gHezSSLEnNhX23vtYzKUirDfGyFj/Iy1mdx - UWqR8iKhwtQLxjgH659y4EwvVXWPiwJt3/Ws+muywRrlqvkDdx3zQrCN8l1ldnEd3/QqFmkS/akHJYGS - zjLzOUEwEsMf+sLI2zmaOou/93pPGoM5zvk7UU7fnBKxSBPoT7SXBNW1F/9Io2lKCNTCeomUyrS8xnBA - wfUqyf1eP5U1ptJD/o1LzeNCsHPydtqdr6k4aiwvOHvNSya3ibU/QIdrEkvfhJislc32MfYfuV1eUGPw - FF7bIVJVZ0N/soPK421UHGstlFvYd/hWecF/Qqf7CR0A5wwgSQA2AAAAAElFTkSuQmCC - - 17, 17 - - - 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 - AAAAAElFTkSuQmCC - - - - - AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAEAAAAA - AAB2LggAcTANAHUxDAB3NxQAezUQAHw5FQB+PBcAfDsYAHw9HAB+Px8AfkAgAIREIQCFRCEAhEYmAIZG - JACHRyQAh0gmAIdJKQCGSikAh0ooAIpLKQCMTy0Ai08wAIpRMQCOVTYAjlc5AI9YOQCRUzEAkVQxAJBX - NwCWWDYAk1o7AJRaOwCSWzwAlV8/AJdmSgCbZkkAnWtPAJ9rTgCebE4ApmxNAKBwVwCjclcAr3VTAKx2 - VQCtdlYApHdaALV/XwCgeWEAqHtjAKp9YwCrfmIArH5jALmAXwCwhWwAvIlsAK6HcACwiXIAsolwALKN - dgC1jHQAtY94ALaRewC3kXoAuZJ8ALmVfwC6ln8Aw5F1AL2ahgC9nosAt6KTAM2ehADBn4oAyqCJAMui - iwDNo4wA0KKHAMSlkQDQqZMA3b+vAN7DsQDfxLIA4Ma6AOPIuADkyLgA59LHAO7SwQDs2M0A8NXEAObZ - 0gDr4t8A7+biAPXo4QDx6OUA9/DqAPn08QD79vMA/fbwAPv5+AD8+voA/v39AP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwLiIaGQlmZmYzIychFwFmPmNTSzUK - ZmZmM1tSTisQZj5jU0s1CmZmZjNdWk83EmY+Y1NLNQpmZmYzXVpPNxJmRGRcVEcKZmZmM11aTzcSZkU2 - JhsRDQUEOCYcFAgDHWZIOWVVSigGOztZV0ksBzxmSEBeYVgvEAQ7ZWBWLQ9mZmY9QTQkFSAeMToqEwsy - ZmZmZkJiUEMMAEJiUUwOZmZmZmZIPyUWEmZNPyUWEmZmZmZmZh9fAgVmBR9fAmZmZmZmZmZIOhhmZmZI - OhhmZmZmZmZmZmZmZmZmZmZmZmZmZv//jCT//4wkA4GMJAOBjCQDgYwkA4GMJAOBjCQAAYwkAAGMJAAD - jCSAA4wkwAeMJMEHjCThD4wk44+MJP//jCQ= - - \ No newline at end of file diff --git a/BizHawk.Common/BinaryQuickSerializer.cs b/BizHawk.Common/BinaryQuickSerializer.cs index 421461c328..16da8bc9d4 100644 --- a/BizHawk.Common/BinaryQuickSerializer.cs +++ b/BizHawk.Common/BinaryQuickSerializer.cs @@ -27,11 +27,6 @@ namespace BizHawk.Common return caller.Method; } - private static MethodInfo Method(Expression f) - { - return FromExpression(f.Body); - } - private static MethodInfo Method(Expression> f) { return FromExpression(f.Body); diff --git a/BizHawk.Common/BizHawk.Common.csproj b/BizHawk.Common/BizHawk.Common.csproj index 1e89a13523..e791e6fda4 100644 --- a/BizHawk.Common/BizHawk.Common.csproj +++ b/BizHawk.Common/BizHawk.Common.csproj @@ -1,5 +1,6 @@  + Debug x86 @@ -84,9 +85,7 @@ - - @@ -94,11 +93,9 @@ - - diff --git a/BizHawk.Common/BizInvoke/BizInvokeUtilities.cs b/BizHawk.Common/BizInvoke/BizInvokeUtilities.cs index 55a3c9feab..7272d87606 100644 --- a/BizHawk.Common/BizInvoke/BizInvokeUtilities.cs +++ b/BizHawk.Common/BizInvoke/BizInvokeUtilities.cs @@ -1,10 +1,8 @@ using System; -using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.InteropServices; -using System.Text; namespace BizHawk.Common.BizInvoke { diff --git a/BizHawk.Common/BizInvoke/BizInvoker.cs b/BizHawk.Common/BizInvoke/BizInvoker.cs index 5f47b7ffa8..0369c0ded4 100644 --- a/BizHawk.Common/BizInvoke/BizInvoker.cs +++ b/BizHawk.Common/BizInvoke/BizInvoker.cs @@ -194,8 +194,7 @@ namespace BizHawk.Common.BizInvoke TypeBuilder type, MethodInfo baseMethod, CallingConvention nativeCall, string entryPointName, FieldInfo monitorField) { // create the delegate type - MethodBuilder delegateInvoke; - var delegateType = BizInvokeUtilities.CreateDelegateType(baseMethod, nativeCall, type, out delegateInvoke); + var delegateType = BizInvokeUtilities.CreateDelegateType(baseMethod, nativeCall, type, out var delegateInvoke); var paramInfos = baseMethod.GetParameters(); var paramTypes = paramInfos.Select(p => p.ParameterType).ToArray(); diff --git a/BizHawk.Common/BizInvoke/CallingConventionAdapter.cs b/BizHawk.Common/BizInvoke/CallingConventionAdapter.cs index 6dfb0766e4..df6ad89894 100644 --- a/BizHawk.Common/BizInvoke/CallingConventionAdapter.cs +++ b/BizHawk.Common/BizInvoke/CallingConventionAdapter.cs @@ -3,8 +3,6 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices; -using System.Text; -using System.Threading.Tasks; namespace BizHawk.Common.BizInvoke { diff --git a/BizHawk.Common/BizInvoke/WaterboxUtils.cs b/BizHawk.Common/BizInvoke/WaterboxUtils.cs index 13f2ce5705..07cbd4d364 100644 --- a/BizHawk.Common/BizInvoke/WaterboxUtils.cs +++ b/BizHawk.Common/BizInvoke/WaterboxUtils.cs @@ -1,9 +1,6 @@ using System; -using System.Collections.Generic; using System.IO; -using System.Linq; using System.Security.Cryptography; -using System.Text; namespace BizHawk.Common.BizInvoke { @@ -25,18 +22,14 @@ namespace BizHawk.Common.BizInvoke public static byte[] Hash(byte[] data) { - using (var h = SHA1.Create()) - { - return h.ComputeHash(data); - } + using var h = SHA1.Create(); + return h.ComputeHash(data); } public static byte[] Hash(Stream s) { - using (var h = SHA1.Create()) - { - return h.ComputeHash(s); - } + using var h = SHA1.Create(); + return h.ComputeHash(s); } public static unsafe void ZeroMemory(IntPtr mem, long length) @@ -49,24 +42,19 @@ namespace BizHawk.Common.BizInvoke } } - public static long Timestamp() - { - return DateTime.UtcNow.Ticks; - } - /// /// system page size /// - public static int PageSize { get; private set; } + public static int PageSize { get; } /// /// bitshift corresponding to PageSize /// - public static int PageShift { get; private set; } + public static int PageShift { get; } /// /// bitmask corresponding to PageSize /// - public static ulong PageMask { get; private set; } + public static ulong PageMask { get; } static WaterboxUtils() { diff --git a/BizHawk.Common/Buffer.cs b/BizHawk.Common/Buffer.cs index 5209257da0..0125d59203 100644 --- a/BizHawk.Common/Buffer.cs +++ b/BizHawk.Common/Buffer.cs @@ -15,46 +15,35 @@ namespace BizHawk.Common public int Len; public int Itemsize; + public void Write08(int addr, byte val) { Byteptr[addr] = val; } + public void Write32(int addr, uint val) { *(uint*)(Byteptr + addr) = val; } + public byte Read08(int addr) { return Byteptr[addr]; } + public ushort Read16(int addr) { return *(ushort*)(Byteptr + addr); } + public uint Read32(int addr) { return *(uint*)(Byteptr + addr); } + public static CBuffer malloc(int amt, int itemsize) { return new CBuffer(amt, itemsize); } - public void Write08(uint addr, byte val) { this.Byteptr[addr] = val; } - public void Write16(uint addr, ushort val) { *(ushort*)(this.Byteptr + addr) = val; } - public void Write32(uint addr, uint val) { *(uint*)(this.Byteptr + addr) = val; } - public void Write64(uint addr, ulong val) { *(ulong*)(this.Byteptr + addr) = val; } - public byte Read08(uint addr) { return this.Byteptr[addr]; } - public ushort Read16(uint addr) { return *(ushort*)(this.Byteptr + addr); } - public uint Read32(uint addr) { return *(uint*)(this.Byteptr + addr); } - public ulong Read64(uint addr) { return *(ulong*)(this.Byteptr + addr); } - public void Write08(int addr, byte val) { this.Byteptr[addr] = val; } - public void Write16(int addr, ushort val) { *(ushort*)(this.Byteptr + addr) = val; } - public void Write32(int addr, uint val) { *(uint*)(this.Byteptr + addr) = val; } - public void Write64(int addr, ulong val) { *(ulong*)(this.Byteptr + addr) = val; } - public byte Read08(int addr) { return this.Byteptr[addr]; } - public ushort Read16(int addr) { return *(ushort*)(this.Byteptr + addr); } - public uint Read32(int addr) { return *(uint*)(this.Byteptr + addr); } - public ulong Read64(int addr) { return *(ulong*)(this.Byteptr + addr); } - public CBuffer(T[] arr, int itemsize) { - this.Itemsize = itemsize; - this.Len = arr.Length; - this.Arr = arr; - this.Hnd = GCHandle.Alloc(arr, GCHandleType.Pinned); - this.Ptr = this.Hnd.AddrOfPinnedObject().ToPointer(); - this.Byteptr = (byte*)this.Ptr; + Itemsize = itemsize; + Len = arr.Length; + Arr = arr; + Hnd = GCHandle.Alloc(arr, GCHandleType.Pinned); + Ptr = Hnd.AddrOfPinnedObject().ToPointer(); + Byteptr = (byte*)Ptr; } public CBuffer(int amt, int itemsize) { - this.Itemsize = itemsize; - this.Len = amt; - this.Arr = new T[amt]; - this.Hnd = GCHandle.Alloc(this.Arr, GCHandleType.Pinned); - this.Ptr = this.Hnd.AddrOfPinnedObject().ToPointer(); - this.Byteptr = (byte*)this.Ptr; - Util.Memset(this.Byteptr, 0, this.Len * itemsize); + Itemsize = itemsize; + Len = amt; + Arr = new T[amt]; + Hnd = GCHandle.Alloc(this.Arr, GCHandleType.Pinned); + Ptr = Hnd.AddrOfPinnedObject().ToPointer(); + Byteptr = (byte*)Ptr; + Util.Memset(Byteptr, 0, Len * itemsize); } public void Dispose() @@ -67,11 +56,11 @@ namespace BizHawk.Common { if (disposing) { - if (this.Arr != null) + if (Arr != null) { - this.Hnd.Free(); + Hnd.Free(); } - this.Arr = null; + Arr = null; } } diff --git a/BizHawk.Common/CustomCollections.cs b/BizHawk.Common/CustomCollections.cs index 2aeee81b32..67d8cfb023 100644 --- a/BizHawk.Common/CustomCollections.cs +++ b/BizHawk.Common/CustomCollections.cs @@ -44,12 +44,6 @@ namespace BizHawk.Common [Serializable] public class Bag : BagBase>, List> { } - /// - /// a Dictionary-of-lists with key K and values List<V> - /// - [Serializable] - public class SortedBag : BagBase>, List> { } - /// /// base class for Bag and SortedBag /// diff --git a/BizHawk.Common/DeepEquality.cs b/BizHawk.Common/DeepEquality.cs index 00cf2299a7..b45e464551 100644 --- a/BizHawk.Common/DeepEquality.cs +++ b/BizHawk.Common/DeepEquality.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; using System.Reflection; namespace BizHawk.Common @@ -50,27 +49,6 @@ namespace BizHawk.Common } } - /// - /// test if two arrays are equal in contents; arrays should have same type - /// - private static bool ArrayEquals(T[] o1, T[] o2) - { - if (o1.Length != o2.Length) - { - return false; - } - - for (int i = 0; i < o1.Length; i++) - { - if (!DeepEquals(o1[i], o2[i])) - { - return false; - } - } - - return true; - } - static MethodInfo ArrayEqualsGeneric = typeof(DeepEquality).GetMethod("ArrayEquals", BindingFlags.NonPublic | BindingFlags.Static); /// @@ -101,7 +79,7 @@ namespace BizHawk.Common // this is actually pretty fast; it allows using fast ldelem and stelem opcodes on // arbitrary array types without emitting custom IL var method = ArrayEqualsGeneric.MakeGenericMethod(new Type[] { t1.GetElementType() }); - return (bool)method.Invoke(null, new object[] { o1, o2 }); + return (bool)method.Invoke(null, new[] { o1, o2 }); } if (t1.IsPrimitive) diff --git a/BizHawk.Common/DescribableEnumConverter.cs b/BizHawk.Common/DescribableEnumConverter.cs index 3547d04995..73dd8e4e85 100644 --- a/BizHawk.Common/DescribableEnumConverter.cs +++ b/BizHawk.Common/DescribableEnumConverter.cs @@ -3,10 +3,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Globalization; -using System.Linq; using System.Reflection; -using System.Text; -using System.Threading.Tasks; namespace BizHawk.Common { diff --git a/BizHawk.Common/Extensions/BufferExtensions.cs b/BizHawk.Common/Extensions/BufferExtensions.cs index 5cbdbf009b..55b7998bd1 100644 --- a/BizHawk.Common/Extensions/BufferExtensions.cs +++ b/BizHawk.Common/Extensions/BufferExtensions.cs @@ -93,11 +93,9 @@ namespace BizHawk.Common.BufferExtensions public static string HashMD5(this byte[] data, int offset, int len) { - using (var md5 = MD5.Create()) - { - md5.ComputeHash(data, offset, len); - return md5.Hash.BytesToHexString(); - } + using var md5 = MD5.Create(); + md5.ComputeHash(data, offset, len); + return md5.Hash.BytesToHexString(); } public static string HashMD5(this byte[] data) @@ -107,11 +105,9 @@ namespace BizHawk.Common.BufferExtensions public static string HashSHA1(this byte[] data, int offset, int len) { - using (var sha1 = SHA1.Create()) - { - sha1.ComputeHash(data, offset, len); - return sha1.Hash.BytesToHexString(); - } + using var sha1 = SHA1.Create(); + sha1.ComputeHash(data, offset, len); + return sha1.Hash.BytesToHexString(); } public static string HashSHA1(this byte[] data) diff --git a/BizHawk.Common/Extensions/CollectionExtensions.cs b/BizHawk.Common/Extensions/CollectionExtensions.cs index 7fb8fb3180..1ee48a4aa9 100644 --- a/BizHawk.Common/Extensions/CollectionExtensions.cs +++ b/BizHawk.Common/Extensions/CollectionExtensions.cs @@ -1,7 +1,5 @@ using System; -using System.Collections; using System.Collections.Generic; -using System.Linq; namespace BizHawk.Common.CollectionExtensions { @@ -95,25 +93,5 @@ namespace BizHawk.Common.CollectionExtensions throw new InvalidOperationException("Item not found"); } - - public static byte[] ToByteArray(this IEnumerable list) - { - var bits = new BitArray(list.ToArray()); - byte[] bytes = new byte[(bits.Length / 8) + (bits.Length % 8 == 0 ? 0 : 1)]; - bits.CopyTo(bytes, 0); - return bytes; - } - - /// - /// Converts any byte array into a bit array represented as a list of booleans - /// - public static IEnumerable ToBools(this byte[] bytes) - { - var bits = new BitArray(bytes); - var bools = new bool[bits.Length]; - bits.CopyTo(bools, 0); - - return bools; - } } } diff --git a/BizHawk.Common/Extensions/IOExtensions.cs b/BizHawk.Common/Extensions/IOExtensions.cs index 309b8ddcb4..d075dc01d4 100644 --- a/BizHawk.Common/Extensions/IOExtensions.cs +++ b/BizHawk.Common/Extensions/IOExtensions.cs @@ -34,7 +34,7 @@ namespace BizHawk.Common.IOExtensions public static string ReadStringUtf8NullTerminated(this BinaryReader br) { - var ms = new MemoryStream(); + using var ms = new MemoryStream(); for (;;) { var b = br.ReadByte(); @@ -116,39 +116,6 @@ namespace BizHawk.Common.IOExtensions } } - public static int[] ReadInt32s(this BinaryReader br, int num) - { - int[] ret = new int[num]; - for (int i = 0; i < num; i++) - { - ret[i] = br.ReadInt32(); - } - - return ret; - } - - public static short[] ReadInt16s(this BinaryReader br, int num) - { - short[] ret = new short[num]; - for (int i = 0; i < num; i++) - { - ret[i] = br.ReadInt16(); - } - - return ret; - } - - public static ushort[] ReadUInt16s(this BinaryReader br, int num) - { - ushort[] ret = new ushort[num]; - for (int i = 0; i < num; i++) - { - ret[i] = br.ReadUInt16(); - } - - return ret; - } - public static void WriteBit(this BinaryWriter bw, Bit bit) { bw.Write((bool)bit); diff --git a/BizHawk.Common/Extensions/ReflectionExtensions.cs b/BizHawk.Common/Extensions/ReflectionExtensions.cs index ec997a25c9..85bda2ec4a 100644 --- a/BizHawk.Common/Extensions/ReflectionExtensions.cs +++ b/BizHawk.Common/Extensions/ReflectionExtensions.cs @@ -3,8 +3,6 @@ using System.Linq; using System.Collections.Generic; using System.ComponentModel; using System.Reflection; -using System.Reflection.Emit; -using System.Runtime.InteropServices; namespace BizHawk.Common.ReflectionExtensions { @@ -118,64 +116,6 @@ namespace BizHawk.Common.ReflectionExtensions return default(T); } - /// - /// Takes an object and determines if it has methodName as a public method - /// - /// Returns whether or not the object both contains the method name and the method is public - public static bool HasExposedMethod(this object obj, string methodName) - { - var method = obj.GetType().GetMethod(methodName); - - if (method != null) - { - return method.IsPublic; - } - - return false; - } - - /// - /// Takes an object and invokes the method - /// The method must exist and be public - /// - /// The return value of the method, as an object. - /// If the method returns void, the return value is null - /// If the method does not exist or is not public, it returns null - /// - public static object InvokeMethod(this object obj, string methodName, object[] args) - { - var method = obj.GetType().GetMethod(methodName); - if (method != null && method.IsPublic) - { - return method.Invoke(obj, args); - } - - return null; - } - - public static bool HasPublicProperty(this object obj, string propertyName) - { - var property = obj.GetType().GetProperty(propertyName); - - if (property != null) - { - return property.CanRead; - } - - return false; - } - - public static object GetPropertyValue(this object obj, string propertyName) - { - var property = obj.GetType().GetProperty(propertyName); - if (property != null && property.CanRead) - { - return property.GetValue(obj, null); - } - - return null; - } - /// /// Takes an enum Type and generates a list of strings from the description attributes /// @@ -193,62 +133,5 @@ namespace BizHawk.Common.ReflectionExtensions { return (T)o.GetType().GetCustomAttributes(typeof(T), false)[0]; } - - /// - /// where the fields begin relative to the address an object references points to - /// - public static IntPtr ManagedFieldStart => _managedfieldstart; - - [StructLayout(LayoutKind.Explicit)] - private class Junkus - { - [FieldOffset(0)] - public IntPtr s; - } - - static IntPtr _managedfieldstart = GetManagedOffset(typeof(Junkus).GetField("s")); - - /// - /// the address of a field relative to the address an object reference of that type points to. this function is very expensive to call. - /// - public static IntPtr GetManagedOffset(this FieldInfo field) - { - Type type = field.DeclaringType; - - var dyn = new System.Reflection.Emit.DynamicMethod( - "xxz0", typeof(IntPtr), new Type[] { typeof(object) }, typeof(ReflectionExtensions).Module, true); - var il = dyn.GetILGenerator(); - - var pin = il.DeclareLocal(type, true); - var baseaddr = il.DeclareLocal(typeof(IntPtr)); - - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Stloc, pin); // force cast object to type (invalid), and pin - - il.Emit(OpCodes.Ldloc, pin); // base address of reference (points to typeinfo) - il.Emit(OpCodes.Conv_I); // convert object ref to intptr (invalid) - il.Emit(OpCodes.Stloc, baseaddr); - - il.Emit(OpCodes.Ldloc, pin); - il.Emit(OpCodes.Ldflda, field); // address of desired field - il.Emit(OpCodes.Conv_I); // convert field& to intptr (invalid) - il.Emit(OpCodes.Ldloc, baseaddr); - il.Emit(OpCodes.Sub); - il.Emit(OpCodes.Ret); - - return (IntPtr)dyn.Invoke(null, new object[] { new object() }); - } - - public static bool ThrowsError(this MethodInfo info) - { - var il = info.GetMethodBody().GetILAsByteArray(); - return il[il.Length - 1] == 0x7A; - } - - public static bool IsEmpty(this MethodInfo info) - { - var il = info.GetMethodBody().GetILAsByteArray(); - return il.Length == 1 && il[0] == 0x2A; - } } } diff --git a/BizHawk.Common/Extensions/StringExtensions.cs b/BizHawk.Common/Extensions/StringExtensions.cs index aad03258be..17e0845ef2 100644 --- a/BizHawk.Common/Extensions/StringExtensions.cs +++ b/BizHawk.Common/Extensions/StringExtensions.cs @@ -24,27 +24,11 @@ namespace BizHawk.Common.StringExtensions return str.Substring(0, index); } - public static bool IsValidRomExtentsion(this string str, params string[] romExtensions) - { - var strUpper = str.ToUpper(); - return romExtensions.Any(ext => strUpper.EndsWith(ext.ToUpper())); - } - public static bool In(this string str, params string[] options) { return options.Any(opt => opt.Equals(str, StringComparison.CurrentCultureIgnoreCase)); } - public static bool In(this string str, IEnumerable options) - { - return options.Any(opt => opt.Equals(str, StringComparison.CurrentCultureIgnoreCase)); - } - - public static bool In(this string str, IEnumerable options, Func eval) - { - return options.Any(opt => eval(opt, str)); - } - public static bool NotIn(this string str, params string[] options) { return options.All(opt => opt.ToLower() != str.ToLower()); @@ -128,12 +112,7 @@ namespace BizHawk.Common.StringExtensions /// public static bool IsHex(this string str) { - if (string.IsNullOrWhiteSpace(str)) - { - return false; - } - - return str.All(IsHex); + return !string.IsNullOrWhiteSpace(str) && str.All(IsHex); } /// @@ -154,12 +133,7 @@ namespace BizHawk.Common.StringExtensions /// public static bool IsBinary(this string str) { - if (string.IsNullOrWhiteSpace(str)) - { - return false; - } - - return str.All(IsBinary); + return !string.IsNullOrWhiteSpace(str) && str.All(IsBinary); } /// diff --git a/BizHawk.Common/HawkFile.cs b/BizHawk.Common/HawkFile.cs index 2e50fc27b5..adc5f559eb 100644 --- a/BizHawk.Common/HawkFile.cs +++ b/BizHawk.Common/HawkFile.cs @@ -147,10 +147,8 @@ namespace BizHawk.Common /// public static bool ExistsAt(string path) { - using (var file = new HawkFile(path)) - { - return file.Exists; - } + using var file = new HawkFile(path); + return file.Exists; } /// @@ -158,20 +156,16 @@ namespace BizHawk.Common /// public static byte[] ReadAllBytes(string path) { - using (var file = new HawkFile(path)) + using var file = new HawkFile(path); + if (!file.Exists) { - if (!file.Exists) - { - throw new FileNotFoundException(path); - } - - using (Stream stream = file.GetStream()) - { - var ms = new MemoryStream((int)stream.Length); - stream.CopyTo(ms); - return ms.GetBuffer(); - } + throw new FileNotFoundException(path); } + + using Stream stream = file.GetStream(); + using var ms = new MemoryStream((int)stream.Length); + stream.CopyTo(ms); + return ms.GetBuffer(); } /// diff --git a/BizHawk.Common/IPC/SharedMemoryBlock.cs b/BizHawk.Common/IPC/SharedMemoryBlock.cs deleted file mode 100644 index 72a591efa8..0000000000 --- a/BizHawk.Common/IPC/SharedMemoryBlock.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace BizHawk.Common -{ - public unsafe class SharedMemoryBlock : IDisposable - { - public string Name; - public string BlockName; - public int Size; - public byte* Ptr; - byte[] bytes; - GCHandle handle; - - public void Allocate() - { - bytes = new byte[Size]; - handle = GCHandle.Alloc(bytes, GCHandleType.Pinned); - Ptr = (byte*)handle.AddrOfPinnedObject(); - } - - public void Dispose() - { - handle.Free(); - bytes = null; - } - } -} \ No newline at end of file diff --git a/BizHawk.Common/InstanceDll.cs b/BizHawk.Common/InstanceDll.cs index 8a7b558e73..f2492d09ca 100644 --- a/BizHawk.Common/InstanceDll.cs +++ b/BizHawk.Common/InstanceDll.cs @@ -69,7 +69,7 @@ namespace BizHawk.Common return GetProcAddress(_hModule, procName); } - public IntPtr HModule { get { return _hModule; } } + public IntPtr HModule => _hModule; IntPtr IImportResolver.Resolve(string entryPoint) { diff --git a/BizHawk.Common/MruStack.cs b/BizHawk.Common/MruStack.cs deleted file mode 100644 index 9406ef54d0..0000000000 --- a/BizHawk.Common/MruStack.cs +++ /dev/null @@ -1,62 +0,0 @@ -namespace BizHawk.Common -{ - public class MruStack - { - private readonly T[] _store; - private int _count; - private int _head; - - public MruStack(int capacity) - { - _store = new T[capacity]; - Clear(); - } - - public int Count => _count; - - public void Clear() - { - _head = 0; - _count = 0; - for (int i = 0; i < _store.Length; i++) - { - _store[i] = default(T); - } - } - - public void Push(T value) - { - _store[_head] = value; - _head = (_head + 1) % _store.Length; - - if (_count < _store.Length) - { - _count++; - } - } - - public T Pop() - { - if (_count == 0) - { - return default(T); - } - - _head--; - if (_head < 0) - { - _head = _store.Length - 1; - } - - _count--; - T value = _store[_head]; - _store[_head] = default(T); - return value; - } - - public bool HasElements() - { - return _count > 0; - } - } -} \ No newline at end of file diff --git a/BizHawk.Common/MutableIntRange.cs b/BizHawk.Common/MutableIntRange.cs index 8309e6ffd0..c9c0a4c260 100644 --- a/BizHawk.Common/MutableIntRange.cs +++ b/BizHawk.Common/MutableIntRange.cs @@ -9,10 +9,7 @@ namespace BizHawk.Common public int Min { - get - { - return _min; - } + get => _min; set { if (_max < value) throw new ArgumentException(); @@ -22,10 +19,7 @@ namespace BizHawk.Common public int Max { - get - { - return _max; - } + get => _max; set { if (value < _min) throw new ArgumentException(); diff --git a/BizHawk.Common/QuickCollections.cs b/BizHawk.Common/QuickCollections.cs index 776c6b3b90..8f15e653e4 100644 --- a/BizHawk.Common/QuickCollections.cs +++ b/BizHawk.Common/QuickCollections.cs @@ -19,14 +19,11 @@ namespace BizHawk.Common public T this[int index] { - get { return buffer[index]; } - set { buffer[index] = value; } + get => buffer[index]; + set => buffer[index] = value; } - public int Count - { - get { return Position; } - } + public int Count => Position; public void Add(T item) { @@ -53,7 +50,7 @@ namespace BizHawk.Common buffer = new T[capacity]; } - public int Count { get { return size; } } + public int Count => size; public void Enqueue(T item) { @@ -130,10 +127,7 @@ namespace BizHawk.Common return dict.ContainsKey(key); } - public ICollection Keys - { - get { return dict.Keys; } - } + public ICollection Keys => dict.Keys; public bool Remove(TKey key) { @@ -145,15 +139,12 @@ namespace BizHawk.Common return dict.TryGetValue(key, out value); } - public ICollection Values - { - get { return dict.Values; } - } + public ICollection Values => dict.Values; public TValue this[TKey key] { - get { return dict[key]; } - set { throw new InvalidOperationException(); } + get => dict[key]; + set => throw new InvalidOperationException(); } public void Add(KeyValuePair item) @@ -176,15 +167,9 @@ namespace BizHawk.Common dict.CopyTo(array, arrayIndex); } - public int Count - { - get { return dict.Count; } - } + public int Count => dict.Count; - public bool IsReadOnly - { - get { return true; } - } + public bool IsReadOnly => true; public bool Remove(KeyValuePair item) { diff --git a/BizHawk.Common/Serializer.cs b/BizHawk.Common/Serializer.cs index ae0a3df4c0..2e94f0643b 100644 --- a/BizHawk.Common/Serializer.cs +++ b/BizHawk.Common/Serializer.cs @@ -14,40 +14,19 @@ namespace BizHawk.Common #region Public - public bool IsReader - { - get { return _isReader; } - } + public bool IsReader => _isReader; - public bool IsWriter - { - get { return !IsReader; } - } + public bool IsWriter => !IsReader; - public bool IsText - { - get { return _isText; } - } + public bool IsText => _isText; - public BinaryReader BinaryReader - { - get { return _br; } - } + public BinaryReader BinaryReader => _br; - public BinaryWriter BinaryWriter - { - get { return _bw; } - } + public BinaryWriter BinaryWriter => _bw; - public TextReader TextReader - { - get { return _tr; } - } + public TextReader TextReader => _tr; - public TextWriter TextWriter - { - get { return _tw; } - } + public TextWriter TextWriter => _tw; public Serializer(BinaryWriter bw) { @@ -118,7 +97,7 @@ namespace BizHawk.Common public void BeginSection(string name) { - this._sections.Push(name); + _sections.Push(name); if (IsText) { if (IsWriter) @@ -135,7 +114,7 @@ namespace BizHawk.Common public void EndSection() { - var name = this._sections.Pop(); + var name = _sections.Pop(); if (IsText) { if (IsWriter) diff --git a/BizHawk.Common/Sprintf.cs b/BizHawk.Common/Sprintf.cs deleted file mode 100644 index 3a7eb397c2..0000000000 --- a/BizHawk.Common/Sprintf.cs +++ /dev/null @@ -1,683 +0,0 @@ -//Richard Prinz, MIT license -//http://www.codeproject.com/Articles/19274/A-printf-implementation-in-C - -using System; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using System.Runtime.InteropServices; - -namespace BizHawk.Common -{ - public static unsafe class Sprintf - { - #region Public Methods - #region IsNumericType - /// - /// Determines whether the specified value is of numeric type. - /// - /// The object to check. - /// - /// true if o is a numeric type; otherwise, false. - /// - public static bool IsNumericType( object o ) - { - return ( o is byte || - o is sbyte || - o is short || - o is ushort || - o is int || - o is uint || - o is long || - o is ulong || - o is float || - o is double || - o is decimal ); - } - #endregion - #region IsPositive - /// - /// Determines whether the specified value is positive. - /// - /// The value. - /// if set to true treats 0 as positive. - /// - /// true if the specified value is positive; otherwise, false. - /// - public static bool IsPositive( object Value, bool ZeroIsPositive ) - { - switch ( Type.GetTypeCode( Value.GetType() ) ) - { - case TypeCode.SByte: - return ( ZeroIsPositive ? (sbyte)Value >= 0 : (sbyte)Value > 0 ); - case TypeCode.Int16: - return ( ZeroIsPositive ? (short)Value >= 0 : (short)Value > 0 ); - case TypeCode.Int32: - return ( ZeroIsPositive ? (int)Value >= 0 : (int)Value > 0 ); - case TypeCode.Int64: - return ( ZeroIsPositive ? (long)Value >= 0 : (long)Value > 0 ); - case TypeCode.Single: - return ( ZeroIsPositive ? (float)Value >= 0 : (float)Value > 0 ); - case TypeCode.Double: - return ( ZeroIsPositive ? (double)Value >= 0 : (double)Value > 0 ); - case TypeCode.Decimal: - return ( ZeroIsPositive ? (decimal)Value >= 0 : (decimal)Value > 0 ); - case TypeCode.Byte: - return ( ZeroIsPositive ? true : (byte)Value > 0 ); - case TypeCode.UInt16: - return ( ZeroIsPositive ? true : (ushort)Value > 0 ); - case TypeCode.UInt32: - return ( ZeroIsPositive ? true : (uint)Value > 0 ); - case TypeCode.UInt64: - return ( ZeroIsPositive ? true : (ulong)Value > 0 ); - case TypeCode.Char: - return ( ZeroIsPositive ? true : (char)Value != '\0' ); - default: - return false; - } - } - #endregion - #region ToUnsigned - /// - /// Converts the specified values boxed type to its correpsonding unsigned - /// type. - /// - /// The value. - /// A boxed numeric object whos type is unsigned. - public static object ToUnsigned( object Value ) - { - switch ( Type.GetTypeCode( Value.GetType() ) ) - { - case TypeCode.SByte: - return (byte)( (sbyte)Value ); - case TypeCode.Int16: - return (ushort)( (short)Value ); - case TypeCode.Int32: - return (uint)( (int)Value ); - case TypeCode.Int64: - return (ulong)( (long)Value ); - - case TypeCode.Byte: - return Value; - case TypeCode.UInt16: - return Value; - case TypeCode.UInt32: - return Value; - case TypeCode.UInt64: - return Value; - - case TypeCode.Single: - return (UInt32)( (float)Value ); - case TypeCode.Double: - return (ulong)( (double)Value ); - case TypeCode.Decimal: - return (ulong)( (decimal)Value ); - - default: - return null; - } - } - #endregion - #region ToInteger - /// - /// Converts the specified values boxed type to its correpsonding integer - /// type. - /// - /// The value. - /// A boxed numeric object whos type is an integer type. - public static object ToInteger( object Value, bool Round ) - { - switch ( Type.GetTypeCode( Value.GetType() ) ) - { - case TypeCode.SByte: - return Value; - case TypeCode.Int16: - return Value; - case TypeCode.Int32: - return Value; - case TypeCode.Int64: - return Value; - - case TypeCode.Byte: - return Value; - case TypeCode.UInt16: - return Value; - case TypeCode.UInt32: - return Value; - case TypeCode.UInt64: - return Value; - - case TypeCode.Single: - return ( Round ? (int)Math.Round( (float)Value ) : (int)( (float)Value ) ); - case TypeCode.Double: - return ( Round ? (long)Math.Round( (double)Value ) : (long)( (double)Value ) ); - case TypeCode.Decimal: - return ( Round ? Math.Round( (decimal)Value ) : (decimal)Value ); - - default: - return null; - } - } - #endregion - #region UnboxToLong - public static long UnboxToLong( object Value, bool Round ) - { - switch ( Type.GetTypeCode( Value.GetType() ) ) - { - case TypeCode.SByte: - return (long)( (sbyte)Value ); - case TypeCode.Int16: - return (long)( (short)Value ); - case TypeCode.Int32: - return (long)( (int)Value ); - case TypeCode.Int64: - return (long)Value; - - case TypeCode.Byte: - return (long)( (byte)Value ); - case TypeCode.UInt16: - return (long)( (ushort)Value ); - case TypeCode.UInt32: - return (long)( (uint)Value ); - case TypeCode.UInt64: - return (long)( (ulong)Value ); - - case TypeCode.Single: - return ( Round ? (long)Math.Round( (float)Value ) : (long)( (float)Value ) ); - case TypeCode.Double: - return ( Round ? (long)Math.Round( (double)Value ) : (long)( (double)Value ) ); - case TypeCode.Decimal: - return ( Round ? (long)Math.Round( (decimal)Value ) : (long)( (decimal)Value ) ); - - default: - return 0; - } - } - #endregion - #region ReplaceMetaChars - /// - /// Replaces the string representations of meta chars with their corresponding - /// character values. - /// - /// The input. - /// A string with all string meta chars are replaced - public static string ReplaceMetaChars( string input ) - { - return Regex.Replace( input, @"(\\)(\d{3}|[^\d])?", new MatchEvaluator( ReplaceMetaCharsMatch ) ); - } - private static string ReplaceMetaCharsMatch( Match m ) - { - // convert octal quotes (like \040) - if ( m.Groups[2].Length == 3 ) - return Convert.ToChar( Convert.ToByte( m.Groups[2].Value, 8 ) ).ToString(); - else - { - // convert all other special meta characters - //TODO: \xhhh hex and possible dec !! - switch ( m.Groups[2].Value ) - { - case "0": // null - return "\0"; - case "a": // alert (beep) - return "\a"; - case "b": // BS - return "\b"; - case "f": // FF - return "\f"; - case "v": // vertical tab - return "\v"; - case "r": // CR - return "\r"; - case "n": // LF - return "\n"; - case "t": // Tab - return "\t"; - default: - // if neither an octal quote nor a special meta character - // so just remove the backslash - return m.Groups[2].Value; - } - } - } - #endregion - - static double GetDouble(IntPtr first, IntPtr second) - { - var ms = new MemoryStream(8); - var bw = new BinaryWriter(ms); - bw.Write(first.ToInt32()); - bw.Write(second.ToInt32()); - bw.Flush(); - ms.Position = 0; - var br = new BinaryReader(ms); - return br.ReadDouble(); - } - - #region sprintf - public static string sprintf( string Format, Func fetcher ) - { - #region Variables - StringBuilder f = new StringBuilder(); - Regex r = new Regex( @"\%(\d*\$)?([\'\#\-\+ ]*)(\d*)(?:\.(\d+))?([hl])?([dioxXucsfeEgGpn%])" ); - //"%[parameter][flags][width][.precision][length]type" - Match m = null; - string w = ""; - int defaultParamIx = 0; - int paramIx; - object o = null; - - bool flagLeft2Right = false; - bool flagAlternate = false; - bool flagPositiveSign = false; - bool flagPositiveSpace = false; - bool flagZeroPadding = false; - bool flagGroupThousands = false; - - int fieldLength = 0; - int fieldPrecision = 0; - char shortLongIndicator = '\0'; - char formatSpecifier = '\0'; - char paddingCharacter = ' '; - #endregion - - // find all format parameters in format string - f.Append( Format ); - m = r.Match( f.ToString() ); - while ( m.Success ) - { - #region parameter index - paramIx = defaultParamIx; - if ( m.Groups[1] != null && m.Groups[1].Value.Length > 0 ) - { - string val = m.Groups[1].Value.Substring( 0, m.Groups[1].Value.Length - 1 ); - paramIx = Convert.ToInt32( val ) - 1; - }; - #endregion - - #region format flags - // extract format flags - flagAlternate = false; - flagLeft2Right = false; - flagPositiveSign = false; - flagPositiveSpace = false; - flagZeroPadding = false; - flagGroupThousands = false; - if ( m.Groups[2] != null && m.Groups[2].Value.Length > 0 ) - { - string flags = m.Groups[2].Value; - - flagAlternate = ( flags.IndexOf( '#' ) >= 0 ); - flagLeft2Right = ( flags.IndexOf( '-' ) >= 0 ); - flagPositiveSign = ( flags.IndexOf( '+' ) >= 0 ); - flagPositiveSpace = ( flags.IndexOf( ' ' ) >= 0 ); - flagGroupThousands = ( flags.IndexOf( '\'' ) >= 0 ); - - // positive + indicator overrides a - // positive space character - if ( flagPositiveSign && flagPositiveSpace ) - flagPositiveSpace = false; - } - #endregion - - #region field length - // extract field length and - // pading character - paddingCharacter = ' '; - fieldLength = int.MinValue; - if ( m.Groups[3] != null && m.Groups[3].Value.Length > 0 ) - { - fieldLength = Convert.ToInt32( m.Groups[3].Value ); - flagZeroPadding = ( m.Groups[3].Value[0] == '0' ); - } - #endregion - - if ( flagZeroPadding ) - paddingCharacter = '0'; - - // left2right allignment overrides zero padding - if ( flagLeft2Right && flagZeroPadding ) - { - flagZeroPadding = false; - paddingCharacter = ' '; - } - - #region field precision - // extract field precision - fieldPrecision = int.MinValue; - if ( m.Groups[4] != null && m.Groups[4].Value.Length > 0 ) - fieldPrecision = Convert.ToInt32( m.Groups[4].Value ); - #endregion - - #region short / long indicator - // extract short / long indicator - shortLongIndicator = Char.MinValue; - if ( m.Groups[5] != null && m.Groups[5].Value.Length > 0 ) - shortLongIndicator = m.Groups[5].Value[0]; - #endregion - - #region format specifier - // extract format - formatSpecifier = Char.MinValue; - if ( m.Groups[6] != null && m.Groups[6].Value.Length > 0 ) - formatSpecifier = m.Groups[6].Value[0]; - #endregion - - // default precision is 6 digits if none is specified except - if ( fieldPrecision == int.MinValue && - formatSpecifier != 's' && - formatSpecifier != 'c' && - Char.ToUpper( formatSpecifier ) != 'X' && - formatSpecifier != 'o' ) - fieldPrecision = 6; - - #region get next value parameter - IntPtr n = fetcher(); - // get next value parameter and convert value parameter depending on short / long indicator - //if ( Parameters == null || paramIx >= Parameters.Length ) - // o = null; - //else - { - if (shortLongIndicator == 'h') - { - o = (short)(n.ToInt32()); - } - else if (shortLongIndicator == 'l') - { - //zero 08-nov-2015 - something like this for longs, but i dont think this is a long - //o = n.ToInt32() + (((long)(fetcher().ToInt32()) << 32)); - throw new InvalidOperationException("horn-rimmed astatine embryology"); - } - else o = n.ToInt32(); - } - #endregion - - // convert value parameters to a string depending on the formatSpecifier - w = ""; - switch ( formatSpecifier ) - { - #region % - character - case '%': // % character - w = "%"; - break; - #endregion - #region d - integer - case 'd': // integer - w = FormatNumber( ( flagGroupThousands ? "n" : "d" ), flagAlternate, - fieldLength, int.MinValue, flagLeft2Right, - flagPositiveSign, flagPositiveSpace, - paddingCharacter, o ); - defaultParamIx++; - break; - #endregion - #region i - integer - case 'i': // integer - goto case 'd'; - #endregion - #region o - octal integer - case 'o': // octal integer - no leading zero - w = FormatOct( "o", flagAlternate, - fieldLength, int.MinValue, flagLeft2Right, - paddingCharacter, o ); - defaultParamIx++; - break; - #endregion - #region x - hex integer - case 'x': // hex integer - no leading zero - w = FormatHex( "x", flagAlternate, - fieldLength, fieldPrecision, flagLeft2Right, - paddingCharacter, o ); - defaultParamIx++; - break; - #endregion - #region X - hex integer - case 'X': // same as x but with capital hex characters - w = FormatHex( "X", flagAlternate, - fieldLength, fieldPrecision, flagLeft2Right, - paddingCharacter, o ); - defaultParamIx++; - break; - #endregion - #region u - unsigned integer - case 'u': // unsigned integer - w = FormatNumber( ( flagGroupThousands ? "n" : "d" ), flagAlternate, - fieldLength, int.MinValue, flagLeft2Right, - false, false, - paddingCharacter, ToUnsigned( o ) ); - defaultParamIx++; - break; - #endregion - #region c - character - case 'c': // character - w = ((char)(n.ToInt32())).ToString(); - defaultParamIx++; - break; - #endregion - #region s - string - case 's': // string - string t = "{0" + ( fieldLength != int.MinValue ? "," + ( flagLeft2Right ? "-" : "" ) + fieldLength.ToString() : "" ) + ":s}"; - if (n == IntPtr.Zero) - w = "(null)"; - else w = Marshal.PtrToStringAnsi(n); - if ( fieldPrecision >= 0 ) - w = w.Substring( 0, fieldPrecision ); - - if ( fieldLength != int.MinValue ) - if ( flagLeft2Right ) - w = w.PadRight( fieldLength, paddingCharacter ); - else - w = w.PadLeft( fieldLength, paddingCharacter ); - defaultParamIx++; - break; - #endregion - #region f - double number - case 'f': // double - o = GetDouble(n, fetcher()); - w = FormatNumber( ( flagGroupThousands ? "n" : "f" ), flagAlternate, - fieldLength, fieldPrecision, flagLeft2Right, - flagPositiveSign, flagPositiveSpace, - paddingCharacter, o ); - defaultParamIx++; - break; - #endregion - #region e - exponent number - case 'e': // double / exponent - o = GetDouble(n, fetcher()); - w = FormatNumber( "e", flagAlternate, - fieldLength, fieldPrecision, flagLeft2Right, - flagPositiveSign, flagPositiveSpace, - paddingCharacter, o ); - defaultParamIx++; - break; - #endregion - #region E - exponent number - case 'E': // double / exponent - throw new InvalidOperationException("cataleptic kangaroo orchestra"); - //w = FormatNumber( "E", flagAlternate, - // fieldLength, fieldPrecision, flagLeft2Right, - // flagPositiveSign, flagPositiveSpace, - // paddingCharacter, o ); - //defaultParamIx++; - //break; - #endregion - #region g - general number - case 'g': // double / exponent - throw new InvalidOperationException("cataleptic kangaroo orchestra"); - //w = FormatNumber( "g", flagAlternate, - // fieldLength, fieldPrecision, flagLeft2Right, - // flagPositiveSign, flagPositiveSpace, - // paddingCharacter, o ); - //defaultParamIx++; - //break; - #endregion - #region G - general number - case 'G': // double / exponent - throw new InvalidOperationException("cataleptic kangaroo orchestra"); - //w = FormatNumber( "G", flagAlternate, - // fieldLength, fieldPrecision, flagLeft2Right, - // flagPositiveSign, flagPositiveSpace, - // paddingCharacter, o ); - //defaultParamIx++; - //break; - #endregion - #region p - pointer - case 'p': // pointer - if ( o is IntPtr ) - w = "0x" + n.ToString( "x" ); - defaultParamIx++; - break; - #endregion - #region n - number of processed chars so far - case 'n': // number of characters so far - w = FormatNumber( "d", flagAlternate, - fieldLength, int.MinValue, flagLeft2Right, - flagPositiveSign, flagPositiveSpace, - paddingCharacter, m.Index ); - break; - #endregion - default: - w = ""; - defaultParamIx++; - break; - } - - // replace format parameter with parameter value - // and start searching for the next format parameter - // AFTER the position of the current inserted value - // to prohibit recursive matches if the value also - // includes a format specifier - f.Remove( m.Index, m.Length ); - f.Insert( m.Index, w ); - m = r.Match( f.ToString(), m.Index + w.Length ); - } - - return f.ToString(); - } - #endregion - #endregion - - #region Private Methods - #region FormatOCT - private static string FormatOct( string NativeFormat, bool Alternate, - int FieldLength, int FieldPrecision, - bool Left2Right, - char Padding, object Value ) - { - string w = ""; - string lengthFormat = "{0" + ( FieldLength != int.MinValue ? - "," + ( Left2Right ? - "-" : - "" ) + FieldLength.ToString() : - "" ) + "}"; - - if ( IsNumericType( Value ) ) - { - w = Convert.ToString( UnboxToLong( Value, true ), 8 ); - - if ( Left2Right || Padding == ' ' ) - { - if ( Alternate && w != "0" ) - w = "0" + w; - w = String.Format( lengthFormat, w ); - } - else - { - if ( FieldLength != int.MinValue ) - w = w.PadLeft( FieldLength - ( Alternate && w != "0" ? 1 : 0 ), Padding ); - if ( Alternate && w != "0" ) - w = "0" + w; - } - } - - return w; - } - #endregion - #region FormatHEX - private static string FormatHex( string NativeFormat, bool Alternate, - int FieldLength, int FieldPrecision, - bool Left2Right, - char Padding, object Value ) - { - string w = ""; - string lengthFormat = "{0" + ( FieldLength != int.MinValue ? - "," + ( Left2Right ? - "-" : - "" ) + FieldLength.ToString() : - "" ) + "}"; - string numberFormat = "{0:" + NativeFormat + ( FieldPrecision != int.MinValue ? - FieldPrecision.ToString() : - "" ) + "}"; - - if ( IsNumericType( Value ) ) - { - w = String.Format( numberFormat, Value ); - - if ( Left2Right || Padding == ' ' ) - { - if ( Alternate ) - w = ( NativeFormat == "x" ? "0x" : "0X" ) + w; - w = String.Format( lengthFormat, w ); - } - else - { - if ( FieldLength != int.MinValue ) - w = w.PadLeft( FieldLength - ( Alternate ? 2 : 0 ), Padding ); - if ( Alternate ) - w = ( NativeFormat == "x" ? "0x" : "0X" ) + w; - } - } - - return w; - } - #endregion - #region FormatNumber - private static string FormatNumber( string NativeFormat, bool Alternate, - int FieldLength, int FieldPrecision, - bool Left2Right, - bool PositiveSign, bool PositiveSpace, - char Padding, object Value ) - { - string w = ""; - string lengthFormat = "{0" + ( FieldLength != int.MinValue ? - "," + ( Left2Right ? - "-" : - "" ) + FieldLength.ToString() : - "" ) + "}"; - string numberFormat = "{0:" + NativeFormat + ( FieldPrecision != int.MinValue ? - FieldPrecision.ToString() : - "0" ) + "}"; - - if ( IsNumericType( Value ) ) - { - w = String.Format( numberFormat, Value ); - - if ( Left2Right || Padding == ' ' ) - { - if ( IsPositive( Value, true ) ) - w = ( PositiveSign ? - "+" : ( PositiveSpace ? " " : "" ) ) + w; - w = String.Format( lengthFormat, w ); - } - else - { - if ( w.StartsWith( "-" ) ) - w = w.Substring( 1 ); - if ( FieldLength != int.MinValue ) - w = w.PadLeft( FieldLength - 1, Padding ); - if ( IsPositive( Value, true ) ) - w = ( PositiveSign ? - "+" : ( PositiveSpace ? - " " : ( FieldLength != int.MinValue ? - Padding.ToString() : "" ) ) ) + w; - else - w = "-" + w; - } - } - - return w; - } - #endregion - #endregion - } -} - - diff --git a/BizHawk.Common/SwitcherStream.cs b/BizHawk.Common/SwitcherStream.cs index 0be955d7e4..8383bcf8ae 100644 --- a/BizHawk.Common/SwitcherStream.cs +++ b/BizHawk.Common/SwitcherStream.cs @@ -15,10 +15,6 @@ namespace BizHawk.Common // switchstream method? flush old stream? private Stream _currStream; - public SwitcherStream() - { - } - /// /// if this is enabled, seeks to Begin,0 will get ignored; anything else will be an exception /// @@ -34,11 +30,7 @@ namespace BizHawk.Common public override long Position { - get - { - return _currStream.Position; - } - + get => _currStream.Position; set { if (DenySeekHack) @@ -55,11 +47,6 @@ namespace BizHawk.Common } } - public void SetCurrStream(Stream str) - { - _currStream = str; - } - public override void Flush() { _currStream.Flush(); diff --git a/BizHawk.Common/UndoHistory.cs b/BizHawk.Common/UndoHistory.cs index a17e5d054f..66bedf1354 100644 --- a/BizHawk.Common/UndoHistory.cs +++ b/BizHawk.Common/UndoHistory.cs @@ -16,12 +16,6 @@ namespace BizHawk.Common Enabled = enabled; } - public UndoHistory(IEnumerable newState, bool enabled) - { - AddState(newState); - Enabled = enabled; - } - public bool Enabled { get; } public bool CanUndo => Enabled && _curPos > 1; diff --git a/BizHawk.Common/UnmanagedResourceHeap.cs b/BizHawk.Common/UnmanagedResourceHeap.cs deleted file mode 100644 index 14ed39ea73..0000000000 --- a/BizHawk.Common/UnmanagedResourceHeap.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; - -namespace BizHawk.Common -{ - public class UnmanagedResourceHeap : IDisposable - { - public IntPtr StringToHGlobalAnsi(string str) - { - var ret = Marshal.StringToHGlobalAnsi(str); - HGlobals.Add(ret); - return ret; - } - - public List HGlobals = new List(); - - public void Dispose() - { - foreach (var h in HGlobals) - { - Marshal.FreeHGlobal(h); - } - - HGlobals.Clear(); - } - } -} diff --git a/BizHawk.Common/Util.cs b/BizHawk.Common/Util.cs index 17c8a90722..bbc6debdd7 100644 --- a/BizHawk.Common/Util.cs +++ b/BizHawk.Common/Util.cs @@ -7,7 +7,7 @@ using System.Text; namespace BizHawk.Common { - public static unsafe partial class Util + public static unsafe class Util { public static void CopyStream(Stream src, Stream dest, long len) { @@ -89,29 +89,6 @@ namespace BizHawk.Common return TryWaitForFileToVanish(pathWant); } - public static bool IsPowerOfTwo(int x) - { - if (x == 0 || x == 1) - { - return true; - } - - return (x & (x - 1)) == 0; - } - - public static int SaveRamBytesUsed(byte[] saveRam) - { - for (var i = saveRam.Length - 1; i >= 0; i--) - { - if (saveRam[i] != 0) - { - return i + 1; - } - } - - return 0; - } - // Could be extension method public static byte[] HexStringToBytes(string str) { @@ -351,12 +328,6 @@ namespace BizHawk.Common return ret; } - public static int Memcmp(void* a, string b, int len) - { - fixed (byte* bp = Encoding.ASCII.GetBytes(b)) - return Memcmp(a, bp, len); - } - public static int Memcmp(void* a, void* b, int len) { var ba = (byte*)a; @@ -384,17 +355,6 @@ namespace BizHawk.Common } } - public static void Memset32(void* ptr, int val, int len) - { - System.Diagnostics.Debug.Assert(len % 4 == 0); - int dwords = len / 4; - int* dwptr = (int*)ptr; - for (int i = 0; i < dwords; i++) - { - dwptr[i] = val; - } - } - public static string FormatFileSize(long filesize) { decimal size = filesize; @@ -447,8 +407,7 @@ namespace BizHawk.Common foreach (var kvp in first) { - TValue secondValue; - if (!second.TryGetValue(kvp.Key, out secondValue)) + if (!second.TryGetValue(kvp.Key, out var secondValue)) { return false; } @@ -481,23 +440,6 @@ namespace BizHawk.Common } } - public static class BitConverterLE - { - public static void WriteBytes(ushort value, byte[] dst, int index) - { - dst[index ] = (byte)(value ); - dst[index + 1] = (byte)(value >> 8); - } - - public static void WriteBytes(uint value, byte[] dst, int index) - { - dst[index ] = (byte)(value ); - dst[index + 1] = (byte)(value >> 8); - dst[index + 2] = (byte)(value >> 16); - dst[index + 3] = (byte)(value >> 24); - } - } - public static class VLInteger { public static void WriteUnsigned(uint value, byte[] data, ref int index) diff --git a/BizHawk.Emulation.Common/Base Implementations/MemoryCallbackSystem.cs b/BizHawk.Emulation.Common/Base Implementations/MemoryCallbackSystem.cs index 7a929cf8be..458cec1173 100644 --- a/BizHawk.Emulation.Common/Base Implementations/MemoryCallbackSystem.cs +++ b/BizHawk.Emulation.Common/Base Implementations/MemoryCallbackSystem.cs @@ -295,11 +295,6 @@ namespace BizHawk.Emulation.Common { public MemoryCallback(string scope, MemoryCallbackType type, string name, MemoryCallbackDelegate callback, uint? address, uint? mask) { - if (type == MemoryCallbackType.Execute && !address.HasValue) - { - throw new InvalidOperationException("When assigning an execute callback, an address must be specified"); - } - Type = type; Name = name; Callback = callback; diff --git a/BizHawk.Emulation.Common/Base Implementations/NullEmulator.cs b/BizHawk.Emulation.Common/Base Implementations/NullEmulator.cs index 3792f583f1..1e2bf7a617 100644 --- a/BizHawk.Emulation.Common/Base Implementations/NullEmulator.cs +++ b/BizHawk.Emulation.Common/Base Implementations/NullEmulator.cs @@ -1,30 +1,16 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.IO; - -using BizHawk.Common; - -namespace BizHawk.Emulation.Common +namespace BizHawk.Emulation.Common { [Core("NullHawk", "", false, true)] - [ServiceNotApplicable(typeof(IStatable), typeof(ISaveRam), typeof(IDriveLight), typeof(ICodeDataLogger), typeof(IMemoryDomains), - typeof(IDebuggable), typeof(IDisassemblable), typeof(IInputPollable), typeof(IRegionable), typeof(ITraceable), typeof(IBoardInfo))] - public class NullEmulator : IEmulator, IVideoProvider, ISoundProvider, ISettable + [ServiceNotApplicable(typeof(IStatable), typeof(ISaveRam), typeof(IDriveLight), typeof(ICodeDataLogger), typeof(IMemoryDomains), typeof(ISettable<,>), + typeof(IDebuggable), typeof(IDisassemblable), typeof(IInputPollable), typeof(IRegionable), typeof(ITraceable), typeof(IBoardInfo), typeof(ISoundProvider))] + public class NullEmulator : IEmulator, IVideoProvider { - public NullEmulator(CoreComm comm, object settings) + private readonly int[] _frameBuffer = new int[NullVideo.DefaultWidth * NullVideo.DefaultHeight]; + + public NullEmulator(CoreComm comm) { - SyncMode = SyncSoundMode.Sync; ServiceProvider = new BasicServiceProvider(this); CoreComm = comm; - _settings = (NullEmulatorSettings)settings ?? new NullEmulatorSettings(); - - var d = DateTime.Now; - _xmas = d.Month == 12 && d.Day >= 17 && d.Day <= 27; - if (_xmas) - { - _pleg = new Pleg(); - } } #region IEmulator @@ -33,48 +19,9 @@ namespace BizHawk.Emulation.Common public ControllerDefinition ControllerDefinition => NullController.Instance.Definition; - public bool FrameAdvance(IController controller, bool render, bool renderSound) - { - if (render == false) - { - return true; - } + public bool FrameAdvance(IController controller, bool render, bool renderSound) => true; - if (!_settings.SnowyDisplay) - { - if (_frameBufferClear) - { - return true; - } - - _frameBufferClear = true; - Array.Clear(_frameBuffer, 0, 256 * 192); - return true; - } - - _frameBufferClear = false; - if (_xmas) - { - for (int i = 0; i < 256 * 192; i++) - { - byte b = (byte)_rand.Next(); - _frameBuffer[i] = Colors.ARGB(b, (byte)(255 - b), 0, 255); - } - } - else - { - for (int i = 0; i < 256 * 192; i++) - { - _frameBuffer[i] = Colors.Luminosity((byte)_rand.Next()); - } - } - - Frame++; - - return true; - } - - public int Frame { get; private set; } + public int Frame => 0; public string SystemId => "NULL"; @@ -82,7 +29,6 @@ namespace BizHawk.Emulation.Common public void ResetCounters() { - Frame = 0; } public string BoardName => null; @@ -97,10 +43,7 @@ namespace BizHawk.Emulation.Common #region IVideoProvider - public int[] GetVideoBuffer() - { - return _frameBuffer; - } + public int[] GetVideoBuffer() => _frameBuffer; public int VirtualWidth => NullVideo.DefaultWidth; @@ -117,388 +60,5 @@ namespace BizHawk.Emulation.Common public int VsyncDenominator => NullVideo.DefaultVsyncDen; #endregion - - #region ISoundProvider - - public void GetSamplesSync(out short[] samples, out int nsamp) - { - if (SyncMode != SyncSoundMode.Sync) - { - throw new InvalidOperationException("Attempt to call a Sync method in async mode"); - } - - nsamp = 735; - samples = _sampleBuffer; - if (!_settings.SnowyDisplay) - { - return; - } - - if (_xmas) - { - _pleg.Generate(samples); - } - } - - public void DiscardSamples() - { - } - - public void GetSamplesAsync(short[] samples) - { - if (SyncMode != SyncSoundMode.Async) - { - throw new InvalidOperationException("Attempt to call an Async method in sync mode"); - } - - if (!_settings.SnowyDisplay) - { - return; - } - - if (_xmas) - { - _pleg.Generate(samples); - } - } - - public bool CanProvideAsync => true; - - public SyncSoundMode SyncMode { get; private set; } - - public void SetSyncMode(SyncSoundMode mode) - { - SyncMode = mode; - } - - #endregion - - #region ISettable - - public NullEmulatorSettings GetSettings() - { - return _settings.Clone(); - } - - public object GetSyncSettings() - { - return null; - } - - public bool PutSettings(NullEmulatorSettings o) - { - _settings = o; - return false; - } - - public bool PutSyncSettings(object o) - { - return false; - } - - #endregion - - private readonly int[] _frameBuffer = new int[NullVideo.DefaultWidth * NullVideo.DefaultHeight]; - private readonly short[] _sampleBuffer = new short[735 * 2]; - private readonly Random _rand = new Random(); - - private bool _frameBufferClear = true; - - private readonly bool _xmas; - private readonly Pleg _pleg; - - private NullEmulatorSettings _settings; - - public class NullEmulatorSettings - { - [DefaultValue(false)] - public bool SnowyDisplay { get; set; } - - public NullEmulatorSettings() - { - SettingsUtil.SetDefaultValues(this); - } - - public NullEmulatorSettings Clone() - { - return (NullEmulatorSettings)MemberwiseClone(); - } - } } - - #region super tone generator - - internal class Bell - { - private const int Sampleloop = 15360; - - // ms ima adpcm - private const string Dataz = "H4sICHbdkVQCAGJlbGxzb3V0LnJhdwDtWOdz+nQYz8BZsqmrkJBAXS1JgNZZZqueo4XW8Upt63jpqPOd486X7vf6c7zxzlHQO19pgeqdq4VA62yBBOpqIQvqKknEP8PT50VeJt/k+cwAOPD//D//z390IHx4cQH/z79lQBxgVFuJECSHdxqAznFRFu1ut/wgMS2oe4ogRYBpf7er+OvaOWGNqaa2dDDKDioBfx2Elg5lAGIxI41+JRPTfHvV7m5oF/ohnPR93CQJLkobvyq+zVUj7LjXAQckbxEb2AZQDgTvYvYkpmH9fBeANfR9k7koBfxa4RiKHefflXE9AuCmKE2eSv9gRjjhY+hPDZxjAiPNQTOKXJfV7F4sR/+eaPo1gH3bCNzMdNt3PKdDs5ETY6Q11l4Meqt8beEUZ7m8tZTr6pzfEOVZpvtVgQOusSF/5xUwgBPAvQPjL0WAE+bN/rdlEHeoYHzDqQPXCZDv9zEJv9DXEhuO2lv4ZtXBK0IhqrJSCv3otITeuJWvIJUodp3QZN5z+otgorayrTvQVOJcWhuUtbsJHBALJ0qquqiL67hK1i8L91b2DUx4L+jnPgZtrMBNJaXQht5M/sZOjVXA8HscfJdK6MhrYukhFfk9VPQNXy9cDo61mHMSBcxca5DoOKoBBne25rrrRGah0KkARiItenSiiI8m3huuYV9Z0kg7Wr/3xMDJswwWQFrcXzqoszejHxvpbvlWv4wUE7mIlvwxU/aXsnUPl2gA2z/I3GgqMLZO2LB9m6AgCv+6aMw62FGO6wa0Rwbm4DSkL1aTGlCeRWH74RMJZ0x+58lcqhwxFre5BvUlTICCWrtAxk5fAs88TbTcaft0qz2Wj+xNWx6kbYP8qLLgkM8vS+n6UpErkyMwCiZaSKz7mS0yH/r67vbtJqPcqcRrsc1knu/h+Xib/CIs6zfBmL68M1lK5WAHjq9Hv2LlwOF0kzxxITgBokQzYf7pmn8pfORxw5Of8nriDUGNVkS0j//qscixY3on/r64nlJd3j5de0D2N1eaHAIz0oONwAlsjft2YzL1amCsN28kXvI3A+q5bhjIxZ1IJ6poV+PfdBb1rydAvpSpkc2sbLpx/iCOTMuNjPL1pTCY5w8c+UGJPR9GlGw1DkTeS1T7I1R4IzXonQUzOwIYeorsnuO4JkygmXhTsGfzNPKbzECUmpGBVyPq5e5xdw9RMnkRC0t3uk1axj+LK6zj3rlCXmw+6FAnhA1NwHzrfoVpJmoLfXHH9/rVslh8UCFPyKpywahDoMcnOHqMeEKfzJcShaiUas7uEQ1Wd5kPqHNbhDXqM1Ny7MVMY7oxZR2HFECP7/SNJ94HrWwpWV/tTh1SvnasFn416Zxmu9BPYtJUOY0czFSXc0l1dn+8S1kHdI9RFvSdS1vZYrruQXbHIH9pWY6+Gui4EI9tzoDIJ9lG1I7sj6tM45aBuVgF3LDbulxxpxQZYV+OqY82OHfPgi+g0HO8baAiGD3iSdNpLBTtawRjJZfY96j8nGzMH1iNB9q89EiOQMyQtNqYkonDQIfw/ci4z0H1rMR2gyqW+HZyM/pe5Gh0CCMjXluWogWx65rUo83L3EMo+XYe2MxqVL0XeppVwlKiAT/vJ+SHuueM9CZr4vtCK1VJlakjmNmNm5PSfC7ceEgmbAdphX5/Uk9oQKOVBs+d7x0Zl+7y/eVNtgLWo4MpAZ7M+V8gAJiB/VuOyh5dy/T4XGwjIlPC5U3+CBph/S5v4CPypM+0M/JyE2/M1i+f6U3oQs4PhGsrstMU8rHRpBRuOFsULq/B6EaqbgjHwtHciEnDF5jx0nI+UD/HMX2tUEv4YBmlvFrsqfDgHAxCN2ekcOHm+uVuyGvSO3e2M5Vsk+0GAELnvoSsnRV59mwDr4DoaaLN6WcamLIqp7ASP3hDYKabUbVUTnbPDZGMM6EUw/ZFPGRheyZOLhlrvwwBKH6SrbKVxHrEOsZ1ph45W+EI/4vR76AxeHLnSU1Uox8HbZe7HyplJE4NoJsLNvfeUuPcERKrxeRIhzOAwbFXWcyfjsDFM26BmhHLxHA51I9o3ovONOnWkJaQdfBk3q+my4ExyHc8WUu+xu1Pq6ch8BjIbyZKSTusgYjistYU8hfYlpOKOBi1gNjPl0Lx1wXZr6ZaocbaEcEoqe7c2SCmez1Y68li8oiyIebAB420Yy+mGxStxa0PHlBv7rCYc3ih6vJ9w5e4MueQg3G7fcGBUF50egjOOBl40F7b5mwKfZ+clOBLgIA7LPeuV/v+zjjDEAUg9PqidswgBua47N8eKEa/ouyhLSDUSHu+FClE5LbPkMgLYFFOvwtfVQ3rlHFn1TuUxICo4Fe/DvxJYe1sDbNDb16trEmsBnWEala7xoLwgmCN0gTmGkrErlif02Dk/XglAkDPL1mfzJjJF8OWZ+Cx4PnN+OtiOapGD0lU8cF+bIleT2wixbs1EQucwjCo+ZjW8ynepxNycPhRqZM23V9oPtQhrd5EK1sVneBXpPcgtPNgM1wP7lE+V+iYLrJlTp1DCUz9yzDYaVJbWQdsCr1QaFnvD8+uh/XFI0Djti/DTZ9un8Ih1rVqM2XMZs5IS+JrwDbberA1VSf2wTrneqgx3m2ftDMH/oP5F+OSWLlZE3T2edIOIOfwVdscfJBsJysrDbJLCcd+Kfkq1zgNOYeuchVQvRw5iFfvzKXLHgcaO2CkcD7VHEVMZCdTXmLMkb43z1aj67Od3hiIHmRqGT1xilQhgmCZ1hV53A4rq2rwB9LqzxgrMtFkGyl1ETPc2rj1m9BabvCVlHoR5nHvXKIklIjycBnvEtse4TisITmg4P9xUefKTB1bnwYorMY/P/QSURGUzLuAPmqfG9tcqHDrQZukoZGqUEo3bxlAk5K4vmhTXtegPbOZqS42pjoQ0qd3E9JyU6yfg+J+xhjAZx8kNvnaAwWSAVgSeCdQVvBrbThU26v5dxa5bJHZBgpRfpwh/mwKzVn8kREIKdK9ZWOpK6wTf1F+KNQ/U6Zh7LdMC9n0vRhWUuhiVxkY2HFaDx9hHQMI3ExhZ0v7OvNzdghhd9N7sNJOl9kfoI6HPp1u+/JCLmgHkd6lkpijsKAFj+UZea5+90jPtxmqPuiEHf8W9RckQMlm4HvZL6X1mwfQX+AItGAmtfAWiPSYyxgQlc6SST94i9scVCc3Z7Wo5XkbmmxnzGRB7Bh0xDkt22hZ4McXCSCBH5V8VWE8XeX1k1PiTuD0E+AZyHNmsJvY8vzg8fUWiqmNSHfqJHD28A58KduNdiG3K/TJijTE9q+mWOIGsz/A3nbo6zurka1w14P8KNT8lfDWKPp1rJYsBMqeocH0xwxeWlFIh9HHqpn80lBYI9/1bYj/hpeTFdA5zYGSGtOAtn5LyHMDcotyHwi9B0rsBmlR9Ol+NdEwfqVCrmxTfI/tHjMUaEwq2IZowKtHv/kU8cVIfWoQqF8+0gu1ZqqzZTJhSNFDiYlOvjRrl0ykcTpDOhfNVDiJLl0+4JDdm6orzcgg2CGRnybb3Hq44/L2BDnpCBWiflGovdpIbfR9tZTBauF3WjQ8+e2KCqvtLrwqB332PnxldU1ONU6zPuHlFYPb5w57Y2ZWWmySnZ4byvQyxUwZOqGE9moTH+hoP9VaVJe3uEFfgESN/FJnWpkfU4XINvUXhcLx2kw+VgzaHGEvF9jBaXZa/c1rCCVRnbZJ63jMnJfWGsETEtuJfZIoLhbS9XOQoc/4m9Emg938cS+TC7g9l7YyZQoJy8GbWk4z88KUux+rzQ+fMGWPTkCh4nIz3Zhyw95qvJjU5oaZuprYSFvnoj1vLZ4PV5YGhE+PVdeQgM/41UgU0gB10pvIsVLKmRv03NWZ2pI6i/ROZCEfka8ZeAY7fD4spS1qKCS/hw4W5MhHJOZQVH21QJ5thtUggDSw8uzWrXRtuUEMTsNgf/t8w1tMFYOoCwGcEj2OniY0sNavvUTvztryfp9nKPb+F3mN2n7IMGijQCurRlCnXyDqLu8crWQrmB2wbmGIk5a7PI5x/t6lTUyFZpcYgn4WsGFxfLFIbplHoz5XzJgvJBqjOheCZ15Dq+n6LYxBl8mPPERL7F1apOVo4ebJtnCKaAQwKkP8ZZyYYm5JB0dA2W7f3LgGwTtD8wYfjuXFbeLjKZ8rTp7Xoqv47oMojAJbQ4AtmtlyYM+wp329TO2O1/w2ZbsSWriD718+0vbvzhdu7vYmDkLVpaGIRb+CfTuJ/FKHG+mN6Rk5a0c6faSaKS01gmfDI6ZQykqRumekh7aTxUh99juIryVL0Q3KbWL9eD66zX1PjZmiFm5w35uCKbYe3PcPWvHWw40L3UMKZJS0OrsNndVKVFftdAdyt2JfJ9Wluv8vGIVZApPPblZTxuWh4KEcW0/pQXS0q6im9/ShjLiLduNu9Fx/DS2L65QzZx17a5i0ap9+ABw4A5uvDap3lCL60JfcOWpYXOCbingxVZny9saq2fLUcI/f+qRkPllJdyi1j7Yzhs+cX2edCA9xZ+X861ODoA+a0JHWwkGquWa17BppXy7q4L6z7VEvn5nyFhP7uH0tTTLaWEnYv5wH+Xx8IyzNSnOHpK3Q7SWnH7LUpvuMDCuoiXcLUfQa+jevQ2uJb5JKZCu5RSEu/jSmRDdDzi3uIF8LPSU2xlGIry68GO5M1a8Z9CeNITTLHNKm4Uwush39bsiK1Ur0BxLp8bsZKbJO7p9Ot5bl8AY16PEHyVy4zv3qoneSzfSGZ9CnzUyeq7sG8Mwnw+VsRQ9d6AFTTTa4QwrZTewk1qNbpO8nupUqQ25ypJca5tTVH6BQL7abLRMooJ2R0ThVfL7Pyyla3CMmWnowls92/YPenUMSwrZMyK2HfXL0u/YF7ZUhP81JZVkLY8OOdAj5oAcal9ttendGSUlCPrxN0j3fzqN1kpFitYfqp6Eg2r5fwbvDg8bfzxYj77m6nN73syq/X257f19p+8vmkRauPoxRqv4uuD+V+Fmw2COVNWb9/eTHeIWGHh7GZs8WLpBmSmLexRT8srSBOK8o+9cyHtzoSB2HXJql209sGKoL9KQdw/5SorQl4EK0aQ5KKX22E0QLIKu2H6yFXltsBDF2KDiujbT9Gw36qkO8OVP2hYM28n7IXNWCtoKUkrkgBqnwmdKys9iYG5gh3d+82eohx2e1lquR8uyhKeRYOXLCusELIGHo0p6BmSmlusGjoVnHPlhWUxvciQto+4vDTm570FHexMp4B14xk074FcINh1wrzWSDPKToA39NWGdVEjvmpfTHQet3nyFKghTwtoD8g5XZj89BjRgk7octvXOR+zRBn1RiBWxcaK04wBE81LCdhby4xZankGC86uug2xfh5PzmnRuR+rmMyVcTp1j15sPApW1GSzajY4rfoT9Za0QGo0e7YjntBE56tKafPlydDf0ALZSXUAjtTch+6OrNdN2F9OOFVBPCBDIizr/xeY/OZ9rZLmVh3YuYVtjxngoO9ADRZb5ZqM/SiZfCW6R1t3VAqB9D2CxzLVNs0pXT2LDuNn/JJ4CULtpNpDxbf9yiOscDiD+mgUSZrZ+OuQSZAd6FnXN9AZl4JfAdye/iMtTVZlFyrcCetHWSiP46fQjEahF71qIGlc45SD9BnL4IvAU8A3R07/Mph2Ius2Vd2++tAdCyvt1d2natDFNy4FWq6dHOQaARiG4uotTkptg4RpW5/UCZ6l64d5EN+WpZCaZ7xBak6HCUuPx6WdhID6g7TURRtsMHi5On+yS8EmhelJDj8vnNRW1RjozogBuKuWL5TI4Gg9YoXow/lXCW1KSK7wEc+3WmxO9TVuBudWHTW4i+GFGDaAl3HzNQvP1X+6wDRp/SDPwFrhuJ94HJEqrZ506cQe/EX2ObHMYK0Fmm7ymxGFGnHGbnAsWfz/T8cuZj9mMX/y1bi1diLwrtcCu5c141pASVRVz21ZE3VqWHKmzHxORFwOMGrJ9PKLofy4kVA+9R/snffoEmd8T2Ta1Q6aZh/I06BqoY9cAjtoHhzx8jo2j/6pawybRSDRZpXTJs3hknkUvanJNFtNUubM9+TzW4ry5ECJ79CwRMC3qoTHVcRx70RxqafB+XcSDsk4BTIVdAXTPL+NEZCLxc9XdE1RU6F/16phTeStvHPj0hCfKalPyLtIxw8/JJPfOiX+PsVZs6gryt5JCEYLep4sRjoK53y6RxecaMnWLUgHyXb3SgozXReAhk/oK2Ib6fspd+NREY+Xa+PfN+ojxbIW2XBdGjXiXbhSZ70Y/mOtClpq8/YyZymSaJEmHttzFDl7NydHv6Txgxs1KyG9yDfD8ztWQ58itl9/kWn0+8xnbnhsGw5W+GAa45IZvIdf7K3FGVKK5q04h5Ap64hN5CK/MuIcOhy/xaaB8rTLFmEjprm1OD+jWTOq2qHu4cZBxZD/WAgweMTCGjkjQLzdQeWGetgEMNLjui3O3lIqfCtE4hWuJZD2hfJEjJU3C3H5an6LzVpdDIY6Bs7tW8tYekIGKMGCiQpDKVyC8GoAcbwWGNq7G1hzbILny2SxjS/OKaIKXhpDzR8p4KqB6md7Wi6ycHD0oUemy1ou8pgb9gHBYq0H0vcAjpj1RvyIkfR7CAsSCFng/X8OmZ9kSJbwZY/DIV2CZys91HusbksFpfh4Fuw/ox9LugCBVMCrOX0cJRETODlzGYt4BiFxJ+v3UKVceJoNh0ftEMllvTiT90jAFvtgO/tC052/MrCy/gjWlkPGaEXgQk1lijyY6MFCPchZEu/Z6xTREP+w5iG3j9QrqfkfnN2Kmkk+x6aNkkAXwvcKa8pFJAcoPYf2hvFGsx1YRGgDPa6Y8DN0FF67uDkHmnlNIQMP6Tbyglh+TRMU0KvTHjEEb7CYjH1h3d/8kazj+Nd5njhJJw/an4fnP3ExrvcuvozWgxEjolgOF1Ef9zN1MMV1NlsOdW0n03tQf/0Wd2wpt4DjAAPZrtsu+m91w8iDvA2a1kLtO+vxKupAtRGx8QmkGuYrTyS40ZZ1w89hF8FBgb95nDZtMDgwAhe18QpDVpts7tkXWYoxLSQ6+w+9NuD0oeeToeaxQhEOovWKfcpIWsZx2OBQfdg5GdVHpwjrtGKynt3PtLQjP7WriZLk/tsQhpBTFTJgfObiYffj/xmmixxcUua6S3A5PmXp9/X2TdtfnqL8eCOeHy1ob4q65oXNPfIQmsh819376qze8uVBeLYCPdJYWhgfE5MFh38Rd+SaH9EZevxbcv6dMgfTCj2KOXQiEY3UxU0TNi+YSB7Uf1DQ+7HRW0rVEbL9xzAtPDX7deSAt623py24Vc2D0XNbyku51s8ZupjeFC1CXcqvF79GdJiQRuetFvMPk1la1HDs2UwqLiO63E66nNVNlTp7rn0j2mNpkTkX6mtljg9l2qxz3K1+KvEfUAjkeIdYvYmu1efqMRL4qNSClcFSvRQwWwfp85EIuxOvdCUp9SA4c63SbMJVrYs4Hyteqc1/SVfB/E+9mhzULeWkR6qBtWwe+oyYOFYfvjVAgLqh4vMPN6ZI8VDF4Jbyfy0c+p0EGovVAgHKF6jwNhhfjW6XRPNEI5usCq9yDUfFHYDqCutC6uM+8F6tfQfT5HVCAgTHhOlEs3xcqcDSObiBRtr0m3/AB52/HSqsZqxD5pKg+0soM+Uou9IWqLNPk9abX5nwUZt+jN0Gn+/szu+b0JJSulmp4uV05XRt0kRoPAxuJJwNvjJb4Imiy5dMHOTYVkc+7Eg4K26Qb/AXiqI8UqP4bOzUisqpZT6j3WNRbo2/SaSTx2ri05CtB61NBBpGIHwWR/ZdtzCDL9RDUrj8mZEmn0Q18LL+KbzE62xxeFDcfjTAvcFlPBXxzXSQVvDjYT70dYWfwBeieAsfJDFe7UUNjkRC1V8NsB/vnLrL7v62HycAgn+Fd/onVnKV0I1LkxkMH8pr873aF+gPxD088tvOZvzspZjdq3Tf0u3zgqoQUsMIcFz4LONIRaShYVLNehhJTzyD71AzygeCNu0i+QDoycMQkwfwNoPjsGACAAAA=="; - - private static readonly int[] AdaptationTable = { 230, 230, 230, 230, 307, 409, 512, 614, 768, 614, 512, 409, 307, 230, 230, 230 }; - private static readonly int[] AdaptCoeff1 = { 256, 512, 0, 192, 240, 460, 392 }; - private static readonly int[] AdaptCoeff2 = { 0, -256, 0, 64, 0, -208, -232 }; - - private readonly byte[] _data; - - public Bell() - { - var gz = new System.IO.Compression.GZipStream( - new MemoryStream(Convert.FromBase64String(Dataz), false), - System.IO.Compression.CompressionMode.Decompress); - var ms = new MemoryStream(); - gz.CopyTo(ms); - _data = ms.ToArray(); - for (int i = 0; i < 3800; i++) // compensate for sample start point - { - Next(); - } - } - - private int _blockpredictor; - private int _sample1; - private int _sample2; - private int _delta; - - private int _idx; - private bool _top; - - private int _samplectr; - - public short Next() - { - int ret; - - if ((_idx & 0x3ff) == 0) // start block - { - _blockpredictor = _data[_idx] % 7; - _delta = (short)(_data[_idx + 1] | _data[_idx + 2] << 8); - _sample1 = (short)(_data[_idx + 3] | _data[_idx + 4] << 8); - _sample2 = (short)(_data[_idx + 5] | _data[_idx + 6] << 8); - - ret = _sample2; - _idx++; - } - else if ((_idx & 0x3ff) == 1) - { - ret = _sample1; - _top = true; - _idx += 6; - } - else - { - int nibble = _data[_idx]; - if (_top) - { - nibble >>= 4; - } - else - { - _idx++; - } - - _top ^= true; - nibble <<= 28; - nibble >>= 28; - - int predictor = (_sample1 * AdaptCoeff1[_blockpredictor]) + (_sample2 * AdaptCoeff2[_blockpredictor]); - predictor >>= 8; - predictor += nibble * _delta; - if (predictor >= 32767) - { - predictor = 32767; - } - - if (predictor <= -32768) - { - predictor = -32768; - } - - ret = predictor; - _sample2 = _sample1; - _sample1 = predictor; - _delta = AdaptationTable[nibble & 15] * _delta; - _delta >>= 8; - if (_delta < 16) - { - _delta = 16; - } - } - - _samplectr++; - if (_samplectr == Sampleloop) - { - _samplectr = 0; - _idx = 0; - } - - return (short)ret; - } - } - - internal class Pleg - { - private const string Data = "H4sICI/2sVICAG91dDMudHh0AOxazdLbIAy8d6bvgkFImFsvufb936Yt3YyKvjBY5UvS6XDSxOZndyULy9H3ylLD1y8/baxHs/Lb5rNG2IT7zVKq9Msmrmf7Tb/st3qcP4ff7rdhb7itw04eXrVzsYWOTuXTt7yzl/OXvYHtDWwN+0cQi0IcqzJnxtchy9lDbo5rVODAAJvbdXWk1PiQooBiMBQPnxcOnYbhfkoCSgGUMmLxbgsoCSgdoCSgFEApwxZQArZ0uryWTp227DUBxVzDpbXLNUhlAVIGJELsZ6hb+kzACdePGqFqxPiE8QnjEualCcUZtb+mRKAUP0tlfyxHQAiIZUEsJ6gZYVXtTlVOiGWBmhk29qoS+zIQ6zQvJZ3rUHFtSwm9I++q5WJUS1At90mNAywhA/CqausZIPaPG/Jtgwhq6ug3qU5GdZMRMg+OmNR7IxfjjQwbDLXD5Q09Yta9QcfqKQfkz4Aw3fptrP0xNVfsCVu++j1S55KPJem01Yi2Bw/R27N2yxfj9znNI9TnESo1dikyT7J68aledNqi6vO1yjUI5RkQplu/mTWRf8u7LVTzZeXaaBRNeUxDTozimi8HRhuNqM/XJZOoiK5IeLJFOF5bEV3XSBGxeHiwjDSbaTXRBkhmuBUBU83T9IiK/wEPUmQOf3RIZxqxI2YVEQfDy7C3VZzJuWTqDuTkDzmW9PUT49KfXHIAlzD0s+qk6CJWx2ptFdzt9mqWsuYF6KT6aBoRAmWGK3MPMfEIkoHg2JIRPfajC39U1/K2TCeQ3SrqHi4V+YSK8VUq2hJoriKDd3So+NJYtBTUnvV4jaqq1omtCVYGsdi9RVmIyDdzqJoPNLdZ6O0q5MhzKh8LUAIFGQSIraFFA8VSg0QOagAJ+5xY1xpaBrGel2I9j2Nd63Kiv8u7tBDb5Mu7xaiYH6uovAcq0ttV5KIxvq6iMxb/HxV7CmpLPV6i6vhrGZdRHp5Us/SEPEwmD5eaXQEzycN5kIfZ5GHjDS7LediftAaxH/DN0r5riPWOLXld3xiI/unqWhgqnbCHieGzU8v9/YJK2wWrSqxHA0404bv+7yjpy1G7HwGBFAoiOIJw9PsABHVVHhBc+G8UJyAAYwv1lJASaZZAiPFbzCN6Pq7zKPq+pUWdtuy7oo9qp2YCNe59xGwe0RmWco1CWaDAfeKUA95KfXmA6+qlWKOpwieUZlTW/0NNSqH9DoAcAfmosUuYx2d5wf+MpP4ZYYbqAdBpoP5x73ExrRFHXwuKpSa+Z0R0mo+aFqsygKRrj9SerYqrZu1V3CRuqRbougPdId0qxLlfR6Psgam9PBxhT+wd+71zcKmeg05bVBWQboBkIF7Zq8xWxdXJ2iuZfILTSuil/SxIqSxDu+bX+RHOYjIxwUZTQIgeKoOuQ2Ac993tbsTdjbi7EXc34u5G3N2IuxtxdyPubsTdjbi7EXc34u5G3N2IuxtxdyPubsTdjbi7EXc34o927dAGAACEgeB27D8SEoVBleRmqGg+ORqRRqQRaUQakUakEWlEGjG1rmlEGpFGpBFpRBqRRqQRaUQakUakEWlEGpFGpBFpRBqRRqQRaUQakUakEWlEGpFGpBFpRBqRRqQRaUQakUb86OhoRBqRRqQRk+qaRqQRaUQakUakEWlEGpFGpBFvGnFXiHMetSzUwqZz46p5AAA="; - private readonly List _sinMen = new List(); - private readonly List _lines = new List(); - private readonly Bell _bell = new Bell(); - - private int _lineIdx; - private int _deadtime; - - public Pleg() - { - var gz = new System.IO.Compression.GZipStream( - new MemoryStream(Convert.FromBase64String(Data), false), - System.IO.Compression.CompressionMode.Decompress); - var tr = new StreamReader(gz); - string line; - while ((line = tr.ReadLine()) != null) - { - _lines.Add(line); - } - } - - private void Off(int c, int n) - { - foreach (var s in _sinMen) - { - if (s.C == c && s.N == n && !s.Fading) - { - s.Fading = true; - } - } - } - - private void On(int c, int n) - { - if (c == 9) - { - return; - } - - var s = new SinMan(1500, n) { C = c, N = n }; - _sinMen.Add(s); - } - - private short Next() - { - int ret = 0; - for (int i = 0; i < _sinMen.Count; i++) - { - var s = _sinMen[i]; - if (s.Done) - { - _sinMen.RemoveAt(i); - i--; - } - else - { - ret += s.Next(); - } - } - - if (ret > 32767) - { - ret = 32767; - } - - if (ret < -32767) - { - ret = -32767; - } - - return (short)ret; - } - - private string FetchNext() - { - string ret = _lines[_lineIdx]; - _lineIdx++; - if (_lineIdx == _lines.Count) - { - _lineIdx = 0; - } - - return ret; - } - - public void Generate(short[] dest) - { - int idx = 0; - while (idx < dest.Length) - { - if (_deadtime > 0) - { - short n = Next(); - n += _bell.Next(); - dest[idx++] = n; - dest[idx++] = n; - _deadtime--; - } - else - { - string[] s = FetchNext().Split(':'); - char c = s[0][0]; - if (c == 'A') - { - _deadtime = int.Parse(s[1]) * 40; - } - else if (c == 'O') - { - On(int.Parse(s[2]), int.Parse(s[1])); - } - else if (c == 'F') - { - Off(int.Parse(s[2]), int.Parse(s[1])); - } - } - } - } - } - - internal class SinMan - { - private readonly double _freq; - - private double _theta; - private double _amp; - - public SinMan(int amp, int note) - { - _amp = amp; - _freq = GetFreq(note); - } - - public int C { get; set; } - public int N { get; set; } - - public bool Fading { get; set; } - - public bool Done => _amp < 2.0; - - private static double GetFreq(int note) - { - return Math.Pow(2.0, note / 12.0) * 13.0; - } - - public short Next() - { - short result = (short)(Math.Sin(_theta) * _amp); - _theta += _freq * Math.PI / 22050.0; - if (_theta >= Math.PI * 2.0) - { - _theta -= Math.PI * 2.0; - } - - if (Fading) - { - _amp *= 0.87; - } - - return result; - } - } - - #endregion } diff --git a/BizHawk.Emulation.Common/BizHawk.Emulation.Common.csproj b/BizHawk.Emulation.Common/BizHawk.Emulation.Common.csproj index 3a436fdacf..ce5963e87a 100644 --- a/BizHawk.Emulation.Common/BizHawk.Emulation.Common.csproj +++ b/BizHawk.Emulation.Common/BizHawk.Emulation.Common.csproj @@ -1,5 +1,6 @@  + true ..\output\dll\ @@ -41,8 +42,9 @@ 8.0 - - ..\References\Newtonsoft.Json.dll + + ../packages/Newtonsoft.Json.12.0.3/lib/net45/Newtonsoft.Json.dll + True diff --git a/BizHawk.Emulation.Common/Database/GameInfo.cs b/BizHawk.Emulation.Common/Database/GameInfo.cs index ca6fab1b24..59e2338c1e 100644 --- a/BizHawk.Emulation.Common/Database/GameInfo.cs +++ b/BizHawk.Emulation.Common/Database/GameInfo.cs @@ -46,8 +46,6 @@ namespace BizHawk.Emulation.Common NotInDatabase = false }; - public bool IsNullInstance => System == "NULL"; - internal GameInfo(CompactGameInfo cgi) { Name = cgi.Name; @@ -179,4 +177,12 @@ namespace BizHawk.Emulation.Common } } } + + public static class GameInfoExtensions + { + public static bool IsNullInstance(this GameInfo game) + { + return game == null || game.System == "NULL"; + } + } } diff --git a/BizHawk.Emulation.Common/packages.config b/BizHawk.Emulation.Common/packages.config new file mode 100644 index 0000000000..2b6424fa00 --- /dev/null +++ b/BizHawk.Emulation.Common/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/BizHawk.Emulation.Cores/Arcades/MAME/MAME.cs b/BizHawk.Emulation.Cores/Arcades/MAME/MAME.cs index 7cdb09dc00..198659ca11 100644 --- a/BizHawk.Emulation.Cores/Arcades/MAME/MAME.cs +++ b/BizHawk.Emulation.Cores/Arcades/MAME/MAME.cs @@ -4,7 +4,9 @@ using System.Linq; using System.Runtime.InteropServices; using System.Threading; using System.Diagnostics; +using System.Dynamic; +using BizHawk.Common; using BizHawk.Emulation.Common; using BizHawk.Emulation.Common.IEmulatorExtensions; @@ -17,9 +19,9 @@ namespace BizHawk.Emulation.Cores.Arcades.MAME portedVersion: "0.214", portedUrl: "https://github.com/mamedev/mame.git", singleInstance: false)] - public partial class MAME : IEmulator, IVideoProvider, ISoundProvider + public partial class MAME : IEmulator, IVideoProvider, ISoundProvider, ISettable { - public MAME(CoreComm comm, string dir, string file) + public MAME(CoreComm comm, string dir, string file, object syncSettings, out string gamename) { ServiceProvider = new BasicServiceProvider(this); @@ -29,6 +31,13 @@ namespace BizHawk.Emulation.Cores.Arcades.MAME MAMEThread = new Thread(ExecuteMAMEThread); AsyncLaunchMAME(); + + _syncSettings = (SyncSettings)syncSettings ?? new SyncSettings(); + _syncSettings.ExpandoSettings = new ExpandoObject(); + var dynamicObject = (IDictionary)_syncSettings.ExpandoSettings; + dynamicObject.Add("OKAY", 1); + + gamename = _gameName; } #region Properties @@ -49,20 +58,20 @@ namespace BizHawk.Emulation.Cores.Arcades.MAME public int BufferHeight { get; private set; } = 240; public int VsyncNumerator { get; private set; } = 60; public int VsyncDenominator { get; private set; } = 1; - private int samplesPerFrame => (int)Math.Round(sampleRate / this.VsyncRate()); #endregion #region Fields + private SyncSettings _syncSettings; private Thread MAMEThread; private ManualResetEvent MAMEStartupComplete = new ManualResetEvent(false); private ManualResetEvent MAMEFrameComplete = new ManualResetEvent(false); private SortedDictionary fieldsPorts = new SortedDictionary(); private IController Controller = NullController.Instance; private int[] frameBuffer = new int[0]; - private short[] audioBuffer = new short[0]; private Queue audioSamples = new Queue(); + private decimal dAudioSamples = 0; private int sampleRate = 44100; private bool paused = true; private bool exiting = false; @@ -70,6 +79,7 @@ namespace BizHawk.Emulation.Cores.Arcades.MAME private int numSamples = 0; private string gameDirectory; private string gameFilename; + private string _gameName = "Arcade"; private LibMAME.PeriodicCallbackDelegate periodicCallback; private LibMAME.SoundCallbackDelegate soundCallback; private LibMAME.BootCallbackDelegate bootCallback; @@ -79,7 +89,7 @@ namespace BizHawk.Emulation.Cores.Arcades.MAME #region IEmulator - public bool FrameAdvance(IController controller, bool render, bool rendersound = true) + public bool FrameAdvance(IController controller, bool render, bool renderSound = true) { if (exiting) { @@ -113,6 +123,40 @@ namespace BizHawk.Emulation.Cores.Arcades.MAME #endregion + #region ISettable + + public object GetSettings() => null; + public bool PutSettings(object o) => false; + + public SyncSettings GetSyncSettings() + { + return _syncSettings.Clone(); + } + + public bool PutSyncSettings(SyncSettings o) + { + bool ret = SyncSettings.NeedsReboot(o, _syncSettings); + _syncSettings = o; + return ret; + } + + public class SyncSettings + { + public static bool NeedsReboot(SyncSettings x, SyncSettings y) + { + return !DeepEquality.DeepEquals(x, y); + } + + public SyncSettings Clone() + { + return (SyncSettings)MemberwiseClone(); + } + + public ExpandoObject ExpandoSettings { get; set; } + } + + #endregion + #region ISoundProvider public void SetSyncMode(SyncSoundMode mode) @@ -123,12 +167,45 @@ namespace BizHawk.Emulation.Cores.Arcades.MAME } } + /* + * GetSamplesSync() and MAME + * + * MAME generates samples 50 times per second, regardless of the VBlank + * rate of the emulated machine. It then uses complicated logic to + * output the required amount of audio to the OS driver and to the AVI, + * where it's meant to tie flashed samples to video frame duration. + * + * I'm doing my own logic here for now. I grab MAME's audio buffer + * whenever it's filled (MAMESoundCallback()) and enqueue it. + * + * Whenever Hawk wants new audio, I dequeue it, but with a little quirk. + * Since sample count per frame may not align with frame duration, I + * subtract the entire decimal fraction of "required" samples from total + * samples. I check if the fractional reminder of total samples is > 0.5 + * by rounding it. I invert it to see what number I should add to the + * integer representation of "required" samples, to compensate for + * misalignment between fractional and integral "required" samples. + * + * TODO: Figure out how MAME does this and maybe use their method instead. + */ public void GetSamplesSync(out short[] samples, out int nsamp) { - nsamp = samplesPerFrame; - samples = new short[samplesPerFrame * 2]; + decimal dSamplesPerFrame = (decimal)sampleRate * VsyncDenominator / VsyncNumerator; - for (int i = 0; i < samplesPerFrame * 2; i++) + if (audioSamples.Any()) + { + dAudioSamples -= dSamplesPerFrame; + int remainder = (int)Math.Round(dAudioSamples - Math.Truncate(dAudioSamples)) ^ 1; + nsamp = (int)Math.Round(dSamplesPerFrame) + remainder; + } + else + { + nsamp = (int)Math.Round(dSamplesPerFrame); + } + + samples = new short[nsamp * 2]; + + for (int i = 0; i < nsamp * 2; i++) { if (audioSamples.Any()) { @@ -175,7 +252,8 @@ namespace BizHawk.Emulation.Cores.Arcades.MAME LibMAME.mame_set_log_callback(logCallback); // https://docs.mamedev.org/commandline/commandline-index.html - string[] args = new string[] { + string[] args = + { "mame" // dummy, internally discarded by index, so has to go first , gameFilename // no dash for rom names , "-noreadconfig" // forbid reading any config files @@ -185,7 +263,7 @@ namespace BizHawk.Emulation.Cores.Arcades.MAME , "-update_in_pause" // ^ including frame-advancing , "-rompath", gameDirectory // mame doesn't load roms from full paths, only from dirs to scan , "-volume", "-32" // lowest attenuation means mame osd remains silent - , "-output", "console" // print everyting to hawk console + , "-output", "console" // print everything to hawk console , "-samplerate", sampleRate.ToString() // match hawk samplerate , "-video", "none" // forbid mame window altogether , "-keyboardprovider", "none" @@ -204,7 +282,7 @@ namespace BizHawk.Emulation.Cores.Arcades.MAME private void UpdateFramerate() { VsyncNumerator = 1000000000; - UInt64 refresh = (UInt64)LibMAME.mame_lua_get_double(MAMELuaCommand.GetRefresh); + long refresh = (long)LibMAME.mame_lua_get_double(MAMELuaCommand.GetRefresh); VsyncDenominator = (int)(refresh / 1000000000); } @@ -224,8 +302,7 @@ namespace BizHawk.Emulation.Cores.Arcades.MAME BufferHeight = LibMAME.mame_lua_get_int(MAMELuaCommand.GetHeight); int expectedSize = BufferWidth * BufferHeight; int bytesPerPixel = 4; - int lengthInBytes; - IntPtr ptr = LibMAME.mame_lua_get_string(MAMELuaCommand.GetPixels, out lengthInBytes); + IntPtr ptr = LibMAME.mame_lua_get_string(MAMELuaCommand.GetPixels, out var lengthInBytes); if (ptr == IntPtr.Zero) { @@ -275,9 +352,8 @@ namespace BizHawk.Emulation.Cores.Arcades.MAME private void CheckVersions() { - int lengthInBytes; - IntPtr ptr = LibMAME.mame_lua_get_string(MAMELuaCommand.GetVersion, out lengthInBytes); - string MAMEVersion = Marshal.PtrToStringAnsi(ptr, lengthInBytes); + IntPtr ptr = LibMAME.mame_lua_get_string(MAMELuaCommand.GetVersion, out var lengthInBytes); + string mameVersion = Marshal.PtrToStringAnsi(ptr, lengthInBytes); if (!LibMAME.mame_lua_free_string(ptr)) { @@ -285,12 +361,23 @@ namespace BizHawk.Emulation.Cores.Arcades.MAME } string version = this.Attributes().PortedVersion; - Debug.Assert(version == MAMEVersion, + Debug.Assert(version == mameVersion, "MAME versions desync!\n\n" + - $"MAME is { MAMEVersion }\n" + + $"MAME is { mameVersion }\n" + $"MAMEHawk is { version }"); } + private void UpdateGameName() + { + IntPtr ptr = LibMAME.mame_lua_get_string(MAMELuaCommand.GetGameName, out var lengthInBytes); + _gameName = Marshal.PtrToStringAnsi(ptr, lengthInBytes); + + if (!LibMAME.mame_lua_free_string(ptr)) + { + Console.WriteLine("LibMAME ERROR: string buffer wasn't freed"); + } + } + #endregion #region Callbacks @@ -352,8 +439,7 @@ namespace BizHawk.Emulation.Cores.Arcades.MAME private void MAMESoundCallback() { int bytesPerSample = 2; - int lengthInBytes; - IntPtr ptr = LibMAME.mame_lua_get_string(MAMELuaCommand.GetSamples, out lengthInBytes); + IntPtr ptr = LibMAME.mame_lua_get_string(MAMELuaCommand.GetSamples, out var lengthInBytes); if (ptr == IntPtr.Zero) { @@ -369,6 +455,7 @@ namespace BizHawk.Emulation.Cores.Arcades.MAME for (int i = 0; i < numSamples; i++) { audioSamples.Enqueue(*(pSample + i)); + dAudioSamples++; } } @@ -381,9 +468,12 @@ namespace BizHawk.Emulation.Cores.Arcades.MAME private void MAMEBootCallback() { LibMAME.mame_lua_execute(MAMELuaCommand.Pause); + CheckVersions(); GetInputFields(); Update(); + UpdateGameName(); + MAMEStartupComplete.Set(); } @@ -410,9 +500,7 @@ namespace BizHawk.Emulation.Cores.Arcades.MAME private void GetInputFields() { - int lengthInBytes; - - IntPtr ptr = LibMAME.mame_lua_get_string(MAMELuaCommand.GetInputFields, out lengthInBytes); + IntPtr ptr = LibMAME.mame_lua_get_string(MAMELuaCommand.GetInputFields, out var lengthInBytes); if (ptr == IntPtr.Zero) { @@ -454,6 +542,7 @@ namespace BizHawk.Emulation.Cores.Arcades.MAME public const string Unpause = "emu.unpause()"; public const string Exit = "manager:machine():exit()"; public const string GetVersion = "return emu.app_version()"; + public const string GetGameName = "return manager:machine():system().description"; public const string GetPixels = "return manager:machine():video():pixels()"; public const string GetSamples = "return manager:machine():sound():samples()"; public const string GetFrameNumber = "return select(2, next(manager:machine().screens)):frame_number()"; diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj index b12cbd8090..2b803b659b 100644 --- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj +++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj @@ -1,5 +1,6 @@  + Debug x86 @@ -63,15 +64,17 @@ false - - ..\References\ELFSharp.dll + + ../packages/ELFSharp.0.1/lib/net40/ELFSharp.dll + True - - ..\References\Newtonsoft.Json.dll + + ../packages/Newtonsoft.Json.12.0.3/lib/net45/Newtonsoft.Json.dll + True - - False - ..\References\OpenTK.dll + + ../packages/OpenTK.3.0.1/lib/net20/OpenTK.dll + True ..\References\PeNet.dll @@ -709,7 +712,6 @@ - diff --git a/BizHawk.Emulation.Cores/CPUs/Intel8048/Disassembler.cs b/BizHawk.Emulation.Cores/CPUs/Intel8048/Disassembler.cs index 7a43a6a1c0..86c3c93d52 100644 --- a/BizHawk.Emulation.Cores/CPUs/Intel8048/Disassembler.cs +++ b/BizHawk.Emulation.Cores/CPUs/Intel8048/Disassembler.cs @@ -26,11 +26,11 @@ namespace BizHawk.Emulation.Common.Components.I8048 "MOV A,P7", // 0f "INC @R0", // 10 "INC @R1", // 11 - "JPB 0", // 12 + "JPB 0,i8", // 12 "ADC A,i8", // 13 "CALL 0,i8", // 14 "DI", // 15 - "JP TF", // 16 + "JP TF,i8", // 16 "INC A", // 17 "INC R0", // 18 "INC R1", // 19 @@ -46,7 +46,7 @@ namespace BizHawk.Emulation.Common.Components.I8048 "MOV A,i8", // 23 "JP 2K 1,i8", // 24 "EN", // 25 - "JP !T0", // 26 + "JP !T0,i8", // 26 "CLR A", // 27 "XCH A,R0", // 28 "XCH A,R1", // 29 @@ -58,11 +58,11 @@ namespace BizHawk.Emulation.Common.Components.I8048 "XCH A,R7", // 2f "XCHD A,@R0", // 30 "XCHD A,@R1", // 31 - "JPB 1", // 32 + "JPB 1,i8", // 32 "???", // 33 "CALL 1,i8", // 34 "DN", // 35 - "JP T0", // 36 + "JP T0,i8", // 36 "COM A", // 37 "???", // 38 "OUT P1", // 39 @@ -78,7 +78,7 @@ namespace BizHawk.Emulation.Common.Components.I8048 "OR A,i8", // 43 "JP 2K 2,i8", // 44 "START CNT", // 45 - "JP NT1", // 46 + "JP NT1,i8", // 46 "SWP", // 47 "OR A,R0", // 48 "OR A,R1", // 49 @@ -90,11 +90,11 @@ namespace BizHawk.Emulation.Common.Components.I8048 "OR A,R7", // 4f "AND A,@R0", // 50 "AND A,@R1", // 51 - "JPB 2", // 52 + "JPB 2,i8", // 52 "AND A,i8", // 53 "CALL 2,i8", // 54 "START TIM", // 55 - "JP T1", // 56 + "JP T1,i8", // 56 "DAA", // 57 "AND A,R0", // 58 "AND A,R1", // 59 @@ -122,11 +122,11 @@ namespace BizHawk.Emulation.Common.Components.I8048 "ADD A,R7", // 6f "ADC A,@R0", // 70 "ADC A,@R1", // 71 - "JPB 3", // 72 + "JPB 3,i8", // 72 "???", // 73 "CALL 3,i8", // 74 "ENT0 CLK", // 75 - "JP F1", // 76 + "JP F1,i8", // 76 "ROR", // 77 "ADC A,R0", // 78 "ADC A,R1", // 79 @@ -142,7 +142,7 @@ namespace BizHawk.Emulation.Common.Components.I8048 "RET", // 83 "JP 2K 4,i8", // 84 "CLR F0", // 85 - "JP !IRQ", // 86 + "JP !IRQ,i8", // 86 "???", // 87 "OR BUS,i8", // 88 "OR P1,i8", // 89 @@ -154,11 +154,11 @@ namespace BizHawk.Emulation.Common.Components.I8048 "OR P7,A", // 8f "MOVX @R0,A", // 90 "MOVX @R1,A", // 91 - "JPB 4", // 92 + "JPB 4,i8", // 92 "RETR", // 93 "CALL 4,i8", // 94 "COM F0", // 95 - "JP A!=0", // 96 + "JP A!=0,i8", // 96 "CLR C", // 97 "AND BUS,i8", // 98 "AND P1,i8", // 99 @@ -184,13 +184,13 @@ namespace BizHawk.Emulation.Common.Components.I8048 "MOV R5,A", // ad "MOV R6,A", // ae "MOV R7,A", // af - "???", // b0 - "???", // b1 - "JPB 5", // b2 - "JPP A", // b3 + "MOV @R0,i8", // b0 + "MOV @R1,i8", // b1 + "JPB 5,i8", // b2 + "JPP A,i8", // b3 "CALL 5,i8", // b4 "COM F1", // b5 - "JP F0", // b6 + "JP F0,i8", // b6 "???", // b7 "MOV R0,i8", // b8 "MOV R1,i8", // b9 @@ -206,7 +206,7 @@ namespace BizHawk.Emulation.Common.Components.I8048 "???", // c3 "JP 2K 6,i8", // c4 "SEL RB 0", // c5 - "JP A==0", // c6 + "JP A==0,i8", // c6 "MOV A,PSW", // c7 "DEC R0", // c8 "DEC R1", // c9 @@ -218,7 +218,7 @@ namespace BizHawk.Emulation.Common.Components.I8048 "DEC R7", // cf "XOR A,@R0", // d0 "XOR A,@R1", // d1 - "JPB 6", // d2 + "JPB 6,i8", // d2 "XOR A,i8", // d3 "CALL 6,i8", // d4 "SEL RB 1", // d5 @@ -238,7 +238,7 @@ namespace BizHawk.Emulation.Common.Components.I8048 "MOV3 A,@A", // e3 "JP 2K 7,i8", // e4 "SEL MB 0", // e5 - "JP NC", // e6 + "JP NC,i8", // e6 "ROL", // e7 "DJNZ R0,i8", // e8 "DJNZ R1,i8", // e9 @@ -250,11 +250,11 @@ namespace BizHawk.Emulation.Common.Components.I8048 "DJNZ R7,i8", // ef "MOV A,@R0", // f0 "MOV A,@R1", // f1 - "JPB 7", // f2 + "JPB 7,i8", // f2 "???", // f3 "CALL 7,i8", // f4 "SEL MB 1", // f5 - "JP C", // f6 + "JP C,i8", // f6 "RLC", // f7 "MOV A,R0", // f8 "MOV A,R1", // f9 diff --git a/BizHawk.Emulation.Cores/CPUs/Intel8048/Execute.cs b/BizHawk.Emulation.Cores/CPUs/Intel8048/Execute.cs index 340c3c5a71..0353517a6d 100644 --- a/BizHawk.Emulation.Cores/CPUs/Intel8048/Execute.cs +++ b/BizHawk.Emulation.Cores/CPUs/Intel8048/Execute.cs @@ -25,15 +25,15 @@ namespace BizHawk.Emulation.Common.Components.I8048 { case 0x00: OP_IMP(IDLE); break; // NOP case 0x01: ILLEGAL(); break; // ILLEGAL - case 0x02: IN_OUT_BUS(OUT); break; // OUT BUS,A + case 0x02: BUS_PORT_OUT(); break; // OUT BUS,A case 0x03: OP_A_DIR(ADD8); break; // ADD A,# case 0x04: JP_2k(0); break; // JP 2K 0 case 0x05: OP_IMP(EI); break; // EI case 0x06: ILLEGAL(); break; // ILLEGAL case 0x07: OP_IMP(DECA); break; // DEC A - case 0x08: IN_OUT_BUS(IN); break; // IN A,BUS - case 0x09: IN_OUT_A(IN, 1); break; // IN A,1 - case 0x0A: IN_OUT_A(IN, 2); break; // IN A,2 + case 0x08: BUS_PORT_IN(); break; // IN A,BUS + case 0x09: IN_OUT_A(RD_P, 1); break; // IN A,1 + case 0x0A: IN_OUT_A(RD_P, 2); break; // IN A,2 case 0x0B: ILLEGAL(); break; // ILLEGAL case 0x0C: MOV_A_P4(4); break; // MOV A,P4 case 0x0D: MOV_A_P4(5); break; // MOV A,P5 @@ -159,9 +159,9 @@ namespace BizHawk.Emulation.Common.Components.I8048 case 0x85: OP_IMP(CL0); break; // CLR F0 case 0x86: JP_COND(!IRQPending, IDLE); break; // JP !IRQ case 0x87: ILLEGAL(); break; // ILLEGAL - case 0x88: OP_PB_DIR(OR8, BUS); break; // OR BUS,# - case 0x89: OP_PB_DIR(OR8, P1); break; // OR P1,# - case 0x8A: OP_PB_DIR(OR8, P2); break; // OR P2,# + case 0x88: OP_PB_DIR(OR8, 0); break; // OR BUS,# + case 0x89: OP_PB_DIR(OR8, 1); break; // OR P1,# + case 0x8A: OP_PB_DIR(OR8, 2); break; // OR P2,# case 0x8B: ILLEGAL(); break; // ILLEGAL case 0x8C: OP_EXP_A(OR8, P4); break; // OR P4,A case 0x8D: OP_EXP_A(OR8, P5); break; // OR P5,A @@ -175,9 +175,9 @@ namespace BizHawk.Emulation.Common.Components.I8048 case 0x95: OP_IMP(CM0); break; // COM F0 case 0x96: JP_COND(Regs[A] != 0, IDLE); break; // JP (A != 0) case 0x97: OP_IMP(CLC); break; // CLR C - case 0x98: OP_PB_DIR(AND8, BUS); break; // AND BUS,# - case 0x99: OP_PB_DIR(AND8, P1); break; // AND P1,# - case 0x9A: OP_PB_DIR(AND8, P2); break; // AND P2,# + case 0x98: OP_PB_DIR(AND8, 0); break; // AND BUS,# + case 0x99: OP_PB_DIR(AND8, 1); break; // AND P1,# + case 0x9A: OP_PB_DIR(AND8, 2); break; // AND P2,# case 0x9B: ILLEGAL(); break; // ILLEGAL case 0x9C: OP_EXP_A(AND8, P4); break; // AND P4,A case 0x9D: OP_EXP_A(AND8, P5); break; // AND P5,A @@ -199,8 +199,8 @@ namespace BizHawk.Emulation.Common.Components.I8048 case 0xAD: OP_R_IMP(MOVAR, R5); break; // MOV R5,A case 0xAE: OP_R_IMP(MOVAR, R6); break; // MOV R6,A case 0xAF: OP_R_IMP(MOVAR, R7); break; // MOV R7,A - case 0xB0: ILLEGAL(); break; // ILLEGAL - case 0xB1: ILLEGAL(); break; // ILLEGAL + case 0xB0: OP_DIR_IR(MOVT_RAM, R0); break; // MOV @R0,# + case 0xB1: OP_DIR_IR(MOVT_RAM, R1); break; // MOV @R1,# case 0xB2: JPB(5); break; // JPB 5 case 0xB3: JP_A(); break; // JPP A case 0xB4: CALL(5); break; // CALL diff --git a/BizHawk.Emulation.Cores/CPUs/Intel8048/I8048.cs b/BizHawk.Emulation.Cores/CPUs/Intel8048/I8048.cs index 61691764bb..2603d0012b 100644 --- a/BizHawk.Emulation.Cores/CPUs/Intel8048/I8048.cs +++ b/BizHawk.Emulation.Cores/CPUs/Intel8048/I8048.cs @@ -1,5 +1,5 @@ using System; - +using BizHawk.Emulation.Cores.Consoles.O2Hawk; using BizHawk.Common; // Intel Corp 8048 @@ -7,6 +7,8 @@ namespace BizHawk.Emulation.Common.Components.I8048 { public sealed partial class I8048 { + public O2Hawk Core { get; set; } + // operations that can take place in an instruction public const ushort IDLE = 0; public const ushort OP = 1; @@ -15,78 +17,65 @@ namespace BizHawk.Emulation.Common.Components.I8048 public const ushort TR = 4; public const ushort INC11 = 5; public const ushort ADD8 = 6; - public const ushort CMP8 = 7; - public const ushort ADC8 = 8; - public const ushort INC16 = 10; + public const ushort ADC8 = 7; + public const ushort AND8 = 8; + public const ushort XOR8 = 9; + public const ushort OR8 = 10; public const ushort INC8 = 11; public const ushort INCA = 12; - public const ushort DEC16 = 13; - public const ushort DEC8 = 14; - public const ushort DECA = 15; - public const ushort ROL = 16; - public const ushort ROR = 17; - public const ushort RLC = 18; - public const ushort RRC = 19; + public const ushort DEC8 = 13; + public const ushort DECA = 14; + public const ushort ROL = 15; + public const ushort ROR = 16; + public const ushort RLC = 17; + public const ushort RRC = 18; + public const ushort CLRA = 19; public const ushort SWP = 20; public const ushort COMA = 21; public const ushort CMC = 22; public const ushort CM0 = 23; public const ushort CM1 = 24; public const ushort DA = 25; - public const ushort AND8 = 26; - public const ushort XOR8 = 27; - public const ushort OR8 = 28; - public const ushort ASL = 29; - public const ushort ASR = 30; - public const ushort LSR = 31; - public const ushort BIT = 32; - public const ushort RD_INC = 33; - public const ushort SET_ADDR = 34; - public const ushort TST = 35; - public const ushort CLRA = 36; - public const ushort CLC = 37; - public const ushort CL0 = 38; - public const ushort CL1 = 39; - public const ushort EI = 40; - public const ushort EN = 41; - public const ushort DI = 42; - public const ushort DN = 43; - public const ushort ADD8BR = 44; - public const ushort ABX = 45; - public const ushort JPE = 46; - public const ushort MSK = 47; - public const ushort SUB16 = 48; - public const ushort ADD16 = 49; - public const ushort CMP16 = 50; - public const ushort CMP16D = 51; - public const ushort CLK_OUT = 52; - public const ushort IN = 53; - public const ushort OUT = 54; - public const ushort XCH = 55; - public const ushort XCH_RAM = 56; - public const ushort XCHD_RAM = 57; - public const ushort SEL_MB0 = 58; - public const ushort SEL_MB1 = 59; - public const ushort SEL_RB0 = 60; - public const ushort SEL_RB1 = 61; - public const ushort INC_RAM = 62; - public const ushort RES_TF = 63; - public const ushort MOV = 64; - public const ushort MOVT = 65; - public const ushort MOVAR = 66; - public const ushort MOVT_RAM = 67; - public const ushort ST_CNT = 68; - public const ushort STP_CNT = 69; - public const ushort ST_T = 70; - public const ushort SET_ADDR_8 = 71; - public const ushort MEM_ALU = 72; - public const ushort PUSH = 73; - public const ushort PULL = 74; - public const ushort PULL_PC = 75; - public const ushort EEA = 76; - public const ushort DEA = 77; - public const ushort RD_P = 78; - public const ushort WR_P = 79; + public const ushort SET_ADDR = 26; + public const ushort CLC = 27; + public const ushort CL0 = 28; + public const ushort CL1 = 29; + public const ushort EI = 30; + public const ushort EN = 31; + public const ushort DI = 32; + public const ushort DN = 33; + public const ushort ABX = 34; + public const ushort JPE = 35; + public const ushort MSK = 36; + public const ushort CLK_OUT = 37; + public const ushort XCH = 38; + public const ushort XCH_RAM = 39; + public const ushort XCHD_RAM = 40; + public const ushort SEL_MB0 = 41; + public const ushort SEL_MB1 = 42; + public const ushort SEL_RB0 = 43; + public const ushort SEL_RB1 = 44; + public const ushort INC_RAM = 45; + public const ushort RES_TF = 46; + public const ushort MOV = 47; + public const ushort MOVT = 48; + public const ushort MOVAR = 49; + public const ushort MOVT_RAM = 50; + public const ushort ST_CNT = 51; + public const ushort STP_CNT = 52; + public const ushort ST_T = 53; + public const ushort SET_ADDR_8 = 54; + public const ushort MEM_ALU = 55; + public const ushort PUSH = 56; + public const ushort PULL = 57; + public const ushort PULL_PC = 58; + public const ushort EEA = 59; + public const ushort DEA = 60; + public const ushort RD_P = 61; + public const ushort WR_P = 62; + public const ushort EM = 63; + public const ushort DM = 64; + public const ushort SET_ADDR_M3 = 65; public I8048() { @@ -180,9 +169,6 @@ namespace BizHawk.Emulation.Common.Components.I8048 case RD: Read_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; - case RD_INC: - Read_Inc_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); - break; case WR: Write_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; @@ -196,9 +182,6 @@ namespace BizHawk.Emulation.Common.Components.I8048 Regs[reg_d_ad] = (ushort)(MB | (reg_h_ad << 8) | Regs[reg_l_ad]); break; - case TST: - TST_Func(cur_instr[instr_pntr++]); - break; case CLRA: Regs[A] = 0; break; @@ -211,42 +194,34 @@ namespace BizHawk.Emulation.Common.Components.I8048 case CL1: F1 = false; break; - case ADD8BR: - ADD8BR_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); - break; case ADD8: ADD8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; case ADC8: ADC8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; - case CMP8: - CMP8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); - break; case INC11: reg_d_ad = cur_instr[instr_pntr++]; - Regs[reg_d_ad] = (ushort)(((Regs[reg_d_ad] + 1) & 0x7FF) | MB); - break; - case INC16: - INC16_Func(cur_instr[instr_pntr++]); + Regs[ALU2] = (ushort) (Regs[reg_d_ad] & 0x800); + Regs[reg_d_ad] = (ushort)(((Regs[reg_d_ad] + 1) & 0x7FF) | Regs[ALU2]); break; case INC8: INC8_Func(cur_instr[instr_pntr++]); break; - case DEC16: - DEC16_Func(cur_instr[instr_pntr++]); - break; - case CMP16: - CMP16_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); - break; case DEC8: DEC8_Func(cur_instr[instr_pntr++]); break; case ROL: - ROL_Func(cur_instr[instr_pntr++]); + ROL_Func(A); break; case ROR: - ROR_Func(cur_instr[instr_pntr++]); + ROR_Func(A); + break; + case RLC: + RLC_Func(A); + break; + case RRC: + RRC_Func(A); break; case COMA: Regs[A] = (ushort)((~Regs[A]) & 0xFF); @@ -272,26 +247,8 @@ namespace BizHawk.Emulation.Common.Components.I8048 case OR8: OR8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); break; - case ASL: - ASL_Func(cur_instr[instr_pntr++]); - break; - case ASR: - ASR_Func(cur_instr[instr_pntr++]); - break; - case LSR: - LSR_Func(cur_instr[instr_pntr++]); - break; - case BIT: - BIT_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]); - break; case CLK_OUT: - break; - case IN: - - break; - case OUT: - break; case XCH: Regs[ALU] = Regs[cur_instr[instr_pntr]]; @@ -313,7 +270,6 @@ namespace BizHawk.Emulation.Common.Components.I8048 Regs[ALU] = Regs[reg_d_ad]; Regs[reg_d_ad] = (ushort)((Regs[reg_d_ad] & 0xF0) | (Regs[A] & 0xF)); Regs[A] = (ushort)((Regs[A] & 0xF0) | (Regs[ALU] & 0xF)); - break; case SEL_MB0: MB = 0; @@ -322,10 +278,10 @@ namespace BizHawk.Emulation.Common.Components.I8048 MB = 1 << 11; break; case SEL_RB0: - RB = 0; + FlagBS = false; // register bank also changed here break; case SEL_RB1: - RB = 24; + FlagBS = true; // register bank also changed here break; case INC_RAM: reg_d_ad = cur_instr[instr_pntr++]; @@ -333,7 +289,7 @@ namespace BizHawk.Emulation.Common.Components.I8048 Regs[reg_d_ad] = (ushort)((Regs[reg_d_ad] + 1) & 0xFF); break; case RES_TF: - + TF = false; break; case MOV: reg_d_ad = cur_instr[instr_pntr++]; @@ -347,7 +303,9 @@ namespace BizHawk.Emulation.Common.Components.I8048 Regs[cur_instr[instr_pntr++]] = Regs[A]; break; case MOVT_RAM: - Regs[Regs[cur_instr[instr_pntr++]]] = Regs[A]; + reg_d_ad = cur_instr[instr_pntr++]; + reg_d_ad = (ushort)(Regs[reg_d_ad] & 0x3F); + Regs[reg_d_ad] = Regs[A]; break; case ST_CNT: counter_en = true; @@ -418,26 +376,54 @@ namespace BizHawk.Emulation.Common.Components.I8048 EA = false; break; case RD_P: - EA = false; + reg_d_ad = cur_instr[instr_pntr++]; + reg_l_ad = cur_instr[instr_pntr++]; + + Regs[reg_d_ad] = ReadPort(reg_l_ad); + Regs[PX + reg_l_ad] = Regs[reg_d_ad]; break; case WR_P: - WritePort(cur_instr[instr_pntr++], (byte)Regs[cur_instr[instr_pntr++]]); + reg_d_ad = cur_instr[instr_pntr++]; + reg_l_ad = cur_instr[instr_pntr++]; + + WritePort(reg_d_ad, (byte)Regs[reg_l_ad]); + Regs[PX + reg_d_ad] = Regs[reg_l_ad]; + break; + case EM: + INT_MSTR = true; + break; + case DM: + INT_MSTR = false; + break; + case SET_ADDR_M3: + Regs[ALU] &= 0xFF; + Regs[ALU] |= 0x300; break; } if (++irq_pntr == IRQS) { // then regular IRQ - if ((IRQPending && IntEn) | (TIRQPending && TimIntEn)) + if (IRQPending && IntEn && INT_MSTR) { IRQPending = false; if (TraceCallback != null) { TraceCallback(new TraceInfo { Disassembly = "====IRQ====", RegisterInfo = "" }); } - IRQ_(); + IRQ_(0); IRQCallback(); instr_pntr = irq_pntr = 0; - } + } + else if (TIRQPending && TimIntEn && INT_MSTR) + { + TIRQPending = false; + + if (TraceCallback != null) { TraceCallback(new TraceInfo { Disassembly = "====TIRQ====", RegisterInfo = "" }); } + + IRQ_(1); + IRQCallback(); + instr_pntr = irq_pntr = 0; + } // otherwise start the next instruction else { @@ -492,7 +478,7 @@ namespace BizHawk.Emulation.Common.Components.I8048 public string TraceHeader { - get { return "MC6809: PC, machine code, mnemonic, operands, registers (A, B, X, Y, US, SP, DP, CC), Cy, flags (EFHINZVC)"; } + get { return "MC6809: PC, machine code, mnemonic, operands, registers (A, B, X, Y, US, SP, DP, CC), Cy, flags (CAFBIFTTR)"; } } public TraceInfo State(bool disassemble = true) @@ -503,7 +489,7 @@ namespace BizHawk.Emulation.Common.Components.I8048 { Disassembly = $"{(disassemble ? Disassemble(Regs[PC], ReadMemory, out notused) : "---")} ".PadRight(50), RegisterInfo = string.Format( - "A:{0:X2} R0:{1:X2} R1:{2:X2} R2:{3:X2} R3:{4:X2} R4:{5:X2} R5:{6:X2} R6:{7:X2} R7:{8:X2} PSW:{9:X4} Cy:{10} {11}{12}{13}{14} {15}{16}{17}{18}{19}", + "A:{0:X2} R0:{1:X2} R1:{2:X2} R2:{3:X2} R3:{4:X2} R4:{5:X2} R5:{6:X2} R6:{7:X2} R7:{8:X2} PSW:{9:X4} Cy:{10} LY:{11} {12}{13}{14}{15}{16}{17}{18}{19}{20}{21}", Regs[A], Regs[(ushort)(R0 + RB)], Regs[(ushort)(R1 + RB)], @@ -515,11 +501,13 @@ namespace BizHawk.Emulation.Common.Components.I8048 Regs[(ushort)(R7 + RB)], Regs[PSW], TotalExecutedCycles, + Core.ppu.LY, FlagC ? "C" : "c", FlagAC ? "A" : "a", FlagF0 ? "F" : "f", FlagBS ? "B" : "b", IntEn ? "I" : "i", + TimIntEn ? "N" : "n", F1 ? "F" : "f", T0 ? "T" : "t", T1 ? "T" : "t", @@ -560,6 +548,7 @@ namespace BizHawk.Emulation.Common.Components.I8048 ser.Sync(nameof(TimIntEn), ref TimIntEn); ser.Sync(nameof(IRQPending), ref IRQPending); ser.Sync(nameof(TIRQPending), ref TIRQPending); + ser.Sync(nameof(INT_MSTR), ref INT_MSTR); ser.Sync(nameof(instr_pntr), ref instr_pntr); ser.Sync(nameof(cur_instr), ref cur_instr, false); @@ -574,7 +563,6 @@ namespace BizHawk.Emulation.Common.Components.I8048 ser.Sync(nameof(timer_prescale), ref timer_prescale); ser.Sync(nameof(RB), ref RB); - ser.Sync(nameof(RAM_ptr), ref RAM_ptr); ser.Sync(nameof(MB), ref MB); ser.Sync(nameof(Regs), ref Regs, false); diff --git a/BizHawk.Emulation.Cores/CPUs/Intel8048/Interrupts.cs b/BizHawk.Emulation.Cores/CPUs/Intel8048/Interrupts.cs index f346b0ccad..fef15a7326 100644 --- a/BizHawk.Emulation.Cores/CPUs/Intel8048/Interrupts.cs +++ b/BizHawk.Emulation.Cores/CPUs/Intel8048/Interrupts.cs @@ -4,29 +4,43 @@ namespace BizHawk.Emulation.Common.Components.I8048 { public partial class I8048 { - private void IRQ_() + private void IRQ_(ushort src) { - Regs[ADDR] = 0xFFF8; - PopulateCURINSTR(IDLE, - IDLE, - IDLE, - RD_INC, ALU, ADDR, - RD_INC, ALU2, ADDR, - SET_ADDR, PC, ALU, ALU2); + if (src == 0) + { + Regs[ALU] = 0x0003; + } + else + { + Regs[ALU] = 0x0007; + } - IRQS = 19; + PopulateCURINSTR(DM, + IDLE, + IDLE, + IDLE, + IDLE, + IDLE, + PUSH, + IDLE, + SET_ADDR, PC, ALU, 0); + + IRQS = 9; } public bool IRQPending; public bool TIRQPending; public bool IntEn; public bool TimIntEn; + public bool INT_MSTR; public Action IRQCallback = delegate () { }; private void ResetInterrupts() { - IntEn = true; + IntEn = false; + TimIntEn = false; + INT_MSTR = true; } } } \ No newline at end of file diff --git a/BizHawk.Emulation.Cores/CPUs/Intel8048/OP_Tables.cs b/BizHawk.Emulation.Cores/CPUs/Intel8048/OP_Tables.cs index ce84b8efe8..aab23b4c56 100644 --- a/BizHawk.Emulation.Cores/CPUs/Intel8048/OP_Tables.cs +++ b/BizHawk.Emulation.Cores/CPUs/Intel8048/OP_Tables.cs @@ -15,6 +15,7 @@ namespace BizHawk.Emulation.Common.Components.I8048 IDLE); IRQS = 4; + Console.WriteLine("EXCEPTION"); } public void OP_IMP(ushort oper) @@ -68,9 +69,29 @@ namespace BizHawk.Emulation.Common.Components.I8048 IRQS = 4; } + public void OP_DIR_IR(ushort oper, ushort reg) + { + PopulateCURINSTR(IDLE, + IDLE, + IDLE, + RD, ALU, PC, + INC11, PC, + IDLE, + IDLE, + IDLE, + oper, (ushort)(reg + RB), ALU); + + IRQS = 9; + } + public void IN_OUT_A(ushort oper, ushort port) { PopulateCURINSTR(IDLE, + IDLE, + IDLE, + IDLE, + IDLE, + IDLE, IDLE, IDLE, oper, A, port); @@ -88,7 +109,7 @@ namespace BizHawk.Emulation.Common.Components.I8048 IRQS = 4; } - public void IN_OUT_BUS(ushort oper) + public void BUS_PORT_IN() { PopulateCURINSTR(IDLE, IDLE, @@ -98,9 +119,26 @@ namespace BizHawk.Emulation.Common.Components.I8048 IDLE, IDLE, IDLE, - oper, A); + RD_P, A, 0); IRQS = 9; + // Console.WriteLine("IN "+ TotalExecutedCycles); + } + + public void BUS_PORT_OUT() + { + PopulateCURINSTR(IDLE, + IDLE, + IDLE, + IDLE, + IDLE, + IDLE, + IDLE, + IDLE, + WR_P, 0, A); + + IRQS = 9; + Console.WriteLine("OUT"); } public void OUT_P(ushort port) @@ -113,9 +151,10 @@ namespace BizHawk.Emulation.Common.Components.I8048 IDLE, IDLE, IDLE, - port, A); + WR_P, port, A); IRQS = 9; + } public void RET() @@ -140,7 +179,7 @@ namespace BizHawk.Emulation.Common.Components.I8048 IDLE, IDLE, PULL, - IDLE, + EM, IDLE, IDLE, IDLE); @@ -181,14 +220,14 @@ namespace BizHawk.Emulation.Common.Components.I8048 public void MOV_A_A() { PopulateCURINSTR(IDLE, + TR, ALU, PC, + IDLE, + SET_ADDR_8, ALU, A, IDLE, IDLE, IDLE, IDLE, - IDLE, - IDLE, - IDLE, - IDLE); + RD, A, ALU); IRQS = 9; } @@ -196,14 +235,14 @@ namespace BizHawk.Emulation.Common.Components.I8048 public void MOV3_A_A() { PopulateCURINSTR(IDLE, + TR, ALU, PC, + IDLE, + SET_ADDR_8, ALU, A, + IDLE, + SET_ADDR_M3, IDLE, IDLE, - IDLE, - IDLE, - IDLE, - IDLE, - IDLE, - IDLE); + RD, A, ALU); IRQS = 9; } @@ -212,13 +251,13 @@ namespace BizHawk.Emulation.Common.Components.I8048 { PopulateCURINSTR(IDLE, IDLE, + EEA, + WR_P, 0, (ushort)(reg + RB), + DEA, IDLE, IDLE, IDLE, - IDLE, - IDLE, - IDLE, - IDLE); + RD_P, A, 0); IRQS = 9; } @@ -268,18 +307,35 @@ namespace BizHawk.Emulation.Common.Components.I8048 IRQS = 9; } + // TODO: This should only write back to the port destination if directly wired, otherwise we should wait for a write pulse + // TODO: for O2, P1 is tied direct to CTRL outputs so this is ok, BUS and P2 should do something else though public void OP_PB_DIR(ushort oper, ushort reg) { - PopulateCURINSTR(IDLE, - IDLE, - IDLE, - RD, ALU, PC, - INC11, PC, - IDLE, - IDLE, - IDLE, - oper, reg, ALU); - + if (reg == 1) + { + PopulateCURINSTR(IDLE, + IDLE, + IDLE, + RD, ALU, PC, + INC11, PC, + oper, (ushort)(reg + PX), ALU, + IDLE, + IDLE, + WR_P, reg, (ushort)(reg + PX)); + } + else + { + PopulateCURINSTR(IDLE, + IDLE, + IDLE, + RD, ALU, PC, + INC11, PC, + oper, (ushort)(reg + PX), ALU, + IDLE, + IDLE, + IDLE); + } + IRQS = 9; } diff --git a/BizHawk.Emulation.Cores/CPUs/Intel8048/Operations.cs b/BizHawk.Emulation.Cores/CPUs/Intel8048/Operations.cs index 2cedefe386..fa7ad73a30 100644 --- a/BizHawk.Emulation.Cores/CPUs/Intel8048/Operations.cs +++ b/BizHawk.Emulation.Cores/CPUs/Intel8048/Operations.cs @@ -15,20 +15,6 @@ namespace BizHawk.Emulation.Common.Components.I8048 Regs[dest] = ReadMemory(Regs[src]); } - public void Read_Inc_Func(ushort dest, ushort src) - { - if (CDLCallback != null) - { - if (src == PC) CDLCallback(Regs[src], eCDLogMemFlags.FetchOperand); - else CDLCallback(Regs[src], eCDLogMemFlags.Data); - } - //Console.WriteLine(dest + " " + src + " " + opcode_see); - - Regs[dest] = ReadMemory(Regs[src]); - - Regs[src]++; - } - public void Write_Func(ushort dest, ushort src) { if (CDLCallback != null) CDLCallback(Regs[dest], eCDLogMemFlags.Write | eCDLogMemFlags.Data); @@ -40,29 +26,6 @@ namespace BizHawk.Emulation.Common.Components.I8048 Regs[dest] = Regs[src]; } - public void LD_8_Func(ushort dest, ushort src) - { - Regs[dest] = Regs[src]; - } - - public void TST_Func(ushort src) - { - - } - - // source is considered a 16 bit signed value, used for long relative branch - // no flags used - public void ADD16BR_Func(ushort dest, ushort src) - { - Regs[dest] = (ushort)(Regs[dest] + (short)Regs[src]); - } - - public void ADD8BR_Func(ushort dest, ushort src) - { - if (Regs[src] > 127) { Regs[src] |= 0xFF00; } - Regs[dest] = (ushort)(Regs[dest] + (short)Regs[src]); - } - public void ADD8_Func(ushort dest, ushort src) { int Reg16_d = Regs[dest]; @@ -75,57 +38,6 @@ namespace BizHawk.Emulation.Common.Components.I8048 Regs[dest] = ans; } - public void SUB8_Func(ushort dest, ushort src) - { - int Reg16_d = Regs[dest]; - Reg16_d -= Regs[src]; - - FlagC = Reg16_d.Bit(8); - - ushort ans = (ushort)(Reg16_d & 0xFF); - - Regs[dest] = ans; - } - - // same as SUB8 but result not stored - public void CMP8_Func(ushort dest, ushort src) - { - int Reg16_d = Regs[dest]; - Reg16_d -= Regs[src]; - - FlagC = Reg16_d.Bit(8); - - ushort ans = (ushort)(Reg16_d & 0xFF); - } - - public void BIT_Func(ushort dest, ushort src) - { - ushort ans = (ushort)(Regs[dest] & Regs[src]); - } - - public void ASL_Func(ushort src) - { - FlagC = Regs[src].Bit(7); - - Regs[src] = (ushort)((Regs[src] << 1) & 0xFF); - } - - public void ASR_Func(ushort src) - { - FlagC = Regs[src].Bit(0); - - ushort temp = (ushort)(Regs[src] & 0x80); // MSB doesn't change in this operation - - Regs[src] = (ushort)((Regs[src] >> 1) | temp); - } - - public void LSR_Func(ushort src) - { - FlagC = Regs[src].Bit(0); - - Regs[src] = (ushort)(Regs[src] >> 1); - } - public void AND8_Func(ushort dest, ushort src) { Regs[dest] = (ushort)(Regs[dest] & Regs[src]); @@ -143,17 +55,14 @@ namespace BizHawk.Emulation.Common.Components.I8048 public void ROR_Func(ushort src) { - ushort c = (ushort)(FlagC ? 0x80 : 0); + ushort c = (ushort)((Regs[src] & 1) << 7); - FlagC = Regs[src].Bit(0); - - Regs[src] = (ushort)(c | (Regs[src] >> 1)); + Regs[src] = (ushort)(c | ((Regs[src] >> 1) & 0x7F)); } public void ROL_Func(ushort src) { - ushort c = (ushort)(FlagC ? 1 : 0); - FlagC = Regs[src].Bit(7); + ushort c = (ushort)((Regs[src] >> 7) & 1); Regs[src] = (ushort)(((Regs[src] << 1) & 0xFF) | c); } @@ -164,7 +73,7 @@ namespace BizHawk.Emulation.Common.Components.I8048 FlagC = Regs[src].Bit(0); - Regs[src] = (ushort)(c | (Regs[src] >> 1)); + Regs[src] = (ushort)(c | ((Regs[src] >> 1) & 0x7F)); } public void RLC_Func(ushort src) @@ -185,16 +94,6 @@ namespace BizHawk.Emulation.Common.Components.I8048 Regs[src] = (ushort)((Regs[src] - 1) & 0xFF); } - public void INC16_Func(ushort src) - { - Regs[src] += 1; - } - - public void DEC16_Func(ushort src) - { - Regs[src] -= 1; - } - public void ADC8_Func(ushort dest, ushort src) { int Reg16_d = Regs[dest]; @@ -213,19 +112,17 @@ namespace BizHawk.Emulation.Common.Components.I8048 { int a = Regs[src]; - byte CF = 0; - if (FlagC || ((a & 0xF) > 9)) + if (((a & 0xF) > 9) | FlagAC) { - CF = 6; - } - if (FlagC || (((a >> 4) & 0xF) > 9) || ((((a >> 4) & 0xF) > 8) && ((a & 0xF) > 9))) - { - CF |= (byte)(6 << 4); + a += 0x6; } - a += CF; + if ((((a >> 4) & 0xF) > 9) | FlagC) + { + a += 0x60; + } - if ((a > 0xFF) || FlagC) + if (a > 0xFF) { FlagC = true; } @@ -233,19 +130,8 @@ namespace BizHawk.Emulation.Common.Components.I8048 { FlagC = false; } + Regs[src] = (byte)a; } - - public void CMP16_Func(ushort dest, ushort src) - { - int Reg16_d = Regs[dest]; - int Reg16_s = Regs[src]; - - Reg16_d -= Reg16_s; - - FlagC = Reg16_d.Bit(16); - - ushort ans = (ushort)(Reg16_d & 0xFFFF); - } } } diff --git a/BizHawk.Emulation.Cores/CPUs/Intel8048/Registers.cs b/BizHawk.Emulation.Cores/CPUs/Intel8048/Registers.cs index fea2ad0fb9..ca757df81f 100644 --- a/BizHawk.Emulation.Cores/CPUs/Intel8048/Registers.cs +++ b/BizHawk.Emulation.Cores/CPUs/Intel8048/Registers.cs @@ -33,22 +33,24 @@ namespace BizHawk.Emulation.Common.Components.I8048 public const ushort R6 = 6; public const ushort R7 = 7; + // offset for port regs + public const ushort PX = 70; + // the location pointed to by the registers is controlled by the RAM bank public ushort RB = 0; - public ushort RAM_ptr = 0; // high PC address bit is controlled by instruction bank - // only hanges on JMP and CALL instructions + // only changes on JMP and CALL instructions public ushort MB = 0; //RAM occupies registers 0-63 public const ushort PC = 64; public const ushort PSW = 65; - public const ushort BUS = 66; - public const ushort A = 67; - public const ushort ADDR = 68; // internal - public const ushort ALU = 69; // internal - public const ushort ALU2 = 70; // internal + public const ushort A = 66; + public const ushort ADDR = 67; // internal + public const ushort ALU = 68; // internal + public const ushort ALU2 = 69; // internal + public const ushort BUS = 70; public const ushort P1 = 71; public const ushort P2 = 72; public const ushort P4 = 73; @@ -66,7 +68,20 @@ namespace BizHawk.Emulation.Common.Components.I8048 public bool FlagBS { get { return (Regs[PSW] & 0x10) != 0; } - set { Regs[PSW] = (byte)((Regs[PSW] & ~0x10) | (value ? 0x10 : 0x00)); } + set + { + // change register bank also + Regs[PSW] = (byte)((Regs[PSW] & ~0x10) | (value ? 0x10 : 0x00)); + if (value & 0x10 > 0) + { + RB = 24; + } + else + { + RB = 0; + } + + } } public bool FlagF0 diff --git a/BizHawk.Emulation.Cores/Calculator/TI83.IStatable.cs b/BizHawk.Emulation.Cores/Calculator/TI83.IStatable.cs index 9c18bcbf70..e0a7286fa3 100644 --- a/BizHawk.Emulation.Cores/Calculator/TI83.IStatable.cs +++ b/BizHawk.Emulation.Cores/Calculator/TI83.IStatable.cs @@ -7,10 +7,7 @@ namespace BizHawk.Emulation.Cores.Calculators { public partial class TI83 : IStatable { - public bool BinarySaveStatesPreferred - { - get { return true; } - } + public bool BinarySaveStatesPreferred => true; public void SaveStateText(TextWriter writer) { @@ -34,8 +31,8 @@ namespace BizHawk.Emulation.Cores.Calculators public byte[] SaveStateBinary() { - MemoryStream ms = new MemoryStream(); - BinaryWriter bw = new BinaryWriter(ms); + using var ms = new MemoryStream(); + using var bw = new BinaryWriter(ms); SaveStateBinary(bw); bw.Flush(); return ms.ToArray(); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Controllers.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Controllers.cs index bcde9619a2..dae5ccb5ed 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Controllers.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Controllers.cs @@ -3,50 +3,50 @@ using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// CPCHawk: Core Class - /// * Controllers * - /// - public partial class AmstradCPC - { - /// - /// The one CPCHawk ControllerDefinition - /// - public ControllerDefinition AmstradCPCControllerDefinition - { - get - { - ControllerDefinition definition = new ControllerDefinition(); - definition.Name = "AmstradCPC Controller"; + /// + /// CPCHawk: Core Class + /// * Controllers * + /// + public partial class AmstradCPC + { + /// + /// The one CPCHawk ControllerDefinition + /// + public ControllerDefinition AmstradCPCControllerDefinition + { + get + { + ControllerDefinition definition = new ControllerDefinition(); + definition.Name = "AmstradCPC Controller"; - // joysticks - List joys1 = new List - { + // joysticks + List joys1 = new List + { // P1 Joystick "P1 Up", "P1 Down", "P1 Left", "P1 Right", "P1 Fire1", "P1 Fire2", "P1 Fire3" - }; + }; - foreach (var s in joys1) - { - definition.BoolButtons.Add(s); - definition.CategoryLabels[s] = "J1"; - } + foreach (var s in joys1) + { + definition.BoolButtons.Add(s); + definition.CategoryLabels[s] = "J1"; + } - List joys2 = new List - { + List joys2 = new List + { // P2 Joystick "P2 Up", "P2 Down", "P2 Left", "P2 Right", "P2 Fire", - }; + }; - foreach (var s in joys2) - { - definition.BoolButtons.Add(s); - definition.CategoryLabels[s] = "J2"; - } + foreach (var s in joys2) + { + definition.BoolButtons.Add(s); + definition.CategoryLabels[s] = "J2"; + } - // keyboard - List keys = new List - { + // keyboard + List keys = new List + { // http://www.cpcwiki.eu/index.php/Programming:Keyboard_scanning // http://www.cpcwiki.eu/index.php/File:Grimware_cpc464_version3_case_top.jpg @@ -64,66 +64,66 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC "Key CURUP", "Key CURDOWN", "Key CURLEFT", "Key CURRIGHT", "Key COPY", // Keyboard - Numpad "Key NUM0", "Key NUM1", "Key NUM2", "Key NUM3", "Key NUM4", "Key NUM5", "Key NUM6", "Key NUM7", "Key NUM8", "Key NUM9", "Key NUMPERIOD", "KEY ENTER" - }; + }; - foreach (var s in keys) - { - definition.BoolButtons.Add(s); - definition.CategoryLabels[s] = "Keyboard"; - } + foreach (var s in keys) + { + definition.BoolButtons.Add(s); + definition.CategoryLabels[s] = "Keyboard"; + } - // Power functions - List power = new List - { + // Power functions + List power = new List + { // Power functions "Reset", "Power" - }; + }; - foreach (var s in power) - { - definition.BoolButtons.Add(s); - definition.CategoryLabels[s] = "Power"; - } + foreach (var s in power) + { + definition.BoolButtons.Add(s); + definition.CategoryLabels[s] = "Power"; + } - // Datacorder (tape device) - List tape = new List - { + // Datacorder (tape device) + List tape = new List + { // Tape functions "Play Tape", "Stop Tape", "RTZ Tape", "Record Tape", "Insert Next Tape", - "Insert Previous Tape", "Next Tape Block", "Prev Tape Block", "Get Tape Status" - }; + "Insert Previous Tape", "Next Tape Block", "Prev Tape Block", "Get Tape Status" + }; - foreach (var s in tape) - { - definition.BoolButtons.Add(s); - definition.CategoryLabels[s] = "Datacorder"; - } + foreach (var s in tape) + { + definition.BoolButtons.Add(s); + definition.CategoryLabels[s] = "Datacorder"; + } - // Datacorder (tape device) - List disk = new List - { + // Datacorder (tape device) + List disk = new List + { // Tape functions "Insert Next Disk", "Insert Previous Disk", /*"Eject Current Disk",*/ "Get Disk Status" - }; + }; - foreach (var s in disk) - { - definition.BoolButtons.Add(s); - definition.CategoryLabels[s] = "Amstrad Disk Drive"; - } + foreach (var s in disk) + { + definition.BoolButtons.Add(s); + definition.CategoryLabels[s] = "Amstrad Disk Drive"; + } - return definition; - } - } - } + return definition; + } + } + } - /// - /// The possible joystick types - /// - public enum JoystickType - { - NULL, - Joystick1, - Joystick2 - } + /// + /// The possible joystick types + /// + public enum JoystickType + { + NULL, + Joystick1, + Joystick2 + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IDebuggable.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IDebuggable.cs index 917a08865b..4c223a67c9 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IDebuggable.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IDebuggable.cs @@ -4,146 +4,146 @@ using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// CPCHawk: Core Class - /// * IDebugggable * - /// - public partial class AmstradCPC : IDebuggable - { - public IDictionary GetCpuFlagsAndRegisters() - { - return new Dictionary - { - ["A"] = _cpu.Regs[_cpu.A], - ["AF"] = _cpu.Regs[_cpu.F] + (_cpu.Regs[_cpu.A] << 8), - ["B"] = _cpu.Regs[_cpu.B], - ["BC"] = _cpu.Regs[_cpu.C] + (_cpu.Regs[_cpu.B] << 8), - ["C"] = _cpu.Regs[_cpu.C], - ["D"] = _cpu.Regs[_cpu.D], - ["DE"] = _cpu.Regs[_cpu.E] + (_cpu.Regs[_cpu.D] << 8), - ["E"] = _cpu.Regs[_cpu.E], - ["F"] = _cpu.Regs[_cpu.F], - ["H"] = _cpu.Regs[_cpu.H], - ["HL"] = _cpu.Regs[_cpu.L] + (_cpu.Regs[_cpu.H] << 8), - ["I"] = _cpu.Regs[_cpu.I], - ["IX"] = _cpu.Regs[_cpu.Ixl] + (_cpu.Regs[_cpu.Ixh] << 8), - ["IY"] = _cpu.Regs[_cpu.Iyl] + (_cpu.Regs[_cpu.Iyh] << 8), - ["L"] = _cpu.Regs[_cpu.L], - ["PC"] = _cpu.Regs[_cpu.PCl] + (_cpu.Regs[_cpu.PCh] << 8), - ["R"] = _cpu.Regs[_cpu.R], - ["Shadow AF"] = _cpu.Regs[_cpu.F_s] + (_cpu.Regs[_cpu.A_s] << 8), - ["Shadow BC"] = _cpu.Regs[_cpu.C_s] + (_cpu.Regs[_cpu.B_s] << 8), - ["Shadow DE"] = _cpu.Regs[_cpu.E_s] + (_cpu.Regs[_cpu.D_s] << 8), - ["Shadow HL"] = _cpu.Regs[_cpu.L_s] + (_cpu.Regs[_cpu.H_s] << 8), - ["SP"] = _cpu.Regs[_cpu.Iyl] + (_cpu.Regs[_cpu.Iyh] << 8), - ["Flag C"] = _cpu.FlagC, - ["Flag N"] = _cpu.FlagN, - ["Flag P/V"] = _cpu.FlagP, - ["Flag 3rd"] = _cpu.Flag3, - ["Flag H"] = _cpu.FlagH, - ["Flag 5th"] = _cpu.Flag5, - ["Flag Z"] = _cpu.FlagZ, - ["Flag S"] = _cpu.FlagS - }; - } + /// + /// CPCHawk: Core Class + /// * IDebugggable * + /// + public partial class AmstradCPC : IDebuggable + { + public IDictionary GetCpuFlagsAndRegisters() + { + return new Dictionary + { + ["A"] = _cpu.Regs[_cpu.A], + ["AF"] = _cpu.Regs[_cpu.F] + (_cpu.Regs[_cpu.A] << 8), + ["B"] = _cpu.Regs[_cpu.B], + ["BC"] = _cpu.Regs[_cpu.C] + (_cpu.Regs[_cpu.B] << 8), + ["C"] = _cpu.Regs[_cpu.C], + ["D"] = _cpu.Regs[_cpu.D], + ["DE"] = _cpu.Regs[_cpu.E] + (_cpu.Regs[_cpu.D] << 8), + ["E"] = _cpu.Regs[_cpu.E], + ["F"] = _cpu.Regs[_cpu.F], + ["H"] = _cpu.Regs[_cpu.H], + ["HL"] = _cpu.Regs[_cpu.L] + (_cpu.Regs[_cpu.H] << 8), + ["I"] = _cpu.Regs[_cpu.I], + ["IX"] = _cpu.Regs[_cpu.Ixl] + (_cpu.Regs[_cpu.Ixh] << 8), + ["IY"] = _cpu.Regs[_cpu.Iyl] + (_cpu.Regs[_cpu.Iyh] << 8), + ["L"] = _cpu.Regs[_cpu.L], + ["PC"] = _cpu.Regs[_cpu.PCl] + (_cpu.Regs[_cpu.PCh] << 8), + ["R"] = _cpu.Regs[_cpu.R], + ["Shadow AF"] = _cpu.Regs[_cpu.F_s] + (_cpu.Regs[_cpu.A_s] << 8), + ["Shadow BC"] = _cpu.Regs[_cpu.C_s] + (_cpu.Regs[_cpu.B_s] << 8), + ["Shadow DE"] = _cpu.Regs[_cpu.E_s] + (_cpu.Regs[_cpu.D_s] << 8), + ["Shadow HL"] = _cpu.Regs[_cpu.L_s] + (_cpu.Regs[_cpu.H_s] << 8), + ["SP"] = _cpu.Regs[_cpu.Iyl] + (_cpu.Regs[_cpu.Iyh] << 8), + ["Flag C"] = _cpu.FlagC, + ["Flag N"] = _cpu.FlagN, + ["Flag P/V"] = _cpu.FlagP, + ["Flag 3rd"] = _cpu.Flag3, + ["Flag H"] = _cpu.FlagH, + ["Flag 5th"] = _cpu.Flag5, + ["Flag Z"] = _cpu.FlagZ, + ["Flag S"] = _cpu.FlagS + }; + } - public void SetCpuRegister(string register, int value) - { - switch (register) - { - default: - throw new InvalidOperationException(); - case "A": - _cpu.Regs[_cpu.A] = (ushort)value; - break; - case "AF": - _cpu.Regs[_cpu.F] = (ushort)(value & 0xFF); - _cpu.Regs[_cpu.A] = (ushort)(value & 0xFF00); - break; - case "B": - _cpu.Regs[_cpu.B] = (ushort)value; - break; - case "BC": - _cpu.Regs[_cpu.C] = (ushort)(value & 0xFF); - _cpu.Regs[_cpu.B] = (ushort)(value & 0xFF00); - break; - case "C": - _cpu.Regs[_cpu.C] = (ushort)value; - break; - case "D": - _cpu.Regs[_cpu.D] = (ushort)value; - break; - case "DE": - _cpu.Regs[_cpu.E] = (ushort)(value & 0xFF); - _cpu.Regs[_cpu.D] = (ushort)(value & 0xFF00); - break; - case "E": - _cpu.Regs[_cpu.E] = (ushort)value; - break; - case "F": - _cpu.Regs[_cpu.F] = (ushort)value; - break; - case "H": - _cpu.Regs[_cpu.H] = (ushort)value; - break; - case "HL": - _cpu.Regs[_cpu.L] = (ushort)(value & 0xFF); - _cpu.Regs[_cpu.H] = (ushort)(value & 0xFF00); - break; - case "I": - _cpu.Regs[_cpu.I] = (ushort)value; - break; - case "IX": - _cpu.Regs[_cpu.Ixl] = (ushort)(value & 0xFF); - _cpu.Regs[_cpu.Ixh] = (ushort)(value & 0xFF00); - break; - case "IY": - _cpu.Regs[_cpu.Iyl] = (ushort)(value & 0xFF); - _cpu.Regs[_cpu.Iyh] = (ushort)(value & 0xFF00); - break; - case "L": - _cpu.Regs[_cpu.L] = (ushort)value; - break; - case "PC": - _cpu.Regs[_cpu.PCl] = (ushort)(value & 0xFF); - _cpu.Regs[_cpu.PCh] = (ushort)(value & 0xFF00); - break; - case "R": - _cpu.Regs[_cpu.R] = (ushort)value; - break; - case "Shadow AF": - _cpu.Regs[_cpu.F_s] = (ushort)(value & 0xFF); - _cpu.Regs[_cpu.A_s] = (ushort)(value & 0xFF00); - break; - case "Shadow BC": - _cpu.Regs[_cpu.C_s] = (ushort)(value & 0xFF); - _cpu.Regs[_cpu.B_s] = (ushort)(value & 0xFF00); - break; - case "Shadow DE": - _cpu.Regs[_cpu.E_s] = (ushort)(value & 0xFF); - _cpu.Regs[_cpu.D_s] = (ushort)(value & 0xFF00); - break; - case "Shadow HL": - _cpu.Regs[_cpu.L_s] = (ushort)(value & 0xFF); - _cpu.Regs[_cpu.H_s] = (ushort)(value & 0xFF00); - break; - case "SP": - _cpu.Regs[_cpu.SPl] = (ushort)(value & 0xFF); - _cpu.Regs[_cpu.SPh] = (ushort)(value & 0xFF00); - break; - } - } + public void SetCpuRegister(string register, int value) + { + switch (register) + { + default: + throw new InvalidOperationException(); + case "A": + _cpu.Regs[_cpu.A] = (ushort)value; + break; + case "AF": + _cpu.Regs[_cpu.F] = (ushort)(value & 0xFF); + _cpu.Regs[_cpu.A] = (ushort)(value & 0xFF00); + break; + case "B": + _cpu.Regs[_cpu.B] = (ushort)value; + break; + case "BC": + _cpu.Regs[_cpu.C] = (ushort)(value & 0xFF); + _cpu.Regs[_cpu.B] = (ushort)(value & 0xFF00); + break; + case "C": + _cpu.Regs[_cpu.C] = (ushort)value; + break; + case "D": + _cpu.Regs[_cpu.D] = (ushort)value; + break; + case "DE": + _cpu.Regs[_cpu.E] = (ushort)(value & 0xFF); + _cpu.Regs[_cpu.D] = (ushort)(value & 0xFF00); + break; + case "E": + _cpu.Regs[_cpu.E] = (ushort)value; + break; + case "F": + _cpu.Regs[_cpu.F] = (ushort)value; + break; + case "H": + _cpu.Regs[_cpu.H] = (ushort)value; + break; + case "HL": + _cpu.Regs[_cpu.L] = (ushort)(value & 0xFF); + _cpu.Regs[_cpu.H] = (ushort)(value & 0xFF00); + break; + case "I": + _cpu.Regs[_cpu.I] = (ushort)value; + break; + case "IX": + _cpu.Regs[_cpu.Ixl] = (ushort)(value & 0xFF); + _cpu.Regs[_cpu.Ixh] = (ushort)(value & 0xFF00); + break; + case "IY": + _cpu.Regs[_cpu.Iyl] = (ushort)(value & 0xFF); + _cpu.Regs[_cpu.Iyh] = (ushort)(value & 0xFF00); + break; + case "L": + _cpu.Regs[_cpu.L] = (ushort)value; + break; + case "PC": + _cpu.Regs[_cpu.PCl] = (ushort)(value & 0xFF); + _cpu.Regs[_cpu.PCh] = (ushort)(value & 0xFF00); + break; + case "R": + _cpu.Regs[_cpu.R] = (ushort)value; + break; + case "Shadow AF": + _cpu.Regs[_cpu.F_s] = (ushort)(value & 0xFF); + _cpu.Regs[_cpu.A_s] = (ushort)(value & 0xFF00); + break; + case "Shadow BC": + _cpu.Regs[_cpu.C_s] = (ushort)(value & 0xFF); + _cpu.Regs[_cpu.B_s] = (ushort)(value & 0xFF00); + break; + case "Shadow DE": + _cpu.Regs[_cpu.E_s] = (ushort)(value & 0xFF); + _cpu.Regs[_cpu.D_s] = (ushort)(value & 0xFF00); + break; + case "Shadow HL": + _cpu.Regs[_cpu.L_s] = (ushort)(value & 0xFF); + _cpu.Regs[_cpu.H_s] = (ushort)(value & 0xFF00); + break; + case "SP": + _cpu.Regs[_cpu.SPl] = (ushort)(value & 0xFF); + _cpu.Regs[_cpu.SPh] = (ushort)(value & 0xFF00); + break; + } + } - public IMemoryCallbackSystem MemoryCallbacks { get; } + public IMemoryCallbackSystem MemoryCallbacks { get; } - public bool CanStep(StepType type) => false; + public bool CanStep(StepType type) => false; - [FeatureNotImplemented] - public void Step(StepType type) - { - throw new NotImplementedException(); - } + [FeatureNotImplemented] + public void Step(StepType type) + { + throw new NotImplementedException(); + } - public long TotalExecutedCycles => _cpu.TotalExecutedCycles; - } + public long TotalExecutedCycles => _cpu.TotalExecutedCycles; + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IEmulator.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IEmulator.cs index bb7fe9b5f3..4b7bf3cb9e 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IEmulator.cs @@ -2,84 +2,84 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// CPCHawk: Core Class - /// * IEmulator * - /// - public partial class AmstradCPC : IEmulator - { - public IEmulatorServiceProvider ServiceProvider { get; } + /// + /// CPCHawk: Core Class + /// * IEmulator * + /// + public partial class AmstradCPC : IEmulator + { + public IEmulatorServiceProvider ServiceProvider { get; } - public ControllerDefinition ControllerDefinition { get; set; } + public ControllerDefinition ControllerDefinition { get; set; } public bool FrameAdvance(IController controller, bool render, bool renderSound) - { - _controller = controller; + { + _controller = controller; - bool ren = render; - bool renSound = renderSound; + bool ren = render; + bool renSound = renderSound; - if (DeterministicEmulation) - { - ren = true; - renSound = true; - } + if (DeterministicEmulation) + { + ren = true; + renSound = true; + } - _isLag = true; + _isLag = true; - if (_tracer.Enabled) - { - _cpu.TraceCallback = s => _tracer.Put(s); - } - else - { - _cpu.TraceCallback = null; - } + if (_tracer.Enabled) + { + _cpu.TraceCallback = s => _tracer.Put(s); + } + else + { + _cpu.TraceCallback = null; + } - _machine.ExecuteFrame(ren, renSound); + _machine.ExecuteFrame(ren, renSound); - if (_isLag) - { - _lagCount++; - } + if (_isLag) + { + _lagCount++; + } return true; - } + } - public int Frame - { - get - { - if (_machine == null) - return 0; - else - return _machine.FrameCount; - } - } + public int Frame + { + get + { + if (_machine == null) + return 0; + else + return _machine.FrameCount; + } + } - public string SystemId => "AmstradCPC"; + public string SystemId => "AmstradCPC"; - private bool deterministicEmulation; - public bool DeterministicEmulation - { - get { return deterministicEmulation; } - } + private bool deterministicEmulation; + public bool DeterministicEmulation + { + get { return deterministicEmulation; } + } - public void ResetCounters() - { - _machine.FrameCount = 0; - _lagCount = 0; - _isLag = false; - } + public void ResetCounters() + { + _machine.FrameCount = 0; + _lagCount = 0; + _isLag = false; + } - public CoreComm CoreComm { get; } + public CoreComm CoreComm { get; } - public void Dispose() - { - if (_machine != null) - { - _machine = null; - } - } - } + public void Dispose() + { + if (_machine != null) + { + _machine = null; + } + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IMemoryDomains.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IMemoryDomains.cs index 01b844ff3c..e3d8a16beb 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IMemoryDomains.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IMemoryDomains.cs @@ -5,74 +5,74 @@ using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// CPCHawk: Core Class - /// * Memory Domains * - /// - public partial class AmstradCPC - { - internal IMemoryDomains memoryDomains; - private readonly Dictionary _byteArrayDomains = new Dictionary(); - private bool _memoryDomainsInit = false; + /// + /// CPCHawk: Core Class + /// * Memory Domains * + /// + public partial class AmstradCPC + { + internal IMemoryDomains memoryDomains; + private readonly Dictionary _byteArrayDomains = new Dictionary(); + private bool _memoryDomainsInit = false; - private void SetupMemoryDomains() - { - var domains = new List - { - new MemoryDomainDelegate("System Bus", 0x10000, MemoryDomain.Endian.Little, - (addr) => - { - if (addr < 0 || addr >= 65536) - { - throw new ArgumentOutOfRangeException(); - } - return _machine.ReadBus((ushort)addr); - }, - (addr, value) => - { - if (addr < 0 || addr >= 65536) - { - throw new ArgumentOutOfRangeException(); - } - _machine.WriteBus((ushort)addr, value); - }, 1) - }; + private void SetupMemoryDomains() + { + var domains = new List + { + new MemoryDomainDelegate("System Bus", 0x10000, MemoryDomain.Endian.Little, + (addr) => + { + if (addr < 0 || addr >= 65536) + { + throw new ArgumentOutOfRangeException(); + } + return _machine.ReadBus((ushort)addr); + }, + (addr, value) => + { + if (addr < 0 || addr >= 65536) + { + throw new ArgumentOutOfRangeException(); + } + _machine.WriteBus((ushort)addr, value); + }, 1) + }; - SyncAllByteArrayDomains(); + SyncAllByteArrayDomains(); - memoryDomains = new MemoryDomainList(_byteArrayDomains.Values.Concat(domains).ToList()); - (ServiceProvider as BasicServiceProvider).Register(memoryDomains); + memoryDomains = new MemoryDomainList(_byteArrayDomains.Values.Concat(domains).ToList()); + (ServiceProvider as BasicServiceProvider).Register(memoryDomains); - _memoryDomainsInit = true; - } + _memoryDomainsInit = true; + } - private void SyncAllByteArrayDomains() - { - SyncByteArrayDomain("ROMLower", _machine.ROMLower); - SyncByteArrayDomain("ROM0", _machine.ROM0); - SyncByteArrayDomain("ROM7", _machine.ROM7); - SyncByteArrayDomain("RAM0", _machine.RAM0); - SyncByteArrayDomain("RAM1", _machine.RAM1); - SyncByteArrayDomain("RAM2", _machine.RAM2); - SyncByteArrayDomain("RAM3", _machine.RAM3); - SyncByteArrayDomain("RAM4", _machine.RAM4); - SyncByteArrayDomain("RAM5", _machine.RAM5); - SyncByteArrayDomain("RAM6", _machine.RAM6); - SyncByteArrayDomain("RAM7", _machine.RAM7); - } + private void SyncAllByteArrayDomains() + { + SyncByteArrayDomain("ROMLower", _machine.ROMLower); + SyncByteArrayDomain("ROM0", _machine.ROM0); + SyncByteArrayDomain("ROM7", _machine.ROM7); + SyncByteArrayDomain("RAM0", _machine.RAM0); + SyncByteArrayDomain("RAM1", _machine.RAM1); + SyncByteArrayDomain("RAM2", _machine.RAM2); + SyncByteArrayDomain("RAM3", _machine.RAM3); + SyncByteArrayDomain("RAM4", _machine.RAM4); + SyncByteArrayDomain("RAM5", _machine.RAM5); + SyncByteArrayDomain("RAM6", _machine.RAM6); + SyncByteArrayDomain("RAM7", _machine.RAM7); + } - private void SyncByteArrayDomain(string name, byte[] data) - { - if (_memoryDomainsInit || _byteArrayDomains.ContainsKey(name)) - { - var m = _byteArrayDomains[name]; - m.Data = data; - } - else - { - var m = new MemoryDomainByteArray(name, MemoryDomain.Endian.Little, data, true, 1); - _byteArrayDomains.Add(name, m); - } - } - } + private void SyncByteArrayDomain(string name, byte[] data) + { + if (_memoryDomainsInit || _byteArrayDomains.ContainsKey(name)) + { + var m = _byteArrayDomains[name]; + m.Data = data; + } + else + { + var m = new MemoryDomainByteArray(name, MemoryDomain.Endian.Little, data, true, 1); + _byteArrayDomains.Add(name, m); + } + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.ISettable.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.ISettable.cs index d6960d93e0..158d087582 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.ISettable.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.ISettable.cs @@ -6,190 +6,190 @@ using System.Text; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// CPCHawk: Core Class - /// * ISettable * - /// - public partial class AmstradCPC : ISettable - { - internal AmstradCPCSettings Settings = new AmstradCPCSettings(); - internal AmstradCPCSyncSettings SyncSettings = new AmstradCPCSyncSettings(); + /// + /// CPCHawk: Core Class + /// * ISettable * + /// + public partial class AmstradCPC : ISettable + { + internal AmstradCPCSettings Settings = new AmstradCPCSettings(); + internal AmstradCPCSyncSettings SyncSettings = new AmstradCPCSyncSettings(); - public AmstradCPCSettings GetSettings() - { - return Settings.Clone(); - } + public AmstradCPCSettings GetSettings() + { + return Settings.Clone(); + } - public AmstradCPCSyncSettings GetSyncSettings() - { - return SyncSettings.Clone(); - } + public AmstradCPCSyncSettings GetSyncSettings() + { + return SyncSettings.Clone(); + } - public bool PutSettings(AmstradCPCSettings o) - { - - // restore user settings to devices - if (_machine != null && _machine.AYDevice != null) - { - ((AY38912)_machine.AYDevice as AY38912).PanningConfiguration = o.AYPanConfig; - _machine.AYDevice.Volume = o.AYVolume; - } - if (_machine != null && _machine.TapeBuzzer != null) - { - ((Beeper)_machine.TapeBuzzer as Beeper).Volume = o.TapeVolume; - } - + public bool PutSettings(AmstradCPCSettings o) + { - Settings = o; + // restore user settings to devices + if (_machine != null && _machine.AYDevice != null) + { + ((AY38912)_machine.AYDevice as AY38912).PanningConfiguration = o.AYPanConfig; + _machine.AYDevice.Volume = o.AYVolume; + } + if (_machine != null && _machine.TapeBuzzer != null) + { + ((Beeper)_machine.TapeBuzzer as Beeper).Volume = o.TapeVolume; + } - return false; - } - public bool PutSyncSettings(AmstradCPCSyncSettings o) - { - bool ret = AmstradCPCSyncSettings.NeedsReboot(SyncSettings, o); - SyncSettings = o; - return ret; - } + Settings = o; - public class AmstradCPCSettings - { - [DisplayName("AY-3-8912 Panning Config")] - [Description("Set the PSG panning configuration.\nThe chip has 3 audio channels that can be outputed in different configurations")] - [DefaultValue(AY38912.AYPanConfig.ABC)] - public AY38912.AYPanConfig AYPanConfig { get; set; } + return false; + } - [DisplayName("AY-3-8912 Volume")] - [Description("The AY chip volume")] - [DefaultValue(75)] - public int AYVolume { get; set; } + public bool PutSyncSettings(AmstradCPCSyncSettings o) + { + bool ret = AmstradCPCSyncSettings.NeedsReboot(SyncSettings, o); + SyncSettings = o; + return ret; + } - [DisplayName("Core OSD Message Verbosity")] - [Description("Full: Display all GUI messages\nMedium: Display only emulator/device generated messages\nNone: Show no messages")] - [DefaultValue(OSDVerbosity.Medium)] - public OSDVerbosity OSDMessageVerbosity { get; set; } + public class AmstradCPCSettings + { + [DisplayName("AY-3-8912 Panning Config")] + [Description("Set the PSG panning configuration.\nThe chip has 3 audio channels that can be outputed in different configurations")] + [DefaultValue(AY38912.AYPanConfig.ABC)] + public AY38912.AYPanConfig AYPanConfig { get; set; } - [DisplayName("Tape Loading Volume")] - [Description("The buzzer volume when the tape is playing")] - [DefaultValue(50)] - public int TapeVolume { get; set; } + [DisplayName("AY-3-8912 Volume")] + [Description("The AY chip volume")] + [DefaultValue(75)] + public int AYVolume { get; set; } - public AmstradCPCSettings Clone() - { - return (AmstradCPCSettings)MemberwiseClone(); - } + [DisplayName("Core OSD Message Verbosity")] + [Description("Full: Display all GUI messages\nMedium: Display only emulator/device generated messages\nNone: Show no messages")] + [DefaultValue(OSDVerbosity.Medium)] + public OSDVerbosity OSDMessageVerbosity { get; set; } - public AmstradCPCSettings() - { - BizHawk.Common.SettingsUtil.SetDefaultValues(this); - } - } + [DisplayName("Tape Loading Volume")] + [Description("The buzzer volume when the tape is playing")] + [DefaultValue(50)] + public int TapeVolume { get; set; } - public class AmstradCPCSyncSettings - { - [DisplayName("Deterministic Emulation")] - [Description("If true, the core agrees to behave in a completely deterministic manner")] - [DefaultValue(true)] - public bool DeterministicEmulation { get; set; } + public AmstradCPCSettings Clone() + { + return (AmstradCPCSettings)MemberwiseClone(); + } - [DisplayName("CPC Model")] - [Description("The model of Amstrad CPC machine to be emulated")] - [DefaultValue(MachineType.CPC464)] - public MachineType MachineType { get; set; } + public AmstradCPCSettings() + { + BizHawk.Common.SettingsUtil.SetDefaultValues(this); + } + } - [DisplayName("Auto Start/Stop Tape")] - [Description("If true, CPCHawk will automatically start and stop the tape when the tape motor is triggered")] - [DefaultValue(true)] - public bool AutoStartStopTape { get; set; } + public class AmstradCPCSyncSettings + { + [DisplayName("Deterministic Emulation")] + [Description("If true, the core agrees to behave in a completely deterministic manner")] + [DefaultValue(true)] + public bool DeterministicEmulation { get; set; } - [DisplayName("Border type")] - [Description("Select how to show the border area")] - [DefaultValue(BorderType.Uniform)] - public BorderType BorderType { get; set; } + [DisplayName("CPC Model")] + [Description("The model of Amstrad CPC machine to be emulated")] + [DefaultValue(MachineType.CPC464)] + public MachineType MachineType { get; set; } - public AmstradCPCSyncSettings Clone() - { - return (AmstradCPCSyncSettings)MemberwiseClone(); - } + [DisplayName("Auto Start/Stop Tape")] + [Description("If true, CPCHawk will automatically start and stop the tape when the tape motor is triggered")] + [DefaultValue(true)] + public bool AutoStartStopTape { get; set; } - public AmstradCPCSyncSettings() - { - BizHawk.Common.SettingsUtil.SetDefaultValues(this); - } + [DisplayName("Border type")] + [Description("Select how to show the border area")] + [DefaultValue(BorderType.Uniform)] + public BorderType BorderType { get; set; } - public static bool NeedsReboot(AmstradCPCSyncSettings x, AmstradCPCSyncSettings y) - { - return !DeepEquality.DeepEquals(x, y); - } - } + public AmstradCPCSyncSettings Clone() + { + return (AmstradCPCSyncSettings)MemberwiseClone(); + } - /// - /// Verbosity of the CPCHawk generated OSD messages - /// - public enum OSDVerbosity - { - /// - /// Show all OSD messages - /// - Full, - /// - /// Only show machine/device generated messages - /// - Medium, - /// - /// No core-driven OSD messages - /// - None - } + public AmstradCPCSyncSettings() + { + BizHawk.Common.SettingsUtil.SetDefaultValues(this); + } - /// - /// Provides information on each emulated machine - /// - public class CPCMachineMetaData - { - public MachineType MachineType { get; set; } - public string Name { get; set; } - public string Description { get; set; } - public string Released { get; set; } - public string CPU { get; set; } - public string Memory { get; set; } - public string Video { get; set; } - public string Audio { get; set; } - public string Media { get; set; } - public string OtherMisc { get; set; } + public static bool NeedsReboot(AmstradCPCSyncSettings x, AmstradCPCSyncSettings y) + { + return !DeepEquality.DeepEquals(x, y); + } + } + + /// + /// Verbosity of the CPCHawk generated OSD messages + /// + public enum OSDVerbosity + { + /// + /// Show all OSD messages + /// + Full, + /// + /// Only show machine/device generated messages + /// + Medium, + /// + /// No core-driven OSD messages + /// + None + } + + /// + /// Provides information on each emulated machine + /// + public class CPCMachineMetaData + { + public MachineType MachineType { get; set; } + public string Name { get; set; } + public string Description { get; set; } + public string Released { get; set; } + public string CPU { get; set; } + public string Memory { get; set; } + public string Video { get; set; } + public string Audio { get; set; } + public string Media { get; set; } + public string OtherMisc { get; set; } Dictionary Data = new Dictionary(); public static CPCMachineMetaData GetMetaObject(MachineType type) - { - CPCMachineMetaData m = new CPCMachineMetaData(); - m.MachineType = type; + { + CPCMachineMetaData m = new CPCMachineMetaData(); + m.MachineType = type; - switch (type) - { - case MachineType.CPC464: - m.Name = "Amstrad CPC 464"; - m.Description = "The CPC 464 was the first personal home computer built by Amstrad in 1984. "; - m.Description += "The 464 was popular with consumers for various reasons. Aside from the joystick port, the computer, keyboard, and tape deck were all combined into one unit."; - m.Released = "1984"; - m.CPU = "Zilog Z80A @ 4MHz"; - m.Memory = "64KB RAM / 32KB ROM"; - m.Video = "Amstrad Gate Array @ 16Mhz & CRCT @ 1Mhz"; - m.Audio = "General Instruments AY-3-8912 PSG (3ch)"; - m.Media = "Cassette Tape (via built-in Datacorder)"; - break; - case MachineType.CPC6128: - m.Name = "Amstrad CPC 6128"; - m.Description = "The CPC6128 features 128 KB RAM and an internal 3-inch floppy disk drive. "; - m.Description += "Aside from various hardware and firmware improvements, one of the CPC6128's most prominent features is the compatibility with the CP/M+ operating system that rendered it attractive for business uses."; - m.Released = "1985"; - m.CPU = "Zilog Z80A @ 4MHz"; - m.Memory = "64KB RAM / 32KB ROM"; - m.Video = "Amstrad Gate Array @ 16Mhz & CRCT @ 1Mhz"; - m.Audio = "General Instruments AY-3-8912 PSG (3ch)"; - m.Media = "3\" Floppy Disk (via built-in Floppy Drive) & Cassette Tape (via external cassette player)"; - break; - } + switch (type) + { + case MachineType.CPC464: + m.Name = "Amstrad CPC 464"; + m.Description = "The CPC 464 was the first personal home computer built by Amstrad in 1984. "; + m.Description += "The 464 was popular with consumers for various reasons. Aside from the joystick port, the computer, keyboard, and tape deck were all combined into one unit."; + m.Released = "1984"; + m.CPU = "Zilog Z80A @ 4MHz"; + m.Memory = "64KB RAM / 32KB ROM"; + m.Video = "Amstrad Gate Array @ 16Mhz & CRCT @ 1Mhz"; + m.Audio = "General Instruments AY-3-8912 PSG (3ch)"; + m.Media = "Cassette Tape (via built-in Datacorder)"; + break; + case MachineType.CPC6128: + m.Name = "Amstrad CPC 6128"; + m.Description = "The CPC6128 features 128 KB RAM and an internal 3-inch floppy disk drive. "; + m.Description += "Aside from various hardware and firmware improvements, one of the CPC6128's most prominent features is the compatibility with the CP/M+ operating system that rendered it attractive for business uses."; + m.Released = "1985"; + m.CPU = "Zilog Z80A @ 4MHz"; + m.Memory = "64KB RAM / 32KB ROM"; + m.Video = "Amstrad Gate Array @ 16Mhz & CRCT @ 1Mhz"; + m.Audio = "General Instruments AY-3-8912 PSG (3ch)"; + m.Media = "3\" Floppy Disk (via built-in Floppy Drive) & Cassette Tape (via external cassette player)"; + break; + } m.Data.Add(AmstradCPC.GetMemberName((CPCMachineMetaData c) => c.Name), m.Name.Trim()); m.Data.Add(AmstradCPC.GetMemberName((CPCMachineMetaData c) => c.Description), m.Description.Trim()); @@ -201,7 +201,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC m.Data.Add(AmstradCPC.GetMemberName((CPCMachineMetaData c) => c.Media), m.Media.Trim()); return m; - } + } public static string GetMetaString(MachineType type) { @@ -275,75 +275,75 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC } public static string GetMetaStringOld(MachineType type) - { - var m = GetMetaObject(type); + { + var m = GetMetaObject(type); - StringBuilder sb = new StringBuilder(); + StringBuilder sb = new StringBuilder(); - sb.Append(m.Name); - sb.Append("\n"); - sb.Append("-----------------------------------------------------------------\n"); - // Release - sb.Append("Released:"); - sb.Append(" "); - sb.Append(m.Released); - sb.Append("\n"); - // CPU - sb.Append("CPU:"); - sb.Append(" "); - sb.Append(m.CPU); - sb.Append("\n"); - // Memory - sb.Append("Memory:"); - sb.Append(" "); - sb.Append(m.Memory); - sb.Append("\n"); - // Video - sb.Append("Video:"); - sb.Append(" "); - sb.Append(m.Video); - sb.Append("\n"); - // Audio - sb.Append("Audio:"); - sb.Append(" "); - sb.Append(m.Audio); - sb.Append("\n"); - // Audio - sb.Append("Media:"); - sb.Append(" "); - sb.Append(m.Media); - sb.Append("\n"); + sb.Append(m.Name); + sb.Append("\n"); + sb.Append("-----------------------------------------------------------------\n"); + // Release + sb.Append("Released:"); + sb.Append(" "); + sb.Append(m.Released); + sb.Append("\n"); + // CPU + sb.Append("CPU:"); + sb.Append(" "); + sb.Append(m.CPU); + sb.Append("\n"); + // Memory + sb.Append("Memory:"); + sb.Append(" "); + sb.Append(m.Memory); + sb.Append("\n"); + // Video + sb.Append("Video:"); + sb.Append(" "); + sb.Append(m.Video); + sb.Append("\n"); + // Audio + sb.Append("Audio:"); + sb.Append(" "); + sb.Append(m.Audio); + sb.Append("\n"); + // Audio + sb.Append("Media:"); + sb.Append(" "); + sb.Append(m.Media); + sb.Append("\n"); - sb.Append("-----------------------------------------------------------------\n"); - // description - sb.Append(m.Description); - if (m.OtherMisc != null) - sb.Append("\n" + m.OtherMisc); + sb.Append("-----------------------------------------------------------------\n"); + // description + sb.Append(m.Description); + if (m.OtherMisc != null) + sb.Append("\n" + m.OtherMisc); - return sb.ToString(); + return sb.ToString(); - } - } + } + } - /// - /// The size of the Spectrum border - /// - public enum BorderType - { - /// - /// Attempts to equalise the border areas - /// - Uniform, + /// + /// The size of the Spectrum border + /// + public enum BorderType + { + /// + /// Attempts to equalise the border areas + /// + Uniform, - /// - /// Pretty much the signal the gate array is generating (looks shit) - /// - Uncropped, + /// + /// Pretty much the signal the gate array is generating (looks shit) + /// + Uncropped, - /// - /// Top and bottom border removed so that the result is *almost* 16:9 - /// - Widescreen, - } - } + /// + /// Top and bottom border removed so that the result is *almost* 16:9 + /// + Widescreen, + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IStatable.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IStatable.cs index 7f006c8f23..5536d2c7d9 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IStatable.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IStatable.cs @@ -4,98 +4,94 @@ using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// CPCHawk: Core Class - /// * IStatable * - /// - public partial class AmstradCPC : IStatable - { + /// + /// CPCHawk: Core Class + /// * IStatable * + /// + public partial class AmstradCPC : IStatable + { + public bool BinarySaveStatesPreferred => true; - public bool BinarySaveStatesPreferred - { - get { return true; } - } + public void SaveStateText(TextWriter writer) + { + SyncState(new Serializer(writer)); + } - public void SaveStateText(TextWriter writer) - { - SyncState(new Serializer(writer)); - } + public void LoadStateText(TextReader reader) + { + SyncState(new Serializer(reader)); + } - public void LoadStateText(TextReader reader) - { - SyncState(new Serializer(reader)); - } + public void SaveStateBinary(BinaryWriter bw) + { + SyncState(new Serializer(bw)); + } - public void SaveStateBinary(BinaryWriter bw) - { - SyncState(new Serializer(bw)); - } + public void LoadStateBinary(BinaryReader br) + { + SyncState(new Serializer(br)); + } - public void LoadStateBinary(BinaryReader br) - { - SyncState(new Serializer(br)); - } + public byte[] SaveStateBinary() + { + using var ms = new MemoryStream(); + using var bw = new BinaryWriter(ms); + SaveStateBinary(bw); + bw.Flush(); + return ms.ToArray(); + } - public byte[] SaveStateBinary() - { - MemoryStream ms = new MemoryStream(); - BinaryWriter bw = new BinaryWriter(ms); - SaveStateBinary(bw); - bw.Flush(); - return ms.ToArray(); - } + private void SyncState(Serializer ser) + { + byte[] core = null; + if (ser.IsWriter) + { + var ms = new MemoryStream(); + ms.Close(); + core = ms.ToArray(); + } - private void SyncState(Serializer ser) - { - byte[] core = null; - if (ser.IsWriter) - { - var ms = new MemoryStream(); - ms.Close(); - core = ms.ToArray(); - } + if (ser.IsWriter) + { + ser.SyncEnum(nameof(_machineType), ref _machineType); - if (ser.IsWriter) - { - ser.SyncEnum(nameof(_machineType), ref _machineType); + _cpu.SyncState(ser); + ser.BeginSection(nameof(AmstradCPC)); + _machine.SyncState(ser); + ser.Sync("Frame", ref _machine.FrameCount); + ser.Sync("LagCount", ref _lagCount); + ser.Sync("IsLag", ref _isLag); + ser.EndSection(); + } - _cpu.SyncState(ser); - ser.BeginSection(nameof(AmstradCPC)); - _machine.SyncState(ser); - ser.Sync("Frame", ref _machine.FrameCount); - ser.Sync("LagCount", ref _lagCount); - ser.Sync("IsLag", ref _isLag); - ser.EndSection(); - } + if (ser.IsReader) + { + var tmpM = _machineType; + ser.SyncEnum(nameof(_machineType), ref _machineType); + if (tmpM != _machineType && _machineType.ToString() != "72") + { + string msg = "SAVESTATE FAILED TO LOAD!!\n\n"; + msg += "Current Configuration: " + tmpM.ToString(); + msg += "\n"; + msg += "Saved Configuration: " + _machineType.ToString(); + msg += "\n\n"; + msg += "If you wish to load this SaveState ensure that you have the correct machine configuration selected, reboot the core, then try again."; + CoreComm.ShowMessage(msg); + _machineType = tmpM; + } + else + { + _cpu.SyncState(ser); + ser.BeginSection(nameof(AmstradCPC)); + _machine.SyncState(ser); + ser.Sync("Frame", ref _machine.FrameCount); + ser.Sync("LagCount", ref _lagCount); + ser.Sync("IsLag", ref _isLag); + ser.EndSection(); - if (ser.IsReader) - { - var tmpM = _machineType; - ser.SyncEnum(nameof(_machineType), ref _machineType); - if (tmpM != _machineType && _machineType.ToString() != "72") - { - string msg = "SAVESTATE FAILED TO LOAD!!\n\n"; - msg += "Current Configuration: " + tmpM.ToString(); - msg += "\n"; - msg += "Saved Configuration: " + _machineType.ToString(); - msg += "\n\n"; - msg += "If you wish to load this SaveState ensure that you have the correct machine configuration selected, reboot the core, then try again."; - CoreComm.ShowMessage(msg); - _machineType = tmpM; - } - else - { - _cpu.SyncState(ser); - ser.BeginSection(nameof(AmstradCPC)); - _machine.SyncState(ser); - ser.Sync("Frame", ref _machine.FrameCount); - ser.Sync("LagCount", ref _lagCount); - ser.Sync("IsLag", ref _isLag); - ser.EndSection(); - - SyncAllByteArrayDomains(); - } - } - } - } + SyncAllByteArrayDomains(); + } + } + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.InputPollable.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.InputPollable.cs index 6d5bd4ea90..dfe8866e46 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.InputPollable.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.InputPollable.cs @@ -3,27 +3,27 @@ using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// CPCHawk: Core Class - /// * IInputPollable * - /// - public partial class AmstradCPC : IInputPollable - { - public int LagCount - { - get { return _lagCount; } - set { _lagCount = value; } - } + /// + /// CPCHawk: Core Class + /// * IInputPollable * + /// + public partial class AmstradCPC : IInputPollable + { + public int LagCount + { + get { return _lagCount; } + set { _lagCount = value; } + } - public bool IsLagFrame - { - get { return _isLag; } - set { _isLag = value; } - } + public bool IsLagFrame + { + get { return _isLag; } + set { _isLag = value; } + } - public IInputCallbackSystem InputCallbacks { get; } + public IInputCallbackSystem InputCallbacks { get; } - private int _lagCount = 0; - private bool _isLag = false; - } + private int _lagCount = 0; + private bool _isLag = false; + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Messaging.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Messaging.cs index 7f47a0fb50..6d490092b3 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Messaging.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Messaging.cs @@ -4,127 +4,127 @@ using System.Text; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// CPCHawk: Core Class - /// * Handles all messaging (OSD) operations * - /// - public partial class AmstradCPC - { - /// - /// Writes a message to the OSD - /// - public void SendMessage(string message, MessageCategory category) - { - if (!CheckMessageSettings(category)) - return; + /// + /// CPCHawk: Core Class + /// * Handles all messaging (OSD) operations * + /// + public partial class AmstradCPC + { + /// + /// Writes a message to the OSD + /// + public void SendMessage(string message, MessageCategory category) + { + if (!CheckMessageSettings(category)) + return; - StringBuilder sb = new StringBuilder(); + StringBuilder sb = new StringBuilder(); - switch (category) - { - case MessageCategory.Tape: - sb.Append("DATACORDER: "); - sb.Append(message); - break; - case MessageCategory.Input: - sb.Append("INPUT DETECTED: "); - sb.Append(message); - break; - case MessageCategory.Disk: - sb.Append("DISK DRIVE: "); - sb.Append(message); - break; - case MessageCategory.Emulator: - case MessageCategory.Misc: - sb.Append("CPCHAWK: "); - sb.Append(message); - break; - } + switch (category) + { + case MessageCategory.Tape: + sb.Append("DATACORDER: "); + sb.Append(message); + break; + case MessageCategory.Input: + sb.Append("INPUT DETECTED: "); + sb.Append(message); + break; + case MessageCategory.Disk: + sb.Append("DISK DRIVE: "); + sb.Append(message); + break; + case MessageCategory.Emulator: + case MessageCategory.Misc: + sb.Append("CPCHAWK: "); + sb.Append(message); + break; + } - CoreComm.Notify(sb.ToString()); - } + CoreComm.Notify(sb.ToString()); + } - #region Input Message Methods + #region Input Message Methods - /// - /// Called when certain input presses are detected - /// - public void OSD_FireInputMessage(string input) - { - StringBuilder sb = new StringBuilder(); - sb.Append(input); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Input); - } + /// + /// Called when certain input presses are detected + /// + public void OSD_FireInputMessage(string input) + { + StringBuilder sb = new StringBuilder(); + sb.Append(input); + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Input); + } - #endregion + #endregion - #region DiskDevice Message Methods + #region DiskDevice Message Methods - /// - /// Disk message that is fired on core init - /// - public void OSD_DiskInit() - { - StringBuilder sb = new StringBuilder(); - if (_machine.diskImages != null && _machine.UPDDiskDevice != null) - { - sb.Append("Disk Media Imported (count: " + _machine.diskImages.Count() + ")"); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Emulator); - } - } + /// + /// Disk message that is fired on core init + /// + public void OSD_DiskInit() + { + StringBuilder sb = new StringBuilder(); + if (_machine.diskImages != null && _machine.UPDDiskDevice != null) + { + sb.Append("Disk Media Imported (count: " + _machine.diskImages.Count() + ")"); + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Emulator); + } + } - /// - /// Disk message that is fired when a new disk is inserted into the drive - /// - public void OSD_DiskInserted() - { - StringBuilder sb = new StringBuilder(); + /// + /// Disk message that is fired when a new disk is inserted into the drive + /// + public void OSD_DiskInserted() + { + StringBuilder sb = new StringBuilder(); - if (_machine.UPDDiskDevice == null) - { - sb.Append("No Drive Present"); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Disk); - return; - } + if (_machine.UPDDiskDevice == null) + { + sb.Append("No Drive Present"); + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Disk); + return; + } - sb.Append("DISK INSERTED (" + _machine.DiskMediaIndex + ": " + _diskInfo[_machine.DiskMediaIndex].Name + ")"); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Disk); - } + sb.Append("DISK INSERTED (" + _machine.DiskMediaIndex + ": " + _diskInfo[_machine.DiskMediaIndex].Name + ")"); + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Disk); + } - /// - /// Tape message that prints the current status of the tape device - /// - public void OSD_ShowDiskStatus() - { - StringBuilder sb = new StringBuilder(); + /// + /// Tape message that prints the current status of the tape device + /// + public void OSD_ShowDiskStatus() + { + StringBuilder sb = new StringBuilder(); - if (_machine.UPDDiskDevice == null) - { - sb.Append("No Drive Present"); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Disk); - return; - } + if (_machine.UPDDiskDevice == null) + { + sb.Append("No Drive Present"); + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Disk); + return; + } - if (_diskInfo.Count == 0) - { - sb.Append("No Disk Loaded"); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Disk); - return; - } + if (_diskInfo.Count == 0) + { + sb.Append("No Disk Loaded"); + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Disk); + return; + } - if (_machine.UPDDiskDevice != null) - { - if (_machine.UPDDiskDevice.DiskPointer == null) - { - sb.Append("No Disk Loaded"); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Disk); - return; - } + if (_machine.UPDDiskDevice != null) + { + if (_machine.UPDDiskDevice.DiskPointer == null) + { + sb.Append("No Disk Loaded"); + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Disk); + return; + } - sb.Append("Disk: " + _machine.DiskMediaIndex + ": " + _diskInfo[_machine.DiskMediaIndex].Name); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Disk); - sb.Clear(); - /* + sb.Append("Disk: " + _machine.DiskMediaIndex + ": " + _diskInfo[_machine.DiskMediaIndex].Name); + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Disk); + sb.Clear(); + /* string protection = "None"; protection = Enum.GetName(typeof(ProtectionType), _machine.UPDDiskDevice.DiskPointer.Protection); if (protection == "None") @@ -135,384 +135,384 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC sb.Clear(); */ - sb.Append("Status: "); - - if (_machine.UPDDiskDevice.DriveLight) - sb.Append("READING/WRITING DATA"); - else - sb.Append("UNKNOWN"); - - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Disk); - sb.Clear(); - } - } - - #endregion - - #region TapeDevice Message Methods - - /// - /// Tape message that is fired on core init - /// - public void OSD_TapeInit() - { - if (_tapeInfo.Count == 0) - return; - - StringBuilder sb = new StringBuilder(); - sb.Append("Tape Media Imported (count: " + _tapeInfo.Count() + ")"); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Emulator); - } - - /// - /// Tape message that is fired when tape is playing - /// - public void OSD_TapeMotorActive() - { - if (_tapeInfo.Count == 0) - return; - - StringBuilder sb = new StringBuilder(); - sb.Append("MOTOR ON (" + _machine.TapeMediaIndex + ": " + _tapeInfo[_machine.TapeMediaIndex].Name + ")"); - - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - } - - /// - /// Tape message that is fired when tape is playing - /// - public void OSD_TapeMotorInactive() - { - if (_tapeInfo.Count == 0) - return; - - StringBuilder sb = new StringBuilder(); - sb.Append("MOTOR OFF (" + _machine.TapeMediaIndex + ": " + _tapeInfo[_machine.TapeMediaIndex].Name + ")"); - - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - } - - /// - /// Tape message that is fired when tape is playing - /// - public void OSD_TapePlaying() - { - if (_tapeInfo.Count == 0) - return; - - StringBuilder sb = new StringBuilder(); - sb.Append("PLAYING MANUAL (" + _machine.TapeMediaIndex + ": " + _tapeInfo[_machine.TapeMediaIndex].Name + ")"); - - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - } - - /// - /// Tape message that is fired when tape is stopped - /// - public void OSD_TapeStopped() - { - if (_tapeInfo.Count == 0) - return; - - StringBuilder sb = new StringBuilder(); - sb.Append("STOPPED MANUAL (" + _machine.TapeMediaIndex + ": " + _tapeInfo[_machine.TapeMediaIndex].Name + ")"); - - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - } - - /// - /// Tape message that is fired when tape is rewound - /// - public void OSD_TapeRTZ() - { - if (_tapeInfo.Count == 0) - return; - - StringBuilder sb = new StringBuilder(); - sb.Append("REWOUND (" + _machine.TapeMediaIndex + ": " + _tapeInfo[_machine.TapeMediaIndex].Name + ")"); - - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - } - - /// - /// Tape message that is fired when a new tape is inserted into the datacorder - /// - public void OSD_TapeInserted() - { - if (_tapeInfo.Count == 0) - return; - - StringBuilder sb = new StringBuilder(); - sb.Append("TAPE INSERTED (" + _machine.TapeMediaIndex + ": " + _tapeInfo[_machine.TapeMediaIndex].Name + ")"); - - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - } - - - /// - /// Tape message that is fired when a tape is stopped automatically - /// - public void OSD_TapeStoppedAuto() - { - StringBuilder sb = new StringBuilder(); - - if (_tapeInfo.Count == 0) - { - sb.Append("No Tape Loaded"); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - return; - } - - - sb.Append("STOPPED (Auto Tape Trap Detected)"); - - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - } - - /// - /// Tape message that is fired when a tape is started automatically - /// - public void OSD_TapePlayingAuto() - { - StringBuilder sb = new StringBuilder(); - - if (_tapeInfo.Count == 0) - { - sb.Append("No Tape Loaded"); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - return; - } - - - sb.Append("PLAYING (Auto Tape Trap Detected)"); + sb.Append("Status: "); + + if (_machine.UPDDiskDevice.DriveLight) + sb.Append("READING/WRITING DATA"); + else + sb.Append("UNKNOWN"); + + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Disk); + sb.Clear(); + } + } + + #endregion + + #region TapeDevice Message Methods + + /// + /// Tape message that is fired on core init + /// + public void OSD_TapeInit() + { + if (_tapeInfo.Count == 0) + return; + + StringBuilder sb = new StringBuilder(); + sb.Append("Tape Media Imported (count: " + _tapeInfo.Count() + ")"); + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Emulator); + } + + /// + /// Tape message that is fired when tape is playing + /// + public void OSD_TapeMotorActive() + { + if (_tapeInfo.Count == 0) + return; + + StringBuilder sb = new StringBuilder(); + sb.Append("MOTOR ON (" + _machine.TapeMediaIndex + ": " + _tapeInfo[_machine.TapeMediaIndex].Name + ")"); + + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + } + + /// + /// Tape message that is fired when tape is playing + /// + public void OSD_TapeMotorInactive() + { + if (_tapeInfo.Count == 0) + return; + + StringBuilder sb = new StringBuilder(); + sb.Append("MOTOR OFF (" + _machine.TapeMediaIndex + ": " + _tapeInfo[_machine.TapeMediaIndex].Name + ")"); + + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + } + + /// + /// Tape message that is fired when tape is playing + /// + public void OSD_TapePlaying() + { + if (_tapeInfo.Count == 0) + return; + + StringBuilder sb = new StringBuilder(); + sb.Append("PLAYING MANUAL (" + _machine.TapeMediaIndex + ": " + _tapeInfo[_machine.TapeMediaIndex].Name + ")"); + + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + } + + /// + /// Tape message that is fired when tape is stopped + /// + public void OSD_TapeStopped() + { + if (_tapeInfo.Count == 0) + return; + + StringBuilder sb = new StringBuilder(); + sb.Append("STOPPED MANUAL (" + _machine.TapeMediaIndex + ": " + _tapeInfo[_machine.TapeMediaIndex].Name + ")"); + + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + } + + /// + /// Tape message that is fired when tape is rewound + /// + public void OSD_TapeRTZ() + { + if (_tapeInfo.Count == 0) + return; + + StringBuilder sb = new StringBuilder(); + sb.Append("REWOUND (" + _machine.TapeMediaIndex + ": " + _tapeInfo[_machine.TapeMediaIndex].Name + ")"); + + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + } + + /// + /// Tape message that is fired when a new tape is inserted into the datacorder + /// + public void OSD_TapeInserted() + { + if (_tapeInfo.Count == 0) + return; + + StringBuilder sb = new StringBuilder(); + sb.Append("TAPE INSERTED (" + _machine.TapeMediaIndex + ": " + _tapeInfo[_machine.TapeMediaIndex].Name + ")"); + + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + } + + + /// + /// Tape message that is fired when a tape is stopped automatically + /// + public void OSD_TapeStoppedAuto() + { + StringBuilder sb = new StringBuilder(); + + if (_tapeInfo.Count == 0) + { + sb.Append("No Tape Loaded"); + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + return; + } + + + sb.Append("STOPPED (Auto Tape Trap Detected)"); + + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + } + + /// + /// Tape message that is fired when a tape is started automatically + /// + public void OSD_TapePlayingAuto() + { + StringBuilder sb = new StringBuilder(); + + if (_tapeInfo.Count == 0) + { + sb.Append("No Tape Loaded"); + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + return; + } + + + sb.Append("PLAYING (Auto Tape Trap Detected)"); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - } + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + } - /// - /// Tape message that is fired when a new block starts playing - /// - public void OSD_TapePlayingBlockInfo(string blockinfo) - { - StringBuilder sb = new StringBuilder(); - - if (_tapeInfo.Count == 0) - { - sb.Append("No Tape Loaded"); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - return; - } - - - sb.Append("...Starting Block " + blockinfo); - - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - } - - /// - /// Tape message that is fired when a tape block is skipped (because it is empty) - /// - public void OSD_TapePlayingSkipBlockInfo(string blockinfo) - { - StringBuilder sb = new StringBuilder(); - - if (_tapeInfo.Count == 0) - { - sb.Append("No Tape Loaded"); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - return; - } - - - sb.Append("...Skipping Empty Block " + blockinfo); + /// + /// Tape message that is fired when a new block starts playing + /// + public void OSD_TapePlayingBlockInfo(string blockinfo) + { + StringBuilder sb = new StringBuilder(); + + if (_tapeInfo.Count == 0) + { + sb.Append("No Tape Loaded"); + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + return; + } + + + sb.Append("...Starting Block " + blockinfo); + + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + } + + /// + /// Tape message that is fired when a tape block is skipped (because it is empty) + /// + public void OSD_TapePlayingSkipBlockInfo(string blockinfo) + { + StringBuilder sb = new StringBuilder(); + + if (_tapeInfo.Count == 0) + { + sb.Append("No Tape Loaded"); + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + return; + } + + + sb.Append("...Skipping Empty Block " + blockinfo); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - } - - /// - /// Tape message that is fired when a tape is started automatically - /// - public void OSD_TapeEndDetected(string blockinfo) - { - StringBuilder sb = new StringBuilder(); - - if (_tapeInfo.Count == 0) - { - sb.Append("No Tape Loaded"); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - return; - } - - - sb.Append("...Skipping Empty Block " + blockinfo); - - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - } - - /// - /// Tape message that is fired when user has manually skipped to the next block - /// - public void OSD_TapeNextBlock(string blockinfo) - { - StringBuilder sb = new StringBuilder(); - - if (_tapeInfo.Count == 0) - { - sb.Append("No Tape Loaded"); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - return; - } - - - sb.Append("Manual Skip Next " + blockinfo); - - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - } - - /// - /// Tape message that is fired when user has manually skipped to the next block - /// - public void OSD_TapePrevBlock(string blockinfo) - { - StringBuilder sb = new StringBuilder(); - - if (_tapeInfo.Count == 0) - { - sb.Append("No Tape Loaded"); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - return; - } - - - sb.Append("Manual Skip Prev " + blockinfo); - - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - } - - /// - /// Tape message that prints the current status of the tape device - /// - public void OSD_ShowTapeStatus() - { - StringBuilder sb = new StringBuilder(); - - if (_tapeInfo.Count == 0) - { - sb.Append("No Tape Loaded"); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - return; - } - - sb.Append("Status: "); - - if (_machine.TapeDevice.TapeIsPlaying) - sb.Append("PLAYING"); - else - sb.Append("STOPPED"); - - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - sb.Clear(); - - sb.Append("Tape: " + _machine.TapeMediaIndex + ": " + _tapeInfo[_machine.TapeMediaIndex].Name); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - sb.Clear(); - - sb.Append("Block: "); - sb.Append("(" + (_machine.TapeDevice.CurrentDataBlockIndex + 1) + - " of " + _machine.TapeDevice.DataBlocks.Count() + ") " + - _machine.TapeDevice.DataBlocks[_machine.TapeDevice.CurrentDataBlockIndex].BlockDescription); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - sb.Clear(); - - sb.Append("Block Pos: "); - - int pos = _machine.TapeDevice.Position; - int end = _machine.TapeDevice.DataBlocks[_machine.TapeDevice.CurrentDataBlockIndex].DataPeriods.Count; - double p = 0; - if (end != 0) - p = ((double)pos / (double)end) * (double)100; - - sb.Append(p.ToString("N0") + "%"); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - sb.Clear(); - - // get position within the tape itself - sb.Append("Tape Pos: "); - var ind = _machine.TapeDevice.CurrentDataBlockIndex; - int cnt = 0; - for (int i = 0; i < ind; i++) - { - cnt += _machine.TapeDevice.DataBlocks[i].DataPeriods.Count; - } - // now we are at our current block - int ourPos = cnt + pos; - cnt += end; - // count periods in the remaining blocks - for (int i = ind + 1; i < _machine.TapeDevice.DataBlocks.Count; i++) - { - cnt += _machine.TapeDevice.DataBlocks[i].DataPeriods.Count; - } - // work out overall position within the tape - p = 0; - p = ((double)ourPos / (double)cnt) * (double)100; - sb.Append(p.ToString("N0") + "%"); - SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); - } - - #endregion - - /// - /// Checks whether message category is allowed to be sent - /// - public bool CheckMessageSettings(MessageCategory category) - { - switch (Settings.OSDMessageVerbosity) - { - case OSDVerbosity.Full: - return true; - case OSDVerbosity.None: - return false; - case OSDVerbosity.Medium: - switch (category) - { - case MessageCategory.Disk: - case MessageCategory.Emulator: - case MessageCategory.Tape: - case MessageCategory.Misc: - return true; - default: - return false; - } - default: - return true; - } - } - - /// - /// Defines the different message categories - /// - public enum MessageCategory - { - /// - /// No defined category as such - /// - Misc, - /// - /// User generated input messages (at the moment only tape/disk controls) - /// - Input, - /// - /// Tape device generated messages - /// - Tape, - /// - /// Disk device generated messages - /// - Disk, - /// - /// Emulator generated messages - /// - Emulator - } - } + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + } + + /// + /// Tape message that is fired when a tape is started automatically + /// + public void OSD_TapeEndDetected(string blockinfo) + { + StringBuilder sb = new StringBuilder(); + + if (_tapeInfo.Count == 0) + { + sb.Append("No Tape Loaded"); + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + return; + } + + + sb.Append("...Skipping Empty Block " + blockinfo); + + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + } + + /// + /// Tape message that is fired when user has manually skipped to the next block + /// + public void OSD_TapeNextBlock(string blockinfo) + { + StringBuilder sb = new StringBuilder(); + + if (_tapeInfo.Count == 0) + { + sb.Append("No Tape Loaded"); + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + return; + } + + + sb.Append("Manual Skip Next " + blockinfo); + + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + } + + /// + /// Tape message that is fired when user has manually skipped to the next block + /// + public void OSD_TapePrevBlock(string blockinfo) + { + StringBuilder sb = new StringBuilder(); + + if (_tapeInfo.Count == 0) + { + sb.Append("No Tape Loaded"); + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + return; + } + + + sb.Append("Manual Skip Prev " + blockinfo); + + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + } + + /// + /// Tape message that prints the current status of the tape device + /// + public void OSD_ShowTapeStatus() + { + StringBuilder sb = new StringBuilder(); + + if (_tapeInfo.Count == 0) + { + sb.Append("No Tape Loaded"); + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + return; + } + + sb.Append("Status: "); + + if (_machine.TapeDevice.TapeIsPlaying) + sb.Append("PLAYING"); + else + sb.Append("STOPPED"); + + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + sb.Clear(); + + sb.Append("Tape: " + _machine.TapeMediaIndex + ": " + _tapeInfo[_machine.TapeMediaIndex].Name); + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + sb.Clear(); + + sb.Append("Block: "); + sb.Append("(" + (_machine.TapeDevice.CurrentDataBlockIndex + 1) + + " of " + _machine.TapeDevice.DataBlocks.Count() + ") " + + _machine.TapeDevice.DataBlocks[_machine.TapeDevice.CurrentDataBlockIndex].BlockDescription); + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + sb.Clear(); + + sb.Append("Block Pos: "); + + int pos = _machine.TapeDevice.Position; + int end = _machine.TapeDevice.DataBlocks[_machine.TapeDevice.CurrentDataBlockIndex].DataPeriods.Count; + double p = 0; + if (end != 0) + p = ((double)pos / (double)end) * (double)100; + + sb.Append(p.ToString("N0") + "%"); + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + sb.Clear(); + + // get position within the tape itself + sb.Append("Tape Pos: "); + var ind = _machine.TapeDevice.CurrentDataBlockIndex; + int cnt = 0; + for (int i = 0; i < ind; i++) + { + cnt += _machine.TapeDevice.DataBlocks[i].DataPeriods.Count; + } + // now we are at our current block + int ourPos = cnt + pos; + cnt += end; + // count periods in the remaining blocks + for (int i = ind + 1; i < _machine.TapeDevice.DataBlocks.Count; i++) + { + cnt += _machine.TapeDevice.DataBlocks[i].DataPeriods.Count; + } + // work out overall position within the tape + p = 0; + p = ((double)ourPos / (double)cnt) * (double)100; + sb.Append(p.ToString("N0") + "%"); + SendMessage(sb.ToString().TrimEnd('\n'), MessageCategory.Tape); + } + + #endregion + + /// + /// Checks whether message category is allowed to be sent + /// + public bool CheckMessageSettings(MessageCategory category) + { + switch (Settings.OSDMessageVerbosity) + { + case OSDVerbosity.Full: + return true; + case OSDVerbosity.None: + return false; + case OSDVerbosity.Medium: + switch (category) + { + case MessageCategory.Disk: + case MessageCategory.Emulator: + case MessageCategory.Tape: + case MessageCategory.Misc: + return true; + default: + return false; + } + default: + return true; + } + } + + /// + /// Defines the different message categories + /// + public enum MessageCategory + { + /// + /// No defined category as such + /// + Misc, + /// + /// User generated input messages (at the moment only tape/disk controls) + /// + Input, + /// + /// Tape device generated messages + /// + Tape, + /// + /// Disk device generated messages + /// + Disk, + /// + /// Emulator generated messages + /// + Emulator + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Util.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Util.cs index f51a83db9f..bc1ea0475c 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Util.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.Util.cs @@ -4,48 +4,48 @@ using System.Linq.Expressions; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// CPCHawk: Core Class - /// * Misc Utilities * - /// - public partial class AmstradCPC - { - /// - /// Helper method that returns a single INT32 from a BitArray - /// - public static int GetIntFromBitArray(BitArray bitArray) - { - if (bitArray.Length > 32) - throw new ArgumentException("Argument length shall be at most 32 bits."); + /// + /// CPCHawk: Core Class + /// * Misc Utilities * + /// + public partial class AmstradCPC + { + /// + /// Helper method that returns a single INT32 from a BitArray + /// + public static int GetIntFromBitArray(BitArray bitArray) + { + if (bitArray.Length > 32) + throw new ArgumentException("Argument length shall be at most 32 bits."); - int[] array = new int[1]; - bitArray.CopyTo(array, 0); - return array[0]; - } + int[] array = new int[1]; + bitArray.CopyTo(array, 0); + return array[0]; + } - /// - /// POKEs a memory bus address - /// - public void PokeMemory(ushort addr, byte value) - { - _machine.WriteBus(addr, value); - } + /// + /// POKEs a memory bus address + /// + public void PokeMemory(ushort addr, byte value) + { + _machine.WriteBus(addr, value); + } - public string GetMachineType() - { - string m = ""; - switch (SyncSettings.MachineType) - { - case MachineType.CPC464: - m = "(Amstrad) CPC 464 (64K)"; - break; - case MachineType.CPC6128: - m = "(Amstrad) CPC 6464 (128K)"; - break; - } + public string GetMachineType() + { + string m = ""; + switch (SyncSettings.MachineType) + { + case MachineType.CPC464: + m = "(Amstrad) CPC 464 (64K)"; + break; + case MachineType.CPC6128: + m = "(Amstrad) CPC 6464 (128K)"; + break; + } - return m; - } + return m; + } public static string GetMemberName(Expression> memberAccess) { diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.cs index a11785c72d..c700adb72c 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.cs @@ -9,212 +9,212 @@ using System.Linq; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// CPCHawk: Core Class - /// * Main Initialization * - /// - [Core( - "CPCHawk", - "Asnivor", - isPorted: false, - isReleased: false)] - public partial class AmstradCPC : IRegionable, IDriveLight - { - public AmstradCPC(CoreComm comm, IEnumerable files, List game, object settings, object syncSettings) - { - var ser = new BasicServiceProvider(this); - ServiceProvider = ser; - InputCallbacks = new InputCallbackSystem(); - MemoryCallbacks = new MemoryCallbackSystem(new[] { "System Bus" }); - CoreComm = comm; - _gameInfo = game; - _cpu = new Z80A(); - _tracer = new TraceBuffer { Header = _cpu.TraceHeader }; - _files = files?.ToList() ?? new List(); + /// + /// CPCHawk: Core Class + /// * Main Initialization * + /// + [Core( + "CPCHawk", + "Asnivor", + isPorted: false, + isReleased: false)] + public partial class AmstradCPC : IRegionable, IDriveLight + { + public AmstradCPC(CoreComm comm, IEnumerable files, List game, object settings, object syncSettings) + { + var ser = new BasicServiceProvider(this); + ServiceProvider = ser; + InputCallbacks = new InputCallbackSystem(); + MemoryCallbacks = new MemoryCallbackSystem(new[] { "System Bus" }); + CoreComm = comm; + _gameInfo = game; + _cpu = new Z80A(); + _tracer = new TraceBuffer { Header = _cpu.TraceHeader }; + _files = files?.ToList() ?? new List(); - if (settings == null) - settings = new AmstradCPCSettings(); - if (syncSettings == null) - syncSettings = new AmstradCPCSyncSettings(); + if (settings == null) + settings = new AmstradCPCSettings(); + if (syncSettings == null) + syncSettings = new AmstradCPCSyncSettings(); - PutSyncSettings((AmstradCPCSyncSettings)syncSettings ?? new AmstradCPCSyncSettings()); - PutSettings((AmstradCPCSettings)settings ?? new AmstradCPCSettings()); + PutSyncSettings((AmstradCPCSyncSettings)syncSettings ?? new AmstradCPCSyncSettings()); + PutSettings((AmstradCPCSettings)settings ?? new AmstradCPCSettings()); - deterministicEmulation = ((AmstradCPCSyncSettings)syncSettings as AmstradCPCSyncSettings).DeterministicEmulation; + deterministicEmulation = ((AmstradCPCSyncSettings)syncSettings as AmstradCPCSyncSettings).DeterministicEmulation; - switch (SyncSettings.MachineType) - { - case MachineType.CPC464: - ControllerDefinition = AmstradCPCControllerDefinition; - Init(MachineType.CPC464, _files, ((AmstradCPCSyncSettings)syncSettings as AmstradCPCSyncSettings).AutoStartStopTape, - ((AmstradCPCSyncSettings)syncSettings as AmstradCPCSyncSettings).BorderType); - break; - case MachineType.CPC6128: - ControllerDefinition = AmstradCPCControllerDefinition; - Init(MachineType.CPC6128, _files, ((AmstradCPCSyncSettings)syncSettings as AmstradCPCSyncSettings).AutoStartStopTape, ((AmstradCPCSyncSettings)syncSettings as AmstradCPCSyncSettings).BorderType); - break; - default: - throw new InvalidOperationException("Machine not yet emulated"); - } + switch (SyncSettings.MachineType) + { + case MachineType.CPC464: + ControllerDefinition = AmstradCPCControllerDefinition; + Init(MachineType.CPC464, _files, ((AmstradCPCSyncSettings)syncSettings as AmstradCPCSyncSettings).AutoStartStopTape, + ((AmstradCPCSyncSettings)syncSettings as AmstradCPCSyncSettings).BorderType); + break; + case MachineType.CPC6128: + ControllerDefinition = AmstradCPCControllerDefinition; + Init(MachineType.CPC6128, _files, ((AmstradCPCSyncSettings)syncSettings as AmstradCPCSyncSettings).AutoStartStopTape, ((AmstradCPCSyncSettings)syncSettings as AmstradCPCSyncSettings).BorderType); + break; + default: + throw new InvalidOperationException("Machine not yet emulated"); + } - _cpu.MemoryCallbacks = MemoryCallbacks; + _cpu.MemoryCallbacks = MemoryCallbacks; - HardReset = _machine.HardReset; - SoftReset = _machine.SoftReset; + HardReset = _machine.HardReset; + SoftReset = _machine.SoftReset; - _cpu.FetchMemory = _machine.ReadMemory; - _cpu.ReadMemory = _machine.ReadMemory; - _cpu.WriteMemory = _machine.WriteMemory; - _cpu.ReadHardware = _machine.ReadPort; - _cpu.WriteHardware = _machine.WritePort; - _cpu.FetchDB = _machine.PushBus; - _cpu.IRQACKCallback = _machine.GateArray.IORQA; - //_cpu.OnExecFetch = _machine.CPUMon.OnExecFetch; + _cpu.FetchMemory = _machine.ReadMemory; + _cpu.ReadMemory = _machine.ReadMemory; + _cpu.WriteMemory = _machine.WriteMemory; + _cpu.ReadHardware = _machine.ReadPort; + _cpu.WriteHardware = _machine.WritePort; + _cpu.FetchDB = _machine.PushBus; + _cpu.IRQACKCallback = _machine.GateArray.IORQA; + //_cpu.OnExecFetch = _machine.CPUMon.OnExecFetch; - ser.Register(_tracer); - ser.Register(_cpu); - ser.Register(_machine.GateArray); + ser.Register(_tracer); + ser.Register(_cpu); + ser.Register(_machine.GateArray); - // initialize sound mixer and attach the various ISoundProvider devices - SoundMixer = new SoundProviderMixer((int)(32767 / 10), "Tape Audio", (ISoundProvider)_machine.TapeBuzzer); - if (_machine.AYDevice != null) - SoundMixer.AddSource(_machine.AYDevice, "AY-3-3912"); + // initialize sound mixer and attach the various ISoundProvider devices + SoundMixer = new SoundProviderMixer((int)(32767 / 10), "Tape Audio", (ISoundProvider)_machine.TapeBuzzer); + if (_machine.AYDevice != null) + SoundMixer.AddSource(_machine.AYDevice, "AY-3-3912"); - // set audio device settings - if (_machine.AYDevice != null && _machine.AYDevice.GetType() == typeof(AY38912)) - { - ((AY38912)_machine.AYDevice as AY38912).PanningConfiguration = ((AmstradCPCSettings)settings as AmstradCPCSettings).AYPanConfig; - _machine.AYDevice.Volume = ((AmstradCPCSettings)settings as AmstradCPCSettings).AYVolume; - } + // set audio device settings + if (_machine.AYDevice != null && _machine.AYDevice.GetType() == typeof(AY38912)) + { + ((AY38912)_machine.AYDevice as AY38912).PanningConfiguration = ((AmstradCPCSettings)settings as AmstradCPCSettings).AYPanConfig; + _machine.AYDevice.Volume = ((AmstradCPCSettings)settings as AmstradCPCSettings).AYVolume; + } - if (_machine.TapeBuzzer != null) - { - ((Beeper)_machine.TapeBuzzer as Beeper).Volume = ((AmstradCPCSettings)settings as AmstradCPCSettings).TapeVolume; - } + if (_machine.TapeBuzzer != null) + { + ((Beeper)_machine.TapeBuzzer as Beeper).Volume = ((AmstradCPCSettings)settings as AmstradCPCSettings).TapeVolume; + } - ser.Register(SoundMixer); + ser.Register(SoundMixer); - HardReset(); - SetupMemoryDomains(); - } + HardReset(); + SetupMemoryDomains(); + } - public Action HardReset; - public Action SoftReset; + public Action HardReset; + public Action SoftReset; - private readonly Z80A _cpu; - private readonly TraceBuffer _tracer; - public IController _controller; - public CPCBase _machine; + private readonly Z80A _cpu; + private readonly TraceBuffer _tracer; + public IController _controller; + public CPCBase _machine; - public List _gameInfo; - public List _tapeInfo = new List(); - public List _diskInfo = new List(); + public List _gameInfo; + public List _tapeInfo = new List(); + public List _diskInfo = new List(); - private SoundProviderMixer SoundMixer; + private SoundProviderMixer SoundMixer; - private readonly List _files; + private readonly List _files; - private byte[] GetFirmware(int length, params string[] names) - { - // Amstrad licensed ROMs are free to distribute and shipped with BizHawk - byte[] embeddedRom = new byte[length]; - bool embeddedFound = true; - switch (names.FirstOrDefault()) - { - // CPC 464 ROMS - case "OS464ROM": - embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.OS_464_ROM)); - break; - case "BASIC1-0ROM": - embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.CPC_BASIC_1_0_ROM)); - break; + private byte[] GetFirmware(int length, params string[] names) + { + // Amstrad licensed ROMs are free to distribute and shipped with BizHawk + byte[] embeddedRom = new byte[length]; + bool embeddedFound = true; + switch (names.FirstOrDefault()) + { + // CPC 464 ROMS + case "OS464ROM": + embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.OS_464_ROM)); + break; + case "BASIC1-0ROM": + embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.CPC_BASIC_1_0_ROM)); + break; - // CPC 6128 ROMS - case "OS6128ROM": - embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.CPC_OS_6128_ROM)); - break; - case "BASIC1-1ROM": - embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.CPC_BASIC_1_1_ROM)); - break; - case "AMSDOS0-5ROM": - embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.CPC_AMSDOS_0_5_ROM)); - break; - default: - embeddedFound = false; - break; - } + // CPC 6128 ROMS + case "OS6128ROM": + embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.CPC_OS_6128_ROM)); + break; + case "BASIC1-1ROM": + embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.CPC_BASIC_1_1_ROM)); + break; + case "AMSDOS0-5ROM": + embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.CPC_AMSDOS_0_5_ROM)); + break; + default: + embeddedFound = false; + break; + } - if (embeddedFound) - return embeddedRom; + if (embeddedFound) + return embeddedRom; - // Embedded ROM not found, maybe this is a peripheral ROM? - var result = names.Select(n => CoreComm.CoreFileProvider.GetFirmware("AmstradCPC", n, false)).FirstOrDefault(b => b != null && b.Length == length); - if (result == null) - { - throw new MissingFirmwareException($"At least one of these firmwares is required: {string.Join(", ", names)}"); - } + // Embedded ROM not found, maybe this is a peripheral ROM? + var result = names.Select(n => CoreComm.CoreFileProvider.GetFirmware("AmstradCPC", n, false)).FirstOrDefault(b => b != null && b.Length == length); + if (result == null) + { + throw new MissingFirmwareException($"At least one of these firmwares is required: {string.Join(", ", names)}"); + } - return result; - } + return result; + } - private MachineType _machineType; + private MachineType _machineType; - private void Init(MachineType machineType, List files, bool autoTape, BorderType bType) - { - _machineType = machineType; + private void Init(MachineType machineType, List files, bool autoTape, BorderType bType) + { + _machineType = machineType; - // setup the emulated model based on the MachineType - switch (machineType) - { - case MachineType.CPC464: - _machine = new CPC464(this, _cpu, files, autoTape, bType); - List roms64 = new List(); - roms64.Add(RomData.InitROM(MachineType.CPC464, GetFirmware(0x4000, "OS464ROM"), RomData.ROMChipType.Lower)); - roms64.Add(RomData.InitROM(MachineType.CPC464, GetFirmware(0x4000, "BASIC1-0ROM"), RomData.ROMChipType.Upper, 0)); - _machine.InitROM(roms64.ToArray()); - break; + // setup the emulated model based on the MachineType + switch (machineType) + { + case MachineType.CPC464: + _machine = new CPC464(this, _cpu, files, autoTape, bType); + List roms64 = new List(); + roms64.Add(RomData.InitROM(MachineType.CPC464, GetFirmware(0x4000, "OS464ROM"), RomData.ROMChipType.Lower)); + roms64.Add(RomData.InitROM(MachineType.CPC464, GetFirmware(0x4000, "BASIC1-0ROM"), RomData.ROMChipType.Upper, 0)); + _machine.InitROM(roms64.ToArray()); + break; - case MachineType.CPC6128: - _machine = new CPC6128(this, _cpu, files, autoTape, bType); - List roms128 = new List(); - roms128.Add(RomData.InitROM(MachineType.CPC6128, GetFirmware(0x4000, "OS6128ROM"), RomData.ROMChipType.Lower)); - roms128.Add(RomData.InitROM(MachineType.CPC6128, GetFirmware(0x4000, "BASIC1-1ROM"), RomData.ROMChipType.Upper, 0)); - roms128.Add(RomData.InitROM(MachineType.CPC6128, GetFirmware(0x4000, "AMSDOS0-5ROM"), RomData.ROMChipType.Upper, 7)); - _machine.InitROM(roms128.ToArray()); - break; - } - } + case MachineType.CPC6128: + _machine = new CPC6128(this, _cpu, files, autoTape, bType); + List roms128 = new List(); + roms128.Add(RomData.InitROM(MachineType.CPC6128, GetFirmware(0x4000, "OS6128ROM"), RomData.ROMChipType.Lower)); + roms128.Add(RomData.InitROM(MachineType.CPC6128, GetFirmware(0x4000, "BASIC1-1ROM"), RomData.ROMChipType.Upper, 0)); + roms128.Add(RomData.InitROM(MachineType.CPC6128, GetFirmware(0x4000, "AMSDOS0-5ROM"), RomData.ROMChipType.Upper, 7)); + _machine.InitROM(roms128.ToArray()); + break; + } + } - #region IRegionable + #region IRegionable - public DisplayType Region => DisplayType.PAL; + public DisplayType Region => DisplayType.PAL; - #endregion + #endregion - #region IDriveLight + #region IDriveLight - public bool DriveLightEnabled - { - get - { - return true; - } - } + public bool DriveLightEnabled + { + get + { + return true; + } + } - public bool DriveLightOn - { - get - { - if (_machine != null && - (_machine.TapeDevice != null && _machine.TapeDevice.TapeIsPlaying) || - (_machine.UPDDiskDevice != null && _machine.UPDDiskDevice.DriveLight)) - return true; + public bool DriveLightOn + { + get + { + if (_machine != null && + (_machine.TapeDevice != null && _machine.TapeDevice.TapeIsPlaying) || + (_machine.UPDDiskDevice != null && _machine.UPDDiskDevice.DriveLight)) + return true; - return false; - } - } + return false; + } + } - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IBeeperDevice.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IBeeperDevice.cs index 42626f6590..0572218c95 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IBeeperDevice.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IBeeperDevice.cs @@ -2,24 +2,24 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Represents a beeper/buzzer device - /// - public interface IBeeperDevice - { - /// - /// Initialisation - /// - void Init(int sampleRate, int tStatesPerFrame); + /// + /// Represents a beeper/buzzer device + /// + public interface IBeeperDevice + { + /// + /// Initialisation + /// + void Init(int sampleRate, int tStatesPerFrame); - /// - /// Processes an incoming pulse value and adds it to the blipbuffer - /// - void ProcessPulseValue(bool pulse); + /// + /// Processes an incoming pulse value and adds it to the blipbuffer + /// + void ProcessPulseValue(bool pulse); - /// - /// State serialization - /// - void SyncState(Serializer ser); - } + /// + /// State serialization + /// + void SyncState(Serializer ser); + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IFDDHost.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IFDDHost.cs index c65f7a6eda..3bea240dee 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IFDDHost.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IFDDHost.cs @@ -1,29 +1,29 @@  namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Defines an object that can load a floppy disk image - /// - public interface IFDDHost - { - /// - /// The currently inserted diskimage - /// - FloppyDisk Disk { get; set; } + /// + /// Defines an object that can load a floppy disk image + /// + public interface IFDDHost + { + /// + /// The currently inserted diskimage + /// + FloppyDisk Disk { get; set; } - /// - /// Parses a new disk image and loads it into this floppy drive - /// - void FDD_LoadDisk(byte[] diskData); + /// + /// Parses a new disk image and loads it into this floppy drive + /// + void FDD_LoadDisk(byte[] diskData); - /// - /// Ejects the current disk - /// - void FDD_EjectDisk(); + /// + /// Ejects the current disk + /// + void FDD_EjectDisk(); - /// - /// Signs whether the current active drive has a disk inserted - /// - bool FDD_IsDiskLoaded { get; } - } + /// + /// Signs whether the current active drive has a disk inserted + /// + bool FDD_IsDiskLoaded { get; } + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IJoystick.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IJoystick.cs index 7afe0d007c..50088cceae 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IJoystick.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IJoystick.cs @@ -1,34 +1,34 @@  namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Represents a spectrum joystick - /// - public interface IJoystick - { - /// - /// The type of joystick - /// - JoystickType JoyType { get; } + /// + /// Represents a spectrum joystick + /// + public interface IJoystick + { + /// + /// The type of joystick + /// + JoystickType JoyType { get; } - /// - /// Array of all the possibly button press names - /// - string[] ButtonCollection { get; set; } + /// + /// Array of all the possibly button press names + /// + string[] ButtonCollection { get; set; } - /// - /// The player number that this controller is currently assigned to - /// - int PlayerNumber { get; set; } + /// + /// The player number that this controller is currently assigned to + /// + int PlayerNumber { get; set; } - /// - /// Sets the joystick line based on key pressed - /// - void SetJoyInput(string key, bool isPressed); + /// + /// Sets the joystick line based on key pressed + /// + void SetJoyInput(string key, bool isPressed); - /// - /// Gets the state of a particular joystick binding - /// - bool GetJoyInput(string key); - } + /// + /// Gets the state of a particular joystick binding + /// + bool GetJoyInput(string key); + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IKeyboard.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IKeyboard.cs index 194837241f..976fac07cb 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IKeyboard.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IKeyboard.cs @@ -2,52 +2,52 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Represents a spectrum keyboard - /// - public interface IKeyboard - { - /// - /// The calling spectrumbase class - /// - CPCBase _machine { get; } + /// + /// Represents a spectrum keyboard + /// + public interface IKeyboard + { + /// + /// The calling spectrumbase class + /// + CPCBase _machine { get; } - /// - /// The keyboard matrix for a particular CPC model - /// - string[] KeyboardMatrix { get; set; } + /// + /// The keyboard matrix for a particular CPC model + /// + string[] KeyboardMatrix { get; set; } - /// - /// Other keyboard keys that are not in the matrix - /// (usually keys derived from key combos) - /// - string[] NonMatrixKeys { get; set; } + /// + /// Other keyboard keys that are not in the matrix + /// (usually keys derived from key combos) + /// + string[] NonMatrixKeys { get; set; } - /// - /// Represents the spectrum key state - /// - bool[] KeyStatus { get; set; } + /// + /// Represents the spectrum key state + /// + bool[] KeyStatus { get; set; } - /// - /// The currently selected line - /// - int CurrentLine { get; set; } + /// + /// The currently selected line + /// + int CurrentLine { get; set; } - /// - /// Reads the current line status - /// - byte ReadCurrentLine(); + /// + /// Reads the current line status + /// + byte ReadCurrentLine(); - /// - /// Sets the CPC key status - /// - void SetKeyStatus(string key, bool isPressed); + /// + /// Sets the CPC key status + /// + void SetKeyStatus(string key, bool isPressed); - /// - /// Gets the status of a CPC key - /// - bool GetKeyStatus(string key); + /// + /// Gets the status of a CPC key + /// + bool GetKeyStatus(string key); - void SyncState(Serializer ser); - } + void SyncState(Serializer ser); + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IPSG.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IPSG.cs index 2481387986..f272899598 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IPSG.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IPSG.cs @@ -3,64 +3,64 @@ using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Represents a PSG device (in this case an AY-3-891x) - /// - public interface IPSG : ISoundProvider - { - /// - /// Initlization routine - /// - void Init(int sampleRate, int tStatesPerFrame); + /// + /// Represents a PSG device (in this case an AY-3-891x) + /// + public interface IPSG : ISoundProvider + { + /// + /// Initlization routine + /// + void Init(int sampleRate, int tStatesPerFrame); - void SetFunction(int data); + void SetFunction(int data); - //void ClockCycle(); + //void ClockCycle(); - /// - /// Activates a register - /// - int SelectedRegister { get; set; } - - /// - /// Writes to the PSG - /// - void PortWrite(int value); + /// + /// Activates a register + /// + int SelectedRegister { get; set; } - /// - /// Reads from the PSG - /// - int PortRead(); - + /// + /// Writes to the PSG + /// + void PortWrite(int value); - /// - /// Resets the PSG - /// - void Reset(); + /// + /// Reads from the PSG + /// + int PortRead(); - /// - /// The volume of the AY chip - /// - int Volume { get; set; } - /// - /// Called at the start of a frame - /// - void StartFrame(); + /// + /// Resets the PSG + /// + void Reset(); - /// - /// called at the end of a frame - /// - void EndFrame(); + /// + /// The volume of the AY chip + /// + int Volume { get; set; } - /// - /// Updates the sound based on number of frame cycles - /// - void UpdateSound(int frameCycle); + /// + /// Called at the start of a frame + /// + void StartFrame(); - /// - /// IStatable serialization - /// - void SyncState(Serializer ser); - } + /// + /// called at the end of a frame + /// + void EndFrame(); + + /// + /// Updates the sound based on number of frame cycles + /// + void UpdateSound(int frameCycle); + + /// + /// IStatable serialization + /// + void SyncState(Serializer ser); + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IPortIODevice.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IPortIODevice.cs index 01a351f4b4..b71e08ee08 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IPortIODevice.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Abstraction/IPortIODevice.cs @@ -1,19 +1,19 @@  namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Represents a device that utilizes port IN & OUT - /// - public interface IPortIODevice - { - /// - /// Device responds to an IN instruction - /// - bool ReadPort(ushort port, ref int result); + /// + /// Represents a device that utilizes port IN & OUT + /// + public interface IPortIODevice + { + /// + /// Device responds to an IN instruction + /// + bool ReadPort(ushort port, ref int result); - /// - /// Device responds to an OUT instruction - /// - bool WritePort(ushort port, int result); - } + /// + /// Device responds to an OUT instruction + /// + bool WritePort(ushort port, int result); + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Datacorder/DatacorderDevice.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Datacorder/DatacorderDevice.cs index 32adc5dbde..5fd62aebf5 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Datacorder/DatacorderDevice.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Datacorder/DatacorderDevice.cs @@ -7,566 +7,566 @@ using System.Text; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Represents the tape device - /// - public class DatacorderDevice - { - #region Construction - - private CPCBase _machine; - private Z80A _cpu => _machine.CPU; - private IBeeperDevice _buzzer => _machine.TapeBuzzer; - - /// - /// Default constructor - /// - public DatacorderDevice(bool autoTape) - { - _autoPlay = autoTape; - } - - /// - /// Initializes the datacorder device - /// - public void Init(CPCBase machine) - { - _machine = machine; - } - - #endregion - - #region State Information - - /// - /// Signs whether the tape motor is running - /// - private bool tapeMotor; - public bool TapeMotor - { - get { return tapeMotor; } - set - { - if (tapeMotor == value) - return; - - tapeMotor = value; - if (tapeMotor) - { - _machine.CPC.OSD_TapeMotorActive(); - - if (_autoPlay) - { - Play(); - } - } - - else - { - _machine.CPC.OSD_TapeMotorInactive(); - - if (_autoPlay) - { - Stop(); - } - } - - } - } - - /// - /// Internal counter used to trigger tape buzzer output - /// - private int counter = 0; - - /// - /// The index of the current tape data block that is loaded - /// - private int _currentDataBlockIndex = 0; - public int CurrentDataBlockIndex - { - get - { - if (_dataBlocks.Count() > 0) { return _currentDataBlockIndex; } - else { return -1; } - } - set - { - if (value == _currentDataBlockIndex) { return; } - if (value < _dataBlocks.Count() && value >= 0) - { - _currentDataBlockIndex = value; - _position = 0; - } - } - } - - /// - /// The current position within the current data block - /// - private int _position = 0; - public int Position - { - get - { - if (_position >= _dataBlocks[_currentDataBlockIndex].DataPeriods.Count) { return 0; } - else { return _position; } - } - } - - /// - /// Signs whether the tape is currently playing or not - /// - private bool _tapeIsPlaying = false; - public bool TapeIsPlaying - { - get { return _tapeIsPlaying; } - } - - /// - /// A list of the currently loaded data blocks - /// - private List _dataBlocks = new List(); - public List DataBlocks - { - get { return _dataBlocks; } - set { _dataBlocks = value; } - } - - /// - /// Stores the last CPU t-state value - /// - private long _lastCycle = 0; - - /// - /// Edge - /// - private int _waitEdge = 0; - - /// - /// Current tapebit state - /// - private bool currentState = false; - - #endregion - - #region Datacorder Device Settings - - /// - /// Signs whether the device should autodetect when the Z80 has entered into - /// 'load' mode and auto-play the tape if neccesary - /// - private bool _autoPlay; - - #endregion - - #region Emulator - - /// - /// Should be fired at the end of every frame - /// Primary purpose is to detect tape traps and manage auto play (if/when this is ever implemented) - /// - public void EndFrame() - { - //MonitorFrame(); - } - - public void StartFrame() - { - //_buzzer.ProcessPulseValue(currentState); - } - - #endregion - - #region Tape Controls - - /// - /// Starts the tape playing from the beginning of the current block - /// - public void Play() - { - if (_tapeIsPlaying) - return; - - if (!_autoPlay) - _machine.CPC.OSD_TapePlaying(); - - _machine.CPC.OSD_TapeMotorActive(); - - // update the lastCycle - _lastCycle = _cpu.TotalExecutedCycles; - - // reset waitEdge and position - _waitEdge = 0; - _position = 0; - - if ( - _dataBlocks.Count > 0 && // data blocks are present && - _currentDataBlockIndex >= 0 // the current data block index is 1 or greater - ) - { - while (_position >= _dataBlocks[_currentDataBlockIndex].DataPeriods.Count) - { - // we are at the end of a data block - move to the next - _position = 0; - _currentDataBlockIndex++; - - // are we at the end of the tape? - if (_currentDataBlockIndex >= _dataBlocks.Count) - { - break; - } - } - - // check for end of tape - if (_currentDataBlockIndex >= _dataBlocks.Count) - { - // end of tape reached. Rewind to beginning - AutoStopTape(); - RTZ(); - return; - } - - // update waitEdge with the current position in the current block - _waitEdge = _dataBlocks[_currentDataBlockIndex].DataPeriods[_position]; - - // sign that the tape is now playing - _tapeIsPlaying = true; - } - } - - /// - /// Stops the tape - /// (should move to the beginning of the next block) - /// - public void Stop() - { - if (!_tapeIsPlaying) - return; - - _machine.CPC.OSD_TapeStopped(); - - // sign that the tape is no longer playing - _tapeIsPlaying = false; - - if ( - _currentDataBlockIndex >= 0 && // we are at datablock 1 or above - _position >= _dataBlocks[_currentDataBlockIndex].DataPeriods.Count - 1 // the block is still playing back - ) - { - // move to the next block - _currentDataBlockIndex++; - - if (_currentDataBlockIndex >= _dataBlocks.Count()) - { - _currentDataBlockIndex = -1; - } - - // reset waitEdge and position - _waitEdge = 0; - _position = 0; - - if ( - _currentDataBlockIndex < 0 && // block index is -1 - _dataBlocks.Count() > 0 // number of blocks is greater than 0 - ) - { - // move the index on to 0 - _currentDataBlockIndex = 0; - } - } - - // update the lastCycle - _lastCycle = _cpu.TotalExecutedCycles; - } - - /// - /// Rewinds the tape to it's beginning (return to zero) - /// - public void RTZ() - { - Stop(); - _machine.CPC.OSD_TapeRTZ(); - _currentDataBlockIndex = 0; - } - - /// - /// Performs a block skip operation on the current tape - /// TRUE: skip forward - /// FALSE: skip backward - /// - public void SkipBlock(bool skipForward) - { - int blockCount = _dataBlocks.Count; - int targetBlockId = _currentDataBlockIndex; - - if (skipForward) - { - if (_currentDataBlockIndex == blockCount - 1) - { - // last block, go back to beginning - targetBlockId = 0; - } - else - { - targetBlockId++; - } - } - else - { - if (_currentDataBlockIndex == 0) - { - // already first block, goto last block - targetBlockId = blockCount - 1; - } - else - { - targetBlockId--; - } - } - - var bl = _dataBlocks[targetBlockId]; - - StringBuilder sbd = new StringBuilder(); - sbd.Append("("); - sbd.Append((targetBlockId + 1) + " of " + _dataBlocks.Count()); - sbd.Append(") : "); - //sbd.Append("ID" + bl.BlockID.ToString("X2") + " - "); - sbd.Append(bl.BlockDescription); - if (bl.MetaData.Count > 0) - { - sbd.Append(" - "); - sbd.Append(bl.MetaData.First().Key + ": " + bl.MetaData.First().Value); - //sbd.Append("\n"); - //sbd.Append(bl.MetaData.Skip(1).First().Key + ": " + bl.MetaData.Skip(1).First().Value); - } - - if (skipForward) - _machine.CPC.OSD_TapeNextBlock(sbd.ToString()); - else - _machine.CPC.OSD_TapePrevBlock(sbd.ToString()); - - CurrentDataBlockIndex = targetBlockId; - } - - /// - /// Inserts a new tape and sets up the tape device accordingly - /// - public void LoadTape(byte[] tapeData) - { - // instantiate converters - CdtConverter cdtSer = new CdtConverter(this); - - // CDT - if (cdtSer.CheckType(tapeData)) - { - // this file has a tzx header - attempt serialization - try - { - cdtSer.Read(tapeData); - // reset block index - CurrentDataBlockIndex = 0; - return; - } - catch (Exception ex) - { - // exception during operation - var e = ex; - throw new Exception(this.GetType().ToString() + - "\n\nTape image file has a valid CDT header, but threw an exception whilst data was being parsed.\n\n" + e.ToString()); - } - } - } - - /// - /// Resets the tape - /// - public void Reset() - { - RTZ(); - } - - #endregion - - #region Tape Device Methods - - /// - /// Is called every cpu cycle but runs every 50 t-states - /// This enables the tape devices to play out even if the spectrum itself is not - /// requesting tape data - /// - public void TapeCycle() - { - if (TapeMotor) - { - counter++; - - if (counter > 20) - { - counter = 0; - bool state = GetEarBit(_machine.CPU.TotalExecutedCycles); - _buzzer.ProcessPulseValue(state); - } - } - } - - /// - /// Simulates the spectrum 'EAR' input reading data from the tape - /// - public bool GetEarBit(long cpuCycle) - { - // decide how many cycles worth of data we are capturing - long cycles = cpuCycle - _lastCycle; - - // check whether tape is actually playing - if (tapeMotor == false) - { - // it's not playing. Update lastCycle and return - _lastCycle = cpuCycle; - return false; - } - - // check for end of tape - if (_currentDataBlockIndex < 0) - { - // end of tape reached - RTZ (and stop) - RTZ(); - return currentState; - } - - // process the cycles based on the waitEdge - while (cycles >= _waitEdge) - { - // decrement cycles - cycles -= _waitEdge; - - if (_position == 0 && tapeMotor) - { - // start of block - take care of initial pulse level for PZX - switch (_dataBlocks[_currentDataBlockIndex].BlockDescription) - { - case BlockType.PULS: - // initial pulse level is always low - if (currentState) - FlipTapeState(); - break; - case BlockType.DATA: - // initial pulse level is stored in block - if (currentState != _dataBlocks[_currentDataBlockIndex].InitialPulseLevel) - FlipTapeState(); - break; - case BlockType.PAUS: - // initial pulse level is stored in block - if (currentState != _dataBlocks[_currentDataBlockIndex].InitialPulseLevel) - FlipTapeState(); - break; - } - - // most of these amstrad tapes appear to have a pause block at the start - // skip this if it is the first block - switch (_dataBlocks[_currentDataBlockIndex].BlockDescription) - { - case BlockType.PAUS: - case BlockType.PAUSE_BLOCK: - case BlockType.Pause_or_Stop_the_Tape: - if (_currentDataBlockIndex == 0) - { - // this is the first block on the tape - SkipBlock(true); - } - else - { - // there may be non-data blocks before this - bool okToSkipPause = true; - for (int i = _currentDataBlockIndex; i >= 0; i--) - { - switch (_dataBlocks[i].BlockDescription) - { - case BlockType.Archive_Info: - case BlockType.BRWS: - case BlockType.Custom_Info_Block: - case BlockType.Emulation_Info: - case BlockType.Glue_Block: - case BlockType.Hardware_Type: - case BlockType.Message_Block: - case BlockType.PZXT: - case BlockType.Text_Description: - break; - default: - okToSkipPause = false; - break; - } - - if (!okToSkipPause) - break; - } - - if (okToSkipPause) - { - SkipBlock(true); - } - } - break; - } - - // notify about the current block - var bl = _dataBlocks[_currentDataBlockIndex]; - - StringBuilder sbd = new StringBuilder(); - sbd.Append("("); - sbd.Append((_currentDataBlockIndex + 1) + " of " + _dataBlocks.Count()); - sbd.Append(") : "); - //sbd.Append("ID" + bl.BlockID.ToString("X2") + " - "); - sbd.Append(bl.BlockDescription); - if (bl.MetaData.Count > 0) - { - sbd.Append(" - "); - sbd.Append(bl.MetaData.First().Key + ": " + bl.MetaData.First().Value); - } - _machine.CPC.OSD_TapePlayingBlockInfo(sbd.ToString()); - } - - - // increment the current period position - _position++; - - if (_position >= _dataBlocks[_currentDataBlockIndex].DataPeriods.Count()) - { - // we have reached the end of the current block - - if (_dataBlocks[_currentDataBlockIndex].DataPeriods.Count() == 0) - { - // notify about the current block (we are skipping it because its empty) - var bl = _dataBlocks[_currentDataBlockIndex]; - StringBuilder sbd = new StringBuilder(); - sbd.Append("("); - sbd.Append((_currentDataBlockIndex + 1) + " of " + _dataBlocks.Count()); - sbd.Append(") : "); - //sbd.Append("ID" + bl.BlockID.ToString("X2") + " - "); - sbd.Append(bl.BlockDescription); - if (bl.MetaData.Count > 0) - { - sbd.Append(" - "); - sbd.Append(bl.MetaData.First().Key + ": " + bl.MetaData.First().Value); - } - _machine.CPC.OSD_TapePlayingSkipBlockInfo(sbd.ToString()); - - } - - // skip any empty blocks (and process any command blocks) - while (_position >= _dataBlocks[_currentDataBlockIndex].DataPeriods.Count()) - { - // check for any commands - var command = _dataBlocks[_currentDataBlockIndex].Command; - var block = _dataBlocks[_currentDataBlockIndex]; - bool shouldStop = false; - switch (command) - { - case TapeCommand.STOP_THE_TAPE: - case TapeCommand.STOP_THE_TAPE_48K: - throw new Exception("spectrum tape command found in CPC tape"); - - /* + /// + /// Represents the tape device + /// + public class DatacorderDevice + { + #region Construction + + private CPCBase _machine; + private Z80A _cpu => _machine.CPU; + private IBeeperDevice _buzzer => _machine.TapeBuzzer; + + /// + /// Default constructor + /// + public DatacorderDevice(bool autoTape) + { + _autoPlay = autoTape; + } + + /// + /// Initializes the datacorder device + /// + public void Init(CPCBase machine) + { + _machine = machine; + } + + #endregion + + #region State Information + + /// + /// Signs whether the tape motor is running + /// + private bool tapeMotor; + public bool TapeMotor + { + get { return tapeMotor; } + set + { + if (tapeMotor == value) + return; + + tapeMotor = value; + if (tapeMotor) + { + _machine.CPC.OSD_TapeMotorActive(); + + if (_autoPlay) + { + Play(); + } + } + + else + { + _machine.CPC.OSD_TapeMotorInactive(); + + if (_autoPlay) + { + Stop(); + } + } + + } + } + + /// + /// Internal counter used to trigger tape buzzer output + /// + private int counter = 0; + + /// + /// The index of the current tape data block that is loaded + /// + private int _currentDataBlockIndex = 0; + public int CurrentDataBlockIndex + { + get + { + if (_dataBlocks.Count() > 0) { return _currentDataBlockIndex; } + else { return -1; } + } + set + { + if (value == _currentDataBlockIndex) { return; } + if (value < _dataBlocks.Count() && value >= 0) + { + _currentDataBlockIndex = value; + _position = 0; + } + } + } + + /// + /// The current position within the current data block + /// + private int _position = 0; + public int Position + { + get + { + if (_position >= _dataBlocks[_currentDataBlockIndex].DataPeriods.Count) { return 0; } + else { return _position; } + } + } + + /// + /// Signs whether the tape is currently playing or not + /// + private bool _tapeIsPlaying = false; + public bool TapeIsPlaying + { + get { return _tapeIsPlaying; } + } + + /// + /// A list of the currently loaded data blocks + /// + private List _dataBlocks = new List(); + public List DataBlocks + { + get { return _dataBlocks; } + set { _dataBlocks = value; } + } + + /// + /// Stores the last CPU t-state value + /// + private long _lastCycle = 0; + + /// + /// Edge + /// + private int _waitEdge = 0; + + /// + /// Current tapebit state + /// + private bool currentState = false; + + #endregion + + #region Datacorder Device Settings + + /// + /// Signs whether the device should autodetect when the Z80 has entered into + /// 'load' mode and auto-play the tape if neccesary + /// + private bool _autoPlay; + + #endregion + + #region Emulator + + /// + /// Should be fired at the end of every frame + /// Primary purpose is to detect tape traps and manage auto play (if/when this is ever implemented) + /// + public void EndFrame() + { + //MonitorFrame(); + } + + public void StartFrame() + { + //_buzzer.ProcessPulseValue(currentState); + } + + #endregion + + #region Tape Controls + + /// + /// Starts the tape playing from the beginning of the current block + /// + public void Play() + { + if (_tapeIsPlaying) + return; + + if (!_autoPlay) + _machine.CPC.OSD_TapePlaying(); + + _machine.CPC.OSD_TapeMotorActive(); + + // update the lastCycle + _lastCycle = _cpu.TotalExecutedCycles; + + // reset waitEdge and position + _waitEdge = 0; + _position = 0; + + if ( + _dataBlocks.Count > 0 && // data blocks are present && + _currentDataBlockIndex >= 0 // the current data block index is 1 or greater + ) + { + while (_position >= _dataBlocks[_currentDataBlockIndex].DataPeriods.Count) + { + // we are at the end of a data block - move to the next + _position = 0; + _currentDataBlockIndex++; + + // are we at the end of the tape? + if (_currentDataBlockIndex >= _dataBlocks.Count) + { + break; + } + } + + // check for end of tape + if (_currentDataBlockIndex >= _dataBlocks.Count) + { + // end of tape reached. Rewind to beginning + AutoStopTape(); + RTZ(); + return; + } + + // update waitEdge with the current position in the current block + _waitEdge = _dataBlocks[_currentDataBlockIndex].DataPeriods[_position]; + + // sign that the tape is now playing + _tapeIsPlaying = true; + } + } + + /// + /// Stops the tape + /// (should move to the beginning of the next block) + /// + public void Stop() + { + if (!_tapeIsPlaying) + return; + + _machine.CPC.OSD_TapeStopped(); + + // sign that the tape is no longer playing + _tapeIsPlaying = false; + + if ( + _currentDataBlockIndex >= 0 && // we are at datablock 1 or above + _position >= _dataBlocks[_currentDataBlockIndex].DataPeriods.Count - 1 // the block is still playing back + ) + { + // move to the next block + _currentDataBlockIndex++; + + if (_currentDataBlockIndex >= _dataBlocks.Count()) + { + _currentDataBlockIndex = -1; + } + + // reset waitEdge and position + _waitEdge = 0; + _position = 0; + + if ( + _currentDataBlockIndex < 0 && // block index is -1 + _dataBlocks.Count() > 0 // number of blocks is greater than 0 + ) + { + // move the index on to 0 + _currentDataBlockIndex = 0; + } + } + + // update the lastCycle + _lastCycle = _cpu.TotalExecutedCycles; + } + + /// + /// Rewinds the tape to it's beginning (return to zero) + /// + public void RTZ() + { + Stop(); + _machine.CPC.OSD_TapeRTZ(); + _currentDataBlockIndex = 0; + } + + /// + /// Performs a block skip operation on the current tape + /// TRUE: skip forward + /// FALSE: skip backward + /// + public void SkipBlock(bool skipForward) + { + int blockCount = _dataBlocks.Count; + int targetBlockId = _currentDataBlockIndex; + + if (skipForward) + { + if (_currentDataBlockIndex == blockCount - 1) + { + // last block, go back to beginning + targetBlockId = 0; + } + else + { + targetBlockId++; + } + } + else + { + if (_currentDataBlockIndex == 0) + { + // already first block, goto last block + targetBlockId = blockCount - 1; + } + else + { + targetBlockId--; + } + } + + var bl = _dataBlocks[targetBlockId]; + + StringBuilder sbd = new StringBuilder(); + sbd.Append("("); + sbd.Append((targetBlockId + 1) + " of " + _dataBlocks.Count()); + sbd.Append(") : "); + //sbd.Append("ID" + bl.BlockID.ToString("X2") + " - "); + sbd.Append(bl.BlockDescription); + if (bl.MetaData.Count > 0) + { + sbd.Append(" - "); + sbd.Append(bl.MetaData.First().Key + ": " + bl.MetaData.First().Value); + //sbd.Append("\n"); + //sbd.Append(bl.MetaData.Skip(1).First().Key + ": " + bl.MetaData.Skip(1).First().Value); + } + + if (skipForward) + _machine.CPC.OSD_TapeNextBlock(sbd.ToString()); + else + _machine.CPC.OSD_TapePrevBlock(sbd.ToString()); + + CurrentDataBlockIndex = targetBlockId; + } + + /// + /// Inserts a new tape and sets up the tape device accordingly + /// + public void LoadTape(byte[] tapeData) + { + // instantiate converters + CdtConverter cdtSer = new CdtConverter(this); + + // CDT + if (cdtSer.CheckType(tapeData)) + { + // this file has a tzx header - attempt serialization + try + { + cdtSer.Read(tapeData); + // reset block index + CurrentDataBlockIndex = 0; + return; + } + catch (Exception ex) + { + // exception during operation + var e = ex; + throw new Exception(this.GetType().ToString() + + "\n\nTape image file has a valid CDT header, but threw an exception whilst data was being parsed.\n\n" + e.ToString()); + } + } + } + + /// + /// Resets the tape + /// + public void Reset() + { + RTZ(); + } + + #endregion + + #region Tape Device Methods + + /// + /// Is called every cpu cycle but runs every 50 t-states + /// This enables the tape devices to play out even if the spectrum itself is not + /// requesting tape data + /// + public void TapeCycle() + { + if (TapeMotor) + { + counter++; + + if (counter > 20) + { + counter = 0; + bool state = GetEarBit(_machine.CPU.TotalExecutedCycles); + _buzzer.ProcessPulseValue(state); + } + } + } + + /// + /// Simulates the spectrum 'EAR' input reading data from the tape + /// + public bool GetEarBit(long cpuCycle) + { + // decide how many cycles worth of data we are capturing + long cycles = cpuCycle - _lastCycle; + + // check whether tape is actually playing + if (tapeMotor == false) + { + // it's not playing. Update lastCycle and return + _lastCycle = cpuCycle; + return false; + } + + // check for end of tape + if (_currentDataBlockIndex < 0) + { + // end of tape reached - RTZ (and stop) + RTZ(); + return currentState; + } + + // process the cycles based on the waitEdge + while (cycles >= _waitEdge) + { + // decrement cycles + cycles -= _waitEdge; + + if (_position == 0 && tapeMotor) + { + // start of block - take care of initial pulse level for PZX + switch (_dataBlocks[_currentDataBlockIndex].BlockDescription) + { + case BlockType.PULS: + // initial pulse level is always low + if (currentState) + FlipTapeState(); + break; + case BlockType.DATA: + // initial pulse level is stored in block + if (currentState != _dataBlocks[_currentDataBlockIndex].InitialPulseLevel) + FlipTapeState(); + break; + case BlockType.PAUS: + // initial pulse level is stored in block + if (currentState != _dataBlocks[_currentDataBlockIndex].InitialPulseLevel) + FlipTapeState(); + break; + } + + // most of these amstrad tapes appear to have a pause block at the start + // skip this if it is the first block + switch (_dataBlocks[_currentDataBlockIndex].BlockDescription) + { + case BlockType.PAUS: + case BlockType.PAUSE_BLOCK: + case BlockType.Pause_or_Stop_the_Tape: + if (_currentDataBlockIndex == 0) + { + // this is the first block on the tape + SkipBlock(true); + } + else + { + // there may be non-data blocks before this + bool okToSkipPause = true; + for (int i = _currentDataBlockIndex; i >= 0; i--) + { + switch (_dataBlocks[i].BlockDescription) + { + case BlockType.Archive_Info: + case BlockType.BRWS: + case BlockType.Custom_Info_Block: + case BlockType.Emulation_Info: + case BlockType.Glue_Block: + case BlockType.Hardware_Type: + case BlockType.Message_Block: + case BlockType.PZXT: + case BlockType.Text_Description: + break; + default: + okToSkipPause = false; + break; + } + + if (!okToSkipPause) + break; + } + + if (okToSkipPause) + { + SkipBlock(true); + } + } + break; + } + + // notify about the current block + var bl = _dataBlocks[_currentDataBlockIndex]; + + StringBuilder sbd = new StringBuilder(); + sbd.Append("("); + sbd.Append((_currentDataBlockIndex + 1) + " of " + _dataBlocks.Count()); + sbd.Append(") : "); + //sbd.Append("ID" + bl.BlockID.ToString("X2") + " - "); + sbd.Append(bl.BlockDescription); + if (bl.MetaData.Count > 0) + { + sbd.Append(" - "); + sbd.Append(bl.MetaData.First().Key + ": " + bl.MetaData.First().Value); + } + _machine.CPC.OSD_TapePlayingBlockInfo(sbd.ToString()); + } + + + // increment the current period position + _position++; + + if (_position >= _dataBlocks[_currentDataBlockIndex].DataPeriods.Count()) + { + // we have reached the end of the current block + + if (_dataBlocks[_currentDataBlockIndex].DataPeriods.Count() == 0) + { + // notify about the current block (we are skipping it because its empty) + var bl = _dataBlocks[_currentDataBlockIndex]; + StringBuilder sbd = new StringBuilder(); + sbd.Append("("); + sbd.Append((_currentDataBlockIndex + 1) + " of " + _dataBlocks.Count()); + sbd.Append(") : "); + //sbd.Append("ID" + bl.BlockID.ToString("X2") + " - "); + sbd.Append(bl.BlockDescription); + if (bl.MetaData.Count > 0) + { + sbd.Append(" - "); + sbd.Append(bl.MetaData.First().Key + ": " + bl.MetaData.First().Value); + } + _machine.CPC.OSD_TapePlayingSkipBlockInfo(sbd.ToString()); + + } + + // skip any empty blocks (and process any command blocks) + while (_position >= _dataBlocks[_currentDataBlockIndex].DataPeriods.Count()) + { + // check for any commands + var command = _dataBlocks[_currentDataBlockIndex].Command; + var block = _dataBlocks[_currentDataBlockIndex]; + bool shouldStop = false; + switch (command) + { + case TapeCommand.STOP_THE_TAPE: + case TapeCommand.STOP_THE_TAPE_48K: + throw new Exception("spectrum tape command found in CPC tape"); + + /* // Stop the tape command found - if this is the end of the tape RTZ // otherwise just STOP and move to the next block case TapeCommand.STOP_THE_TAPE: @@ -601,84 +601,84 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC } break; */ - default: - break; - } + default: + break; + } - if (shouldStop) - break; + if (shouldStop) + break; - _position = 0; - _currentDataBlockIndex++; + _position = 0; + _currentDataBlockIndex++; - if (_currentDataBlockIndex >= _dataBlocks.Count()) - { - break; - } - } + if (_currentDataBlockIndex >= _dataBlocks.Count()) + { + break; + } + } - // check for end of tape - if (_currentDataBlockIndex >= _dataBlocks.Count()) - { - _currentDataBlockIndex = -1; - RTZ(); - return currentState; - } - } + // check for end of tape + if (_currentDataBlockIndex >= _dataBlocks.Count()) + { + _currentDataBlockIndex = -1; + RTZ(); + return currentState; + } + } - // update waitEdge with current position within the current block - _waitEdge = _dataBlocks[_currentDataBlockIndex].DataPeriods[_position]; + // update waitEdge with current position within the current block + _waitEdge = _dataBlocks[_currentDataBlockIndex].DataPeriods[_position]; - // flip the current state - FlipTapeState(); + // flip the current state + FlipTapeState(); - } + } - // update lastCycle and return currentstate - _lastCycle = cpuCycle - (long)cycles; + // update lastCycle and return currentstate + _lastCycle = cpuCycle - (long)cycles; - // play the buzzer - //_buzzer.ProcessPulseValue(false, currentState); + // play the buzzer + //_buzzer.ProcessPulseValue(false, currentState); - return currentState; - } + return currentState; + } - private void FlipTapeState() - { - currentState = !currentState; - } + private void FlipTapeState() + { + currentState = !currentState; + } - #endregion + #endregion - #region TapeMonitor + #region TapeMonitor - - public void AutoStopTape() - { - if (!_tapeIsPlaying) - return; - if (!_autoPlay) - return; + public void AutoStopTape() + { + if (!_tapeIsPlaying) + return; - Stop(); - _machine.CPC.OSD_TapeStoppedAuto(); - } + if (!_autoPlay) + return; - public void AutoStartTape() - { - if (_tapeIsPlaying) - return; + Stop(); + _machine.CPC.OSD_TapeStoppedAuto(); + } - if (!_autoPlay) - return; + public void AutoStartTape() + { + if (_tapeIsPlaying) + return; - Play(); - _machine.CPC.OSD_TapePlayingAuto(); - } + if (!_autoPlay) + return; - /* + Play(); + _machine.CPC.OSD_TapePlayingAuto(); + } + + /* public int MaskableInterruptCount = 0; private void MonitorFrame() @@ -749,27 +749,27 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC } */ - #endregion + #endregion - #region IPortIODevice + #region IPortIODevice - /// - /// Mask constants - /// - private const int TAPE_BIT = 0x40; - private const int EAR_BIT = 0x10; - private const int MIC_BIT = 0x08; + /// + /// Mask constants + /// + private const int TAPE_BIT = 0x40; + private const int EAR_BIT = 0x10; + private const int MIC_BIT = 0x08; - /// - /// Device responds to an IN instruction - /// - public bool ReadPort() - { - if (TapeIsPlaying) - { - GetEarBit(_cpu.TotalExecutedCycles); - } - /* + /// + /// Device responds to an IN instruction + /// + public bool ReadPort() + { + if (TapeIsPlaying) + { + GetEarBit(_cpu.TotalExecutedCycles); + } + /* if (currentState) { result |= TAPE_BIT; @@ -780,53 +780,53 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC } */ - if (!TapeIsPlaying) - { - //if (_machine.UPDDiskDevice == null || !_machine.UPDDiskDevice.FDD_IsDiskLoaded) - //MonitorRead(); - } - //if (_machine.UPDDiskDevice == null || !_machine.UPDDiskDevice.FDD_IsDiskLoaded) - //MonitorRead(); + if (!TapeIsPlaying) + { + //if (_machine.UPDDiskDevice == null || !_machine.UPDDiskDevice.FDD_IsDiskLoaded) + //MonitorRead(); + } + //if (_machine.UPDDiskDevice == null || !_machine.UPDDiskDevice.FDD_IsDiskLoaded) + //MonitorRead(); - return true; - } + return true; + } - /// - /// Device responds to an OUT instruction - /// - public void WritePort(bool state) - { - // not implemented + /// + /// Device responds to an OUT instruction + /// + public void WritePort(bool state) + { + // not implemented - /* + /* if (!TapeIsPlaying) { currentState = ((byte)result & 0x10) != 0; } */ - } + } - #endregion + #endregion - #region State Serialization + #region State Serialization - /// - /// Bizhawk state serialization - /// - public void SyncState(Serializer ser) - { - ser.BeginSection(nameof(DatacorderDevice)); - ser.Sync(nameof(counter), ref counter); - ser.Sync(nameof(_currentDataBlockIndex), ref _currentDataBlockIndex); - ser.Sync(nameof(_position), ref _position); - ser.Sync(nameof(_tapeIsPlaying), ref _tapeIsPlaying); - ser.Sync(nameof(_lastCycle), ref _lastCycle); - ser.Sync(nameof(_waitEdge), ref _waitEdge); - ser.Sync(nameof(currentState), ref currentState); - ser.Sync(nameof(tapeMotor), ref tapeMotor); - ser.EndSection(); - } + /// + /// Bizhawk state serialization + /// + public void SyncState(Serializer ser) + { + ser.BeginSection(nameof(DatacorderDevice)); + ser.Sync(nameof(counter), ref counter); + ser.Sync(nameof(_currentDataBlockIndex), ref _currentDataBlockIndex); + ser.Sync(nameof(_position), ref _position); + ser.Sync(nameof(_tapeIsPlaying), ref _tapeIsPlaying); + ser.Sync(nameof(_lastCycle), ref _lastCycle); + ser.Sync(nameof(_waitEdge), ref _waitEdge); + ser.Sync(nameof(currentState), ref currentState); + ser.Sync(nameof(tapeMotor), ref tapeMotor); + ser.EndSection(); + } - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/CHRN.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/CHRN.cs index 2eb7f7c5be..c94f99c9ae 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/CHRN.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/CHRN.cs @@ -1,180 +1,180 @@  namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Used for the sector CHRN structure - /// - public class CHRN - { - /// - /// Track - /// - public byte C { get; set; } + /// + /// Used for the sector CHRN structure + /// + public class CHRN + { + /// + /// Track + /// + public byte C { get; set; } - /// - /// Side - /// - public byte H { get; set; } + /// + /// Side + /// + public byte H { get; set; } - /// - /// Sector ID - /// - public byte R { get; set; } + /// + /// Sector ID + /// + public byte R { get; set; } - /// - /// Sector Size - /// - public byte N { get; set; } + /// + /// Sector Size + /// + public byte N { get; set; } - /// - /// Status register 1 - /// - private byte _flag1; - public byte Flag1 - { - get { return _flag1; } - set { _flag1 = value; } - } + /// + /// Status register 1 + /// + private byte _flag1; + public byte Flag1 + { + get { return _flag1; } + set { _flag1 = value; } + } - /// - /// Status register 2 - /// - private byte _flag2; - public byte Flag2 - { - get { return _flag2; } - set { _flag2 = value; } - } + /// + /// Status register 2 + /// + private byte _flag2; + public byte Flag2 + { + get { return _flag2; } + set { _flag2 = value; } + } - /// - /// Used to store the last transmitted/received data bytes - /// - public byte[] DataBytes { get; set; } + /// + /// Used to store the last transmitted/received data bytes + /// + public byte[] DataBytes { get; set; } - /// - /// ID for the read/write data command - /// - public int DataID { get; set; } + /// + /// ID for the read/write data command + /// + public int DataID { get; set; } - #region Helper Methods + #region Helper Methods - /// - /// Missing Address Mark (Sector_ID or DAM not found) - /// - public bool ST1MA - { - get { return NECUPD765.GetBit(0, _flag1); } - set - { - if (value) { NECUPD765.SetBit(0, ref _flag1); } - else { NECUPD765.UnSetBit(0, ref _flag1); } - } - } + /// + /// Missing Address Mark (Sector_ID or DAM not found) + /// + public bool ST1MA + { + get { return NECUPD765.GetBit(0, _flag1); } + set + { + if (value) { NECUPD765.SetBit(0, ref _flag1); } + else { NECUPD765.UnSetBit(0, ref _flag1); } + } + } - /// - /// No Data (Sector_ID not found, CRC fail in ID_field) - /// - public bool ST1ND - { - get { return NECUPD765.GetBit(2, _flag1); } - set - { - if (value) { NECUPD765.SetBit(2, ref _flag1); } - else { NECUPD765.UnSetBit(2, ref _flag1); } - } - } + /// + /// No Data (Sector_ID not found, CRC fail in ID_field) + /// + public bool ST1ND + { + get { return NECUPD765.GetBit(2, _flag1); } + set + { + if (value) { NECUPD765.SetBit(2, ref _flag1); } + else { NECUPD765.UnSetBit(2, ref _flag1); } + } + } - /// - /// Data Error (CRC-fail in ID- or Data-Field) - /// - public bool ST1DE - { - get { return NECUPD765.GetBit(5, _flag1); } - set - { - if (value) { NECUPD765.SetBit(5, ref _flag1); } - else { NECUPD765.UnSetBit(5, ref _flag1); } - } - } + /// + /// Data Error (CRC-fail in ID- or Data-Field) + /// + public bool ST1DE + { + get { return NECUPD765.GetBit(5, _flag1); } + set + { + if (value) { NECUPD765.SetBit(5, ref _flag1); } + else { NECUPD765.UnSetBit(5, ref _flag1); } + } + } - /// - /// End of Track (set past most read/write commands) (see IC) - /// - public bool ST1EN - { - get { return NECUPD765.GetBit(7, _flag1); } - set - { - if (value) { NECUPD765.SetBit(7, ref _flag1); } - else { NECUPD765.UnSetBit(7, ref _flag1); } - } - } + /// + /// End of Track (set past most read/write commands) (see IC) + /// + public bool ST1EN + { + get { return NECUPD765.GetBit(7, _flag1); } + set + { + if (value) { NECUPD765.SetBit(7, ref _flag1); } + else { NECUPD765.UnSetBit(7, ref _flag1); } + } + } - /// - /// Missing Address Mark in Data Field (DAM not found) - /// - public bool ST2MD - { - get { return NECUPD765.GetBit(0, _flag2); } - set - { - if (value) { NECUPD765.SetBit(0, ref _flag2); } - else { NECUPD765.UnSetBit(0, ref _flag2); } - } - } + /// + /// Missing Address Mark in Data Field (DAM not found) + /// + public bool ST2MD + { + get { return NECUPD765.GetBit(0, _flag2); } + set + { + if (value) { NECUPD765.SetBit(0, ref _flag2); } + else { NECUPD765.UnSetBit(0, ref _flag2); } + } + } - /// - /// Bad Cylinder (read/programmed track-ID different and read-ID = FF) - /// - public bool ST2BC - { - get { return NECUPD765.GetBit(1, _flag2); } - set - { - if (value) { NECUPD765.SetBit(1, ref _flag2); } - else { NECUPD765.UnSetBit(1, ref _flag2); } - } - } + /// + /// Bad Cylinder (read/programmed track-ID different and read-ID = FF) + /// + public bool ST2BC + { + get { return NECUPD765.GetBit(1, _flag2); } + set + { + if (value) { NECUPD765.SetBit(1, ref _flag2); } + else { NECUPD765.UnSetBit(1, ref _flag2); } + } + } - /// - /// Wrong Cylinder (read/programmed track-ID different) (see b1) - /// - public bool ST2WC - { - get { return NECUPD765.GetBit(4, _flag2); } - set - { - if (value) { NECUPD765.SetBit(4, ref _flag2); } - else { NECUPD765.UnSetBit(4, ref _flag2); } - } - } + /// + /// Wrong Cylinder (read/programmed track-ID different) (see b1) + /// + public bool ST2WC + { + get { return NECUPD765.GetBit(4, _flag2); } + set + { + if (value) { NECUPD765.SetBit(4, ref _flag2); } + else { NECUPD765.UnSetBit(4, ref _flag2); } + } + } - /// - /// Data Error in Data Field (CRC-fail in data-field) - /// - public bool ST2DD - { - get { return NECUPD765.GetBit(5, _flag2); } - set - { - if (value) { NECUPD765.SetBit(5, ref _flag2); } - else { NECUPD765.UnSetBit(5, ref _flag2); } - } - } + /// + /// Data Error in Data Field (CRC-fail in data-field) + /// + public bool ST2DD + { + get { return NECUPD765.GetBit(5, _flag2); } + set + { + if (value) { NECUPD765.SetBit(5, ref _flag2); } + else { NECUPD765.UnSetBit(5, ref _flag2); } + } + } - /// - /// Control Mark (read/scan command found sector with deleted DAM) - /// - public bool ST2CM - { - get { return NECUPD765.GetBit(6, _flag2); } - set - { - if (value) { NECUPD765.SetBit(6, ref _flag2); } - else { NECUPD765.UnSetBit(6, ref _flag2); } - } - } + /// + /// Control Mark (read/scan command found sector with deleted DAM) + /// + public bool ST2CM + { + get { return NECUPD765.GetBit(6, _flag2); } + set + { + if (value) { NECUPD765.SetBit(6, ref _flag2); } + else { NECUPD765.UnSetBit(6, ref _flag2); } + } + } - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.Definitions.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.Definitions.cs index e72da558c8..a560164411 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.Definitions.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.Definitions.cs @@ -3,824 +3,824 @@ using System; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Definitions - /// - #region Attribution - /* + /// + /// Definitions + /// + #region Attribution + /* Implementation based on the information contained here: http://www.cpcwiki.eu/index.php/765_FDC and here: http://www.cpcwiki.eu/imgs/f/f3/UPD765_Datasheet_OCRed.pdf */ - #endregion - public partial class NECUPD765 - { - #region Enums - - /// - /// Defines the current phase of the controller - /// - private enum Phase - { - /// - /// FDC is in an idle state, awaiting the next initial command byte - /// - Idle, - - /// - /// FDC is in a state waiting for the next command instruction - /// A command consists of a command byte (eventually including the MF, MK, SK bits), and up to eight parameter bytes - /// - Command, - - /// - /// During this phase, the actual data is transferred (if any). Usually that are the data bytes for the read/written sector(s), except for the Format Track Command, - /// in that case four bytes for each sector are transferred - /// - Execution, - - /// - /// Returns up to seven result bytes (depending on the command) that are containing status information. The Recalibrate and Seek Track commands do not return result bytes directly, - /// instead the program must wait until the Main Status Register signalizes that the command has been completed, and then it must (!) send a - /// Sense Interrupt State command to 'terminate' the Seek/Recalibrate command. - /// - Result - } - - /// - /// The lifecycle of an instruction - /// Similar to phase, this describes the current 'sub-phase' we are in when dealing with an instruction - /// - private enum InstructionState - { - /// - /// FDC has received a command byte and is currently reading parameter bytes from the data bus - /// - ReceivingParameters, - - /// - /// All parameter bytes have been received. This phase allows any neccessary setup before instruction execution starts - /// - PreExecution, - - /// - /// The start of instruction execution. This may end up with the FDC moving into result phase, - /// but also may also prepare the way for further processing to occur later in execution phase - /// - StartExecute, - - /// - /// Data is read or written in execution phase - /// - ExecutionReadWrite, - - /// - /// Execution phase is well under way. This state primarily deals with data transfer between CPU and FDC - /// - ExecutionWrite, - - /// - /// Execution phase is well under way. This state primarily deals with data transfer between FDC and CPU - /// - ExecutionRead, - - /// - /// Execution has finished and results bytes are ready to be read by the CPU - /// Initial result setup - /// - StartResult, - - /// - /// Result processing - /// - ProcessResult, - - /// - /// Results are being sent - /// - SendingResults, - - /// - /// Final cleanup tasks when the instruction has fully completed - /// - Completed - - } - - /// - /// Represents internal interrupt state of the FDC - /// - public enum InterruptState - { - /// - /// There is no interrupt - /// - None, - /// - /// Execution interrupt - /// - Execution, - /// - /// Result interrupt - /// - Result, - /// - /// Ready interrupt - /// - Ready, - /// - /// Seek interrupt - /// - Seek - } - - /// - /// Possible main states that each drive can be in - /// - public enum DriveMainState - { - /// - /// Drive is not doing anything - /// - None, - /// - /// Seek operation is in progress - /// - Seek, - /// - /// Recalibrate operation is in progress - /// - Recalibrate, - /// - /// A scan data operation is in progress - /// - Scan, - /// - /// A read ID operation is in progress - /// - ReadID, - /// - /// A read data operation is in progress - /// - ReadData, - /// - /// A read diagnostic (read track) operation is in progress - /// - ReadDiagnostic, - /// - /// A write id (format track) operation is in progress - /// - WriteID, - /// - /// A write data operation is in progress - /// - WriteData, - } - - /// - /// State information during a seek/recalibration operation - /// - public enum SeekSubState - { - /// - /// Seek hasnt started yet - /// - Idle, - /// - /// Delayed - /// - Wait, - /// - /// Setup for head move - /// - MoveInit, - /// - /// Seek is currently happening - /// - HeadMove, - /// - /// Head move with no delay - /// - MoveImmediate, - /// - /// Ready to complete - /// - PerformCompletion, - /// - /// Seek operation has completed - /// - SeekCompleted - } - - /// - /// Seek int code - /// - public enum SeekIntStatus - { - Normal, - Abnormal, - DriveNotReady, - } - - /// - /// The direction of a specific command - /// - private enum CommandDirection - { - /// - /// Data flows from UPD765A to Z80 - /// - OUT, - /// - /// Data flows from Z80 to UPD765A - /// - IN - } - - /// - /// Enum defining the different types of result that can be returned - /// - private enum ResultType - { - /// - /// Standard 7 result bytes are returned - /// - Standard, - /// - /// 1 byte returned - ST3 - /// (used for SenseDriveStatus) - /// - ST3, - /// - /// 1 byte returned - ST0 - /// (used for version & invalid) - /// - ST0, - /// - /// 2 bytes returned for sense interrupt status command - /// ST0 - /// CurrentCylinder - /// - Interrupt - } - - /// - /// Possible list of encountered drive status errors - /// - public enum Status - { - /// - /// No error detected - /// - None, - /// - /// An undefined error has been detected - /// - Undefined, - /// - /// Drive is not ready - /// - DriveNotReady, - /// - /// Invalid command received - /// - Invalid, - /// - /// The disk has its write protection tab enabled - /// - WriteProtected, - /// - /// The requested sector has not been found - /// - SectorNotFound - } - - /// - /// Represents the direction that the head is moving over the cylinders - /// Increment: Track number increasing (head moving from outside of disk inwards) - /// Decrement: Track number decreasing (head moving from inside of disk outwards) - /// - public enum SkipDirection - { - Increment, - Decrement - } - - #endregion - - #region Constants - - // Command Instruction Constants - // Designates the default postitions within the cmdbuffer array - - public const int CM_HEAD = 0; - /// - /// C - Track - /// - public const int CM_C = 1; - /// - /// H - Side - /// - public const int CM_H = 2; - /// - /// R - Sector ID - /// - public const int CM_R = 3; - /// - /// N - Sector size - /// - public const int CM_N = 4; - /// - /// EOT - End of track - /// - public const int CM_EOT = 5; - /// - /// GPL - Gap length - /// - public const int CM_GPL = 6; - /// - /// DTL - Data length - /// - public const int CM_DTL = 7; - /// - /// STP - Step - /// - public const int CM_STP = 7; - - // Result Instruction Constants - // Designates the default postitions within the cmdbuffer array - - /// - /// Status register 0 - /// - public const int RS_ST0 = 0; - /// - /// Status register 1 - /// - public const int RS_ST1 = 1; - /// - /// Status register 2 - /// - public const int RS_ST2 = 2; - /// - /// C - Track - /// - public const int RS_C = 3; - /// - /// H - Side - /// - public const int RS_H = 4; - /// - /// R - Sector ID - /// - public const int RS_R = 5; - /// - /// N - Sector size - /// - public const int RS_N = 6; - - // Main Status Register Constants - // Designates the bit positions within the Main status register - - /// - /// FDD0 Busy (seek/recalib active, until succesful sense intstat) - /// FDD number 0 is in the seek mode. If any of the DnB bits IS set FDC will not accept read or write command. - /// - public const int MSR_D0B = 0; - /// - /// FDD1 Busy (seek/recalib active, until succesful sense intstat) - /// FDD number 1 is in the seek mode. If any of the DnB bits IS set FDC will not accept read or write command. - /// - public const int MSR_D1B = 1; - /// - /// FDD2 Busy (seek/recalib active, until succesful sense intstat) - /// FDD number 2 is in the seek mode. If any of the DnB bits IS set FDC will not accept read or write command. - /// - public const int MSR_D2B = 2; - /// - /// FDD3 Busy (seek/recalib active, until succesful sense intstat) - /// FDD number 3 is in the seek mode. If any of the DnB bits IS set FDC will not accept read or write command. - /// - public const int MSR_D3B = 3; - /// - /// FDC Busy (still in command-, execution- or result-phase) - /// A Read or Write command is in orocess. (FDC Busy) FDC will not accept any other command - /// - public const int MSR_CB = 4; - /// - /// Execution Mode (still in execution-phase, non_DMA_only) - /// This bit is set only during execution ohase (Execution Mode) in non-DMA mode When DB5 goes low, execution phase has ended and result phase has started.It operates only during - /// non-DMA mode of operation - /// - public const int MSR_EXM = 5; - /// - /// Data Input/Output (0=CPU->FDC, 1=FDC->CPU) (see b7) - /// Indicates direction of data transfer between FDC and data regrster If DIO = 1, then transfer is from data register to the - /// processor.If DIO = 0, then transfer is from the processor to data register - /// - public const int MSR_DIO = 6; - /// - /// Request For Master (1=ready for next byte) (see b6 for direction) - /// ndicates data register IS ready to send or receive data to or from the processor Both bits DIO and RQM should be - /// used to perform the hand-shaking functions of “ready” and “directron” to the processor - /// - public const int MSR_RQM = 7; - - // Status Register 0 Constants - // Designates the bit positions within the status register 0 - - /// - /// Unit Select (driveno during interrupt) - /// This flag IS used to indicate a drive unit number at interrupt - /// - public const int SR0_US0 = 0; - - /// - /// Unit Select (driveno during interrupt) - /// This flag IS used to indicate a drive unit number at interrupt - /// - public const int SR0_US1 = 1; - - /// - /// Head Address (head during interrupt) - /// State of the head at interrupt - /// - public const int SR0_HD = 2; - - /// - /// Not Ready (drive not ready or non-existing 2nd head selected) - /// Not Ready - When the FDD IS in the not-ready state and a Read or Write command IS Issued, this - /// flag IS set If a Read or Write command is issued to side 1 of a single-sided drive, then this flag IS set - /// - public const int SR0_NR = 3; - - /// - /// Equipment Check (drive failure or recalibrate failed (retry)) - /// Equipment check - If a fault srgnal IS received from the FDD, or if the track 0 srgnal fails to occur after 77 - /// step pulses(Recalibrate Command) then this flag is set - /// - public const int SR0_EC = 4; - - /// - /// Seek End (Set if seek-command completed) - /// Seek end - When the FDC completes the Seek command, this flag IS set lo 1 (high) - /// - public const int SR0_SE = 5; - - /// - /// Interrupt Code (low byte) - /// Interrupt Code (0=OK, 1=aborted:readfail/OK if EN, 2=unknown cmd - /// or senseint with no int occured, 3=aborted:disc removed etc.) - /// - public const int SR0_IC0 = 6; - - /// - /// Interrupt Code (high byte) - /// Interrupt Code (0=OK, 1=aborted:readfail/OK if EN, 2=unknown cmd - /// or senseint with no int occured, 3=aborted:disc removed etc.) - /// - public const int SR0_IC1 = 7; - - // Status Register 1 Constants - // Designates the bit positions within the status register 1 - - /// - /// Missing Address Mark (Sector_ID or DAM not found) - /// Missing address mark - This bit is set i f the FDC does not detect the IDAM before 2 index pulses It is also set if - /// the FDC cannot find the DAM or DDAM after the IDAM i s found.MD bit of ST2 is also set at this time - /// - public const int SR1_MA = 0; - - /// - /// Not Writeable (tried to write/format disc with wprot_tab=on) - /// Not writable (write protect) - During execution of Write Data, Write Deleted Data or Write ID command. if the FDC - /// detect: a write protect srgnal from the FDD.then this flag is Set - /// - public const int SR1_NW = 1; - - /// - /// No Data - /// No Data (Sector_ID not found, CRC fail in ID_field) - /// - /// During execution of Read Data. Read Deleted Data Write Data.Write Deleted Data or Scan command, if the FDC cannot find - /// the sector specified in the IDR(2)Register, this flag i s set. - /// - /// During execution of the Read ID command. if the FDC cannot read the ID field without an error, then this flag IS set - /// - /// During execution of the Read Diagnostic command. if the starting sector cannot be found, then this flag is set - /// - public const int SR1_ND = 2; - - /// - /// Over Run (CPU too slow in execution-phase (ca. 26us/Byte)) - /// Overrun - If the FDC i s not serviced by the host system during data transfers within a certain time interval.this flaa i s set - /// - public const int SR1_OR = 4; - - /// - /// Data Error (CRC-fail in ID- or Data-Field) - /// Data error - When the FDC detects a CRC(1) error in either the ID field or the data field, this flag is set - /// - public const int SR1_DE = 5; - - /// - /// End of Track (set past most read/write commands) (see IC) - /// End of cylinder - When the FDC tries to access a sector beyond the final sector of a cylinder, this flag I S set - /// - public const int SR1_EN = 7; - - // Status Register 2 Constants - // Designates the bit positions within the status register 2 - - /// - /// Missing Address Mark in Data Field (DAM not found) - /// Missing address mark - When data IS read from the medium, i f the FDC cannot find a data address mark or deleted - /// data address mark, then this flag is set - /// - public const int SR2_MD = 0; - - /// - /// Bad Cylinder (read/programmed track-ID different and read-ID = FF) - /// Bad cylinder - This bit i s related to the ND bit. and when the contents of C on the medium is different - /// from that stored i n the IDR and the contents of C IS FFH.then this flag IS set - /// - public const int SR2_BC = 1; - - /// - /// Scan Not Satisfied (no fitting sector found) - /// Scan not satisfied - During execution of the Scan command, i f the F D cannot find a sector on the cylinder - /// which meets the condition.then this flag i s set - /// - public const int SR2_SN = 2; - - /// - /// Scan Equal Hit (equal) - /// Scan equal hit - During execution of the Scan command. i f the condition of “equal” is satisfied, this flag i s set - /// - public const int SR2_SH = 3; - - /// - /// Wrong Cylinder (read/programmed track-ID different) (see b1) - /// Wrong cylinder - This bit IS related to the ND bit, and when the contents of C(3) on the medium is different - /// from that stored i n the IDR.this flag is set - /// - public const int SR2_WC = 4; - - /// - /// Data Error in Data Field (CRC-fail in data-field) - /// Data error in data field - If the FDC detects a CRC error i n the data field then this flag is set - /// - public const int SR2_DD = 5; - - /// - /// Control Mark (read/scan command found sector with deleted DAM) - /// Control mark - During execution of the Read Data or Scan command, if the FDC encounters a sector - /// which contains a deleted data address mark, this flag is set Also set if DAM is - /// found during Read Deleted Data - /// - public const int SR2_CM = 6; - - // Status Register 3 Constants - // Designates the bit positions within the status register 3 - - /// - /// Unit select 0 - /// Unit Select (pin 28,29 of FDC) - /// - public const int SR3_US0 = 0; - - /// - /// Unit select 1 - /// Unit Select (pin 28,29 of FDC) - /// - public const int SR3_US1 = 1; - - /// - /// Head address (side select) - /// Head Address (pin 27 of FDC) - /// - public const int SR3_HD = 2; - - /// - /// Two Side (0=yes, 1=no (!)) - /// Two-side - This bit IS used to indicate the status of the two-side signal from the FDD - /// - public const int SR3_TS = 3; - - /// - /// Track 0 (on track 0 we are) - /// Track 0 - This bit IS used to indicate the status of the track 0 signal from the FDD - /// - public const int SR3_T0 = 4; - - /// - /// Ready - status of the ready signal from the fdd - /// Ready (drive ready signal) - /// - public const int SR3_RY = 5; - - /// - /// Write Protected (write protected) - /// Write protect - status of the wp signal from the fdd - /// - public const int SR3_WP = 6; - - /// - /// Fault - This bit is used to indicate the status of the fault signal from the FDD - /// Fault (if supported: 1=Drive failure) - /// - public const int SR3_FT = 7; - - // Interrupt Code Masks - - /// - /// 1 = aborted:readfail / OK if EN (end of track) - /// - public const byte IC_OK = 0x00; - - /// - /// 1 = aborted:readfail / OK if EN (end of track) - /// - public const byte IC_ABORTED_RF_OKEN = 0x40; - - /// - /// 2 = unknown cmd or senseint with no int occured - /// - public const byte IC_NO_INT_OCCURED = 0x80; - - /// - /// 3 = aborted:disc removed etc - /// - public const byte IC_ABORTED_DISCREMOVED = 0xC0; - - // command code constants - public const int CC_READ_DATA = 0x06; - public const int CC_READ_ID = 0x0a; - public const int CC_SPECIFY = 0x03; - public const int CC_READ_DIAGNOSTIC = 0x02; - public const int CC_SCAN_EQUAL = 0x11; - public const int CC_SCAN_HIGHOREQUAL = 0x1d; - public const int CC_SCAN_LOWOREQUAL = 0x19; - public const int CC_READ_DELETEDDATA = 0x0c; - public const int CC_WRITE_DATA = 0x05; - public const int CC_WRITE_ID = 0x0d; - public const int CC_WRITE_DELETEDDATA = 0x09; - public const int CC_SEEK = 0x0f; - public const int CC_RECALIBRATE = 0x07; - public const int CC_SENSE_INTSTATUS = 0x08; - public const int CC_SENSE_DRIVESTATUS = 0x04; - public const int CC_VERSION = 0x10; - public const int CC_INVALID = 0x00; - - // drive seek state constants - public const int SEEK_IDLE = 0; - public const int SEEK_SEEK = 1; - public const int SEEK_RECALIBRATE = 2; - // seek interrupt - public const int SEEK_INTACKNOWLEDGED = 3; - public const int SEEK_NORMALTERM = 4; - public const int SEEK_ABNORMALTERM = 5; - public const int SEEK_DRIVENOTREADY = 6; - - #endregion - - #region Classes & Structs - - /// - /// Class that holds information about a specific command - /// - private class Command - { -// /// -// /// Mask to remove potential parameter bits (5,6, and or 7) in order to identify the command -// /// -// public int BitMask { get; set; } - /// - /// The command code after bitmask has been applied - /// - public int CommandCode { get; set; } - /// - /// The number of bytes that make up the full command - /// - public int ParameterByteCount { get; set; } - /// - /// The number of result bytes that will be generated from the command - /// - public int ResultByteCount { get; set; } - /// - /// The command direction - /// IN - Z80 to UPD765A - /// OUT - UPD765A to Z80 - /// - public CommandDirection Direction { get; set; } - /// - /// Command makes use of the MT bit - /// - public bool MT; - /// - /// Command makes use of the MF bit - /// - public bool MF; - /// - /// Command makes use of the SK bit - /// - public bool SK; - /// - /// Read/Write command that is READ - /// - public bool IsRead; - /// - /// Read/Write command that is WRITE - /// - public bool IsWrite; - - /// - /// Delegate function that is called by this command - /// bool 1: EXECUTE - if TRUE the command will be executed. if FALSE the method will instead parse commmand parameter bytes - /// bool 2: RESULT - if TRUE - /// - public Action CommandDelegate { get; set; } - } - - /// - /// Storage for command parameters - /// - public class CommandParameters - { - /// - /// The requested drive - /// - public byte UnitSelect; - /// - /// The requested physical side - /// - public byte Side; - /// - /// The requested track (C) - /// - public byte Cylinder; - /// - /// The requested head (H) - /// - public byte Head; - /// - /// The requested sector (R) - /// - public byte Sector; - /// - /// The specified sector size (N) - /// - public byte SectorSize; - /// - /// The end of track or last sector value (EOT) - /// - public byte EOT; - /// - /// Gap3 length (GPL) - /// - public byte Gap3Length; - /// - /// Data length (DTL) - When N is defined as 00, DTL stands for the data length - /// which users are going to read out or write into the sector - /// - public byte DTL; - - /// - /// Clear down - /// - public void Reset() - { - UnitSelect = 0; - Side = 0; - Cylinder = 0; - Head = 0; - Sector = 0; - SectorSize = 0; - EOT = 0; - Gap3Length = 0; - DTL = 0; - } - - public void SyncState(Serializer ser) - { - ser.BeginSection("ActiveCmdParams"); - - ser.Sync(nameof(UnitSelect), ref UnitSelect); - ser.Sync(nameof(Side), ref Side); - ser.Sync(nameof(Cylinder), ref Cylinder); - ser.Sync(nameof(Head), ref Head); - ser.Sync(nameof(Sector), ref Sector); - ser.Sync(nameof(SectorSize), ref SectorSize); - ser.Sync(nameof(EOT), ref EOT); - ser.Sync(nameof(Gap3Length), ref Gap3Length); - ser.Sync(nameof(DTL), ref DTL); - - ser.EndSection(); - } - } - - - #endregion - } + #endregion + public partial class NECUPD765 + { + #region Enums + + /// + /// Defines the current phase of the controller + /// + private enum Phase + { + /// + /// FDC is in an idle state, awaiting the next initial command byte + /// + Idle, + + /// + /// FDC is in a state waiting for the next command instruction + /// A command consists of a command byte (eventually including the MF, MK, SK bits), and up to eight parameter bytes + /// + Command, + + /// + /// During this phase, the actual data is transferred (if any). Usually that are the data bytes for the read/written sector(s), except for the Format Track Command, + /// in that case four bytes for each sector are transferred + /// + Execution, + + /// + /// Returns up to seven result bytes (depending on the command) that are containing status information. The Recalibrate and Seek Track commands do not return result bytes directly, + /// instead the program must wait until the Main Status Register signalizes that the command has been completed, and then it must (!) send a + /// Sense Interrupt State command to 'terminate' the Seek/Recalibrate command. + /// + Result + } + + /// + /// The lifecycle of an instruction + /// Similar to phase, this describes the current 'sub-phase' we are in when dealing with an instruction + /// + private enum InstructionState + { + /// + /// FDC has received a command byte and is currently reading parameter bytes from the data bus + /// + ReceivingParameters, + + /// + /// All parameter bytes have been received. This phase allows any neccessary setup before instruction execution starts + /// + PreExecution, + + /// + /// The start of instruction execution. This may end up with the FDC moving into result phase, + /// but also may also prepare the way for further processing to occur later in execution phase + /// + StartExecute, + + /// + /// Data is read or written in execution phase + /// + ExecutionReadWrite, + + /// + /// Execution phase is well under way. This state primarily deals with data transfer between CPU and FDC + /// + ExecutionWrite, + + /// + /// Execution phase is well under way. This state primarily deals with data transfer between FDC and CPU + /// + ExecutionRead, + + /// + /// Execution has finished and results bytes are ready to be read by the CPU + /// Initial result setup + /// + StartResult, + + /// + /// Result processing + /// + ProcessResult, + + /// + /// Results are being sent + /// + SendingResults, + + /// + /// Final cleanup tasks when the instruction has fully completed + /// + Completed + + } + + /// + /// Represents internal interrupt state of the FDC + /// + public enum InterruptState + { + /// + /// There is no interrupt + /// + None, + /// + /// Execution interrupt + /// + Execution, + /// + /// Result interrupt + /// + Result, + /// + /// Ready interrupt + /// + Ready, + /// + /// Seek interrupt + /// + Seek + } + + /// + /// Possible main states that each drive can be in + /// + public enum DriveMainState + { + /// + /// Drive is not doing anything + /// + None, + /// + /// Seek operation is in progress + /// + Seek, + /// + /// Recalibrate operation is in progress + /// + Recalibrate, + /// + /// A scan data operation is in progress + /// + Scan, + /// + /// A read ID operation is in progress + /// + ReadID, + /// + /// A read data operation is in progress + /// + ReadData, + /// + /// A read diagnostic (read track) operation is in progress + /// + ReadDiagnostic, + /// + /// A write id (format track) operation is in progress + /// + WriteID, + /// + /// A write data operation is in progress + /// + WriteData, + } + + /// + /// State information during a seek/recalibration operation + /// + public enum SeekSubState + { + /// + /// Seek hasnt started yet + /// + Idle, + /// + /// Delayed + /// + Wait, + /// + /// Setup for head move + /// + MoveInit, + /// + /// Seek is currently happening + /// + HeadMove, + /// + /// Head move with no delay + /// + MoveImmediate, + /// + /// Ready to complete + /// + PerformCompletion, + /// + /// Seek operation has completed + /// + SeekCompleted + } + + /// + /// Seek int code + /// + public enum SeekIntStatus + { + Normal, + Abnormal, + DriveNotReady, + } + + /// + /// The direction of a specific command + /// + private enum CommandDirection + { + /// + /// Data flows from UPD765A to Z80 + /// + OUT, + /// + /// Data flows from Z80 to UPD765A + /// + IN + } + + /// + /// Enum defining the different types of result that can be returned + /// + private enum ResultType + { + /// + /// Standard 7 result bytes are returned + /// + Standard, + /// + /// 1 byte returned - ST3 + /// (used for SenseDriveStatus) + /// + ST3, + /// + /// 1 byte returned - ST0 + /// (used for version & invalid) + /// + ST0, + /// + /// 2 bytes returned for sense interrupt status command + /// ST0 + /// CurrentCylinder + /// + Interrupt + } + + /// + /// Possible list of encountered drive status errors + /// + public enum Status + { + /// + /// No error detected + /// + None, + /// + /// An undefined error has been detected + /// + Undefined, + /// + /// Drive is not ready + /// + DriveNotReady, + /// + /// Invalid command received + /// + Invalid, + /// + /// The disk has its write protection tab enabled + /// + WriteProtected, + /// + /// The requested sector has not been found + /// + SectorNotFound + } + + /// + /// Represents the direction that the head is moving over the cylinders + /// Increment: Track number increasing (head moving from outside of disk inwards) + /// Decrement: Track number decreasing (head moving from inside of disk outwards) + /// + public enum SkipDirection + { + Increment, + Decrement + } + + #endregion + + #region Constants + + // Command Instruction Constants + // Designates the default postitions within the cmdbuffer array + + public const int CM_HEAD = 0; + /// + /// C - Track + /// + public const int CM_C = 1; + /// + /// H - Side + /// + public const int CM_H = 2; + /// + /// R - Sector ID + /// + public const int CM_R = 3; + /// + /// N - Sector size + /// + public const int CM_N = 4; + /// + /// EOT - End of track + /// + public const int CM_EOT = 5; + /// + /// GPL - Gap length + /// + public const int CM_GPL = 6; + /// + /// DTL - Data length + /// + public const int CM_DTL = 7; + /// + /// STP - Step + /// + public const int CM_STP = 7; + + // Result Instruction Constants + // Designates the default postitions within the cmdbuffer array + + /// + /// Status register 0 + /// + public const int RS_ST0 = 0; + /// + /// Status register 1 + /// + public const int RS_ST1 = 1; + /// + /// Status register 2 + /// + public const int RS_ST2 = 2; + /// + /// C - Track + /// + public const int RS_C = 3; + /// + /// H - Side + /// + public const int RS_H = 4; + /// + /// R - Sector ID + /// + public const int RS_R = 5; + /// + /// N - Sector size + /// + public const int RS_N = 6; + + // Main Status Register Constants + // Designates the bit positions within the Main status register + + /// + /// FDD0 Busy (seek/recalib active, until succesful sense intstat) + /// FDD number 0 is in the seek mode. If any of the DnB bits IS set FDC will not accept read or write command. + /// + public const int MSR_D0B = 0; + /// + /// FDD1 Busy (seek/recalib active, until succesful sense intstat) + /// FDD number 1 is in the seek mode. If any of the DnB bits IS set FDC will not accept read or write command. + /// + public const int MSR_D1B = 1; + /// + /// FDD2 Busy (seek/recalib active, until succesful sense intstat) + /// FDD number 2 is in the seek mode. If any of the DnB bits IS set FDC will not accept read or write command. + /// + public const int MSR_D2B = 2; + /// + /// FDD3 Busy (seek/recalib active, until succesful sense intstat) + /// FDD number 3 is in the seek mode. If any of the DnB bits IS set FDC will not accept read or write command. + /// + public const int MSR_D3B = 3; + /// + /// FDC Busy (still in command-, execution- or result-phase) + /// A Read or Write command is in orocess. (FDC Busy) FDC will not accept any other command + /// + public const int MSR_CB = 4; + /// + /// Execution Mode (still in execution-phase, non_DMA_only) + /// This bit is set only during execution ohase (Execution Mode) in non-DMA mode When DB5 goes low, execution phase has ended and result phase has started.It operates only during + /// non-DMA mode of operation + /// + public const int MSR_EXM = 5; + /// + /// Data Input/Output (0=CPU->FDC, 1=FDC->CPU) (see b7) + /// Indicates direction of data transfer between FDC and data regrster If DIO = 1, then transfer is from data register to the + /// processor.If DIO = 0, then transfer is from the processor to data register + /// + public const int MSR_DIO = 6; + /// + /// Request For Master (1=ready for next byte) (see b6 for direction) + /// ndicates data register IS ready to send or receive data to or from the processor Both bits DIO and RQM should be + /// used to perform the hand-shaking functions of “ready” and “directron” to the processor + /// + public const int MSR_RQM = 7; + + // Status Register 0 Constants + // Designates the bit positions within the status register 0 + + /// + /// Unit Select (driveno during interrupt) + /// This flag IS used to indicate a drive unit number at interrupt + /// + public const int SR0_US0 = 0; + + /// + /// Unit Select (driveno during interrupt) + /// This flag IS used to indicate a drive unit number at interrupt + /// + public const int SR0_US1 = 1; + + /// + /// Head Address (head during interrupt) + /// State of the head at interrupt + /// + public const int SR0_HD = 2; + + /// + /// Not Ready (drive not ready or non-existing 2nd head selected) + /// Not Ready - When the FDD IS in the not-ready state and a Read or Write command IS Issued, this + /// flag IS set If a Read or Write command is issued to side 1 of a single-sided drive, then this flag IS set + /// + public const int SR0_NR = 3; + + /// + /// Equipment Check (drive failure or recalibrate failed (retry)) + /// Equipment check - If a fault srgnal IS received from the FDD, or if the track 0 srgnal fails to occur after 77 + /// step pulses(Recalibrate Command) then this flag is set + /// + public const int SR0_EC = 4; + + /// + /// Seek End (Set if seek-command completed) + /// Seek end - When the FDC completes the Seek command, this flag IS set lo 1 (high) + /// + public const int SR0_SE = 5; + + /// + /// Interrupt Code (low byte) + /// Interrupt Code (0=OK, 1=aborted:readfail/OK if EN, 2=unknown cmd + /// or senseint with no int occured, 3=aborted:disc removed etc.) + /// + public const int SR0_IC0 = 6; + + /// + /// Interrupt Code (high byte) + /// Interrupt Code (0=OK, 1=aborted:readfail/OK if EN, 2=unknown cmd + /// or senseint with no int occured, 3=aborted:disc removed etc.) + /// + public const int SR0_IC1 = 7; + + // Status Register 1 Constants + // Designates the bit positions within the status register 1 + + /// + /// Missing Address Mark (Sector_ID or DAM not found) + /// Missing address mark - This bit is set i f the FDC does not detect the IDAM before 2 index pulses It is also set if + /// the FDC cannot find the DAM or DDAM after the IDAM i s found.MD bit of ST2 is also set at this time + /// + public const int SR1_MA = 0; + + /// + /// Not Writeable (tried to write/format disc with wprot_tab=on) + /// Not writable (write protect) - During execution of Write Data, Write Deleted Data or Write ID command. if the FDC + /// detect: a write protect srgnal from the FDD.then this flag is Set + /// + public const int SR1_NW = 1; + + /// + /// No Data + /// No Data (Sector_ID not found, CRC fail in ID_field) + /// + /// During execution of Read Data. Read Deleted Data Write Data.Write Deleted Data or Scan command, if the FDC cannot find + /// the sector specified in the IDR(2)Register, this flag i s set. + /// + /// During execution of the Read ID command. if the FDC cannot read the ID field without an error, then this flag IS set + /// + /// During execution of the Read Diagnostic command. if the starting sector cannot be found, then this flag is set + /// + public const int SR1_ND = 2; + + /// + /// Over Run (CPU too slow in execution-phase (ca. 26us/Byte)) + /// Overrun - If the FDC i s not serviced by the host system during data transfers within a certain time interval.this flaa i s set + /// + public const int SR1_OR = 4; + + /// + /// Data Error (CRC-fail in ID- or Data-Field) + /// Data error - When the FDC detects a CRC(1) error in either the ID field or the data field, this flag is set + /// + public const int SR1_DE = 5; + + /// + /// End of Track (set past most read/write commands) (see IC) + /// End of cylinder - When the FDC tries to access a sector beyond the final sector of a cylinder, this flag I S set + /// + public const int SR1_EN = 7; + + // Status Register 2 Constants + // Designates the bit positions within the status register 2 + + /// + /// Missing Address Mark in Data Field (DAM not found) + /// Missing address mark - When data IS read from the medium, i f the FDC cannot find a data address mark or deleted + /// data address mark, then this flag is set + /// + public const int SR2_MD = 0; + + /// + /// Bad Cylinder (read/programmed track-ID different and read-ID = FF) + /// Bad cylinder - This bit i s related to the ND bit. and when the contents of C on the medium is different + /// from that stored i n the IDR and the contents of C IS FFH.then this flag IS set + /// + public const int SR2_BC = 1; + + /// + /// Scan Not Satisfied (no fitting sector found) + /// Scan not satisfied - During execution of the Scan command, i f the F D cannot find a sector on the cylinder + /// which meets the condition.then this flag i s set + /// + public const int SR2_SN = 2; + + /// + /// Scan Equal Hit (equal) + /// Scan equal hit - During execution of the Scan command. i f the condition of “equal” is satisfied, this flag i s set + /// + public const int SR2_SH = 3; + + /// + /// Wrong Cylinder (read/programmed track-ID different) (see b1) + /// Wrong cylinder - This bit IS related to the ND bit, and when the contents of C(3) on the medium is different + /// from that stored i n the IDR.this flag is set + /// + public const int SR2_WC = 4; + + /// + /// Data Error in Data Field (CRC-fail in data-field) + /// Data error in data field - If the FDC detects a CRC error i n the data field then this flag is set + /// + public const int SR2_DD = 5; + + /// + /// Control Mark (read/scan command found sector with deleted DAM) + /// Control mark - During execution of the Read Data or Scan command, if the FDC encounters a sector + /// which contains a deleted data address mark, this flag is set Also set if DAM is + /// found during Read Deleted Data + /// + public const int SR2_CM = 6; + + // Status Register 3 Constants + // Designates the bit positions within the status register 3 + + /// + /// Unit select 0 + /// Unit Select (pin 28,29 of FDC) + /// + public const int SR3_US0 = 0; + + /// + /// Unit select 1 + /// Unit Select (pin 28,29 of FDC) + /// + public const int SR3_US1 = 1; + + /// + /// Head address (side select) + /// Head Address (pin 27 of FDC) + /// + public const int SR3_HD = 2; + + /// + /// Two Side (0=yes, 1=no (!)) + /// Two-side - This bit IS used to indicate the status of the two-side signal from the FDD + /// + public const int SR3_TS = 3; + + /// + /// Track 0 (on track 0 we are) + /// Track 0 - This bit IS used to indicate the status of the track 0 signal from the FDD + /// + public const int SR3_T0 = 4; + + /// + /// Ready - status of the ready signal from the fdd + /// Ready (drive ready signal) + /// + public const int SR3_RY = 5; + + /// + /// Write Protected (write protected) + /// Write protect - status of the wp signal from the fdd + /// + public const int SR3_WP = 6; + + /// + /// Fault - This bit is used to indicate the status of the fault signal from the FDD + /// Fault (if supported: 1=Drive failure) + /// + public const int SR3_FT = 7; + + // Interrupt Code Masks + + /// + /// 1 = aborted:readfail / OK if EN (end of track) + /// + public const byte IC_OK = 0x00; + + /// + /// 1 = aborted:readfail / OK if EN (end of track) + /// + public const byte IC_ABORTED_RF_OKEN = 0x40; + + /// + /// 2 = unknown cmd or senseint with no int occured + /// + public const byte IC_NO_INT_OCCURED = 0x80; + + /// + /// 3 = aborted:disc removed etc + /// + public const byte IC_ABORTED_DISCREMOVED = 0xC0; + + // command code constants + public const int CC_READ_DATA = 0x06; + public const int CC_READ_ID = 0x0a; + public const int CC_SPECIFY = 0x03; + public const int CC_READ_DIAGNOSTIC = 0x02; + public const int CC_SCAN_EQUAL = 0x11; + public const int CC_SCAN_HIGHOREQUAL = 0x1d; + public const int CC_SCAN_LOWOREQUAL = 0x19; + public const int CC_READ_DELETEDDATA = 0x0c; + public const int CC_WRITE_DATA = 0x05; + public const int CC_WRITE_ID = 0x0d; + public const int CC_WRITE_DELETEDDATA = 0x09; + public const int CC_SEEK = 0x0f; + public const int CC_RECALIBRATE = 0x07; + public const int CC_SENSE_INTSTATUS = 0x08; + public const int CC_SENSE_DRIVESTATUS = 0x04; + public const int CC_VERSION = 0x10; + public const int CC_INVALID = 0x00; + + // drive seek state constants + public const int SEEK_IDLE = 0; + public const int SEEK_SEEK = 1; + public const int SEEK_RECALIBRATE = 2; + // seek interrupt + public const int SEEK_INTACKNOWLEDGED = 3; + public const int SEEK_NORMALTERM = 4; + public const int SEEK_ABNORMALTERM = 5; + public const int SEEK_DRIVENOTREADY = 6; + + #endregion + + #region Classes & Structs + + /// + /// Class that holds information about a specific command + /// + private class Command + { + // /// + // /// Mask to remove potential parameter bits (5,6, and or 7) in order to identify the command + // /// + // public int BitMask { get; set; } + /// + /// The command code after bitmask has been applied + /// + public int CommandCode { get; set; } + /// + /// The number of bytes that make up the full command + /// + public int ParameterByteCount { get; set; } + /// + /// The number of result bytes that will be generated from the command + /// + public int ResultByteCount { get; set; } + /// + /// The command direction + /// IN - Z80 to UPD765A + /// OUT - UPD765A to Z80 + /// + public CommandDirection Direction { get; set; } + /// + /// Command makes use of the MT bit + /// + public bool MT; + /// + /// Command makes use of the MF bit + /// + public bool MF; + /// + /// Command makes use of the SK bit + /// + public bool SK; + /// + /// Read/Write command that is READ + /// + public bool IsRead; + /// + /// Read/Write command that is WRITE + /// + public bool IsWrite; + + /// + /// Delegate function that is called by this command + /// bool 1: EXECUTE - if TRUE the command will be executed. if FALSE the method will instead parse commmand parameter bytes + /// bool 2: RESULT - if TRUE + /// + public Action CommandDelegate { get; set; } + } + + /// + /// Storage for command parameters + /// + public class CommandParameters + { + /// + /// The requested drive + /// + public byte UnitSelect; + /// + /// The requested physical side + /// + public byte Side; + /// + /// The requested track (C) + /// + public byte Cylinder; + /// + /// The requested head (H) + /// + public byte Head; + /// + /// The requested sector (R) + /// + public byte Sector; + /// + /// The specified sector size (N) + /// + public byte SectorSize; + /// + /// The end of track or last sector value (EOT) + /// + public byte EOT; + /// + /// Gap3 length (GPL) + /// + public byte Gap3Length; + /// + /// Data length (DTL) - When N is defined as 00, DTL stands for the data length + /// which users are going to read out or write into the sector + /// + public byte DTL; + + /// + /// Clear down + /// + public void Reset() + { + UnitSelect = 0; + Side = 0; + Cylinder = 0; + Head = 0; + Sector = 0; + SectorSize = 0; + EOT = 0; + Gap3Length = 0; + DTL = 0; + } + + public void SyncState(Serializer ser) + { + ser.BeginSection("ActiveCmdParams"); + + ser.Sync(nameof(UnitSelect), ref UnitSelect); + ser.Sync(nameof(Side), ref Side); + ser.Sync(nameof(Cylinder), ref Cylinder); + ser.Sync(nameof(Head), ref Head); + ser.Sync(nameof(Sector), ref Sector); + ser.Sync(nameof(SectorSize), ref SectorSize); + ser.Sync(nameof(EOT), ref EOT); + ser.Sync(nameof(Gap3Length), ref Gap3Length); + ser.Sync(nameof(DTL), ref DTL); + + ser.EndSection(); + } + } + + + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.FDC.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.FDC.cs index 3d110314c5..42e747e908 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.FDC.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.FDC.cs @@ -5,223 +5,223 @@ using System.Linq; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// FDC State and Methods - /// - #region Attribution - /* + /// + /// FDC State and Methods + /// + #region Attribution + /* Implementation based on the information contained here: http://www.cpcwiki.eu/index.php/765_FDC and here: http://www.cpcwiki.eu/imgs/f/f3/UPD765_Datasheet_OCRed.pdf */ - #endregion - public partial class NECUPD765 - { - #region Controller State + #endregion + public partial class NECUPD765 + { + #region Controller State - /// - /// Signs whether the drive is active - /// - public bool DriveLight; + /// + /// Signs whether the drive is active + /// + public bool DriveLight; - /// - /// Collection of possible commands - /// - private List CommandList; + /// + /// Collection of possible commands + /// + private List CommandList; - /// - /// State parameters relating to the Active command - /// - public CommandParameters ActiveCommandParams = new CommandParameters(); + /// + /// State parameters relating to the Active command + /// + public CommandParameters ActiveCommandParams = new CommandParameters(); - /// - /// The current active phase of the controller - /// - private Phase ActivePhase = Phase.Command; + /// + /// The current active phase of the controller + /// + private Phase ActivePhase = Phase.Command; - /// - /// The currently active interrupt - /// - private InterruptState ActiveInterrupt = InterruptState.None; - /// - /// Command buffer - /// This does not contain the initial command byte (only parameter bytes) - /// - private byte[] CommBuffer = new byte[9]; + /// + /// The currently active interrupt + /// + private InterruptState ActiveInterrupt = InterruptState.None; + /// + /// Command buffer + /// This does not contain the initial command byte (only parameter bytes) + /// + private byte[] CommBuffer = new byte[9]; - /// - /// Current index within the command buffer - /// - private int CommCounter = 0; + /// + /// Current index within the command buffer + /// + private int CommCounter = 0; - /// - /// Initial command byte flag - /// Bit7 Multi Track (continue multi-sector-function on other head) - /// - private bool CMD_FLAG_MT; + /// + /// Initial command byte flag + /// Bit7 Multi Track (continue multi-sector-function on other head) + /// + private bool CMD_FLAG_MT; - /// - /// Initial command byte flag - /// Bit6 MFM-Mode-Bit (Default 1=Double Density) - /// - private bool CMD_FLAG_MF; + /// + /// Initial command byte flag + /// Bit6 MFM-Mode-Bit (Default 1=Double Density) + /// + private bool CMD_FLAG_MF; - /// - /// Initial command byte flag - /// Bit5 Skip-Bit (set if secs with deleted DAM shall be skipped) - /// - private bool CMD_FLAG_SK; + /// + /// Initial command byte flag + /// Bit5 Skip-Bit (set if secs with deleted DAM shall be skipped) + /// + private bool CMD_FLAG_SK; - /// - /// Step Rate Time (supplied via the specify command) - /// SRT stands for the steooino rate for the FDD ( 1 to 16 ms in 1 ms increments). - /// Stepping rate applies to all drives(FH= 1ms, EH= 2ms, etc.). - /// - private int SRT; + /// + /// Step Rate Time (supplied via the specify command) + /// SRT stands for the steooino rate for the FDD ( 1 to 16 ms in 1 ms increments). + /// Stepping rate applies to all drives(FH= 1ms, EH= 2ms, etc.). + /// + private int SRT; - /// - /// Keeps track of the current SRT state - /// - private int SRT_Counter; + /// + /// Keeps track of the current SRT state + /// + private int SRT_Counter; - /// - /// Head Unload Time (supplied via the specify command) - /// HUT stands for the head unload time after a Read or Write operation has occurred - /// (16 to 240 ms in 16 ms Increments) - /// - private int HUT; + /// + /// Head Unload Time (supplied via the specify command) + /// HUT stands for the head unload time after a Read or Write operation has occurred + /// (16 to 240 ms in 16 ms Increments) + /// + private int HUT; - /// - /// Keeps track of the current HUT state - /// - private int HUT_Counter; + /// + /// Keeps track of the current HUT state + /// + private int HUT_Counter; - /// - /// Head load Time (supplied via the specify command) - /// HLT stands for the head load time in the FDD (2 to 254 ms in 2 ms Increments) - /// - private int HLT; + /// + /// Head load Time (supplied via the specify command) + /// HLT stands for the head load time in the FDD (2 to 254 ms in 2 ms Increments) + /// + private int HLT; - /// - /// Keeps track of the current HLT state - /// - private int HLT_Counter; + /// + /// Keeps track of the current HLT state + /// + private int HLT_Counter; - /// - /// Non-DMA Mode (supplied via the specify command) - /// ND stands for operation in the non-DMA mode - /// - private bool ND; + /// + /// Non-DMA Mode (supplied via the specify command) + /// ND stands for operation in the non-DMA mode + /// + private bool ND; - /// - /// In lieu of actual timing, this will count status reads in execution phase - /// where the CPU hasnt actually read any bytes - /// - private int OverrunCounter; + /// + /// In lieu of actual timing, this will count status reads in execution phase + /// where the CPU hasnt actually read any bytes + /// + private int OverrunCounter; - /// - /// Contains result bytes in result phase - /// - private byte[] ResBuffer = new byte[7]; + /// + /// Contains result bytes in result phase + /// + private byte[] ResBuffer = new byte[7]; - /// - /// Contains sector data to be written/read in execution phase - /// - private byte[] ExecBuffer = new byte[0x8000]; + /// + /// Contains sector data to be written/read in execution phase + /// + private byte[] ExecBuffer = new byte[0x8000]; - /// - /// Interrupt result buffer - /// Persists (and returns when needed) the last result data when a sense interrupt status command happens - /// - private byte[] InterruptResultBuffer = new byte[2]; + /// + /// Interrupt result buffer + /// Persists (and returns when needed) the last result data when a sense interrupt status command happens + /// + private byte[] InterruptResultBuffer = new byte[2]; - /// - /// Current index within the result buffer - /// - private int ResCounter = 0; + /// + /// Current index within the result buffer + /// + private int ResCounter = 0; - /// - /// The byte length of the currently active command - /// This may or may not be the same as the actual command resultbytes value - /// - private int ResLength = 0; + /// + /// The byte length of the currently active command + /// This may or may not be the same as the actual command resultbytes value + /// + private int ResLength = 0; - /// - /// Index for sector data within the result buffer - /// - private int ExecCounter = 0; + /// + /// Index for sector data within the result buffer + /// + private int ExecCounter = 0; - /// - /// The length of the current exec command - /// - private int ExecLength = 0; + /// + /// The length of the current exec command + /// + private int ExecLength = 0; - /// - /// The last write byte that was received during execution phase - /// - private byte LastSectorDataWriteByte = 0; + /// + /// The last write byte that was received during execution phase + /// + private byte LastSectorDataWriteByte = 0; - /// - /// The last read byte to be sent during execution phase - /// - private byte LastSectorDataReadByte = 0; + /// + /// The last read byte to be sent during execution phase + /// + private byte LastSectorDataReadByte = 0; - /// - /// The last parameter byte that was written to the FDC - /// - private byte LastByteReceived = 0; + /// + /// The last parameter byte that was written to the FDC + /// + private byte LastByteReceived = 0; - /// - /// Delay for reading sector - /// - private int SectorDelayCounter = 0; + /// + /// Delay for reading sector + /// + private int SectorDelayCounter = 0; - /// - /// The phyical sector ID - /// - private int SectorID = 0; + /// + /// The phyical sector ID + /// + private int SectorID = 0; - /// - /// Counter for index pulses - /// - private int IndexPulseCounter; + /// + /// Counter for index pulses + /// + private int IndexPulseCounter; - /// - /// Specifies the index of the currently selected command (in the CommandList) - /// - public int CMDIndex - { - get { return _cmdIndex; } - set - { - _cmdIndex = value; - ActiveCommand = CommandList[_cmdIndex]; - } - } - private int _cmdIndex; + /// + /// Specifies the index of the currently selected command (in the CommandList) + /// + public int CMDIndex + { + get { return _cmdIndex; } + set + { + _cmdIndex = value; + ActiveCommand = CommandList[_cmdIndex]; + } + } + private int _cmdIndex; - /// - /// The currently active command - /// - private Command ActiveCommand; + /// + /// The currently active command + /// + private Command ActiveCommand; - /// - /// Main status register (accessed via reads to port 0x2ffd) - /// - /* + /// + /// Main status register (accessed via reads to port 0x2ffd) + /// + /* b0..3 DB FDD0..3 Busy (seek/recalib active, until succesful sense intstat) b4 CB FDC Busy (still in command-, execution- or result-phase) b5 EXM Execution Mode (still in execution-phase, non_DMA_only) b6 DIO Data Input/Output (0=CPU->FDC, 1=FDC->CPU) (see b7) b7 RQM Request For Master (1=ready for next byte) (see b6 for direction) */ - private byte StatusMain; + private byte StatusMain; - /// - /// Status Register 0 - /// - /* + /// + /// Status Register 0 + /// + /* b0,1 US Unit Select (driveno during interrupt) b2 HD Head Address (head during interrupt) b3 NR Not Ready (drive not ready or non-existing 2nd head selected) @@ -230,12 +230,12 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC b6,7 IC Interrupt Code (0=OK, 1=aborted:readfail/OK if EN, 2=unknown cmd or senseint with no int occured, 3=aborted:disc removed etc.) */ - private byte Status0; + private byte Status0; - /// - /// Status Register 1 - /// - /* + /// + /// Status Register 1 + /// + /* b0 MA Missing Address Mark (Sector_ID or DAM not found) b1 NW Not Writeable (tried to write/format disc with wprot_tab=on) b2 ND No Data (Sector_ID not found, CRC fail in ID_field) @@ -244,12 +244,12 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC b5 DE Data Error (CRC-fail in ID- or Data-Field) b7 EN End of Track (set past most read/write commands) (see IC) */ - private byte Status1; + private byte Status1; - /// - /// Status Register 2 - /// - /* + /// + /// Status Register 2 + /// + /* b0 MD Missing Address Mark in Data Field (DAM not found) b1 BC Bad Cylinder (read/programmed track-ID different and read-ID = FF) b2 SN Scan Not Satisfied (no fitting sector found) @@ -259,12 +259,12 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC b6 CM Control Mark (read/scan command found sector with deleted DAM) b7 0 Not Used */ - private byte Status2; + private byte Status2; - /// - /// Status Register 3 - /// - /* + /// + /// Status Register 3 + /// + /* b0,1 US Unit Select (pin 28,29 of FDC) b2 HD Head Address (pin 27 of FDC) b3 TS Two Side (0=yes, 1=no (!)) @@ -273,1900 +273,1900 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC b6 WP Write Protected (write protected) b7 FT Fault (if supported: 1=Drive failure) */ - private byte Status3; + private byte Status3; - #endregion + #endregion - #region UPD Internal Functions + #region UPD Internal Functions - #region READ Commands + #region READ Commands - /// - /// Read Data - /// COMMAND: 8 parameter bytes - /// EXECUTION: Data transfer between FDD and FDC - /// RESULT: 7 result bytes - /// - private void UPD_ReadData() - { - switch (ActivePhase) - { - //---------------------------------------- - // FDC is waiting for a command byte - //---------------------------------------- - case Phase.Idle: - break; + /// + /// Read Data + /// COMMAND: 8 parameter bytes + /// EXECUTION: Data transfer between FDD and FDC + /// RESULT: 7 result bytes + /// + private void UPD_ReadData() + { + switch (ActivePhase) + { + //---------------------------------------- + // FDC is waiting for a command byte + //---------------------------------------- + case Phase.Idle: + break; - //---------------------------------------- - // Receiving command parameter bytes - //---------------------------------------- - case Phase.Command: + //---------------------------------------- + // Receiving command parameter bytes + //---------------------------------------- + case Phase.Command: - // store the parameter in the command buffer - CommBuffer[CommCounter] = LastByteReceived; + // store the parameter in the command buffer + CommBuffer[CommCounter] = LastByteReceived; - // process parameter byte - ParseParamByteStandard(CommCounter); + // process parameter byte + ParseParamByteStandard(CommCounter); - // increment command parameter counter - CommCounter++; + // increment command parameter counter + CommCounter++; - // was that the last parameter byte? - if (CommCounter == ActiveCommand.ParameterByteCount) - { - // all parameter bytes received - setup for execution phase + // was that the last parameter byte? + if (CommCounter == ActiveCommand.ParameterByteCount) + { + // all parameter bytes received - setup for execution phase - // clear exec buffer and status registers - ClearExecBuffer(); - Status0 = 0; - Status1 = 0; - Status2 = 0; - Status3 = 0; + // clear exec buffer and status registers + ClearExecBuffer(); + Status0 = 0; + Status1 = 0; + Status2 = 0; + Status3 = 0; - // temp sector index - byte secIdx = ActiveCommandParams.Sector; + // temp sector index + byte secIdx = ActiveCommandParams.Sector; - // hack for when another drive (non-existent) is being called - if (ActiveDrive.ID != 0) - DiskDriveIndex = 0; + // hack for when another drive (non-existent) is being called + if (ActiveDrive.ID != 0) + DiskDriveIndex = 0; - // do we have a valid disk inserted? - if (!ActiveDrive.FLAG_READY) - { - // no disk, no tracks or motor is not on - SetBit(SR0_IC0, ref Status0); - SetBit(SR0_NR, ref Status0); + // do we have a valid disk inserted? + if (!ActiveDrive.FLAG_READY) + { + // no disk, no tracks or motor is not on + SetBit(SR0_IC0, ref Status0); + SetBit(SR0_NR, ref Status0); - CommitResultCHRN(); - CommitResultStatus(); - //ResBuffer[RS_ST0] = Status0; + CommitResultCHRN(); + CommitResultStatus(); + //ResBuffer[RS_ST0] = Status0; - // move to result phase - ActivePhase = Phase.Result; - break; - } + // move to result phase + ActivePhase = Phase.Result; + break; + } - int buffPos = 0; - int sectorSize = 0; - int maxTransferCap = 0; + int buffPos = 0; + int sectorSize = 0; + int maxTransferCap = 0; - // calculate requested size of data required - if (ActiveCommandParams.SectorSize == 0) - { - // When N=0, then DTL defines the data length which the FDC must treat as a sector. If DTL is smaller than the actual - // data length in a sector, the data beyond DTL in the sector is not sent to the Data Bus. The FDC reads (internally) - // the complete sector performing the CRC check and, depending upon the manner of command termination, may perform - // a Multi-Sector Read Operation. - sectorSize = ActiveCommandParams.DTL; + // calculate requested size of data required + if (ActiveCommandParams.SectorSize == 0) + { + // When N=0, then DTL defines the data length which the FDC must treat as a sector. If DTL is smaller than the actual + // data length in a sector, the data beyond DTL in the sector is not sent to the Data Bus. The FDC reads (internally) + // the complete sector performing the CRC check and, depending upon the manner of command termination, may perform + // a Multi-Sector Read Operation. + sectorSize = ActiveCommandParams.DTL; - // calculate maximum transfer capacity - if (!CMD_FLAG_MF) - maxTransferCap = 3328; - } - else - { - // When N is non - zero, then DTL has no meaning and should be set to ffh - ActiveCommandParams.DTL = 0xFF; + // calculate maximum transfer capacity + if (!CMD_FLAG_MF) + maxTransferCap = 3328; + } + else + { + // When N is non - zero, then DTL has no meaning and should be set to ffh + ActiveCommandParams.DTL = 0xFF; - // calculate maximum transfer capacity - switch (ActiveCommandParams.SectorSize) - { - case 1: - if (CMD_FLAG_MF) - maxTransferCap = 6656; - else - maxTransferCap = 3840; - break; - case 2: - if (CMD_FLAG_MF) - maxTransferCap = 7680; - else - maxTransferCap = 4096; - break; - case 3: - if (CMD_FLAG_MF) - maxTransferCap = 8192; - else - maxTransferCap = 4096; - break; - } + // calculate maximum transfer capacity + switch (ActiveCommandParams.SectorSize) + { + case 1: + if (CMD_FLAG_MF) + maxTransferCap = 6656; + else + maxTransferCap = 3840; + break; + case 2: + if (CMD_FLAG_MF) + maxTransferCap = 7680; + else + maxTransferCap = 4096; + break; + case 3: + if (CMD_FLAG_MF) + maxTransferCap = 8192; + else + maxTransferCap = 4096; + break; + } - sectorSize = 0x80 << ActiveCommandParams.SectorSize; - } + sectorSize = 0x80 << ActiveCommandParams.SectorSize; + } var mtc = maxTransferCap; - // get the current track - var track = ActiveDrive.Disk.DiskTracks.Where(a => a.TrackNumber == ActiveDrive.CurrentTrackID).FirstOrDefault(); + // get the current track + var track = ActiveDrive.Disk.DiskTracks.Where(a => a.TrackNumber == ActiveDrive.CurrentTrackID).FirstOrDefault(); - if (track == null || track.NumberOfSectors <= 0) - { - // track could not be found - SetBit(SR0_IC0, ref Status0); - SetBit(SR0_NR, ref Status0); + if (track == null || track.NumberOfSectors <= 0) + { + // track could not be found + SetBit(SR0_IC0, ref Status0); + SetBit(SR0_NR, ref Status0); - CommitResultCHRN(); - CommitResultStatus(); + CommitResultCHRN(); + CommitResultStatus(); - //ResBuffer[RS_ST0] = Status0; + //ResBuffer[RS_ST0] = Status0; - // move to result phase - ActivePhase = Phase.Result; - break; - } + // move to result phase + ActivePhase = Phase.Result; + break; + } - FloppyDisk.Sector sector = null; + FloppyDisk.Sector sector = null; - // sector read loop - for (;;) - { - bool terminate = false; + // sector read loop + for (; ; ) + { + bool terminate = false; - // lookup the sector - sector = GetSector(); + // lookup the sector + sector = GetSector(); - if (sector == null) - { - // sector was not found after two passes of the disk index hole - SetBit(SR1_ND, ref Status1); - SetBit(SR0_IC0, ref Status0); - UnSetBit(SR0_IC1, ref Status0); + if (sector == null) + { + // sector was not found after two passes of the disk index hole + SetBit(SR1_ND, ref Status1); + SetBit(SR0_IC0, ref Status0); + UnSetBit(SR0_IC1, ref Status0); - // result requires the actual track id, rather than the sector track id - ActiveCommandParams.Cylinder = track.TrackNumber; + // result requires the actual track id, rather than the sector track id + ActiveCommandParams.Cylinder = track.TrackNumber; - CommitResultCHRN(); - CommitResultStatus(); - ActivePhase = Phase.Result; - break; - } + CommitResultCHRN(); + CommitResultStatus(); + ActivePhase = Phase.Result; + break; + } - // sector ID was found on this track + // sector ID was found on this track - // get status regs from sector - Status1 = sector.Status1; - Status2 = sector.Status2; + // get status regs from sector + Status1 = sector.Status1; + Status2 = sector.Status2; - // we dont need EN - UnSetBit(SR1_EN, ref Status1); + // we dont need EN + UnSetBit(SR1_EN, ref Status1); - // If SK=1, the FDC skips the sector with the Deleted Data Address Mark and reads the next sector. - // The CRC bits in the deleted data field are not checked when SK=1 - if (CMD_FLAG_SK && Status2.Bit(SR2_CM)) - { - if (ActiveCommandParams.Sector != ActiveCommandParams.EOT) - { - // increment the sector ID and search again - ActiveCommandParams.Sector++; - continue; - } - else - { - // no execution phase - SetBit(SR0_IC0, ref Status0); - UnSetBit(SR0_IC1, ref Status0); + // If SK=1, the FDC skips the sector with the Deleted Data Address Mark and reads the next sector. + // The CRC bits in the deleted data field are not checked when SK=1 + if (CMD_FLAG_SK && Status2.Bit(SR2_CM)) + { + if (ActiveCommandParams.Sector != ActiveCommandParams.EOT) + { + // increment the sector ID and search again + ActiveCommandParams.Sector++; + continue; + } + else + { + // no execution phase + SetBit(SR0_IC0, ref Status0); + UnSetBit(SR0_IC1, ref Status0); - // result requires the actual track id, rather than the sector track id - ActiveCommandParams.Cylinder = track.TrackNumber; + // result requires the actual track id, rather than the sector track id + ActiveCommandParams.Cylinder = track.TrackNumber; - CommitResultCHRN(); - CommitResultStatus(); - ActivePhase = Phase.Result; - break; - } - } + CommitResultCHRN(); + CommitResultStatus(); + ActivePhase = Phase.Result; + break; + } + } - // read the sector - for (int i = 0; i < sector.DataLen; i++) - { - ExecBuffer[buffPos++] = sector.ActualData[i]; - } + // read the sector + for (int i = 0; i < sector.DataLen; i++) + { + ExecBuffer[buffPos++] = sector.ActualData[i]; + } - // mark the sector read - sector.SectorReadCompleted(); + // mark the sector read + sector.SectorReadCompleted(); - // any CRC errors? - if (Status1.Bit(SR1_DE) || Status2.Bit(SR2_DD)) - { - SetBit(SR0_IC0, ref Status0); - UnSetBit(SR0_IC1, ref Status0); - terminate = true; - } + // any CRC errors? + if (Status1.Bit(SR1_DE) || Status2.Bit(SR2_DD)) + { + SetBit(SR0_IC0, ref Status0); + UnSetBit(SR0_IC1, ref Status0); + terminate = true; + } - if (!CMD_FLAG_SK && Status2.Bit(SR2_CM)) - { - // deleted address mark was detected with NO skip flag set - ActiveCommandParams.EOT = ActiveCommandParams.Sector; - SetBit(SR2_CM, ref Status2); - SetBit(SR0_IC0, ref Status0); - UnSetBit(SR0_IC1, ref Status0); - terminate = true; - } + if (!CMD_FLAG_SK && Status2.Bit(SR2_CM)) + { + // deleted address mark was detected with NO skip flag set + ActiveCommandParams.EOT = ActiveCommandParams.Sector; + SetBit(SR2_CM, ref Status2); + SetBit(SR0_IC0, ref Status0); + UnSetBit(SR0_IC1, ref Status0); + terminate = true; + } - if (sector.SectorID == ActiveCommandParams.EOT || terminate) - { - // this was the last sector to read - // or termination requested + if (sector.SectorID == ActiveCommandParams.EOT || terminate) + { + // this was the last sector to read + // or termination requested - SetBit(SR1_EN, ref Status1); + SetBit(SR1_EN, ref Status1); - int keyIndex = 0; - for (int i = 0; i < track.Sectors.Length; i++) - { - if (track.Sectors[i].SectorID == sector.SectorID) - { - keyIndex = i; - break; - } - } + int keyIndex = 0; + for (int i = 0; i < track.Sectors.Length; i++) + { + if (track.Sectors[i].SectorID == sector.SectorID) + { + keyIndex = i; + break; + } + } - if (keyIndex == track.Sectors.Length - 1) - { - // last sector on the cylinder, set EN - SetBit(SR1_EN, ref Status1); + if (keyIndex == track.Sectors.Length - 1) + { + // last sector on the cylinder, set EN + SetBit(SR1_EN, ref Status1); - // increment cylinder - ActiveCommandParams.Cylinder++; + // increment cylinder + ActiveCommandParams.Cylinder++; - // reset sector - ActiveCommandParams.Sector = sector.SectorID; // 1; - ActiveDrive.SectorIndex = 0; - } - else - { - ActiveDrive.SectorIndex++; - } + // reset sector + ActiveCommandParams.Sector = sector.SectorID; // 1; + ActiveDrive.SectorIndex = 0; + } + else + { + ActiveDrive.SectorIndex++; + } - UnSetBit(SR0_IC1, ref Status0); - if (terminate) - SetBit(SR0_IC0, ref Status0); - else - UnSetBit(SR0_IC0, ref Status0); + UnSetBit(SR0_IC1, ref Status0); + if (terminate) + SetBit(SR0_IC0, ref Status0); + else + UnSetBit(SR0_IC0, ref Status0); - SetBit(SR0_IC0, ref Status0); + SetBit(SR0_IC0, ref Status0); - // result requires the actual track id, rather than the sector track id - ActiveCommandParams.Cylinder = track.TrackNumber; + // result requires the actual track id, rather than the sector track id + ActiveCommandParams.Cylinder = track.TrackNumber; - CommitResultCHRN(); - CommitResultStatus(); - ActivePhase = Phase.Execution; - break; - } - else - { - // continue with multi-sector read operation - ActiveCommandParams.Sector++; - //ActiveDrive.SectorIndex++; - } - } + CommitResultCHRN(); + CommitResultStatus(); + ActivePhase = Phase.Execution; + break; + } + else + { + // continue with multi-sector read operation + ActiveCommandParams.Sector++; + //ActiveDrive.SectorIndex++; + } + } - if (ActivePhase == Phase.Execution) - { - ExecLength = buffPos; - ExecCounter = buffPos; + if (ActivePhase == Phase.Execution) + { + ExecLength = buffPos; + ExecCounter = buffPos; - DriveLight = true; - } - } + DriveLight = true; + } + } - break; + break; - //---------------------------------------- - // FDC in execution phase reading/writing bytes - //---------------------------------------- - case Phase.Execution: + //---------------------------------------- + // FDC in execution phase reading/writing bytes + //---------------------------------------- + case Phase.Execution: - var index = ExecLength - ExecCounter; + var index = ExecLength - ExecCounter; - LastSectorDataReadByte = ExecBuffer[index]; + LastSectorDataReadByte = ExecBuffer[index]; - OverrunCounter--; - ExecCounter--; + OverrunCounter--; + ExecCounter--; - break; + break; - //---------------------------------------- - // Result bytes being sent to CPU - //---------------------------------------- - case Phase.Result: - break; - } - } + //---------------------------------------- + // Result bytes being sent to CPU + //---------------------------------------- + case Phase.Result: + break; + } + } - /// - /// Read Deleted Data - /// COMMAND: 8 parameter bytes - /// EXECUTION: Data transfer between the FDD and FDC - /// RESULT: 7 result bytes - /// - private void UPD_ReadDeletedData() - { - switch (ActivePhase) - { - //---------------------------------------- - // FDC is waiting for a command byte - //---------------------------------------- - case Phase.Idle: - break; + /// + /// Read Deleted Data + /// COMMAND: 8 parameter bytes + /// EXECUTION: Data transfer between the FDD and FDC + /// RESULT: 7 result bytes + /// + private void UPD_ReadDeletedData() + { + switch (ActivePhase) + { + //---------------------------------------- + // FDC is waiting for a command byte + //---------------------------------------- + case Phase.Idle: + break; - //---------------------------------------- - // Receiving command parameter bytes - //---------------------------------------- - case Phase.Command: - // store the parameter in the command buffer - CommBuffer[CommCounter] = LastByteReceived; + //---------------------------------------- + // Receiving command parameter bytes + //---------------------------------------- + case Phase.Command: + // store the parameter in the command buffer + CommBuffer[CommCounter] = LastByteReceived; - // process parameter byte - ParseParamByteStandard(CommCounter); + // process parameter byte + ParseParamByteStandard(CommCounter); - // increment command parameter counter - CommCounter++; + // increment command parameter counter + CommCounter++; - // was that the last parameter byte? - if (CommCounter == ActiveCommand.ParameterByteCount) - { - // all parameter bytes received - setup for execution phase + // was that the last parameter byte? + if (CommCounter == ActiveCommand.ParameterByteCount) + { + // all parameter bytes received - setup for execution phase - // clear exec buffer and status registers - ClearExecBuffer(); - Status0 = 0; - Status1 = 0; - Status2 = 0; - Status3 = 0; + // clear exec buffer and status registers + ClearExecBuffer(); + Status0 = 0; + Status1 = 0; + Status2 = 0; + Status3 = 0; - // temp sector index - byte secIdx = ActiveCommandParams.Sector; + // temp sector index + byte secIdx = ActiveCommandParams.Sector; - // do we have a valid disk inserted? - if (!ActiveDrive.FLAG_READY) - { - // no disk, no tracks or motor is not on - SetBit(SR0_IC0, ref Status0); - SetBit(SR0_NR, ref Status0); + // do we have a valid disk inserted? + if (!ActiveDrive.FLAG_READY) + { + // no disk, no tracks or motor is not on + SetBit(SR0_IC0, ref Status0); + SetBit(SR0_NR, ref Status0); - CommitResultCHRN(); - CommitResultStatus(); - //ResBuffer[RS_ST0] = Status0; + CommitResultCHRN(); + CommitResultStatus(); + //ResBuffer[RS_ST0] = Status0; - // move to result phase - ActivePhase = Phase.Result; - break; - } + // move to result phase + ActivePhase = Phase.Result; + break; + } - int buffPos = 0; - int sectorSize = 0; - int maxTransferCap = 0; + int buffPos = 0; + int sectorSize = 0; + int maxTransferCap = 0; if (maxTransferCap > 0) { } - // calculate requested size of data required - if (ActiveCommandParams.SectorSize == 0) - { - // When N=0, then DTL defines the data length which the FDC must treat as a sector. If DTL is smaller than the actual - // data length in a sector, the data beyond DTL in the sector is not sent to the Data Bus. The FDC reads (internally) - // the complete sector performing the CRC check and, depending upon the manner of command termination, may perform - // a Multi-Sector Read Operation. - sectorSize = ActiveCommandParams.DTL; + // calculate requested size of data required + if (ActiveCommandParams.SectorSize == 0) + { + // When N=0, then DTL defines the data length which the FDC must treat as a sector. If DTL is smaller than the actual + // data length in a sector, the data beyond DTL in the sector is not sent to the Data Bus. The FDC reads (internally) + // the complete sector performing the CRC check and, depending upon the manner of command termination, may perform + // a Multi-Sector Read Operation. + sectorSize = ActiveCommandParams.DTL; - // calculate maximum transfer capacity - if (!CMD_FLAG_MF) - maxTransferCap = 3328; - } - else - { - // When N is non - zero, then DTL has no meaning and should be set to ffh - ActiveCommandParams.DTL = 0xFF; + // calculate maximum transfer capacity + if (!CMD_FLAG_MF) + maxTransferCap = 3328; + } + else + { + // When N is non - zero, then DTL has no meaning and should be set to ffh + ActiveCommandParams.DTL = 0xFF; - // calculate maximum transfer capacity - switch (ActiveCommandParams.SectorSize) - { - case 1: - if (CMD_FLAG_MF) - maxTransferCap = 6656; - else - maxTransferCap = 3840; - break; - case 2: - if (CMD_FLAG_MF) - maxTransferCap = 7680; - else - maxTransferCap = 4096; - break; - case 3: - if (CMD_FLAG_MF) - maxTransferCap = 8192; - else - maxTransferCap = 4096; - break; - } + // calculate maximum transfer capacity + switch (ActiveCommandParams.SectorSize) + { + case 1: + if (CMD_FLAG_MF) + maxTransferCap = 6656; + else + maxTransferCap = 3840; + break; + case 2: + if (CMD_FLAG_MF) + maxTransferCap = 7680; + else + maxTransferCap = 4096; + break; + case 3: + if (CMD_FLAG_MF) + maxTransferCap = 8192; + else + maxTransferCap = 4096; + break; + } - sectorSize = 0x80 << ActiveCommandParams.SectorSize; - } + sectorSize = 0x80 << ActiveCommandParams.SectorSize; + } - // get the current track - var track = ActiveDrive.Disk.DiskTracks.Where(a => a.TrackNumber == ActiveDrive.CurrentTrackID).FirstOrDefault(); + // get the current track + var track = ActiveDrive.Disk.DiskTracks.Where(a => a.TrackNumber == ActiveDrive.CurrentTrackID).FirstOrDefault(); - if (track == null || track.NumberOfSectors <= 0) - { - // track could not be found - SetBit(SR0_IC0, ref Status0); - SetBit(SR0_NR, ref Status0); + if (track == null || track.NumberOfSectors <= 0) + { + // track could not be found + SetBit(SR0_IC0, ref Status0); + SetBit(SR0_NR, ref Status0); - CommitResultCHRN(); - CommitResultStatus(); + CommitResultCHRN(); + CommitResultStatus(); - //ResBuffer[RS_ST0] = Status0; + //ResBuffer[RS_ST0] = Status0; - // move to result phase - ActivePhase = Phase.Result; - break; - } + // move to result phase + ActivePhase = Phase.Result; + break; + } - FloppyDisk.Sector sector = null; + FloppyDisk.Sector sector = null; - // sector read loop - for (;;) - { - bool terminate = false; + // sector read loop + for (; ; ) + { + bool terminate = false; - // lookup the sector - sector = GetSector(); + // lookup the sector + sector = GetSector(); - if (sector == null) - { - // sector was not found after two passes of the disk index hole - SetBit(SR1_ND, ref Status1); - SetBit(SR0_IC0, ref Status0); - UnSetBit(SR0_IC1, ref Status0); + if (sector == null) + { + // sector was not found after two passes of the disk index hole + SetBit(SR1_ND, ref Status1); + SetBit(SR0_IC0, ref Status0); + UnSetBit(SR0_IC1, ref Status0); - // result requires the actual track id, rather than the sector track id - ActiveCommandParams.Cylinder = track.TrackNumber; + // result requires the actual track id, rather than the sector track id + ActiveCommandParams.Cylinder = track.TrackNumber; - CommitResultCHRN(); - CommitResultStatus(); - ActivePhase = Phase.Result; - break; - } + CommitResultCHRN(); + CommitResultStatus(); + ActivePhase = Phase.Result; + break; + } - // sector ID was found on this track + // sector ID was found on this track - // get status regs from sector - Status1 = sector.Status1; - Status2 = sector.Status2; + // get status regs from sector + Status1 = sector.Status1; + Status2 = sector.Status2; - // we dont need EN - UnSetBit(SR1_EN, ref Status1); + // we dont need EN + UnSetBit(SR1_EN, ref Status1); - // invert CM for read deleted data command - if (Status2.Bit(SR2_CM)) - UnSetBit(SR2_CM, ref Status2); - else - SetBit(SR2_CM, ref Status2); + // invert CM for read deleted data command + if (Status2.Bit(SR2_CM)) + UnSetBit(SR2_CM, ref Status2); + else + SetBit(SR2_CM, ref Status2); - // skip flag is set and no DAM found - if (CMD_FLAG_SK && Status2.Bit(SR2_CM)) - { - if (ActiveCommandParams.Sector != ActiveCommandParams.EOT) - { - // increment the sector ID and search again - ActiveCommandParams.Sector++; - continue; - } - else - { - // no execution phase - SetBit(SR0_IC0, ref Status0); - UnSetBit(SR0_IC1, ref Status0); + // skip flag is set and no DAM found + if (CMD_FLAG_SK && Status2.Bit(SR2_CM)) + { + if (ActiveCommandParams.Sector != ActiveCommandParams.EOT) + { + // increment the sector ID and search again + ActiveCommandParams.Sector++; + continue; + } + else + { + // no execution phase + SetBit(SR0_IC0, ref Status0); + UnSetBit(SR0_IC1, ref Status0); - // result requires the actual track id, rather than the sector track id - ActiveCommandParams.Cylinder = track.TrackNumber; + // result requires the actual track id, rather than the sector track id + ActiveCommandParams.Cylinder = track.TrackNumber; - CommitResultCHRN(); - CommitResultStatus(); - ActivePhase = Phase.Result; - break; - } - } - // we can read this sector - else - { - // if DAM is not set this will be the last sector to read - if (Status2.Bit(SR2_CM)) - { - ActiveCommandParams.EOT = ActiveCommandParams.Sector; - } + CommitResultCHRN(); + CommitResultStatus(); + ActivePhase = Phase.Result; + break; + } + } + // we can read this sector + else + { + // if DAM is not set this will be the last sector to read + if (Status2.Bit(SR2_CM)) + { + ActiveCommandParams.EOT = ActiveCommandParams.Sector; + } - if (!CMD_FLAG_SK && !Status2.Bit(SR2_CM) && - ActiveDrive.Disk.Protection == ProtectionType.PaulOwens) - { - ActiveCommandParams.EOT = ActiveCommandParams.Sector; - SetBit(SR2_CM, ref Status2); - SetBit(SR0_IC0, ref Status0); - UnSetBit(SR0_IC1, ref Status0); - terminate = true; - } + if (!CMD_FLAG_SK && !Status2.Bit(SR2_CM) && + ActiveDrive.Disk.Protection == ProtectionType.PaulOwens) + { + ActiveCommandParams.EOT = ActiveCommandParams.Sector; + SetBit(SR2_CM, ref Status2); + SetBit(SR0_IC0, ref Status0); + UnSetBit(SR0_IC1, ref Status0); + terminate = true; + } - // read the sector - for (int i = 0; i < sectorSize; i++) - { - ExecBuffer[buffPos++] = sector.ActualData[i]; - } + // read the sector + for (int i = 0; i < sectorSize; i++) + { + ExecBuffer[buffPos++] = sector.ActualData[i]; + } - // mark the sector read - sector.SectorReadCompleted(); + // mark the sector read + sector.SectorReadCompleted(); - if (sector.SectorID == ActiveCommandParams.EOT) - { - // this was the last sector to read + if (sector.SectorID == ActiveCommandParams.EOT) + { + // this was the last sector to read - SetBit(SR1_EN, ref Status1); + SetBit(SR1_EN, ref Status1); - int keyIndex = 0; - for (int i = 0; i < track.Sectors.Length; i++) - { - if (track.Sectors[i].SectorID == sector.SectorID) - { - keyIndex = i; - break; - } - } + int keyIndex = 0; + for (int i = 0; i < track.Sectors.Length; i++) + { + if (track.Sectors[i].SectorID == sector.SectorID) + { + keyIndex = i; + break; + } + } - if (keyIndex == track.Sectors.Length - 1) - { - // last sector on the cylinder, set EN - SetBit(SR1_EN, ref Status1); + if (keyIndex == track.Sectors.Length - 1) + { + // last sector on the cylinder, set EN + SetBit(SR1_EN, ref Status1); - // increment cylinder - ActiveCommandParams.Cylinder++; + // increment cylinder + ActiveCommandParams.Cylinder++; - // reset sector - ActiveCommandParams.Sector = 1; - ActiveDrive.SectorIndex = 0; - } - else - { - ActiveDrive.SectorIndex++; - } + // reset sector + ActiveCommandParams.Sector = 1; + ActiveDrive.SectorIndex = 0; + } + else + { + ActiveDrive.SectorIndex++; + } - UnSetBit(SR0_IC1, ref Status0); - if (terminate) - SetBit(SR0_IC0, ref Status0); - else - UnSetBit(SR0_IC0, ref Status0); + UnSetBit(SR0_IC1, ref Status0); + if (terminate) + SetBit(SR0_IC0, ref Status0); + else + UnSetBit(SR0_IC0, ref Status0); - SetBit(SR0_IC0, ref Status0); + SetBit(SR0_IC0, ref Status0); - // result requires the actual track id, rather than the sector track id - ActiveCommandParams.Cylinder = track.TrackNumber; + // result requires the actual track id, rather than the sector track id + ActiveCommandParams.Cylinder = track.TrackNumber; - // remove CM (appears to be required to defeat Alkatraz copy protection) - UnSetBit(SR2_CM, ref Status2); + // remove CM (appears to be required to defeat Alkatraz copy protection) + UnSetBit(SR2_CM, ref Status2); - CommitResultCHRN(); - CommitResultStatus(); - ActivePhase = Phase.Execution; - break; - } - else - { - // continue with multi-sector read operation - ActiveCommandParams.Sector++; - //ActiveDrive.SectorIndex++; - } - } - } + CommitResultCHRN(); + CommitResultStatus(); + ActivePhase = Phase.Execution; + break; + } + else + { + // continue with multi-sector read operation + ActiveCommandParams.Sector++; + //ActiveDrive.SectorIndex++; + } + } + } - if (ActivePhase == Phase.Execution) - { - ExecLength = buffPos; - ExecCounter = buffPos; - DriveLight = true; - } - } - break; + if (ActivePhase == Phase.Execution) + { + ExecLength = buffPos; + ExecCounter = buffPos; + DriveLight = true; + } + } + break; - //---------------------------------------- - // FDC in execution phase reading/writing bytes - //---------------------------------------- - case Phase.Execution: - var index = ExecLength - ExecCounter; + //---------------------------------------- + // FDC in execution phase reading/writing bytes + //---------------------------------------- + case Phase.Execution: + var index = ExecLength - ExecCounter; - LastSectorDataReadByte = ExecBuffer[index]; + LastSectorDataReadByte = ExecBuffer[index]; - OverrunCounter--; - ExecCounter--; - - break; + OverrunCounter--; + ExecCounter--; - //---------------------------------------- - // Result bytes being sent to CPU - //---------------------------------------- - case Phase.Result: - break; - } - } + break; - /// - /// Read Diagnostic (read track) - /// COMMAND: 8 parameter bytes - /// EXECUTION: Data transfer between FDD and FDC. FDC reads all data fields from index hole to EDT - /// RESULT: 7 result bytes - /// - private void UPD_ReadDiagnostic() - { - switch (ActivePhase) - { - //---------------------------------------- - // FDC is waiting for a command byte - //---------------------------------------- - case Phase.Idle: - break; + //---------------------------------------- + // Result bytes being sent to CPU + //---------------------------------------- + case Phase.Result: + break; + } + } - //---------------------------------------- - // Receiving command parameter bytes - //---------------------------------------- - case Phase.Command: + /// + /// Read Diagnostic (read track) + /// COMMAND: 8 parameter bytes + /// EXECUTION: Data transfer between FDD and FDC. FDC reads all data fields from index hole to EDT + /// RESULT: 7 result bytes + /// + private void UPD_ReadDiagnostic() + { + switch (ActivePhase) + { + //---------------------------------------- + // FDC is waiting for a command byte + //---------------------------------------- + case Phase.Idle: + break; - // store the parameter in the command buffer - CommBuffer[CommCounter] = LastByteReceived; + //---------------------------------------- + // Receiving command parameter bytes + //---------------------------------------- + case Phase.Command: - // process parameter byte - ParseParamByteStandard(CommCounter); + // store the parameter in the command buffer + CommBuffer[CommCounter] = LastByteReceived; - // increment command parameter counter - CommCounter++; + // process parameter byte + ParseParamByteStandard(CommCounter); - // was that the last parameter byte? - if (CommCounter == ActiveCommand.ParameterByteCount) - { - // all parameter bytes received - setup for execution phase + // increment command parameter counter + CommCounter++; - // clear exec buffer and status registers - ClearExecBuffer(); - Status0 = 0; - Status1 = 0; - Status2 = 0; - Status3 = 0; + // was that the last parameter byte? + if (CommCounter == ActiveCommand.ParameterByteCount) + { + // all parameter bytes received - setup for execution phase - // temp sector index - byte secIdx = ActiveCommandParams.Sector; + // clear exec buffer and status registers + ClearExecBuffer(); + Status0 = 0; + Status1 = 0; + Status2 = 0; + Status3 = 0; - // do we have a valid disk inserted? - if (!ActiveDrive.FLAG_READY) - { - // no disk, no tracks or motor is not on - SetBit(SR0_IC0, ref Status0); - SetBit(SR0_NR, ref Status0); + // temp sector index + byte secIdx = ActiveCommandParams.Sector; - CommitResultCHRN(); - CommitResultStatus(); - //ResBuffer[RS_ST0] = Status0; + // do we have a valid disk inserted? + if (!ActiveDrive.FLAG_READY) + { + // no disk, no tracks or motor is not on + SetBit(SR0_IC0, ref Status0); + SetBit(SR0_NR, ref Status0); - // move to result phase - ActivePhase = Phase.Result; - break; - } + CommitResultCHRN(); + CommitResultStatus(); + //ResBuffer[RS_ST0] = Status0; - int buffPos = 0; - int sectorSize = 0; - int maxTransferCap = 0; + // move to result phase + ActivePhase = Phase.Result; + break; + } + + int buffPos = 0; + int sectorSize = 0; + int maxTransferCap = 0; if (maxTransferCap > 0) { } - // calculate requested size of data required - if (ActiveCommandParams.SectorSize == 0) - { - // When N=0, then DTL defines the data length which the FDC must treat as a sector. If DTL is smaller than the actual - // data length in a sector, the data beyond DTL in the sector is not sent to the Data Bus. The FDC reads (internally) - // the complete sector performing the CRC check and, depending upon the manner of command termination, may perform - // a Multi-Sector Read Operation. - sectorSize = ActiveCommandParams.DTL; - - // calculate maximum transfer capacity - if (!CMD_FLAG_MF) - maxTransferCap = 3328; - } - else - { - // When N is non - zero, then DTL has no meaning and should be set to ffh - ActiveCommandParams.DTL = 0xFF; - - // calculate maximum transfer capacity - switch (ActiveCommandParams.SectorSize) - { - case 1: - if (CMD_FLAG_MF) - maxTransferCap = 6656; - else - maxTransferCap = 3840; - break; - case 2: - if (CMD_FLAG_MF) - maxTransferCap = 7680; - else - maxTransferCap = 4096; - break; - case 3: - if (CMD_FLAG_MF) - maxTransferCap = 8192; - else - maxTransferCap = 4096; - break; - } - - sectorSize = 0x80 << ActiveCommandParams.SectorSize; - } - - // get the current track - var track = ActiveDrive.Disk.DiskTracks.Where(a => a.TrackNumber == ActiveDrive.CurrentTrackID).FirstOrDefault(); - - if (track == null || track.NumberOfSectors <= 0) - { - // track could not be found - SetBit(SR0_IC0, ref Status0); - SetBit(SR0_NR, ref Status0); - - CommitResultCHRN(); - CommitResultStatus(); - - //ResBuffer[RS_ST0] = Status0; - - // move to result phase - ActivePhase = Phase.Result; - break; - } - - //FloppyDisk.Sector sector = null; - ActiveDrive.SectorIndex = 0; - - int secCount = 0; - - // read the whole track - for (int i = 0; i < track.Sectors.Length; i++) - { - if (secCount >= ActiveCommandParams.EOT) - { - break; - } - - var sec = track.Sectors[i]; - for (int b = 0; b < sec.ActualData.Length; b++) - { - ExecBuffer[buffPos++] = sec.ActualData[b]; - } - - // mark the sector read - sec.SectorReadCompleted(); - - // end of sector - compare IDs - if (sec.TrackNumber != ActiveCommandParams.Cylinder || - sec.SideNumber != ActiveCommandParams.Head || - sec.SectorID != ActiveCommandParams.Sector || - sec.SectorSize != ActiveCommandParams.SectorSize) - { - SetBit(SR1_ND, ref Status1); - } - - secCount++; - ActiveDrive.SectorIndex = i; - } - - if (secCount == ActiveCommandParams.EOT) - { - // this was the last sector to read - // or termination requested - - int keyIndex = 0; - for (int i = 0; i < track.Sectors.Length; i++) - { - if (track.Sectors[i].SectorID == track.Sectors[ActiveDrive.SectorIndex].SectorID) - { - keyIndex = i; - break; - } - } - - if (keyIndex == track.Sectors.Length - 1) - { - // last sector on the cylinder, set EN - SetBit(SR1_EN, ref Status1); - - // increment cylinder - ActiveCommandParams.Cylinder++; - - // reset sector - ActiveCommandParams.Sector = 1; - ActiveDrive.SectorIndex = 0; - } - else - { - ActiveDrive.SectorIndex++; - } - - UnSetBit(SR0_IC1, ref Status0); - UnSetBit(SR0_IC0, ref Status0); - - CommitResultCHRN(); - CommitResultStatus(); - ActivePhase = Phase.Execution; - } - - if (ActivePhase == Phase.Execution) - { - ExecLength = buffPos; - ExecCounter = buffPos; - - DriveLight = true; - } - } - - break; - - //---------------------------------------- - // FDC in execution phase reading/writing bytes - //---------------------------------------- - case Phase.Execution: - - var index = ExecLength - ExecCounter; - - LastSectorDataReadByte = ExecBuffer[index]; - - OverrunCounter--; - ExecCounter--; - - break; - - //---------------------------------------- - // Result bytes being sent to CPU - //---------------------------------------- - case Phase.Result: - break; - } - } - - /// - /// Read ID - /// COMMAND: 1 parameter byte - /// EXECUTION: The first correct ID information on the cylinder is stored in the data register - /// RESULT: 7 result bytes - /// - private void UPD_ReadID() - { - switch (ActivePhase) - { - //---------------------------------------- - // FDC is waiting for a command byte - //---------------------------------------- - case Phase.Idle: - break; - - //---------------------------------------- - // Receiving command parameter bytes - //---------------------------------------- - case Phase.Command: - - // store the parameter in the command buffer - CommBuffer[CommCounter] = LastByteReceived; - - // process parameter byte - ParseParamByteStandard(CommCounter); - - // increment command parameter counter - CommCounter++; - - // was that the last parameter byte? - if (CommCounter == ActiveCommand.ParameterByteCount) - { - DriveLight = true; - - // all parameter bytes received - ClearResultBuffer(); - Status0 = 0; - Status1 = 0; - Status2 = 0; - Status3 = 0; - - // set unit select - //SetUnitSelect(ActiveDrive.ID, ref Status0); - - // HD should always be 0 - UnSetBit(SR0_HD, ref Status0); - - if (!ActiveDrive.FLAG_READY) - { - // no disk, no tracks or motor is not on - // it is at this point the +3 detects whether a disk is present - // if not (and after another readid and SIS) it will eventually proceed to loading from tape - SetBit(SR0_IC0, ref Status0); - SetBit(SR0_NR, ref Status0); - - // setup the result buffer - ResBuffer[RS_ST0] = Status0; - for (int i = 1; i < 7; i++) - ResBuffer[i] = 0; - - // move to result phase - ActivePhase = Phase.Result; - break; - } - - var track = ActiveDrive.Disk.DiskTracks.Where(a => a.TrackNumber == ActiveDrive.CurrentTrackID).FirstOrDefault(); - - if (track != null && track.NumberOfSectors > 0 && track.TrackNumber != 0xff) - { - // formatted track - - // is the index out of bounds? - if (ActiveDrive.SectorIndex >= track.NumberOfSectors) - { - // reset the index - ActiveDrive.SectorIndex = 0; - } - - if (ActiveDrive.SectorIndex == 0 && ActiveDrive.Disk.DiskTracks[ActiveDrive.CurrentTrackID].Sectors.Length > 1) - { - // looks like readid always skips the first sector on a track - ActiveDrive.SectorIndex++; - } - - // read the sector data - var data = track.Sectors[ActiveDrive.SectorIndex]; //.GetCHRN(); - ResBuffer[RS_C] = data.TrackNumber; - ResBuffer[RS_H] = data.SideNumber; - ResBuffer[RS_R] = data.SectorID; - ResBuffer[RS_N] = data.SectorSize; - - ResBuffer[RS_ST0] = Status0; - - // check for DAM & CRC - //if (data.Status2.Bit(SR2_CM)) - //SetBit(SR2_CM, ref ResBuffer[RS_ST2]); - - - // increment the current sector - ActiveDrive.SectorIndex++; - - // is the index out of bounds? - if (ActiveDrive.SectorIndex >= track.NumberOfSectors) - { - // reset the index - ActiveDrive.SectorIndex = 0; - } - } - else - { - // unformatted track? - CommitResultCHRN(); - - SetBit(SR0_IC0, ref Status0); - ResBuffer[RS_ST0] = Status0; - ResBuffer[RS_ST1] = 0x01; - } - - ActivePhase = Phase.Result; - } - - break; - - //---------------------------------------- - // FDC in execution phase reading/writing bytes - //---------------------------------------- - case Phase.Execution: - break; - - //---------------------------------------- - // Result bytes being sent to CPU - //---------------------------------------- - case Phase.Result: - break; - } - } - - #endregion - - #region WRITE Commands - - /// - /// Write Data - /// COMMAND: 8 parameter bytes - /// EXECUTION: Data transfer between FDC and FDD - /// RESULT: 7 result bytes - /// - private void UPD_WriteData() - { - switch (ActivePhase) - { - //---------------------------------------- - // FDC is waiting for a command byte - //---------------------------------------- - case Phase.Idle: - break; - - //---------------------------------------- - // Receiving command parameter bytes - //---------------------------------------- - case Phase.Command: - - // store the parameter in the command buffer - CommBuffer[CommCounter] = LastByteReceived; - - // process parameter byte - ParseParamByteStandard(CommCounter); - - // increment command parameter counter - CommCounter++; - - // was that the last parameter byte? - if (CommCounter == ActiveCommand.ParameterByteCount) - { - // all parameter bytes received - setup for execution phase - - // clear exec buffer and status registers - ClearExecBuffer(); - Status0 = 0; - Status1 = 0; - Status2 = 0; - Status3 = 0; - - // temp sector index - byte secIdx = ActiveCommandParams.Sector; - - // hack for when another drive (non-existent) is being called - if (ActiveDrive.ID != 0) - DiskDriveIndex = 0; - - // do we have a valid disk inserted? - if (!ActiveDrive.FLAG_READY) - { - // no disk, no tracks or motor is not on - SetBit(SR0_IC0, ref Status0); - SetBit(SR0_NR, ref Status0); - - CommitResultCHRN(); - CommitResultStatus(); - //ResBuffer[RS_ST0] = Status0; - - // move to result phase - ActivePhase = Phase.Result; - break; - } - - // check write protect tab - if (ActiveDrive.FLAG_WRITEPROTECT) - { - SetBit(SR0_IC0, ref Status0); - SetBit(SR1_NW, ref Status1); - - CommitResultCHRN(); - CommitResultStatus(); - //ResBuffer[RS_ST0] = Status0; - - // move to result phase - ActivePhase = Phase.Result; - break; - } - else - { - - // calculate the number of bytes to write - int byteCounter = 0; - byte startSecID = ActiveCommandParams.Sector; - byte endSecID = ActiveCommandParams.EOT; - bool lastSec = false; - - // get the first sector - var track = ActiveDrive.Disk.DiskTracks[ActiveCommandParams.Cylinder]; - //int secIndex = 0; - for (int s = 0; s < track.Sectors.Length; s++) - { - if (track.Sectors[s].SectorID == endSecID) - lastSec = true; - - for (int i = 0; i < 0x80 << ActiveCommandParams.SectorSize; i++) - { - byteCounter++; - - if (i == (0x80 << ActiveCommandParams.SectorSize) - 1 && lastSec) - { - break; - } - } - - if (lastSec) - break; - } - - ExecCounter = byteCounter; - ExecLength = byteCounter; - ActivePhase = Phase.Execution; - DriveLight = true; - break; - } - } - - break; - - //---------------------------------------- - // FDC in execution phase reading/writing bytes - //---------------------------------------- - case Phase.Execution: - - var index = ExecLength - ExecCounter; - - ExecBuffer[index] = LastSectorDataWriteByte; - - OverrunCounter--; - ExecCounter--; - - if (ExecCounter <= 0) - { - int cnt = 0; - - // all data received - byte startSecID = ActiveCommandParams.Sector; - byte endSecID = ActiveCommandParams.EOT; - bool lastSec = false; - var track = ActiveDrive.Disk.DiskTracks[ActiveCommandParams.Cylinder]; - //int secIndex = 0; - - for (int s = 0; s < track.Sectors.Length; s++) - { - if (cnt == ExecLength) - break; - - ActiveCommandParams.Sector = track.Sectors[s].SectorID; - - if (track.Sectors[s].SectorID == endSecID) - lastSec = true; - - int size = 0x80 << track.Sectors[s].SectorSize; - - for (int d = 0; d < size; d++) - { - track.Sectors[s].SectorData[d] = ExecBuffer[cnt++]; - } - - if (lastSec) - break; - } - - SetBit(SR0_IC0, ref Status0); - SetBit(SR1_EN, ref Status1); - - CommitResultCHRN(); - CommitResultStatus(); - } - - break; - - //---------------------------------------- - // Result bytes being sent to CPU - //---------------------------------------- - case Phase.Result: - break; - } - } - - /// - /// Write ID (format write) - /// COMMAND: 5 parameter bytes - /// EXECUTION: Entire track is formatted - /// RESULT: 7 result bytes - /// - private void UPD_WriteID() - { - switch (ActivePhase) - { - //---------------------------------------- - // FDC is waiting for a command byte - //---------------------------------------- - case Phase.Idle: - break; - - //---------------------------------------- - // Receiving command parameter bytes - //---------------------------------------- - case Phase.Command: - - // store the parameter in the command buffer - CommBuffer[CommCounter] = LastByteReceived; - - // process parameter byte - ParseParamByteStandard(CommCounter); - - // increment command parameter counter - CommCounter++; - - // was that the last parameter byte? - if (CommCounter == ActiveCommand.ParameterByteCount) - { - // all parameter bytes received - setup for execution phase - DriveLight = true; - - // clear exec buffer and status registers - ClearExecBuffer(); - Status0 = 0; - Status1 = 0; - Status2 = 0; - Status3 = 0; - - // temp sector index - byte secIdx = ActiveCommandParams.Sector; - - // hack for when another drive (non-existent) is being called - if (ActiveDrive.ID != 0) - DiskDriveIndex = 0; - - // do we have a valid disk inserted? - if (!ActiveDrive.FLAG_READY) - { - // no disk, no tracks or motor is not on - SetBit(SR0_IC0, ref Status0); - SetBit(SR0_NR, ref Status0); - - CommitResultCHRN(); - CommitResultStatus(); - //ResBuffer[RS_ST0] = Status0; - - // move to result phase - ActivePhase = Phase.Result; - break; - } - - // check write protect tab - if (ActiveDrive.FLAG_WRITEPROTECT) - { - SetBit(SR0_IC0, ref Status0); - SetBit(SR1_NW, ref Status1); - - CommitResultCHRN(); - CommitResultStatus(); - //ResBuffer[RS_ST0] = Status0; - - // move to result phase - ActivePhase = Phase.Result; - break; - } - else - { - // not implemented yet - SetBit(SR0_IC0, ref Status0); - SetBit(SR1_NW, ref Status1); - - CommitResultCHRN(); - CommitResultStatus(); - //ResBuffer[RS_ST0] = Status0; - - // move to result phase - ActivePhase = Phase.Result; - break; - } - } - - break; - - //---------------------------------------- - // FDC in execution phase reading/writing bytes - //---------------------------------------- - case Phase.Execution: - break; - - //---------------------------------------- - // Result bytes being sent to CPU - //---------------------------------------- - case Phase.Result: - break; - } - } - - /// - /// Write Deleted Data - /// COMMAND: 8 parameter bytes - /// EXECUTION: Data transfer between FDC and FDD - /// RESULT: 7 result bytes - /// - private void UPD_WriteDeletedData() - { - switch (ActivePhase) - { - //---------------------------------------- - // FDC is waiting for a command byte - //---------------------------------------- - case Phase.Idle: - break; - - //---------------------------------------- - // Receiving command parameter bytes - //---------------------------------------- - case Phase.Command: - - // store the parameter in the command buffer - CommBuffer[CommCounter] = LastByteReceived; - - // process parameter byte - ParseParamByteStandard(CommCounter); - - // increment command parameter counter - CommCounter++; - - // was that the last parameter byte? - if (CommCounter == ActiveCommand.ParameterByteCount) - { - // all parameter bytes received - setup for execution phase - - // clear exec buffer and status registers - ClearExecBuffer(); - Status0 = 0; - Status1 = 0; - Status2 = 0; - Status3 = 0; - - // temp sector index - byte secIdx = ActiveCommandParams.Sector; - - // hack for when another drive (non-existent) is being called - if (ActiveDrive.ID != 0) - DiskDriveIndex = 0; - - // do we have a valid disk inserted? - if (!ActiveDrive.FLAG_READY) - { - // no disk, no tracks or motor is not on - SetBit(SR0_IC0, ref Status0); - SetBit(SR0_NR, ref Status0); - - CommitResultCHRN(); - CommitResultStatus(); - //ResBuffer[RS_ST0] = Status0; - - // move to result phase - ActivePhase = Phase.Result; - break; - } - - // check write protect tab - if (ActiveDrive.FLAG_WRITEPROTECT) - { - SetBit(SR0_IC0, ref Status0); - SetBit(SR1_NW, ref Status1); - - CommitResultCHRN(); - CommitResultStatus(); - //ResBuffer[RS_ST0] = Status0; - - // move to result phase - ActivePhase = Phase.Result; - break; - } - else - { - - // calculate the number of bytes to write - int byteCounter = 0; - byte startSecID = ActiveCommandParams.Sector; - byte endSecID = ActiveCommandParams.EOT; - bool lastSec = false; - - // get the first sector - var track = ActiveDrive.Disk.DiskTracks[ActiveCommandParams.Cylinder]; - //int secIndex = 0; - for (int s = 0; s < track.Sectors.Length; s++) - { - if (track.Sectors[s].SectorID == endSecID) - lastSec = true; - - for (int i = 0; i < 0x80 << ActiveCommandParams.SectorSize; i++) - { - byteCounter++; - - if (i == (0x80 << ActiveCommandParams.SectorSize) - 1 && lastSec) - { - break; - } - } - - if (lastSec) - break; - } - - ExecCounter = byteCounter; - ExecLength = byteCounter; - ActivePhase = Phase.Execution; - DriveLight = true; - break; - } - } - - break; - - //---------------------------------------- - // FDC in execution phase reading/writing bytes - //---------------------------------------- - case Phase.Execution: - - var index = ExecLength - ExecCounter; - - ExecBuffer[index] = LastSectorDataWriteByte; - - OverrunCounter--; - ExecCounter--; - - if (ExecCounter <= 0) - { - int cnt = 0; - - // all data received - byte startSecID = ActiveCommandParams.Sector; - byte endSecID = ActiveCommandParams.EOT; - bool lastSec = false; - var track = ActiveDrive.Disk.DiskTracks[ActiveCommandParams.Cylinder]; - //int secIndex = 0; - - for (int s = 0; s < track.Sectors.Length; s++) - { - if (cnt == ExecLength) - break; - - ActiveCommandParams.Sector = track.Sectors[s].SectorID; - - if (track.Sectors[s].SectorID == endSecID) - lastSec = true; - - int size = 0x80 << track.Sectors[s].SectorSize; - - for (int d = 0; d < size; d++) - { - track.Sectors[s].SectorData[d] = ExecBuffer[cnt++]; - } - - if (lastSec) - break; - } - - SetBit(SR0_IC0, ref Status0); - SetBit(SR1_EN, ref Status1); - - CommitResultCHRN(); - CommitResultStatus(); - } - - break; - - //---------------------------------------- - // Result bytes being sent to CPU - //---------------------------------------- - case Phase.Result: - break; - } - } - - #endregion - - #region SCAN Commands - - /// - /// Scan Equal - /// COMMAND: 8 parameter bytes - /// EXECUTION: Data compared between the FDD and FDC - /// RESULT: 7 result bytes - /// - private void UPD_ScanEqual() - { - switch (ActivePhase) - { - //---------------------------------------- - // FDC is waiting for a command byte - //---------------------------------------- - case Phase.Idle: - break; - - //---------------------------------------- - // Receiving command parameter bytes - //---------------------------------------- - case Phase.Command: - break; - - //---------------------------------------- - // FDC in execution phase reading/writing bytes - //---------------------------------------- - case Phase.Execution: - break; - - //---------------------------------------- - // Result bytes being sent to CPU - //---------------------------------------- - case Phase.Result: - break; - } - } - - /// - /// Scan Low or Equal - /// COMMAND: 8 parameter bytes - /// EXECUTION: Data compared between the FDD and FDC - /// RESULT: 7 result bytes - /// - private void UPD_ScanLowOrEqual() - { - switch (ActivePhase) - { - //---------------------------------------- - // FDC is waiting for a command byte - //---------------------------------------- - case Phase.Idle: - break; - - //---------------------------------------- - // Receiving command parameter bytes - //---------------------------------------- - case Phase.Command: - break; - - //---------------------------------------- - // FDC in execution phase reading/writing bytes - //---------------------------------------- - case Phase.Execution: - break; - - //---------------------------------------- - // Result bytes being sent to CPU - //---------------------------------------- - case Phase.Result: - break; - } - } - - /// - /// Scan High or Equal - /// COMMAND: 8 parameter bytes - /// EXECUTION: Data compared between the FDD and FDC - /// RESULT: 7 result bytes - /// - private void UPD_ScanHighOrEqual() - { - switch (ActivePhase) - { - //---------------------------------------- - // FDC is waiting for a command byte - //---------------------------------------- - case Phase.Idle: - break; - - //---------------------------------------- - // Receiving command parameter bytes - //---------------------------------------- - case Phase.Command: - break; - - //---------------------------------------- - // FDC in execution phase reading/writing bytes - //---------------------------------------- - case Phase.Execution: - break; - - //---------------------------------------- - // Result bytes being sent to CPU - //---------------------------------------- - case Phase.Result: - break; - } - } - - #endregion - - #region OTHER Commands - - /// - /// Specify - /// COMMAND: 2 parameter bytes - /// EXECUTION: NO execution phase - /// RESULT: NO result phase - /// - /// Looks like specify command returns status 0x80 throughout its lifecycle - /// so CB is NOT set - /// - private void UPD_Specify() - { - switch (ActivePhase) - { - //---------------------------------------- - // FDC is waiting for a command byte - //---------------------------------------- - case Phase.Idle: - break; - - //---------------------------------------- - // Receiving command parameter bytes - //---------------------------------------- - case Phase.Command: - - // store the parameter in the command buffer - CommBuffer[CommCounter] = LastByteReceived; - - // process parameter byte - byte currByte = CommBuffer[CommCounter]; - BitArray bi = new BitArray(new byte[] { currByte }); - - switch (CommCounter) - { - // SRT & HUT - case 0: - SRT = 16 - (currByte >> 4) & 0x0f; - HUT = (currByte & 0x0f) << 4; - if (HUT == 0) - { - HUT = 255; - } - break; - // HLT & ND - case 1: - if (bi[0]) - ND = true; - else - ND = false; - - HLT = currByte & 0xfe; - if (HLT == 0) - { - HLT = 255; - } - break; - } - - // increment command parameter counter - CommCounter++; - - // was that the last parameter byte? - if (CommCounter == ActiveCommand.ParameterByteCount) - { - // all parameter bytes received - ActivePhase = Phase.Idle; - } - - break; - - //---------------------------------------- - // FDC in execution phase reading/writing bytes - //---------------------------------------- - case Phase.Execution: - break; - - //---------------------------------------- - // Result bytes being sent to CPU - //---------------------------------------- - case Phase.Result: - break; - } - } - - /// - /// Seek - /// COMMAND: 2 parameter bytes - /// EXECUTION: Head is positioned over proper cylinder on disk - /// RESULT: NO result phase - /// - private void UPD_Seek() - { - switch (ActivePhase) - { - //---------------------------------------- - // FDC is waiting for a command byte - //---------------------------------------- - case Phase.Idle: - break; - - //---------------------------------------- - // Receiving command parameter bytes - //---------------------------------------- - case Phase.Command: - // store the parameter in the command buffer - CommBuffer[CommCounter] = LastByteReceived; - - // process parameter byte - byte currByte = CommBuffer[CommCounter]; - switch (CommCounter) - { - case 0: - ParseParamByteStandard(CommCounter); - break; - case 1: - ActiveDrive.SeekingTrack = currByte; - break; - } - - // increment command parameter counter - CommCounter++; - - // was that the last parameter byte? - if (CommCounter == ActiveCommand.ParameterByteCount) - { - // all parameter bytes received - DriveLight = true; - ActivePhase = Phase.Execution; - ActiveCommand.CommandDelegate(); - } - break; - - //---------------------------------------- - // FDC in execution phase reading/writing bytes - //---------------------------------------- - case Phase.Execution: - // set seek flag - ActiveDrive.SeekStatus = SEEK_SEEK; - - if (ActiveDrive.CurrentTrackID == CommBuffer[CM_C]) - { - // we are already on the correct track - ActiveDrive.SectorIndex = 0; - } - else - { - // immediate seek - ActiveDrive.CurrentTrackID = CommBuffer[CM_C]; - - ActiveDrive.SectorIndex = 0; - - if (ActiveDrive.Disk.DiskTracks[ActiveDrive.CurrentTrackID].Sectors.Length > 1) - { - // always read the first sector - //ActiveDrive.SectorIndex++; - } - } - - // skip execution mode and go directly to idle - // result is determined by SIS command - ActivePhase = Phase.Idle; - break; - - //---------------------------------------- - // Result bytes being sent to CPU - //---------------------------------------- - case Phase.Result: - break; - } - } - - /// - /// Recalibrate (seek track 0) - /// COMMAND: 1 parameter byte - /// EXECUTION: Head retracted to track 0 - /// RESULT: NO result phase - /// - private void UPD_Recalibrate() - { - switch (ActivePhase) - { - //---------------------------------------- - // FDC is waiting for a command byte - //---------------------------------------- - case Phase.Idle: - break; - - //---------------------------------------- - // Receiving command parameter bytes - //---------------------------------------- - case Phase.Command: - // store the parameter in the command buffer - CommBuffer[CommCounter] = LastByteReceived; - - // process parameter byte - ParseParamByteStandard(CommCounter); - - // increment command parameter counter - CommCounter++; - - // was that the last parameter byte? - if (CommCounter == ActiveCommand.ParameterByteCount) - { - // all parameter bytes received - DriveLight = true; - ActivePhase = Phase.Execution; - ActiveCommand.CommandDelegate(); - } - break; - - //---------------------------------------- - // FDC in execution phase reading/writing bytes - //---------------------------------------- - case Phase.Execution: - - // immediate recalibration - ActiveDrive.TrackIndex = 0; - ActiveDrive.SectorIndex = 0; - - // recalibrate appears to always skip the first sector - //if (ActiveDrive.Disk.DiskTracks[ActiveDrive.TrackIndex].Sectors.Length > 1) - //ActiveDrive.SectorIndex++; - - // set seek flag - ActiveDrive.SeekStatus = SEEK_RECALIBRATE; - - // skip execution mode and go directly to idle - // result is determined by SIS command - ActivePhase = Phase.Idle; - break; - - //---------------------------------------- - // Result bytes being sent to CPU - //---------------------------------------- - case Phase.Result: - break; - } - } - - /// - /// Sense Interrupt Status - /// COMMAND: NO parameter bytes - /// EXECUTION: NO execution phase - /// RESULT: 2 result bytes - /// - private void UPD_SenseInterruptStatus() - { - switch (ActivePhase) - { - //---------------------------------------- - // FDC is waiting for a command byte - //---------------------------------------- - case Phase.Idle: - break; - - //---------------------------------------- - // Receiving command parameter bytes - //---------------------------------------- - case Phase.Command: - break; - - //---------------------------------------- - // FDC in execution phase reading/writing bytes - //---------------------------------------- - case Phase.Execution: - // SIS should return 2 bytes if sucessfully sensed an interrupt - // 1 byte otherwise - - // it seems like the +3 ROM makes 3 SIS calls for each seek/recalibrate call for some reason - // possibly one for each drive??? - // 1 - the interrupt is acknowleged with ST0 = 32 and track number - // 2 - second sis returns 1 ST0 byte with 192 - // 3 - third SIS call returns standard 1 byte 0x80 (unknown cmd or SIS with no interrupt occured) - // for now I will assume that the first call is aimed at DriveA, the second at DriveB (which we are NOT implementing) - - // check active drive first - if (ActiveDrive.SeekStatus == SEEK_RECALIBRATE || - ActiveDrive.SeekStatus == SEEK_SEEK) - { - // interrupt has been raised for this drive - // acknowledge - ActiveDrive.SeekStatus = SEEK_IDLE;// SEEK_INTACKNOWLEDGED; - - // result length 2 - ResLength = 2; - - // first byte ST0 0x20 - Status0 = 0x20; - ResBuffer[0] = Status0; - // second byte is the current track id - ResBuffer[1] = ActiveDrive.CurrentTrackID; - } - /* + // calculate requested size of data required + if (ActiveCommandParams.SectorSize == 0) + { + // When N=0, then DTL defines the data length which the FDC must treat as a sector. If DTL is smaller than the actual + // data length in a sector, the data beyond DTL in the sector is not sent to the Data Bus. The FDC reads (internally) + // the complete sector performing the CRC check and, depending upon the manner of command termination, may perform + // a Multi-Sector Read Operation. + sectorSize = ActiveCommandParams.DTL; + + // calculate maximum transfer capacity + if (!CMD_FLAG_MF) + maxTransferCap = 3328; + } + else + { + // When N is non - zero, then DTL has no meaning and should be set to ffh + ActiveCommandParams.DTL = 0xFF; + + // calculate maximum transfer capacity + switch (ActiveCommandParams.SectorSize) + { + case 1: + if (CMD_FLAG_MF) + maxTransferCap = 6656; + else + maxTransferCap = 3840; + break; + case 2: + if (CMD_FLAG_MF) + maxTransferCap = 7680; + else + maxTransferCap = 4096; + break; + case 3: + if (CMD_FLAG_MF) + maxTransferCap = 8192; + else + maxTransferCap = 4096; + break; + } + + sectorSize = 0x80 << ActiveCommandParams.SectorSize; + } + + // get the current track + var track = ActiveDrive.Disk.DiskTracks.Where(a => a.TrackNumber == ActiveDrive.CurrentTrackID).FirstOrDefault(); + + if (track == null || track.NumberOfSectors <= 0) + { + // track could not be found + SetBit(SR0_IC0, ref Status0); + SetBit(SR0_NR, ref Status0); + + CommitResultCHRN(); + CommitResultStatus(); + + //ResBuffer[RS_ST0] = Status0; + + // move to result phase + ActivePhase = Phase.Result; + break; + } + + //FloppyDisk.Sector sector = null; + ActiveDrive.SectorIndex = 0; + + int secCount = 0; + + // read the whole track + for (int i = 0; i < track.Sectors.Length; i++) + { + if (secCount >= ActiveCommandParams.EOT) + { + break; + } + + var sec = track.Sectors[i]; + for (int b = 0; b < sec.ActualData.Length; b++) + { + ExecBuffer[buffPos++] = sec.ActualData[b]; + } + + // mark the sector read + sec.SectorReadCompleted(); + + // end of sector - compare IDs + if (sec.TrackNumber != ActiveCommandParams.Cylinder || + sec.SideNumber != ActiveCommandParams.Head || + sec.SectorID != ActiveCommandParams.Sector || + sec.SectorSize != ActiveCommandParams.SectorSize) + { + SetBit(SR1_ND, ref Status1); + } + + secCount++; + ActiveDrive.SectorIndex = i; + } + + if (secCount == ActiveCommandParams.EOT) + { + // this was the last sector to read + // or termination requested + + int keyIndex = 0; + for (int i = 0; i < track.Sectors.Length; i++) + { + if (track.Sectors[i].SectorID == track.Sectors[ActiveDrive.SectorIndex].SectorID) + { + keyIndex = i; + break; + } + } + + if (keyIndex == track.Sectors.Length - 1) + { + // last sector on the cylinder, set EN + SetBit(SR1_EN, ref Status1); + + // increment cylinder + ActiveCommandParams.Cylinder++; + + // reset sector + ActiveCommandParams.Sector = 1; + ActiveDrive.SectorIndex = 0; + } + else + { + ActiveDrive.SectorIndex++; + } + + UnSetBit(SR0_IC1, ref Status0); + UnSetBit(SR0_IC0, ref Status0); + + CommitResultCHRN(); + CommitResultStatus(); + ActivePhase = Phase.Execution; + } + + if (ActivePhase == Phase.Execution) + { + ExecLength = buffPos; + ExecCounter = buffPos; + + DriveLight = true; + } + } + + break; + + //---------------------------------------- + // FDC in execution phase reading/writing bytes + //---------------------------------------- + case Phase.Execution: + + var index = ExecLength - ExecCounter; + + LastSectorDataReadByte = ExecBuffer[index]; + + OverrunCounter--; + ExecCounter--; + + break; + + //---------------------------------------- + // Result bytes being sent to CPU + //---------------------------------------- + case Phase.Result: + break; + } + } + + /// + /// Read ID + /// COMMAND: 1 parameter byte + /// EXECUTION: The first correct ID information on the cylinder is stored in the data register + /// RESULT: 7 result bytes + /// + private void UPD_ReadID() + { + switch (ActivePhase) + { + //---------------------------------------- + // FDC is waiting for a command byte + //---------------------------------------- + case Phase.Idle: + break; + + //---------------------------------------- + // Receiving command parameter bytes + //---------------------------------------- + case Phase.Command: + + // store the parameter in the command buffer + CommBuffer[CommCounter] = LastByteReceived; + + // process parameter byte + ParseParamByteStandard(CommCounter); + + // increment command parameter counter + CommCounter++; + + // was that the last parameter byte? + if (CommCounter == ActiveCommand.ParameterByteCount) + { + DriveLight = true; + + // all parameter bytes received + ClearResultBuffer(); + Status0 = 0; + Status1 = 0; + Status2 = 0; + Status3 = 0; + + // set unit select + //SetUnitSelect(ActiveDrive.ID, ref Status0); + + // HD should always be 0 + UnSetBit(SR0_HD, ref Status0); + + if (!ActiveDrive.FLAG_READY) + { + // no disk, no tracks or motor is not on + // it is at this point the +3 detects whether a disk is present + // if not (and after another readid and SIS) it will eventually proceed to loading from tape + SetBit(SR0_IC0, ref Status0); + SetBit(SR0_NR, ref Status0); + + // setup the result buffer + ResBuffer[RS_ST0] = Status0; + for (int i = 1; i < 7; i++) + ResBuffer[i] = 0; + + // move to result phase + ActivePhase = Phase.Result; + break; + } + + var track = ActiveDrive.Disk.DiskTracks.Where(a => a.TrackNumber == ActiveDrive.CurrentTrackID).FirstOrDefault(); + + if (track != null && track.NumberOfSectors > 0 && track.TrackNumber != 0xff) + { + // formatted track + + // is the index out of bounds? + if (ActiveDrive.SectorIndex >= track.NumberOfSectors) + { + // reset the index + ActiveDrive.SectorIndex = 0; + } + + if (ActiveDrive.SectorIndex == 0 && ActiveDrive.Disk.DiskTracks[ActiveDrive.CurrentTrackID].Sectors.Length > 1) + { + // looks like readid always skips the first sector on a track + ActiveDrive.SectorIndex++; + } + + // read the sector data + var data = track.Sectors[ActiveDrive.SectorIndex]; //.GetCHRN(); + ResBuffer[RS_C] = data.TrackNumber; + ResBuffer[RS_H] = data.SideNumber; + ResBuffer[RS_R] = data.SectorID; + ResBuffer[RS_N] = data.SectorSize; + + ResBuffer[RS_ST0] = Status0; + + // check for DAM & CRC + //if (data.Status2.Bit(SR2_CM)) + //SetBit(SR2_CM, ref ResBuffer[RS_ST2]); + + + // increment the current sector + ActiveDrive.SectorIndex++; + + // is the index out of bounds? + if (ActiveDrive.SectorIndex >= track.NumberOfSectors) + { + // reset the index + ActiveDrive.SectorIndex = 0; + } + } + else + { + // unformatted track? + CommitResultCHRN(); + + SetBit(SR0_IC0, ref Status0); + ResBuffer[RS_ST0] = Status0; + ResBuffer[RS_ST1] = 0x01; + } + + ActivePhase = Phase.Result; + } + + break; + + //---------------------------------------- + // FDC in execution phase reading/writing bytes + //---------------------------------------- + case Phase.Execution: + break; + + //---------------------------------------- + // Result bytes being sent to CPU + //---------------------------------------- + case Phase.Result: + break; + } + } + + #endregion + + #region WRITE Commands + + /// + /// Write Data + /// COMMAND: 8 parameter bytes + /// EXECUTION: Data transfer between FDC and FDD + /// RESULT: 7 result bytes + /// + private void UPD_WriteData() + { + switch (ActivePhase) + { + //---------------------------------------- + // FDC is waiting for a command byte + //---------------------------------------- + case Phase.Idle: + break; + + //---------------------------------------- + // Receiving command parameter bytes + //---------------------------------------- + case Phase.Command: + + // store the parameter in the command buffer + CommBuffer[CommCounter] = LastByteReceived; + + // process parameter byte + ParseParamByteStandard(CommCounter); + + // increment command parameter counter + CommCounter++; + + // was that the last parameter byte? + if (CommCounter == ActiveCommand.ParameterByteCount) + { + // all parameter bytes received - setup for execution phase + + // clear exec buffer and status registers + ClearExecBuffer(); + Status0 = 0; + Status1 = 0; + Status2 = 0; + Status3 = 0; + + // temp sector index + byte secIdx = ActiveCommandParams.Sector; + + // hack for when another drive (non-existent) is being called + if (ActiveDrive.ID != 0) + DiskDriveIndex = 0; + + // do we have a valid disk inserted? + if (!ActiveDrive.FLAG_READY) + { + // no disk, no tracks or motor is not on + SetBit(SR0_IC0, ref Status0); + SetBit(SR0_NR, ref Status0); + + CommitResultCHRN(); + CommitResultStatus(); + //ResBuffer[RS_ST0] = Status0; + + // move to result phase + ActivePhase = Phase.Result; + break; + } + + // check write protect tab + if (ActiveDrive.FLAG_WRITEPROTECT) + { + SetBit(SR0_IC0, ref Status0); + SetBit(SR1_NW, ref Status1); + + CommitResultCHRN(); + CommitResultStatus(); + //ResBuffer[RS_ST0] = Status0; + + // move to result phase + ActivePhase = Phase.Result; + break; + } + else + { + + // calculate the number of bytes to write + int byteCounter = 0; + byte startSecID = ActiveCommandParams.Sector; + byte endSecID = ActiveCommandParams.EOT; + bool lastSec = false; + + // get the first sector + var track = ActiveDrive.Disk.DiskTracks[ActiveCommandParams.Cylinder]; + //int secIndex = 0; + for (int s = 0; s < track.Sectors.Length; s++) + { + if (track.Sectors[s].SectorID == endSecID) + lastSec = true; + + for (int i = 0; i < 0x80 << ActiveCommandParams.SectorSize; i++) + { + byteCounter++; + + if (i == (0x80 << ActiveCommandParams.SectorSize) - 1 && lastSec) + { + break; + } + } + + if (lastSec) + break; + } + + ExecCounter = byteCounter; + ExecLength = byteCounter; + ActivePhase = Phase.Execution; + DriveLight = true; + break; + } + } + + break; + + //---------------------------------------- + // FDC in execution phase reading/writing bytes + //---------------------------------------- + case Phase.Execution: + + var index = ExecLength - ExecCounter; + + ExecBuffer[index] = LastSectorDataWriteByte; + + OverrunCounter--; + ExecCounter--; + + if (ExecCounter <= 0) + { + int cnt = 0; + + // all data received + byte startSecID = ActiveCommandParams.Sector; + byte endSecID = ActiveCommandParams.EOT; + bool lastSec = false; + var track = ActiveDrive.Disk.DiskTracks[ActiveCommandParams.Cylinder]; + //int secIndex = 0; + + for (int s = 0; s < track.Sectors.Length; s++) + { + if (cnt == ExecLength) + break; + + ActiveCommandParams.Sector = track.Sectors[s].SectorID; + + if (track.Sectors[s].SectorID == endSecID) + lastSec = true; + + int size = 0x80 << track.Sectors[s].SectorSize; + + for (int d = 0; d < size; d++) + { + track.Sectors[s].SectorData[d] = ExecBuffer[cnt++]; + } + + if (lastSec) + break; + } + + SetBit(SR0_IC0, ref Status0); + SetBit(SR1_EN, ref Status1); + + CommitResultCHRN(); + CommitResultStatus(); + } + + break; + + //---------------------------------------- + // Result bytes being sent to CPU + //---------------------------------------- + case Phase.Result: + break; + } + } + + /// + /// Write ID (format write) + /// COMMAND: 5 parameter bytes + /// EXECUTION: Entire track is formatted + /// RESULT: 7 result bytes + /// + private void UPD_WriteID() + { + switch (ActivePhase) + { + //---------------------------------------- + // FDC is waiting for a command byte + //---------------------------------------- + case Phase.Idle: + break; + + //---------------------------------------- + // Receiving command parameter bytes + //---------------------------------------- + case Phase.Command: + + // store the parameter in the command buffer + CommBuffer[CommCounter] = LastByteReceived; + + // process parameter byte + ParseParamByteStandard(CommCounter); + + // increment command parameter counter + CommCounter++; + + // was that the last parameter byte? + if (CommCounter == ActiveCommand.ParameterByteCount) + { + // all parameter bytes received - setup for execution phase + DriveLight = true; + + // clear exec buffer and status registers + ClearExecBuffer(); + Status0 = 0; + Status1 = 0; + Status2 = 0; + Status3 = 0; + + // temp sector index + byte secIdx = ActiveCommandParams.Sector; + + // hack for when another drive (non-existent) is being called + if (ActiveDrive.ID != 0) + DiskDriveIndex = 0; + + // do we have a valid disk inserted? + if (!ActiveDrive.FLAG_READY) + { + // no disk, no tracks or motor is not on + SetBit(SR0_IC0, ref Status0); + SetBit(SR0_NR, ref Status0); + + CommitResultCHRN(); + CommitResultStatus(); + //ResBuffer[RS_ST0] = Status0; + + // move to result phase + ActivePhase = Phase.Result; + break; + } + + // check write protect tab + if (ActiveDrive.FLAG_WRITEPROTECT) + { + SetBit(SR0_IC0, ref Status0); + SetBit(SR1_NW, ref Status1); + + CommitResultCHRN(); + CommitResultStatus(); + //ResBuffer[RS_ST0] = Status0; + + // move to result phase + ActivePhase = Phase.Result; + break; + } + else + { + // not implemented yet + SetBit(SR0_IC0, ref Status0); + SetBit(SR1_NW, ref Status1); + + CommitResultCHRN(); + CommitResultStatus(); + //ResBuffer[RS_ST0] = Status0; + + // move to result phase + ActivePhase = Phase.Result; + break; + } + } + + break; + + //---------------------------------------- + // FDC in execution phase reading/writing bytes + //---------------------------------------- + case Phase.Execution: + break; + + //---------------------------------------- + // Result bytes being sent to CPU + //---------------------------------------- + case Phase.Result: + break; + } + } + + /// + /// Write Deleted Data + /// COMMAND: 8 parameter bytes + /// EXECUTION: Data transfer between FDC and FDD + /// RESULT: 7 result bytes + /// + private void UPD_WriteDeletedData() + { + switch (ActivePhase) + { + //---------------------------------------- + // FDC is waiting for a command byte + //---------------------------------------- + case Phase.Idle: + break; + + //---------------------------------------- + // Receiving command parameter bytes + //---------------------------------------- + case Phase.Command: + + // store the parameter in the command buffer + CommBuffer[CommCounter] = LastByteReceived; + + // process parameter byte + ParseParamByteStandard(CommCounter); + + // increment command parameter counter + CommCounter++; + + // was that the last parameter byte? + if (CommCounter == ActiveCommand.ParameterByteCount) + { + // all parameter bytes received - setup for execution phase + + // clear exec buffer and status registers + ClearExecBuffer(); + Status0 = 0; + Status1 = 0; + Status2 = 0; + Status3 = 0; + + // temp sector index + byte secIdx = ActiveCommandParams.Sector; + + // hack for when another drive (non-existent) is being called + if (ActiveDrive.ID != 0) + DiskDriveIndex = 0; + + // do we have a valid disk inserted? + if (!ActiveDrive.FLAG_READY) + { + // no disk, no tracks or motor is not on + SetBit(SR0_IC0, ref Status0); + SetBit(SR0_NR, ref Status0); + + CommitResultCHRN(); + CommitResultStatus(); + //ResBuffer[RS_ST0] = Status0; + + // move to result phase + ActivePhase = Phase.Result; + break; + } + + // check write protect tab + if (ActiveDrive.FLAG_WRITEPROTECT) + { + SetBit(SR0_IC0, ref Status0); + SetBit(SR1_NW, ref Status1); + + CommitResultCHRN(); + CommitResultStatus(); + //ResBuffer[RS_ST0] = Status0; + + // move to result phase + ActivePhase = Phase.Result; + break; + } + else + { + + // calculate the number of bytes to write + int byteCounter = 0; + byte startSecID = ActiveCommandParams.Sector; + byte endSecID = ActiveCommandParams.EOT; + bool lastSec = false; + + // get the first sector + var track = ActiveDrive.Disk.DiskTracks[ActiveCommandParams.Cylinder]; + //int secIndex = 0; + for (int s = 0; s < track.Sectors.Length; s++) + { + if (track.Sectors[s].SectorID == endSecID) + lastSec = true; + + for (int i = 0; i < 0x80 << ActiveCommandParams.SectorSize; i++) + { + byteCounter++; + + if (i == (0x80 << ActiveCommandParams.SectorSize) - 1 && lastSec) + { + break; + } + } + + if (lastSec) + break; + } + + ExecCounter = byteCounter; + ExecLength = byteCounter; + ActivePhase = Phase.Execution; + DriveLight = true; + break; + } + } + + break; + + //---------------------------------------- + // FDC in execution phase reading/writing bytes + //---------------------------------------- + case Phase.Execution: + + var index = ExecLength - ExecCounter; + + ExecBuffer[index] = LastSectorDataWriteByte; + + OverrunCounter--; + ExecCounter--; + + if (ExecCounter <= 0) + { + int cnt = 0; + + // all data received + byte startSecID = ActiveCommandParams.Sector; + byte endSecID = ActiveCommandParams.EOT; + bool lastSec = false; + var track = ActiveDrive.Disk.DiskTracks[ActiveCommandParams.Cylinder]; + //int secIndex = 0; + + for (int s = 0; s < track.Sectors.Length; s++) + { + if (cnt == ExecLength) + break; + + ActiveCommandParams.Sector = track.Sectors[s].SectorID; + + if (track.Sectors[s].SectorID == endSecID) + lastSec = true; + + int size = 0x80 << track.Sectors[s].SectorSize; + + for (int d = 0; d < size; d++) + { + track.Sectors[s].SectorData[d] = ExecBuffer[cnt++]; + } + + if (lastSec) + break; + } + + SetBit(SR0_IC0, ref Status0); + SetBit(SR1_EN, ref Status1); + + CommitResultCHRN(); + CommitResultStatus(); + } + + break; + + //---------------------------------------- + // Result bytes being sent to CPU + //---------------------------------------- + case Phase.Result: + break; + } + } + + #endregion + + #region SCAN Commands + + /// + /// Scan Equal + /// COMMAND: 8 parameter bytes + /// EXECUTION: Data compared between the FDD and FDC + /// RESULT: 7 result bytes + /// + private void UPD_ScanEqual() + { + switch (ActivePhase) + { + //---------------------------------------- + // FDC is waiting for a command byte + //---------------------------------------- + case Phase.Idle: + break; + + //---------------------------------------- + // Receiving command parameter bytes + //---------------------------------------- + case Phase.Command: + break; + + //---------------------------------------- + // FDC in execution phase reading/writing bytes + //---------------------------------------- + case Phase.Execution: + break; + + //---------------------------------------- + // Result bytes being sent to CPU + //---------------------------------------- + case Phase.Result: + break; + } + } + + /// + /// Scan Low or Equal + /// COMMAND: 8 parameter bytes + /// EXECUTION: Data compared between the FDD and FDC + /// RESULT: 7 result bytes + /// + private void UPD_ScanLowOrEqual() + { + switch (ActivePhase) + { + //---------------------------------------- + // FDC is waiting for a command byte + //---------------------------------------- + case Phase.Idle: + break; + + //---------------------------------------- + // Receiving command parameter bytes + //---------------------------------------- + case Phase.Command: + break; + + //---------------------------------------- + // FDC in execution phase reading/writing bytes + //---------------------------------------- + case Phase.Execution: + break; + + //---------------------------------------- + // Result bytes being sent to CPU + //---------------------------------------- + case Phase.Result: + break; + } + } + + /// + /// Scan High or Equal + /// COMMAND: 8 parameter bytes + /// EXECUTION: Data compared between the FDD and FDC + /// RESULT: 7 result bytes + /// + private void UPD_ScanHighOrEqual() + { + switch (ActivePhase) + { + //---------------------------------------- + // FDC is waiting for a command byte + //---------------------------------------- + case Phase.Idle: + break; + + //---------------------------------------- + // Receiving command parameter bytes + //---------------------------------------- + case Phase.Command: + break; + + //---------------------------------------- + // FDC in execution phase reading/writing bytes + //---------------------------------------- + case Phase.Execution: + break; + + //---------------------------------------- + // Result bytes being sent to CPU + //---------------------------------------- + case Phase.Result: + break; + } + } + + #endregion + + #region OTHER Commands + + /// + /// Specify + /// COMMAND: 2 parameter bytes + /// EXECUTION: NO execution phase + /// RESULT: NO result phase + /// + /// Looks like specify command returns status 0x80 throughout its lifecycle + /// so CB is NOT set + /// + private void UPD_Specify() + { + switch (ActivePhase) + { + //---------------------------------------- + // FDC is waiting for a command byte + //---------------------------------------- + case Phase.Idle: + break; + + //---------------------------------------- + // Receiving command parameter bytes + //---------------------------------------- + case Phase.Command: + + // store the parameter in the command buffer + CommBuffer[CommCounter] = LastByteReceived; + + // process parameter byte + byte currByte = CommBuffer[CommCounter]; + BitArray bi = new BitArray(new byte[] { currByte }); + + switch (CommCounter) + { + // SRT & HUT + case 0: + SRT = 16 - (currByte >> 4) & 0x0f; + HUT = (currByte & 0x0f) << 4; + if (HUT == 0) + { + HUT = 255; + } + break; + // HLT & ND + case 1: + if (bi[0]) + ND = true; + else + ND = false; + + HLT = currByte & 0xfe; + if (HLT == 0) + { + HLT = 255; + } + break; + } + + // increment command parameter counter + CommCounter++; + + // was that the last parameter byte? + if (CommCounter == ActiveCommand.ParameterByteCount) + { + // all parameter bytes received + ActivePhase = Phase.Idle; + } + + break; + + //---------------------------------------- + // FDC in execution phase reading/writing bytes + //---------------------------------------- + case Phase.Execution: + break; + + //---------------------------------------- + // Result bytes being sent to CPU + //---------------------------------------- + case Phase.Result: + break; + } + } + + /// + /// Seek + /// COMMAND: 2 parameter bytes + /// EXECUTION: Head is positioned over proper cylinder on disk + /// RESULT: NO result phase + /// + private void UPD_Seek() + { + switch (ActivePhase) + { + //---------------------------------------- + // FDC is waiting for a command byte + //---------------------------------------- + case Phase.Idle: + break; + + //---------------------------------------- + // Receiving command parameter bytes + //---------------------------------------- + case Phase.Command: + // store the parameter in the command buffer + CommBuffer[CommCounter] = LastByteReceived; + + // process parameter byte + byte currByte = CommBuffer[CommCounter]; + switch (CommCounter) + { + case 0: + ParseParamByteStandard(CommCounter); + break; + case 1: + ActiveDrive.SeekingTrack = currByte; + break; + } + + // increment command parameter counter + CommCounter++; + + // was that the last parameter byte? + if (CommCounter == ActiveCommand.ParameterByteCount) + { + // all parameter bytes received + DriveLight = true; + ActivePhase = Phase.Execution; + ActiveCommand.CommandDelegate(); + } + break; + + //---------------------------------------- + // FDC in execution phase reading/writing bytes + //---------------------------------------- + case Phase.Execution: + // set seek flag + ActiveDrive.SeekStatus = SEEK_SEEK; + + if (ActiveDrive.CurrentTrackID == CommBuffer[CM_C]) + { + // we are already on the correct track + ActiveDrive.SectorIndex = 0; + } + else + { + // immediate seek + ActiveDrive.CurrentTrackID = CommBuffer[CM_C]; + + ActiveDrive.SectorIndex = 0; + + if (ActiveDrive.Disk.DiskTracks[ActiveDrive.CurrentTrackID].Sectors.Length > 1) + { + // always read the first sector + //ActiveDrive.SectorIndex++; + } + } + + // skip execution mode and go directly to idle + // result is determined by SIS command + ActivePhase = Phase.Idle; + break; + + //---------------------------------------- + // Result bytes being sent to CPU + //---------------------------------------- + case Phase.Result: + break; + } + } + + /// + /// Recalibrate (seek track 0) + /// COMMAND: 1 parameter byte + /// EXECUTION: Head retracted to track 0 + /// RESULT: NO result phase + /// + private void UPD_Recalibrate() + { + switch (ActivePhase) + { + //---------------------------------------- + // FDC is waiting for a command byte + //---------------------------------------- + case Phase.Idle: + break; + + //---------------------------------------- + // Receiving command parameter bytes + //---------------------------------------- + case Phase.Command: + // store the parameter in the command buffer + CommBuffer[CommCounter] = LastByteReceived; + + // process parameter byte + ParseParamByteStandard(CommCounter); + + // increment command parameter counter + CommCounter++; + + // was that the last parameter byte? + if (CommCounter == ActiveCommand.ParameterByteCount) + { + // all parameter bytes received + DriveLight = true; + ActivePhase = Phase.Execution; + ActiveCommand.CommandDelegate(); + } + break; + + //---------------------------------------- + // FDC in execution phase reading/writing bytes + //---------------------------------------- + case Phase.Execution: + + // immediate recalibration + ActiveDrive.TrackIndex = 0; + ActiveDrive.SectorIndex = 0; + + // recalibrate appears to always skip the first sector + //if (ActiveDrive.Disk.DiskTracks[ActiveDrive.TrackIndex].Sectors.Length > 1) + //ActiveDrive.SectorIndex++; + + // set seek flag + ActiveDrive.SeekStatus = SEEK_RECALIBRATE; + + // skip execution mode and go directly to idle + // result is determined by SIS command + ActivePhase = Phase.Idle; + break; + + //---------------------------------------- + // Result bytes being sent to CPU + //---------------------------------------- + case Phase.Result: + break; + } + } + + /// + /// Sense Interrupt Status + /// COMMAND: NO parameter bytes + /// EXECUTION: NO execution phase + /// RESULT: 2 result bytes + /// + private void UPD_SenseInterruptStatus() + { + switch (ActivePhase) + { + //---------------------------------------- + // FDC is waiting for a command byte + //---------------------------------------- + case Phase.Idle: + break; + + //---------------------------------------- + // Receiving command parameter bytes + //---------------------------------------- + case Phase.Command: + break; + + //---------------------------------------- + // FDC in execution phase reading/writing bytes + //---------------------------------------- + case Phase.Execution: + // SIS should return 2 bytes if sucessfully sensed an interrupt + // 1 byte otherwise + + // it seems like the +3 ROM makes 3 SIS calls for each seek/recalibrate call for some reason + // possibly one for each drive??? + // 1 - the interrupt is acknowleged with ST0 = 32 and track number + // 2 - second sis returns 1 ST0 byte with 192 + // 3 - third SIS call returns standard 1 byte 0x80 (unknown cmd or SIS with no interrupt occured) + // for now I will assume that the first call is aimed at DriveA, the second at DriveB (which we are NOT implementing) + + // check active drive first + if (ActiveDrive.SeekStatus == SEEK_RECALIBRATE || + ActiveDrive.SeekStatus == SEEK_SEEK) + { + // interrupt has been raised for this drive + // acknowledge + ActiveDrive.SeekStatus = SEEK_IDLE;// SEEK_INTACKNOWLEDGED; + + // result length 2 + ResLength = 2; + + // first byte ST0 0x20 + Status0 = 0x20; + ResBuffer[0] = Status0; + // second byte is the current track id + ResBuffer[1] = ActiveDrive.CurrentTrackID; + } + /* else if (ActiveDrive.SeekStatus == SEEK_INTACKNOWLEDGED) { // DriveA interrupt has already been acknowledged @@ -2177,401 +2177,401 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC ResBuffer[0] = Status0; } */ - else if (ActiveDrive.SeekStatus == SEEK_IDLE) - { - // SIS with no interrupt - ResLength = 1; - Status0 = 0x80; - ResBuffer[0] = Status0; - } + else if (ActiveDrive.SeekStatus == SEEK_IDLE) + { + // SIS with no interrupt + ResLength = 1; + Status0 = 0x80; + ResBuffer[0] = Status0; + } - ActivePhase = Phase.Result; + ActivePhase = Phase.Result; - break; + break; - //---------------------------------------- - // Result bytes being sent to CPU - //---------------------------------------- - case Phase.Result: - break; - } - } + //---------------------------------------- + // Result bytes being sent to CPU + //---------------------------------------- + case Phase.Result: + break; + } + } - /// - /// Sense Drive Status - /// COMMAND: 1 parameter byte - /// EXECUTION: NO execution phase - /// RESULT: 1 result byte - /// - /// The ZX spectrum appears to only specify drive 1 as the parameter byte, NOT drive 0 - /// After the final param byte is received main status changes to 0xd0 - /// Data register (ST3) result is 0x51 if drive/disk not available - /// 0x71 if disk is present in 2nd drive - /// - private void UPD_SenseDriveStatus() - { - switch (ActivePhase) - { - //---------------------------------------- - // FDC is waiting for a command byte - //---------------------------------------- - case Phase.Idle: - break; + /// + /// Sense Drive Status + /// COMMAND: 1 parameter byte + /// EXECUTION: NO execution phase + /// RESULT: 1 result byte + /// + /// The ZX spectrum appears to only specify drive 1 as the parameter byte, NOT drive 0 + /// After the final param byte is received main status changes to 0xd0 + /// Data register (ST3) result is 0x51 if drive/disk not available + /// 0x71 if disk is present in 2nd drive + /// + private void UPD_SenseDriveStatus() + { + switch (ActivePhase) + { + //---------------------------------------- + // FDC is waiting for a command byte + //---------------------------------------- + case Phase.Idle: + break; - //---------------------------------------- - // Receiving command parameter bytes - //---------------------------------------- - case Phase.Command: - // store the parameter in the command buffer - CommBuffer[CommCounter] = LastByteReceived; + //---------------------------------------- + // Receiving command parameter bytes + //---------------------------------------- + case Phase.Command: + // store the parameter in the command buffer + CommBuffer[CommCounter] = LastByteReceived; - // process parameter byte - ParseParamByteStandard(CommCounter); + // process parameter byte + ParseParamByteStandard(CommCounter); - // increment command parameter counter - CommCounter++; + // increment command parameter counter + CommCounter++; - // was that the last parameter byte? - if (CommCounter == ActiveCommand.ParameterByteCount) - { - // all parameter bytes received - ActivePhase = Phase.Execution; - UPD_SenseDriveStatus(); - } - break; + // was that the last parameter byte? + if (CommCounter == ActiveCommand.ParameterByteCount) + { + // all parameter bytes received + ActivePhase = Phase.Execution; + UPD_SenseDriveStatus(); + } + break; - //---------------------------------------- - // FDC in execution phase reading/writing bytes - //---------------------------------------- - case Phase.Execution: - // one ST3 byte required + //---------------------------------------- + // FDC in execution phase reading/writing bytes + //---------------------------------------- + case Phase.Execution: + // one ST3 byte required - // set US - Status3 = (byte)ActiveDrive.ID; + // set US + Status3 = (byte)ActiveDrive.ID; - if (Status3 != 0) - { - // we only support 1 drive - SetBit(SR3_FT, ref Status3); - } - else - { - // HD - only one side - UnSetBit(SR3_HD, ref Status3); + if (Status3 != 0) + { + // we only support 1 drive + SetBit(SR3_FT, ref Status3); + } + else + { + // HD - only one side + UnSetBit(SR3_HD, ref Status3); - // write protect - if (ActiveDrive.FLAG_WRITEPROTECT) - SetBit(SR3_WP, ref Status3); + // write protect + if (ActiveDrive.FLAG_WRITEPROTECT) + SetBit(SR3_WP, ref Status3); - // track 0 - if (ActiveDrive.FLAG_TRACK0) - SetBit(SR3_T0, ref Status3); + // track 0 + if (ActiveDrive.FLAG_TRACK0) + SetBit(SR3_T0, ref Status3); - // rdy - if (ActiveDrive.Disk != null) - SetBit(SR3_RY, ref Status3); - } + // rdy + if (ActiveDrive.Disk != null) + SetBit(SR3_RY, ref Status3); + } - ResBuffer[0] = Status3; - ActivePhase = Phase.Result; - - break; + ResBuffer[0] = Status3; + ActivePhase = Phase.Result; - //---------------------------------------- - // Result bytes being sent to CPU - //---------------------------------------- - case Phase.Result: - break; - } - } + break; - /// - /// Version - /// COMMAND: NO parameter bytes - /// EXECUTION: NO execution phase - /// RESULT: 1 result byte - /// - private void UPD_Version() - { - switch (ActivePhase) - { - case Phase.Idle: - case Phase.Command: - case Phase.Execution: - case Phase.Result: - UPD_Invalid(); - break; - } - } + //---------------------------------------- + // Result bytes being sent to CPU + //---------------------------------------- + case Phase.Result: + break; + } + } - /// - /// Invalid - /// COMMAND: NO parameter bytes - /// EXECUTION: NO execution phase - /// RESULT: 1 result byte - /// - private void UPD_Invalid() - { - switch (ActivePhase) - { - //---------------------------------------- - // FDC is waiting for a command byte - //---------------------------------------- - case Phase.Idle: - break; + /// + /// Version + /// COMMAND: NO parameter bytes + /// EXECUTION: NO execution phase + /// RESULT: 1 result byte + /// + private void UPD_Version() + { + switch (ActivePhase) + { + case Phase.Idle: + case Phase.Command: + case Phase.Execution: + case Phase.Result: + UPD_Invalid(); + break; + } + } - //---------------------------------------- - // Receiving command parameter bytes - //---------------------------------------- - case Phase.Command: - break; + /// + /// Invalid + /// COMMAND: NO parameter bytes + /// EXECUTION: NO execution phase + /// RESULT: 1 result byte + /// + private void UPD_Invalid() + { + switch (ActivePhase) + { + //---------------------------------------- + // FDC is waiting for a command byte + //---------------------------------------- + case Phase.Idle: + break; - //---------------------------------------- - // FDC in execution phase reading/writing bytes - //---------------------------------------- - case Phase.Execution: - // no execution phase - ActivePhase = Phase.Result; - UPD_Invalid(); - break; + //---------------------------------------- + // Receiving command parameter bytes + //---------------------------------------- + case Phase.Command: + break; - //---------------------------------------- - // Result bytes being sent to CPU - //---------------------------------------- - case Phase.Result: - ResBuffer[0] = 0x80; - break; - } - } + //---------------------------------------- + // FDC in execution phase reading/writing bytes + //---------------------------------------- + case Phase.Execution: + // no execution phase + ActivePhase = Phase.Result; + UPD_Invalid(); + break; - #endregion + //---------------------------------------- + // Result bytes being sent to CPU + //---------------------------------------- + case Phase.Result: + ResBuffer[0] = 0x80; + break; + } + } - #endregion + #endregion - #region Controller Methods + #endregion - /// - /// Called when a status register read is required - /// This can be called at any time - /// The main status register appears to be queried nearly all the time - /// so needs to be kept updated. It keeps the CPU informed of the current state - /// - private byte ReadMainStatus() - { - SetBit(MSR_RQM, ref StatusMain); + #region Controller Methods - switch (ActivePhase) - { - case Phase.Idle: - UnSetBit(MSR_DIO, ref StatusMain); - UnSetBit(MSR_CB, ref StatusMain); - UnSetBit(MSR_EXM, ref StatusMain); - break; - case Phase.Command: - UnSetBit(MSR_DIO, ref StatusMain); - SetBit(MSR_CB, ref StatusMain); - UnSetBit(MSR_EXM, ref StatusMain); - break; - case Phase.Execution: - if (ActiveCommand.Direction == CommandDirection.OUT) - SetBit(MSR_DIO, ref StatusMain); - else - UnSetBit(MSR_DIO, ref StatusMain); + /// + /// Called when a status register read is required + /// This can be called at any time + /// The main status register appears to be queried nearly all the time + /// so needs to be kept updated. It keeps the CPU informed of the current state + /// + private byte ReadMainStatus() + { + SetBit(MSR_RQM, ref StatusMain); - SetBit(MSR_EXM, ref StatusMain); - SetBit(MSR_CB, ref StatusMain); + switch (ActivePhase) + { + case Phase.Idle: + UnSetBit(MSR_DIO, ref StatusMain); + UnSetBit(MSR_CB, ref StatusMain); + UnSetBit(MSR_EXM, ref StatusMain); + break; + case Phase.Command: + UnSetBit(MSR_DIO, ref StatusMain); + SetBit(MSR_CB, ref StatusMain); + UnSetBit(MSR_EXM, ref StatusMain); + break; + case Phase.Execution: + if (ActiveCommand.Direction == CommandDirection.OUT) + SetBit(MSR_DIO, ref StatusMain); + else + UnSetBit(MSR_DIO, ref StatusMain); - // overrun detection - OverrunCounter++; - if (OverrunCounter >= 64) - { - // CPU has read the status register 64 times without reading the data register - // switch the current command into result phase - ActivePhase = Phase.Result; + SetBit(MSR_EXM, ref StatusMain); + SetBit(MSR_CB, ref StatusMain); - // reset the overun counter - OverrunCounter = 0; - } + // overrun detection + OverrunCounter++; + if (OverrunCounter >= 64) + { + // CPU has read the status register 64 times without reading the data register + // switch the current command into result phase + ActivePhase = Phase.Result; - break; - case Phase.Result: - SetBit(MSR_DIO, ref StatusMain); - SetBit(MSR_CB, ref StatusMain); - UnSetBit(MSR_EXM, ref StatusMain); - break; - } + // reset the overun counter + OverrunCounter = 0; + } - return StatusMain; - } + break; + case Phase.Result: + SetBit(MSR_DIO, ref StatusMain); + SetBit(MSR_CB, ref StatusMain); + UnSetBit(MSR_EXM, ref StatusMain); + break; + } - /// - /// Handles CPU reading from the data register - /// - private byte ReadDataRegister() - { - // default return value - byte res = 0xff; + return StatusMain; + } - // check RQM flag status - if (!GetBit(MSR_RQM, StatusMain)) - { - // FDC is not ready to return data - return res; - } + /// + /// Handles CPU reading from the data register + /// + private byte ReadDataRegister() + { + // default return value + byte res = 0xff; - // check active direction - if (!GetBit(MSR_DIO, StatusMain)) - { - // FDC is expecting to receive, not send data - return res; - } + // check RQM flag status + if (!GetBit(MSR_RQM, StatusMain)) + { + // FDC is not ready to return data + return res; + } - switch (ActivePhase) - { - case Phase.Execution: - // reset overrun counter - OverrunCounter = 0; + // check active direction + if (!GetBit(MSR_DIO, StatusMain)) + { + // FDC is expecting to receive, not send data + return res; + } - // execute read - ActiveCommand.CommandDelegate(); + switch (ActivePhase) + { + case Phase.Execution: + // reset overrun counter + OverrunCounter = 0; - res = LastSectorDataReadByte; + // execute read + ActiveCommand.CommandDelegate(); - if (ExecCounter <= 0) - { - // end of execution phase - ActivePhase = Phase.Result; - } + res = LastSectorDataReadByte; - return res; - - case Phase.Result: + if (ExecCounter <= 0) + { + // end of execution phase + ActivePhase = Phase.Result; + } - DriveLight = false; + return res; - ActiveCommand.CommandDelegate(); + case Phase.Result: - // result byte reading - res = ResBuffer[ResCounter]; + DriveLight = false; - // increment result counter - ResCounter++; + ActiveCommand.CommandDelegate(); - if (ResCounter >= ResLength) - { - ActivePhase = Phase.Idle; - } + // result byte reading + res = ResBuffer[ResCounter]; - break; - } + // increment result counter + ResCounter++; - return res; - } + if (ResCounter >= ResLength) + { + ActivePhase = Phase.Idle; + } - /// - /// Handles CPU writing to the data register - /// - private void WriteDataRegister(byte data) - { - if (!GetBit(MSR_RQM, StatusMain) || GetBit(MSR_DIO, StatusMain)) - { - // FDC will not receive and process any bytes - return; - } + break; + } - // store the incoming byte - LastByteReceived = data; + return res; + } - // process incoming bytes - switch (ActivePhase) - { - //// controller is idle awaiting the first command byte of a new instruction - case Phase.Idle: - ParseCommandByte(data); - break; - //// we are in command phase - case Phase.Command: - // attempt to process this parameter byte - //ProcessCommand(data); - ActiveCommand.CommandDelegate(); - break; - //// we are in execution phase - case Phase.Execution: - // CPU is going to be sending data bytes to the FDC to be written to disk - - // store the byte - LastSectorDataWriteByte = data; - ActiveCommand.CommandDelegate(); + /// + /// Handles CPU writing to the data register + /// + private void WriteDataRegister(byte data) + { + if (!GetBit(MSR_RQM, StatusMain) || GetBit(MSR_DIO, StatusMain)) + { + // FDC will not receive and process any bytes + return; + } - if (ExecCounter <= 0) - { - // end of execution phase - ActivePhase = Phase.Result; - } + // store the incoming byte + LastByteReceived = data; - break; - //// result phase - case Phase.Result: - // data register will not receive bytes during result phase - break; - } - } + // process incoming bytes + switch (ActivePhase) + { + //// controller is idle awaiting the first command byte of a new instruction + case Phase.Idle: + ParseCommandByte(data); + break; + //// we are in command phase + case Phase.Command: + // attempt to process this parameter byte + //ProcessCommand(data); + ActiveCommand.CommandDelegate(); + break; + //// we are in execution phase + case Phase.Execution: + // CPU is going to be sending data bytes to the FDC to be written to disk - /// - /// Processes the first command byte (within a command instruction) - /// Returns TRUE if successful. FALSE if otherwise - /// Called only in idle phase - /// - private bool ParseCommandByte(byte cmdByte) - { - // clear counters - CommCounter = 0; - ResCounter = 0; + // store the byte + LastSectorDataWriteByte = data; + ActiveCommand.CommandDelegate(); - // get the first 4 bytes - byte cByte = (byte)(cmdByte & 0x0f); + if (ExecCounter <= 0) + { + // end of execution phase + ActivePhase = Phase.Result; + } - // get MT, MD and SK states - CMD_FLAG_MT = cmdByte.Bit(7); - CMD_FLAG_MF = cmdByte.Bit(6); - CMD_FLAG_SK = cmdByte.Bit(5); + break; + //// result phase + case Phase.Result: + // data register will not receive bytes during result phase + break; + } + } - cmdByte = cByte; + /// + /// Processes the first command byte (within a command instruction) + /// Returns TRUE if successful. FALSE if otherwise + /// Called only in idle phase + /// + private bool ParseCommandByte(byte cmdByte) + { + // clear counters + CommCounter = 0; + ResCounter = 0; - // lookup the command - var cmd = CommandList.Where(a => a.CommandCode == cmdByte).FirstOrDefault(); + // get the first 4 bytes + byte cByte = (byte)(cmdByte & 0x0f); - if (cmd == null) - { - // no command found - use invalid - CMDIndex = CommandList.Count() - 1; - } - else - { - // valid command found - CMDIndex = CommandList.FindIndex(a => a.CommandCode == cmdByte); + // get MT, MD and SK states + CMD_FLAG_MT = cmdByte.Bit(7); + CMD_FLAG_MF = cmdByte.Bit(6); + CMD_FLAG_SK = cmdByte.Bit(5); - // check validity of command byte flags - // if a flag is set but not valid for this command then it is invalid - bool invalid = false; + cmdByte = cByte; - if (!ActiveCommand.MT) - if (CMD_FLAG_MT) - invalid = true; - if (!ActiveCommand.MF) - if (CMD_FLAG_MF) - invalid = true; - if (!ActiveCommand.SK) - if (CMD_FLAG_SK) - invalid = true; + // lookup the command + var cmd = CommandList.Where(a => a.CommandCode == cmdByte).FirstOrDefault(); - if (invalid) - { - // command byte included spurious bit 5,6 or 7 flags - CMDIndex = CommandList.Count() - 1; - } + if (cmd == null) + { + // no command found - use invalid + CMDIndex = CommandList.Count() - 1; + } + else + { + // valid command found + CMDIndex = CommandList.FindIndex(a => a.CommandCode == cmdByte); - /* + // check validity of command byte flags + // if a flag is set but not valid for this command then it is invalid + bool invalid = false; + + if (!ActiveCommand.MT) + if (CMD_FLAG_MT) + invalid = true; + if (!ActiveCommand.MF) + if (CMD_FLAG_MF) + invalid = true; + if (!ActiveCommand.SK) + if (CMD_FLAG_SK) + invalid = true; + + if (invalid) + { + // command byte included spurious bit 5,6 or 7 flags + CMDIndex = CommandList.Count() - 1; + } + + /* if ((CMD_FLAG_MF && !ActiveCommand.MF) || (CMD_FLAG_MT && !ActiveCommand.MT) || (CMD_FLAG_SK && !ActiveCommand.SK)) @@ -2580,16 +2580,16 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC CMDIndex = CommandList.Count() - 1; } */ - } + } - CommCounter = 0; - ResCounter = 0; + CommCounter = 0; + ResCounter = 0; - // there will now be an active command set - // move to command phase - ActivePhase = Phase.Command; + // there will now be an active command set + // move to command phase + ActivePhase = Phase.Command; - /* + /* // check for invalid SIS if (ActiveInterrupt == InterruptState.None && CMDIndex == CC_SENSE_INTSTATUS) { @@ -2598,237 +2598,237 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC } */ - // set reslength - ResLength = ActiveCommand.ResultByteCount; - - // if there are no expected param bytes to receive - go ahead and run the command - if (ActiveCommand.ParameterByteCount == 0) - { - ActivePhase = Phase.Execution; - ActiveCommand.CommandDelegate(); - } + // set reslength + ResLength = ActiveCommand.ResultByteCount; - return true; - } + // if there are no expected param bytes to receive - go ahead and run the command + if (ActiveCommand.ParameterByteCount == 0) + { + ActivePhase = Phase.Execution; + ActiveCommand.CommandDelegate(); + } - /// - /// Parses the first 5 command argument bytes that are of the standard format - /// - private void ParseParamByteStandard(int index) - { - byte currByte = CommBuffer[index]; - BitArray bi = new BitArray(new byte[] { currByte }); + return true; + } - switch (index) - { - // HD & US - case CM_HEAD: - if (bi[2]) - ActiveCommandParams.Side = 1; - else - ActiveCommandParams.Side = 0; + /// + /// Parses the first 5 command argument bytes that are of the standard format + /// + private void ParseParamByteStandard(int index) + { + byte currByte = CommBuffer[index]; + BitArray bi = new BitArray(new byte[] { currByte }); - ActiveCommandParams.UnitSelect = (byte)(GetUnitSelect(currByte)); - DiskDriveIndex = ActiveCommandParams.UnitSelect; - break; - - // C - case CM_C: - ActiveCommandParams.Cylinder = currByte; - break; + switch (index) + { + // HD & US + case CM_HEAD: + if (bi[2]) + ActiveCommandParams.Side = 1; + else + ActiveCommandParams.Side = 0; - // H - case CM_H: - ActiveCommandParams.Head = currByte; - break; + ActiveCommandParams.UnitSelect = (byte)(GetUnitSelect(currByte)); + DiskDriveIndex = ActiveCommandParams.UnitSelect; + break; - // R - case CM_R: - ActiveCommandParams.Sector = currByte; - break; + // C + case CM_C: + ActiveCommandParams.Cylinder = currByte; + break; - // N - case CM_N: - ActiveCommandParams.SectorSize = currByte; - break; + // H + case CM_H: + ActiveCommandParams.Head = currByte; + break; - // EOT - case CM_EOT: - ActiveCommandParams.EOT = currByte; - break; + // R + case CM_R: + ActiveCommandParams.Sector = currByte; + break; - // GPL - case CM_GPL: - ActiveCommandParams.Gap3Length = currByte; - break; + // N + case CM_N: + ActiveCommandParams.SectorSize = currByte; + break; - // DTL - case CM_DTL: - ActiveCommandParams.DTL = currByte; - break; + // EOT + case CM_EOT: + ActiveCommandParams.EOT = currByte; + break; - default: - break; - } - } + // GPL + case CM_GPL: + ActiveCommandParams.Gap3Length = currByte; + break; - /// - /// Clears the result buffer - /// - public void ClearResultBuffer() - { - for (int i = 0; i < ResBuffer.Length; i++) - { - ResBuffer[i] = 0; - } - } + // DTL + case CM_DTL: + ActiveCommandParams.DTL = currByte; + break; - /// - /// Clears the result buffer - /// - public void ClearExecBuffer() - { - for (int i = 0; i < ExecBuffer.Length; i++) - { - ExecBuffer[i] = 0; - } - } + default: + break; + } + } - /// - /// Populates the result status registers - /// - private void CommitResultStatus() - { - // check for read diag - if (ActiveCommand.CommandCode == 0x02) - { - // commit to result buffer - ResBuffer[RS_ST0] = Status0; - ResBuffer[RS_ST1] = Status1; - return; - } + /// + /// Clears the result buffer + /// + public void ClearResultBuffer() + { + for (int i = 0; i < ResBuffer.Length; i++) + { + ResBuffer[i] = 0; + } + } - // check for error bits - if (GetBit(SR1_DE, Status1) || - GetBit(SR1_MA, Status1) || - GetBit(SR1_ND, Status1) || - GetBit(SR1_NW, Status1) || - GetBit(SR1_OR, Status1) || - GetBit(SR2_BC, Status2) || - GetBit(SR2_CM, Status2) || - GetBit(SR2_DD, Status2) || - GetBit(SR2_MD, Status2) || - GetBit(SR2_SN, Status2) || - GetBit(SR2_WC, Status2)) - { - // error bits set - unset end of track - UnSetBit(SR1_EN, ref Status1); - } + /// + /// Clears the result buffer + /// + public void ClearExecBuffer() + { + for (int i = 0; i < ExecBuffer.Length; i++) + { + ExecBuffer[i] = 0; + } + } - // check for data errors - if (GetBit(SR1_DE, Status1) || - GetBit(SR2_DD, Status2)) - { - // unset control mark - UnSetBit(SR2_CM, ref Status2); - } - else if (GetBit(SR2_CM, Status2)) - { - // DAM found - unset IC and US0 - UnSetBit(SR0_IC0, ref Status0); - UnSetBit(SR0_US0, ref Status0); - } + /// + /// Populates the result status registers + /// + private void CommitResultStatus() + { + // check for read diag + if (ActiveCommand.CommandCode == 0x02) + { + // commit to result buffer + ResBuffer[RS_ST0] = Status0; + ResBuffer[RS_ST1] = Status1; + return; + } - // commit to result buffer - ResBuffer[RS_ST0] = Status0; - ResBuffer[RS_ST1] = Status1; - ResBuffer[RS_ST2] = Status2; - - } + // check for error bits + if (GetBit(SR1_DE, Status1) || + GetBit(SR1_MA, Status1) || + GetBit(SR1_ND, Status1) || + GetBit(SR1_NW, Status1) || + GetBit(SR1_OR, Status1) || + GetBit(SR2_BC, Status2) || + GetBit(SR2_CM, Status2) || + GetBit(SR2_DD, Status2) || + GetBit(SR2_MD, Status2) || + GetBit(SR2_SN, Status2) || + GetBit(SR2_WC, Status2)) + { + // error bits set - unset end of track + UnSetBit(SR1_EN, ref Status1); + } - /// - /// Populates the result CHRN values - /// - private void CommitResultCHRN() - { - ResBuffer[RS_C] = ActiveCommandParams.Cylinder; - ResBuffer[RS_H] = ActiveCommandParams.Head; - ResBuffer[RS_R] = ActiveCommandParams.Sector; - ResBuffer[RS_N] = ActiveCommandParams.SectorSize; - } + // check for data errors + if (GetBit(SR1_DE, Status1) || + GetBit(SR2_DD, Status2)) + { + // unset control mark + UnSetBit(SR2_CM, ref Status2); + } + else if (GetBit(SR2_CM, Status2)) + { + // DAM found - unset IC and US0 + UnSetBit(SR0_IC0, ref Status0); + UnSetBit(SR0_US0, ref Status0); + } - /// - /// Moves active phase into idle - /// - public void SetPhase_Idle() - { - ActivePhase = Phase.Idle; + // commit to result buffer + ResBuffer[RS_ST0] = Status0; + ResBuffer[RS_ST1] = Status1; + ResBuffer[RS_ST2] = Status2; - // active direction - UnSetBit(MSR_DIO, ref StatusMain); - // CB - UnSetBit(MSR_CB, ref StatusMain); - // RQM - SetBit(MSR_RQM, ref StatusMain); + } - CommCounter = 0; - ResCounter = 0; - } + /// + /// Populates the result CHRN values + /// + private void CommitResultCHRN() + { + ResBuffer[RS_C] = ActiveCommandParams.Cylinder; + ResBuffer[RS_H] = ActiveCommandParams.Head; + ResBuffer[RS_R] = ActiveCommandParams.Sector; + ResBuffer[RS_N] = ActiveCommandParams.SectorSize; + } - /// - /// Moves to result phase - /// - public void SetPhase_Result() - { - ActivePhase = Phase.Result; + /// + /// Moves active phase into idle + /// + public void SetPhase_Idle() + { + ActivePhase = Phase.Idle; - // active direction - SetBit(MSR_DIO, ref StatusMain); - // CB - SetBit(MSR_CB, ref StatusMain); - // RQM - SetBit(MSR_RQM, ref StatusMain); - // EXM - UnSetBit(MSR_EXM, ref StatusMain); + // active direction + UnSetBit(MSR_DIO, ref StatusMain); + // CB + UnSetBit(MSR_CB, ref StatusMain); + // RQM + SetBit(MSR_RQM, ref StatusMain); - CommCounter = 0; - ResCounter = 0; - } + CommCounter = 0; + ResCounter = 0; + } - /// - /// Moves to command phase - /// - public void SetPhase_Command() - { - ActivePhase = Phase.Command; + /// + /// Moves to result phase + /// + public void SetPhase_Result() + { + ActivePhase = Phase.Result; - // default 0x80 - just RQM - SetBit(MSR_RQM, ref StatusMain); - UnSetBit(MSR_DIO, ref StatusMain); - UnSetBit(MSR_CB, ref StatusMain); - UnSetBit(MSR_EXM, ref StatusMain); - CommCounter = 0; - ResCounter = 0; - } + // active direction + SetBit(MSR_DIO, ref StatusMain); + // CB + SetBit(MSR_CB, ref StatusMain); + // RQM + SetBit(MSR_RQM, ref StatusMain); + // EXM + UnSetBit(MSR_EXM, ref StatusMain); - /// - /// Moves to execution phase - /// - public void SetPhase_Execution() - { - ActivePhase = Phase.Execution; + CommCounter = 0; + ResCounter = 0; + } - // EXM - SetBit(MSR_EXM, ref StatusMain); - // CB - SetBit(MSR_CB, ref StatusMain); - // RQM - UnSetBit(MSR_RQM, ref StatusMain); + /// + /// Moves to command phase + /// + public void SetPhase_Command() + { + ActivePhase = Phase.Command; - CommCounter = 0; - ResCounter = 0; - } + // default 0x80 - just RQM + SetBit(MSR_RQM, ref StatusMain); + UnSetBit(MSR_DIO, ref StatusMain); + UnSetBit(MSR_CB, ref StatusMain); + UnSetBit(MSR_EXM, ref StatusMain); + CommCounter = 0; + ResCounter = 0; + } - #endregion - } + /// + /// Moves to execution phase + /// + public void SetPhase_Execution() + { + ActivePhase = Phase.Execution; + + // EXM + SetBit(MSR_EXM, ref StatusMain); + // CB + SetBit(MSR_CB, ref StatusMain); + // RQM + UnSetBit(MSR_RQM, ref StatusMain); + + CommCounter = 0; + ResCounter = 0; + } + + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.FDD.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.FDD.cs index 248f2fcd0d..25a8c59a45 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.FDD.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.FDD.cs @@ -5,331 +5,331 @@ using System.Linq; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Floppy drive related stuff - /// - #region Attribution - /* + /// + /// Floppy drive related stuff + /// + #region Attribution + /* Implementation based on the information contained here: http://www.cpcwiki.eu/index.php/765_FDC and here: http://www.cpcwiki.eu/imgs/f/f3/UPD765_Datasheet_OCRed.pdf */ - #endregion - public partial class NECUPD765 : IFDDHost - { - #region Drive State + #endregion + public partial class NECUPD765 : IFDDHost + { + #region Drive State - /// - /// FDD Flag - motor on/off - /// - public bool FDD_FLAG_MOTOR; + /// + /// FDD Flag - motor on/off + /// + public bool FDD_FLAG_MOTOR; - /// - /// The index of the currently active disk drive - /// - public int DiskDriveIndex - { - get { return _diskDriveIndex; } - set - { - // when index is changed update the ActiveDrive - _diskDriveIndex = value; - ActiveDrive = DriveStates[_diskDriveIndex]; - } - } - private int _diskDriveIndex = 0; + /// + /// The index of the currently active disk drive + /// + public int DiskDriveIndex + { + get { return _diskDriveIndex; } + set + { + // when index is changed update the ActiveDrive + _diskDriveIndex = value; + ActiveDrive = DriveStates[_diskDriveIndex]; + } + } + private int _diskDriveIndex = 0; - /// - /// The currently active drive - /// - private DriveState ActiveDrive; + /// + /// The currently active drive + /// + private DriveState ActiveDrive; - /// - /// Array that holds state information for each possible drive - /// - private DriveState[] DriveStates = new DriveState[4]; + /// + /// Array that holds state information for each possible drive + /// + private DriveState[] DriveStates = new DriveState[4]; - #endregion + #endregion - #region FDD Methods + #region FDD Methods - /// - /// Initialization / reset of the floppy drive subsystem - /// - private void FDD_Init() - { - for (int i = 0; i < 4; i++) - { - DriveState ds = new DriveState(i, this); - DriveStates[i] = ds; - } - } + /// + /// Initialization / reset of the floppy drive subsystem + /// + private void FDD_Init() + { + for (int i = 0; i < 4; i++) + { + DriveState ds = new DriveState(i, this); + DriveStates[i] = ds; + } + } - /// - /// Searches for the requested sector - /// - private FloppyDisk.Sector GetSector() - { - FloppyDisk.Sector sector = null; + /// + /// Searches for the requested sector + /// + private FloppyDisk.Sector GetSector() + { + FloppyDisk.Sector sector = null; - // get the current track - var trk = ActiveDrive.Disk.DiskTracks[ActiveDrive.TrackIndex]; + // get the current track + var trk = ActiveDrive.Disk.DiskTracks[ActiveDrive.TrackIndex]; - // get the current sector index - int index = ActiveDrive.SectorIndex; + // get the current sector index + int index = ActiveDrive.SectorIndex; - // make sure this index exists - if (index > trk.Sectors.Length) - { - index = 0; - } + // make sure this index exists + if (index > trk.Sectors.Length) + { + index = 0; + } - // index hole count - int iHole = 0; + // index hole count + int iHole = 0; - // loop through the sectors in a track - // the loop ends with either the sector being found - // or the index hole being passed twice - while (iHole <= 2) - { - // does the requested sector match the current sector - if (trk.Sectors[index].SectorIDInfo.C == ActiveCommandParams.Cylinder && - trk.Sectors[index].SectorIDInfo.H == ActiveCommandParams.Head && - trk.Sectors[index].SectorIDInfo.R == ActiveCommandParams.Sector && - trk.Sectors[index].SectorIDInfo.N == ActiveCommandParams.SectorSize) - { - // sector has been found - sector = trk.Sectors[index]; + // loop through the sectors in a track + // the loop ends with either the sector being found + // or the index hole being passed twice + while (iHole <= 2) + { + // does the requested sector match the current sector + if (trk.Sectors[index].SectorIDInfo.C == ActiveCommandParams.Cylinder && + trk.Sectors[index].SectorIDInfo.H == ActiveCommandParams.Head && + trk.Sectors[index].SectorIDInfo.R == ActiveCommandParams.Sector && + trk.Sectors[index].SectorIDInfo.N == ActiveCommandParams.SectorSize) + { + // sector has been found + sector = trk.Sectors[index]; - UnSetBit(SR2_BC, ref Status2); - UnSetBit(SR2_WC, ref Status2); - break; - } + UnSetBit(SR2_BC, ref Status2); + UnSetBit(SR2_WC, ref Status2); + break; + } - // check for bad cylinder - if (trk.Sectors[index].SectorIDInfo.C == 255) - { - SetBit(SR2_BC, ref Status2); - } - // check for no cylinder - else if (trk.Sectors[index].SectorIDInfo.C != ActiveCommandParams.Cylinder) - { - SetBit(SR2_WC, ref Status2); - } + // check for bad cylinder + if (trk.Sectors[index].SectorIDInfo.C == 255) + { + SetBit(SR2_BC, ref Status2); + } + // check for no cylinder + else if (trk.Sectors[index].SectorIDInfo.C != ActiveCommandParams.Cylinder) + { + SetBit(SR2_WC, ref Status2); + } - // incrememnt sector index - index++; + // incrememnt sector index + index++; - // have we reached the index hole? - if (trk.Sectors.Length <= index) - { - // wrap around - index = 0; - iHole++; - } - } + // have we reached the index hole? + if (trk.Sectors.Length <= index) + { + // wrap around + index = 0; + iHole++; + } + } - // search loop has completed and the sector may or may not have been found + // search loop has completed and the sector may or may not have been found - // bad cylinder detected? - if (Status2.Bit(SR2_BC)) - { - // remove WC - UnSetBit(SR2_WC, ref Status2); - } + // bad cylinder detected? + if (Status2.Bit(SR2_BC)) + { + // remove WC + UnSetBit(SR2_WC, ref Status2); + } - // update sectorindex on drive - ActiveDrive.SectorIndex = index; + // update sectorindex on drive + ActiveDrive.SectorIndex = index; - return sector; - } + return sector; + } - #endregion + #endregion - #region IFDDHost + #region IFDDHost - // IFDDHost methods that fall through to the currently active drive + // IFDDHost methods that fall through to the currently active drive - /// - /// Parses a new disk image and loads it into this floppy drive - /// - public void FDD_LoadDisk(byte[] diskData) - { - // we are only going to load into the first drive - DriveStates[0].FDD_LoadDisk(diskData); - } + /// + /// Parses a new disk image and loads it into this floppy drive + /// + public void FDD_LoadDisk(byte[] diskData) + { + // we are only going to load into the first drive + DriveStates[0].FDD_LoadDisk(diskData); + } - /// - /// Ejects the current disk - /// - public void FDD_EjectDisk() - { - DriveStates[0].FDD_EjectDisk(); - } + /// + /// Ejects the current disk + /// + public void FDD_EjectDisk() + { + DriveStates[0].FDD_EjectDisk(); + } - /// - /// Signs whether the current active drive has a disk inserted - /// - public bool FDD_IsDiskLoaded - { - get { return DriveStates[DiskDriveIndex].FDD_IsDiskLoaded; } - } + /// + /// Signs whether the current active drive has a disk inserted + /// + public bool FDD_IsDiskLoaded + { + get { return DriveStates[DiskDriveIndex].FDD_IsDiskLoaded; } + } - /// - /// Returns the disk object from drive 0 - /// - public FloppyDisk DiskPointer - { - get { return DriveStates[0].Disk; } - } - - public FloppyDisk Disk { get; set; } + /// + /// Returns the disk object from drive 0 + /// + public FloppyDisk DiskPointer + { + get { return DriveStates[0].Disk; } + } - #endregion + public FloppyDisk Disk { get; set; } - #region Drive Status Class + #endregion - /// - /// Holds specfic state information about a drive - /// - private class DriveState : IFDDHost - { - #region State + #region Drive Status Class - /// - /// The drive ID from an FDC perspective - /// - public int ID; + /// + /// Holds specfic state information about a drive + /// + private class DriveState : IFDDHost + { + #region State - /// - /// Signs whether this drive ready - /// TRUE if both drive exists and has a disk inserted - /// - public bool FLAG_READY - { - get - { - if (!FDD_IsDiskLoaded || Disk.GetTrackCount() == 0 || !FDC.FDD_FLAG_MOTOR) - return false; - else - return true; - } - } + /// + /// The drive ID from an FDC perspective + /// + public int ID; - /// - /// Disk is write protected (TRUE BY DEFAULT) - /// - public bool FLAG_WRITEPROTECT = false; + /// + /// Signs whether this drive ready + /// TRUE if both drive exists and has a disk inserted + /// + public bool FLAG_READY + { + get + { + if (!FDD_IsDiskLoaded || Disk.GetTrackCount() == 0 || !FDC.FDD_FLAG_MOTOR) + return false; + else + return true; + } + } - /// - /// Storage for seek steps - /// One step for each indexpulse (track index) until seeked track - /// - public int SeekCounter; + /// + /// Disk is write protected (TRUE BY DEFAULT) + /// + public bool FLAG_WRITEPROTECT = false; - /// - /// Seek status - /// - public int SeekStatus; + /// + /// Storage for seek steps + /// One step for each indexpulse (track index) until seeked track + /// + public int SeekCounter; - /// - /// Age counter - /// - public int SeekAge; + /// + /// Seek status + /// + public int SeekStatus; - /// - /// The current side - /// - public byte CurrentSide; + /// + /// Age counter + /// + public int SeekAge; - /// - /// The current track index in the DiskTracks array - /// - public byte TrackIndex; + /// + /// The current side + /// + public byte CurrentSide; - /// - /// The track ID of the current cylinder - /// - public byte CurrentTrackID - { - get - { - // default invalid track - int id = 0xff; + /// + /// The current track index in the DiskTracks array + /// + public byte TrackIndex; - if (Disk == null) - return (byte)id; + /// + /// The track ID of the current cylinder + /// + public byte CurrentTrackID + { + get + { + // default invalid track + int id = 0xff; - if (Disk.DiskTracks.Count() == 0) - return (byte)id; + if (Disk == null) + return (byte)id; - if (TrackIndex >= Disk.GetTrackCount()) - TrackIndex = 0; - else if (TrackIndex < 0) - TrackIndex = 0; + if (Disk.DiskTracks.Count() == 0) + return (byte)id; - var track = Disk.DiskTracks[TrackIndex]; + if (TrackIndex >= Disk.GetTrackCount()) + TrackIndex = 0; + else if (TrackIndex < 0) + TrackIndex = 0; - id = track.TrackNumber; + var track = Disk.DiskTracks[TrackIndex]; - return (byte)id; - } - set - { - for (int i = 0; i < Disk.GetTrackCount(); i++) - { - if (Disk.DiskTracks[i].TrackNumber == value) - { - TrackIndex = (byte)i; - break; - } - } - } - } + id = track.TrackNumber; + + return (byte)id; + } + set + { + for (int i = 0; i < Disk.GetTrackCount(); i++) + { + if (Disk.DiskTracks[i].TrackNumber == value) + { + TrackIndex = (byte)i; + break; + } + } + } + } - /// - /// The new track that the drive is seeking to - /// (used in seek operations) - /// - public int SeekingTrack; + /// + /// The new track that the drive is seeking to + /// (used in seek operations) + /// + public int SeekingTrack; - /// - /// The current sector index in the Sectors array - /// - public int SectorIndex; + /// + /// The current sector index in the Sectors array + /// + public int SectorIndex; - /// - /// The currently loaded floppy disk - /// - public FloppyDisk Disk { get; set; } + /// + /// The currently loaded floppy disk + /// + public FloppyDisk Disk { get; set; } - /// - /// The parent controller - /// - private NECUPD765 FDC; + /// + /// The parent controller + /// + private NECUPD765 FDC; - #endregion + #endregion - #region Lookups + #region Lookups - /// - /// TRUE if we are on track 0 - /// - public bool FLAG_TRACK0 - { - get - { - if (TrackIndex == 0) { return true; } - else { return false; } - } - } + /// + /// TRUE if we are on track 0 + /// + public bool FLAG_TRACK0 + { + get + { + if (TrackIndex == 0) { return true; } + else { return false; } + } + } - #endregion + #endregion - #region Public Methods - /* + #region Public Methods + /* /// /// Moves the head across the disk cylinders /// @@ -369,7 +369,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC } */ - /* + /* /// /// Finds a supplied sector @@ -524,7 +524,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC } */ - /* + /* /// /// The drive performs a seek operation if necessary @@ -751,131 +751,131 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC SetBit(SR0_EC, ref IntStatus); } */ - /* - // UnitSelect - SetUnitSelect(ID, ref IntStatus); + /* + // UnitSelect + SetUnitSelect(ID, ref IntStatus); - // move to none state - //CurrentState = DriveMainState.None; + // move to none state + //CurrentState = DriveMainState.None; - //SeekState = SeekSubState.SeekCompleted; + //SeekState = SeekSubState.SeekCompleted; - // set the seek interrupt flag for this drive - // this will be cleared at the next successful senseint - FLAG_SEEK_INTERRUPT = true; + // set the seek interrupt flag for this drive + // this will be cleared at the next successful senseint + FLAG_SEEK_INTERRUPT = true; - //CurrentState = DriveMainState.None; + //CurrentState = DriveMainState.None; - } - */ + } + */ - #endregion + #endregion - #region Construction + #region Construction - public DriveState(int driveID, NECUPD765 fdc) - { - ID = driveID; - FDC = fdc; - } + public DriveState(int driveID, NECUPD765 fdc) + { + ID = driveID; + FDC = fdc; + } - #endregion + #endregion - #region IFDDHost + #region IFDDHost - /// - /// Parses a new disk image and loads it into this floppy drive - /// - public void FDD_LoadDisk(byte[] diskData) - { - // try dsk first - FloppyDisk fdd = null; - bool found = false; + /// + /// Parses a new disk image and loads it into this floppy drive + /// + public void FDD_LoadDisk(byte[] diskData) + { + // try dsk first + FloppyDisk fdd = null; + bool found = false; - foreach (DiskType type in Enum.GetValues(typeof(DiskType))) - { - switch (type) - { - case DiskType.CPCExtended: - fdd = new CPCExtendedFloppyDisk(); - found = fdd.ParseDisk(diskData); - break; - case DiskType.CPC: - fdd = new CPCFloppyDisk(); - found = fdd.ParseDisk(diskData); - break; - } + foreach (DiskType type in Enum.GetValues(typeof(DiskType))) + { + switch (type) + { + case DiskType.CPCExtended: + fdd = new CPCExtendedFloppyDisk(); + found = fdd.ParseDisk(diskData); + break; + case DiskType.CPC: + fdd = new CPCFloppyDisk(); + found = fdd.ParseDisk(diskData); + break; + } - if (found) - { - Disk = fdd; - break; - } - } + if (found) + { + Disk = fdd; + break; + } + } - if (!found) - { - throw new Exception(this.GetType().ToString() + - "\n\nDisk image file could not be parsed. Potentially an unknown format."); - } - } + if (!found) + { + throw new Exception(this.GetType().ToString() + + "\n\nDisk image file could not be parsed. Potentially an unknown format."); + } + } - /// - /// Ejects the current disk - /// - public void FDD_EjectDisk() - { - Disk = null; - //FLAG_READY = false; - } + /// + /// Ejects the current disk + /// + public void FDD_EjectDisk() + { + Disk = null; + //FLAG_READY = false; + } - /// - /// Signs whether the current active drive has a disk inserted - /// - public bool FDD_IsDiskLoaded - { - get - { - if (Disk != null) - return true; - else - return false; - } - } + /// + /// Signs whether the current active drive has a disk inserted + /// + public bool FDD_IsDiskLoaded + { + get + { + if (Disk != null) + return true; + else + return false; + } + } - #endregion + #endregion - #region StateSerialization + #region StateSerialization - public void SyncState(Serializer ser) - { - ser.Sync(nameof(ID), ref ID); - ser.Sync(nameof(FLAG_WRITEPROTECT), ref FLAG_WRITEPROTECT); - //ser.Sync(nameof(FLAG_DISKCHANGED), ref FLAG_DISKCHANGED); - //ser.Sync(nameof(FLAG_RECALIBRATING), ref FLAG_RECALIBRATING); - //ser.Sync(nameof(FLAG_SEEK_INTERRUPT), ref FLAG_SEEK_INTERRUPT); - //ser.Sync(nameof(IntStatus), ref IntStatus); - //ser.Sync(nameof(ST0), ref ST0); - //ser.Sync(nameof(RecalibrationCounter), ref RecalibrationCounter); - ser.Sync(nameof(SeekCounter), ref SeekCounter); - ser.Sync(nameof(SeekStatus), ref SeekStatus); - ser.Sync(nameof(SeekAge), ref SeekAge); - ser.Sync(nameof(CurrentSide), ref CurrentSide); - //ser.Sync(nameof(CurrentTrack), ref CurrentTrack); - ser.Sync(nameof(TrackIndex), ref TrackIndex); - ser.Sync(nameof(SeekingTrack), ref SeekingTrack); - //ser.Sync(nameof(CurrentSector), ref CurrentSector); - ser.Sync(nameof(SectorIndex), ref SectorIndex); - //ser.Sync(nameof(RAngles), ref RAngles); - //ser.Sync(nameof(DataPointer), ref DataPointer); - //ser.SyncEnum(nameof(CurrentState), ref CurrentState); - //ser.SyncEnum(nameof(SeekState), ref SeekState); - //ser.SyncEnum(nameof(SeekIntState), ref SeekIntState); - } + public void SyncState(Serializer ser) + { + ser.Sync(nameof(ID), ref ID); + ser.Sync(nameof(FLAG_WRITEPROTECT), ref FLAG_WRITEPROTECT); + //ser.Sync(nameof(FLAG_DISKCHANGED), ref FLAG_DISKCHANGED); + //ser.Sync(nameof(FLAG_RECALIBRATING), ref FLAG_RECALIBRATING); + //ser.Sync(nameof(FLAG_SEEK_INTERRUPT), ref FLAG_SEEK_INTERRUPT); + //ser.Sync(nameof(IntStatus), ref IntStatus); + //ser.Sync(nameof(ST0), ref ST0); + //ser.Sync(nameof(RecalibrationCounter), ref RecalibrationCounter); + ser.Sync(nameof(SeekCounter), ref SeekCounter); + ser.Sync(nameof(SeekStatus), ref SeekStatus); + ser.Sync(nameof(SeekAge), ref SeekAge); + ser.Sync(nameof(CurrentSide), ref CurrentSide); + //ser.Sync(nameof(CurrentTrack), ref CurrentTrack); + ser.Sync(nameof(TrackIndex), ref TrackIndex); + ser.Sync(nameof(SeekingTrack), ref SeekingTrack); + //ser.Sync(nameof(CurrentSector), ref CurrentSector); + ser.Sync(nameof(SectorIndex), ref SectorIndex); + //ser.Sync(nameof(RAngles), ref RAngles); + //ser.Sync(nameof(DataPointer), ref DataPointer); + //ser.SyncEnum(nameof(CurrentState), ref CurrentState); + //ser.SyncEnum(nameof(SeekState), ref SeekState); + //ser.SyncEnum(nameof(SeekIntState), ref SeekIntState); + } - #endregion - } + #endregion + } -#endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.IPortIODevice.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.IPortIODevice.cs index e58821a477..5f6e87f99a 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.IPortIODevice.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.IPortIODevice.cs @@ -5,32 +5,32 @@ using System.Text; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// IPortIODevice - /// - #region Attribution - /* + /// + /// IPortIODevice + /// + #region Attribution + /* Implementation based on the information contained here: http://www.cpcwiki.eu/index.php/765_FDC and here: http://www.cpcwiki.eu/imgs/f/f3/UPD765_Datasheet_OCRed.pdf */ - #endregion - public partial class NECUPD765 : IPortIODevice - { - #region Dev Logging + #endregion + public partial class NECUPD765 : IPortIODevice + { + #region Dev Logging - public string outputfile = @"D:\Dropbox\Dropbox\_Programming\TASVideos\BizHawk\output\zxhawkio-" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".csv"; - public string outputString = "STATUS,WRITE,READ,CODE,MT,MF,SK,CMDCNT,RESCNT,EXECCNT,EXECLEN\r\n"; - public bool writeDebug = false; + public string outputfile = @"D:\Dropbox\Dropbox\_Programming\TASVideos\BizHawk\output\zxhawkio-" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".csv"; + public string outputString = "STATUS,WRITE,READ,CODE,MT,MF,SK,CMDCNT,RESCNT,EXECCNT,EXECLEN\r\n"; + public bool writeDebug = false; - public List dLog = new List - { - "STATUS,WRITE,READ,CODE,MT,MF,SK,CMDCNT,RESCNT,EXECCNT,EXECLEN" - }; + public List dLog = new List + { + "STATUS,WRITE,READ,CODE,MT,MF,SK,CMDCNT,RESCNT,EXECCNT,EXECLEN" + }; - /* + /* * Status read * Data write * Data read @@ -40,154 +40,154 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC * MK flag * SK flag * */ - private string[] workingArr = new string[3]; + private string[] workingArr = new string[3]; - private void BuildCSVLine() - { - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < 3; i++) - { - sb.Append(workingArr[i]); - sb.Append(","); - workingArr[i] = ""; - } + private void BuildCSVLine() + { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < 3; i++) + { + sb.Append(workingArr[i]); + sb.Append(","); + workingArr[i] = ""; + } - sb.Append(ActiveCommand.CommandCode).Append(","); + sb.Append(ActiveCommand.CommandCode).Append(","); - sb.Append(CMD_FLAG_MT).Append(","); - sb.Append(CMD_FLAG_MF).Append(","); - sb.Append(CMD_FLAG_SK).Append(","); + sb.Append(CMD_FLAG_MT).Append(","); + sb.Append(CMD_FLAG_MF).Append(","); + sb.Append(CMD_FLAG_SK).Append(","); - sb.Append(CommCounter).Append(","); - sb.Append(ResCounter).Append(","); - sb.Append(ExecCounter).Append(","); - sb.Append(ExecLength); + sb.Append(CommCounter).Append(","); + sb.Append(ResCounter).Append(","); + sb.Append(ExecCounter).Append(","); + sb.Append(ExecLength); - //sb.Append("\r\n"); + //sb.Append("\r\n"); - //outputString += sb.ToString(); - dLog.Add(sb.ToString()); - } + //outputString += sb.ToString(); + dLog.Add(sb.ToString()); + } - #endregion + #endregion - public void ReadStatus(ref int data) - { - // read main status register - // this can happen at any time - data = ReadMainStatus(); - if (writeDebug) - { - //outputString += data + ",,," + ActiveCommand.CommandCode + "\r\n"; - workingArr[0] = data.ToString(); - BuildCSVLine(); - //System.IO.File.WriteAllText(outputfile, outputString); - } - } + public void ReadStatus(ref int data) + { + // read main status register + // this can happen at any time + data = ReadMainStatus(); + if (writeDebug) + { + //outputString += data + ",,," + ActiveCommand.CommandCode + "\r\n"; + workingArr[0] = data.ToString(); + BuildCSVLine(); + //System.IO.File.WriteAllText(outputfile, outputString); + } + } - public void ReadData(ref int data) - { - // Z80 is trying to read from the data register - data = ReadDataRegister(); - if (writeDebug) - { - workingArr[2] = data.ToString(); - //outputString += ",," + data + "," + ActiveCommand.CommandCode + "\r\n"; - BuildCSVLine(); - } - } + public void ReadData(ref int data) + { + // Z80 is trying to read from the data register + data = ReadDataRegister(); + if (writeDebug) + { + workingArr[2] = data.ToString(); + //outputString += ",," + data + "," + ActiveCommand.CommandCode + "\r\n"; + BuildCSVLine(); + } + } - public void WriteData(int data) - { - // Z80 is attempting to write to the data register - WriteDataRegister((byte)data); - if (writeDebug) - { - //outputString += "," + data + ",," + ActiveCommand.CommandCode + "\r\n"; - workingArr[1] = data.ToString(); - BuildCSVLine(); - //System.IO.File.WriteAllText(outputfile, outputString); - } - } + public void WriteData(int data) + { + // Z80 is attempting to write to the data register + WriteDataRegister((byte)data); + if (writeDebug) + { + //outputString += "," + data + ",," + ActiveCommand.CommandCode + "\r\n"; + workingArr[1] = data.ToString(); + BuildCSVLine(); + //System.IO.File.WriteAllText(outputfile, outputString); + } + } - public void Motor(int data) - { - // set disk motor on/off - if (data > 0) - FDD_FLAG_MOTOR = true; - else - FDD_FLAG_MOTOR = false; - } + public void Motor(int data) + { + // set disk motor on/off + if (data > 0) + FDD_FLAG_MOTOR = true; + else + FDD_FLAG_MOTOR = false; + } - /// - /// Device responds to an IN instruction - /// - public bool ReadPort(ushort port, ref int data) - { - BitArray bits = new BitArray(new byte[] { (byte)data }); + /// + /// Device responds to an IN instruction + /// + public bool ReadPort(ushort port, ref int data) + { + BitArray bits = new BitArray(new byte[] { (byte)data }); - if (port == 0x3ffd) - { - // Z80 is trying to read from the data register - data = ReadDataRegister(); - if (writeDebug) - { - workingArr[2] = data.ToString(); - //outputString += ",," + data + "," + ActiveCommand.CommandCode + "\r\n"; - BuildCSVLine(); - } - - return true; - } + if (port == 0x3ffd) + { + // Z80 is trying to read from the data register + data = ReadDataRegister(); + if (writeDebug) + { + workingArr[2] = data.ToString(); + //outputString += ",," + data + "," + ActiveCommand.CommandCode + "\r\n"; + BuildCSVLine(); + } - if (port == 0x2ffd) - { - // read main status register - // this can happen at any time - data = ReadMainStatus(); - if (writeDebug) - { - //outputString += data + ",,," + ActiveCommand.CommandCode + "\r\n"; - workingArr[0] = data.ToString(); - BuildCSVLine(); - //System.IO.File.WriteAllText(outputfile, outputString); - } - - return true; - } + return true; + } - return false; - } + if (port == 0x2ffd) + { + // read main status register + // this can happen at any time + data = ReadMainStatus(); + if (writeDebug) + { + //outputString += data + ",,," + ActiveCommand.CommandCode + "\r\n"; + workingArr[0] = data.ToString(); + BuildCSVLine(); + //System.IO.File.WriteAllText(outputfile, outputString); + } - /// - /// Device responds to an OUT instruction - /// - public bool WritePort(ushort port, int data) - { - BitArray bits = new BitArray(new byte[] { (byte)data }); + return true; + } - if (port == 0x3ffd) - { - // Z80 is attempting to write to the data register - WriteDataRegister((byte)data); - if (writeDebug) - { - //outputString += "," + data + ",," + ActiveCommand.CommandCode + "\r\n"; - workingArr[1] = data.ToString(); - BuildCSVLine(); - //System.IO.File.WriteAllText(outputfile, outputString); - } - - return true; - } + return false; + } - if (port == 0x1ffd) - { - // set disk motor on/off - FDD_FLAG_MOTOR = bits[3]; - return true; - } - return false; - } - } + /// + /// Device responds to an OUT instruction + /// + public bool WritePort(ushort port, int data) + { + BitArray bits = new BitArray(new byte[] { (byte)data }); + + if (port == 0x3ffd) + { + // Z80 is attempting to write to the data register + WriteDataRegister((byte)data); + if (writeDebug) + { + //outputString += "," + data + ",," + ActiveCommand.CommandCode + "\r\n"; + workingArr[1] = data.ToString(); + BuildCSVLine(); + //System.IO.File.WriteAllText(outputfile, outputString); + } + + return true; + } + + if (port == 0x1ffd) + { + // set disk motor on/off + FDD_FLAG_MOTOR = bits[3]; + return true; + } + return false; + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.Timing.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.Timing.cs index 41b4465f44..c6fb76300b 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.Timing.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.Timing.cs @@ -1,120 +1,120 @@  namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Timimng - /// - #region Attribution - /* + /// + /// Timimng + /// + #region Attribution + /* Implementation based on the information contained here: http://www.cpcwiki.eu/index.php/765_FDC and here: http://www.cpcwiki.eu/imgs/f/f3/UPD765_Datasheet_OCRed.pdf */ - #endregion - public partial class NECUPD765 - { - /// - /// The current Z80 cycle - /// - private long CurrentCPUCycle - { - get - { - if (_machine == null) - return 0; - else - return _machine.CPU.TotalExecutedCycles; - } - } + #endregion + public partial class NECUPD765 + { + /// + /// The current Z80 cycle + /// + private long CurrentCPUCycle + { + get + { + if (_machine == null) + return 0; + else + return _machine.CPU.TotalExecutedCycles; + } + } - /// - /// The last CPU cycle when the FDC accepted an IO read/write - /// - private long LastCPUCycle; + /// + /// The last CPU cycle when the FDC accepted an IO read/write + /// + private long LastCPUCycle; - /// - /// The current delay figure (in Z80 t-states) - /// This implementation only introduces delay upon main status register reads - /// All timing calculations should be done during the other read/write operations - /// - private long StatusDelay; + /// + /// The current delay figure (in Z80 t-states) + /// This implementation only introduces delay upon main status register reads + /// All timing calculations should be done during the other read/write operations + /// + private long StatusDelay; - /// - /// Defines the numbers of Z80 cycles per MS - /// - private long CPUCyclesPerMs; + /// + /// Defines the numbers of Z80 cycles per MS + /// + private long CPUCyclesPerMs; - /// - /// The floppy drive emulated clock speed - /// - public const double DriveClock = 31250; + /// + /// The floppy drive emulated clock speed + /// + public const double DriveClock = 31250; - /// - /// The number of floppy drive cycles per MS - /// - public long DriveCyclesPerMs; + /// + /// The number of floppy drive cycles per MS + /// + public long DriveCyclesPerMs; - /// - /// The number of T-States in one floppy drive clock tick - /// - public long StatesPerDriveTick; + /// + /// The number of T-States in one floppy drive clock tick + /// + public long StatesPerDriveTick; - /// - /// Responsible for measuring when the floppy drive is ready to run a cycle - /// - private long TickCounter; + /// + /// Responsible for measuring when the floppy drive is ready to run a cycle + /// + private long TickCounter; - /// - /// Internal drive cycle counter - /// - private int DriveCycleCounter = 1; + /// + /// Internal drive cycle counter + /// + private int DriveCycleCounter = 1; - /// - /// Initializes the timing routines - /// - private void TimingInit() - { - // z80 timing - double frameSize = _machine.GateArray.FrameLength; - double rRate = _machine.GateArray.Z80ClockSpeed / frameSize; - long tPerSecond = (long)(frameSize * rRate); - CPUCyclesPerMs = tPerSecond / 1000; + /// + /// Initializes the timing routines + /// + private void TimingInit() + { + // z80 timing + double frameSize = _machine.GateArray.FrameLength; + double rRate = _machine.GateArray.Z80ClockSpeed / frameSize; + long tPerSecond = (long)(frameSize * rRate); + CPUCyclesPerMs = tPerSecond / 1000; - // drive timing - double dRate = DriveClock / frameSize; - long dPerSecond = (long)(frameSize * dRate); - DriveCyclesPerMs = dPerSecond / 1000; + // drive timing + double dRate = DriveClock / frameSize; + long dPerSecond = (long)(frameSize * dRate); + DriveCyclesPerMs = dPerSecond / 1000; - long TStatesPerDriveCycle = (long)((double)_machine.GateArray.Z80ClockSpeed / DriveClock); - StatesPerDriveTick = TStatesPerDriveCycle; + long TStatesPerDriveCycle = (long)((double)_machine.GateArray.Z80ClockSpeed / DriveClock); + StatesPerDriveTick = TStatesPerDriveCycle; - } + } - /// - /// Called by reads to the main status register - /// Returns true if there is no delay - /// Returns false if read is to be deferred - /// - private bool CheckTiming() - { - // get delta - long delta = CurrentCPUCycle - LastCPUCycle; + /// + /// Called by reads to the main status register + /// Returns true if there is no delay + /// Returns false if read is to be deferred + /// + private bool CheckTiming() + { + // get delta + long delta = CurrentCPUCycle - LastCPUCycle; - if (StatusDelay >= delta) - { - // there is still delay remaining - StatusDelay -= delta; - LastCPUCycle = CurrentCPUCycle; - return false; - } - else - { - // no delay remaining - StatusDelay = 0; - LastCPUCycle = CurrentCPUCycle; - return true; - } - } - } + if (StatusDelay >= delta) + { + // there is still delay remaining + StatusDelay -= delta; + LastCPUCycle = CurrentCPUCycle; + return false; + } + else + { + // no delay remaining + StatusDelay = 0; + LastCPUCycle = CurrentCPUCycle; + return true; + } + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.cs index 25f623548d..f22522f971 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.cs @@ -3,243 +3,243 @@ using System.Collections.Generic; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// The NEC floppy disk controller (and floppy drive) found in the +3 - /// - #region Attribution - /* + /// + /// The NEC floppy disk controller (and floppy drive) found in the +3 + /// + #region Attribution + /* Implementation based on the information contained here: http://www.cpcwiki.eu/index.php/765_FDC and here: http://www.cpcwiki.eu/imgs/f/f3/UPD765_Datasheet_OCRed.pdf */ - #endregion - public partial class NECUPD765 - { - #region Devices + #endregion + public partial class NECUPD765 + { + #region Devices - /// - /// The emulated spectrum machine - /// - private CPCBase _machine; + /// + /// The emulated spectrum machine + /// + private CPCBase _machine; - #endregion + #endregion - #region Construction & Initialization + #region Construction & Initialization - /// - /// Main constructor - /// - public NECUPD765() - { - InitCommandList(); - } + /// + /// Main constructor + /// + public NECUPD765() + { + InitCommandList(); + } - /// - /// Initialization routine - /// - public void Init(CPCBase machine) - { - _machine = machine; - FDD_Init(); - TimingInit(); - Reset(); - } - - /// - /// Resets the FDC - /// - public void Reset() - { - // setup main status - StatusMain = 0; + /// + /// Initialization routine + /// + public void Init(CPCBase machine) + { + _machine = machine; + FDD_Init(); + TimingInit(); + Reset(); + } - Status0 = 0; - Status1 = 0; - Status2 = 0; - Status3 = 0; + /// + /// Resets the FDC + /// + public void Reset() + { + // setup main status + StatusMain = 0; - SetBit(MSR_RQM, ref StatusMain); + Status0 = 0; + Status1 = 0; + Status2 = 0; + Status3 = 0; - SetPhase_Idle(); + SetBit(MSR_RQM, ref StatusMain); - //FDC_FLAG_RQM = true; - //ActiveDirection = CommandDirection.IN; - SRT = 6; - HUT = 16; - HLT = 2; - HLT_Counter = 0; - HUT_Counter = 0; - IndexPulseCounter = 0; - CMD_FLAG_MF = false; + SetPhase_Idle(); - foreach (var d in DriveStates) - { - //d.SeekingTrack = d.CurrentTrack; - ////d.SeekCounter = 0; - //d.FLAG_SEEK_INTERRUPT = false; - //d.IntStatus = 0; - //d.SeekState = SeekSubState.Idle; - //d.SeekIntState = SeekIntStatus.Normal; + //FDC_FLAG_RQM = true; + //ActiveDirection = CommandDirection.IN; + SRT = 6; + HUT = 16; + HLT = 2; + HLT_Counter = 0; + HUT_Counter = 0; + IndexPulseCounter = 0; + CMD_FLAG_MF = false; - } - - } + foreach (var d in DriveStates) + { + //d.SeekingTrack = d.CurrentTrack; + ////d.SeekCounter = 0; + //d.FLAG_SEEK_INTERRUPT = false; + //d.IntStatus = 0; + //d.SeekState = SeekSubState.Idle; + //d.SeekIntState = SeekIntStatus.Normal; - /// - /// Setup the command structure - /// Each command represents one of the internal UPD765 commands - /// - private void InitCommandList() - { - CommandList = new List - { + } + + } + + /// + /// Setup the command structure + /// Each command represents one of the internal UPD765 commands + /// + private void InitCommandList() + { + CommandList = new List + { // read data new Command { CommandDelegate = UPD_ReadData, CommandCode = 0x06, MT = true, MF = true, SK = true, IsRead = true, - Direction = CommandDirection.OUT, ParameterByteCount = 8, ResultByteCount = 7 }, + Direction = CommandDirection.OUT, ParameterByteCount = 8, ResultByteCount = 7 }, // read id new Command { CommandDelegate = UPD_ReadID, CommandCode = 0x0a, MF = true, IsRead = true, - Direction = CommandDirection.OUT, ParameterByteCount = 1, ResultByteCount = 7 }, + Direction = CommandDirection.OUT, ParameterByteCount = 1, ResultByteCount = 7 }, // specify new Command { CommandDelegate = UPD_Specify, CommandCode = 0x03, - Direction = CommandDirection.OUT, ParameterByteCount = 2, ResultByteCount = 0 }, + Direction = CommandDirection.OUT, ParameterByteCount = 2, ResultByteCount = 0 }, // read diagnostic new Command { CommandDelegate = UPD_ReadDiagnostic, CommandCode = 0x02, MF = true, SK = true, IsRead = true, - Direction = CommandDirection.OUT, ParameterByteCount = 8, ResultByteCount = 7 }, + Direction = CommandDirection.OUT, ParameterByteCount = 8, ResultByteCount = 7 }, // scan equal new Command { CommandDelegate = UPD_ScanEqual, CommandCode = 0x11, MT = true, MF = true, SK = true, IsRead = true, - Direction = CommandDirection.IN, ParameterByteCount = 8, ResultByteCount = 7 }, + Direction = CommandDirection.IN, ParameterByteCount = 8, ResultByteCount = 7 }, // scan high or equal new Command { CommandDelegate = UPD_ScanHighOrEqual, CommandCode = 0x1d, MT = true, MF = true, SK = true, IsRead = true, - Direction = CommandDirection.IN, ParameterByteCount = 8, ResultByteCount = 7 }, + Direction = CommandDirection.IN, ParameterByteCount = 8, ResultByteCount = 7 }, // scan low or equal new Command { CommandDelegate = UPD_ScanLowOrEqual, CommandCode = 0x19, MT = true, MF = true, SK = true, IsRead = true, - Direction = CommandDirection.IN, ParameterByteCount = 8, ResultByteCount = 7 }, + Direction = CommandDirection.IN, ParameterByteCount = 8, ResultByteCount = 7 }, // read deleted data new Command { CommandDelegate = UPD_ReadDeletedData, CommandCode = 0x0c, MT = true, MF = true, SK = true, IsRead = true, - Direction = CommandDirection.OUT, ParameterByteCount = 8, ResultByteCount = 7 }, + Direction = CommandDirection.OUT, ParameterByteCount = 8, ResultByteCount = 7 }, // write data new Command { CommandDelegate = UPD_WriteData, CommandCode = 0x05, MT = true, MF = true, IsWrite = true, - Direction = CommandDirection.IN, ParameterByteCount = 8, ResultByteCount = 7 }, + Direction = CommandDirection.IN, ParameterByteCount = 8, ResultByteCount = 7 }, // write id new Command { CommandDelegate = UPD_WriteID, CommandCode = 0x0d, MF = true, IsWrite = true, - Direction = CommandDirection.IN, ParameterByteCount = 5, ResultByteCount = 7 }, + Direction = CommandDirection.IN, ParameterByteCount = 5, ResultByteCount = 7 }, // write deleted data new Command { CommandDelegate = UPD_WriteDeletedData, CommandCode = 0x09, MT = true, MF = true, IsWrite = true, - Direction = CommandDirection.IN, ParameterByteCount = 8, ResultByteCount = 7 }, + Direction = CommandDirection.IN, ParameterByteCount = 8, ResultByteCount = 7 }, // seek new Command { CommandDelegate = UPD_Seek, CommandCode = 0x0f, - Direction = CommandDirection.OUT, ParameterByteCount = 2, ResultByteCount = 0 }, + Direction = CommandDirection.OUT, ParameterByteCount = 2, ResultByteCount = 0 }, // recalibrate (seek track00) new Command { CommandDelegate = UPD_Recalibrate, CommandCode = 0x07, - Direction = CommandDirection.OUT, ParameterByteCount = 1, ResultByteCount = 0 }, + Direction = CommandDirection.OUT, ParameterByteCount = 1, ResultByteCount = 0 }, // sense interrupt status new Command { CommandDelegate = UPD_SenseInterruptStatus, CommandCode = 0x08, - Direction = CommandDirection.OUT, ParameterByteCount = 0, ResultByteCount = 2 }, + Direction = CommandDirection.OUT, ParameterByteCount = 0, ResultByteCount = 2 }, // sense drive status new Command { CommandDelegate = UPD_SenseDriveStatus, CommandCode = 0x04, - Direction = CommandDirection.OUT, ParameterByteCount = 1, ResultByteCount = 1 }, + Direction = CommandDirection.OUT, ParameterByteCount = 1, ResultByteCount = 1 }, // version new Command { CommandDelegate = UPD_Version, CommandCode = 0x10, - Direction = CommandDirection.OUT, ParameterByteCount = 0, ResultByteCount = 1 }, + Direction = CommandDirection.OUT, ParameterByteCount = 0, ResultByteCount = 1 }, // invalid new Command { CommandDelegate = UPD_Invalid, CommandCode = 0x00, - Direction = CommandDirection.OUT, ParameterByteCount = 0, ResultByteCount = 1 }, - }; - } + Direction = CommandDirection.OUT, ParameterByteCount = 0, ResultByteCount = 1 }, + }; + } - #endregion + #endregion - #region State Serialization + #region State Serialization - public void SyncState(Serializer ser) - { - ser.BeginSection("NEC-UPD765"); + public void SyncState(Serializer ser) + { + ser.BeginSection("NEC-UPD765"); - #region FDD - - ser.Sync(nameof(FDD_FLAG_MOTOR), ref FDD_FLAG_MOTOR); + #region FDD - for (int i = 0; i < 4; i++) - { - ser.BeginSection("HITDrive_" + i); - DriveStates[i].SyncState(ser); - ser.EndSection(); - } + ser.Sync(nameof(FDD_FLAG_MOTOR), ref FDD_FLAG_MOTOR); - ser.Sync(nameof(DiskDriveIndex), ref _diskDriveIndex); - // set active drive - DiskDriveIndex = _diskDriveIndex; + for (int i = 0; i < 4; i++) + { + ser.BeginSection("HITDrive_" + i); + DriveStates[i].SyncState(ser); + ser.EndSection(); + } - #endregion + ser.Sync(nameof(DiskDriveIndex), ref _diskDriveIndex); + // set active drive + DiskDriveIndex = _diskDriveIndex; - #region Registers + #endregion - ser.Sync("_RegMain", ref StatusMain); - ser.Sync("_Reg0", ref Status0); - ser.Sync("_Reg1", ref Status1); - ser.Sync("_Reg2", ref Status2); - ser.Sync("_Reg3", ref Status3); + #region Registers - #endregion + ser.Sync("_RegMain", ref StatusMain); + ser.Sync("_Reg0", ref Status0); + ser.Sync("_Reg1", ref Status1); + ser.Sync("_Reg2", ref Status2); + ser.Sync("_Reg3", ref Status3); - #region Controller state + #endregion - ser.Sync(nameof(DriveLight), ref DriveLight); - ser.SyncEnum(nameof(ActivePhase), ref ActivePhase); - //ser.SyncEnum(nameof(ActiveDirection), ref ActiveDirection); - ser.SyncEnum(nameof(ActiveInterrupt), ref ActiveInterrupt); - ser.Sync(nameof(CommBuffer), ref CommBuffer, false); - ser.Sync(nameof(CommCounter), ref CommCounter); - ser.Sync(nameof(ResBuffer), ref ResBuffer, false); - ser.Sync(nameof(ExecBuffer), ref ExecBuffer, false); - ser.Sync(nameof(ExecCounter), ref ExecCounter); - ser.Sync(nameof(ExecLength), ref ExecLength); - ser.Sync(nameof(InterruptResultBuffer), ref InterruptResultBuffer, false); - ser.Sync(nameof(ResCounter), ref ResCounter); - ser.Sync(nameof(ResLength), ref ResLength); - ser.Sync(nameof(LastSectorDataWriteByte), ref LastSectorDataWriteByte); - ser.Sync(nameof(LastSectorDataReadByte), ref LastSectorDataReadByte); - ser.Sync(nameof(LastByteReceived), ref LastByteReceived); - - ser.Sync(nameof(_cmdIndex), ref _cmdIndex); - // resync the ActiveCommand - CMDIndex = _cmdIndex; + #region Controller state - ActiveCommandParams.SyncState(ser); - - ser.Sync(nameof(IndexPulseCounter), ref IndexPulseCounter); - //ser.SyncEnum(nameof(_activeStatus), ref _activeStatus); - //ser.SyncEnum(nameof(_statusRaised), ref _statusRaised); + ser.Sync(nameof(DriveLight), ref DriveLight); + ser.SyncEnum(nameof(ActivePhase), ref ActivePhase); + //ser.SyncEnum(nameof(ActiveDirection), ref ActiveDirection); + ser.SyncEnum(nameof(ActiveInterrupt), ref ActiveInterrupt); + ser.Sync(nameof(CommBuffer), ref CommBuffer, false); + ser.Sync(nameof(CommCounter), ref CommCounter); + ser.Sync(nameof(ResBuffer), ref ResBuffer, false); + ser.Sync(nameof(ExecBuffer), ref ExecBuffer, false); + ser.Sync(nameof(ExecCounter), ref ExecCounter); + ser.Sync(nameof(ExecLength), ref ExecLength); + ser.Sync(nameof(InterruptResultBuffer), ref InterruptResultBuffer, false); + ser.Sync(nameof(ResCounter), ref ResCounter); + ser.Sync(nameof(ResLength), ref ResLength); + ser.Sync(nameof(LastSectorDataWriteByte), ref LastSectorDataWriteByte); + ser.Sync(nameof(LastSectorDataReadByte), ref LastSectorDataReadByte); + ser.Sync(nameof(LastByteReceived), ref LastByteReceived); - ser.Sync(nameof(CMD_FLAG_MT), ref CMD_FLAG_MT); - ser.Sync(nameof(CMD_FLAG_MF), ref CMD_FLAG_MF); - ser.Sync(nameof(CMD_FLAG_SK), ref CMD_FLAG_SK); - ser.Sync(nameof(SRT), ref SRT); - ser.Sync(nameof(HUT), ref HUT); - ser.Sync(nameof(HLT), ref HLT); - ser.Sync(nameof(ND), ref ND); - ser.Sync(nameof(SRT_Counter), ref SRT_Counter); - ser.Sync(nameof(HUT_Counter), ref HUT_Counter); - ser.Sync(nameof(HLT_Counter), ref HLT_Counter); + ser.Sync(nameof(_cmdIndex), ref _cmdIndex); + // resync the ActiveCommand + CMDIndex = _cmdIndex; - ser.Sync(nameof(SectorDelayCounter), ref SectorDelayCounter); - ser.Sync(nameof(SectorID), ref SectorID); + ActiveCommandParams.SyncState(ser); - #endregion + ser.Sync(nameof(IndexPulseCounter), ref IndexPulseCounter); + //ser.SyncEnum(nameof(_activeStatus), ref _activeStatus); + //ser.SyncEnum(nameof(_statusRaised), ref _statusRaised); - #region Timing + ser.Sync(nameof(CMD_FLAG_MT), ref CMD_FLAG_MT); + ser.Sync(nameof(CMD_FLAG_MF), ref CMD_FLAG_MF); + ser.Sync(nameof(CMD_FLAG_SK), ref CMD_FLAG_SK); + ser.Sync(nameof(SRT), ref SRT); + ser.Sync(nameof(HUT), ref HUT); + ser.Sync(nameof(HLT), ref HLT); + ser.Sync(nameof(ND), ref ND); + ser.Sync(nameof(SRT_Counter), ref SRT_Counter); + ser.Sync(nameof(HUT_Counter), ref HUT_Counter); + ser.Sync(nameof(HLT_Counter), ref HLT_Counter); - ser.Sync(nameof(LastCPUCycle), ref LastCPUCycle); - ser.Sync(nameof(StatusDelay), ref StatusDelay); - ser.Sync(nameof(TickCounter), ref TickCounter); - ser.Sync(nameof(DriveCycleCounter), ref DriveCycleCounter); + ser.Sync(nameof(SectorDelayCounter), ref SectorDelayCounter); + ser.Sync(nameof(SectorID), ref SectorID); - #endregion + #endregion - ser.EndSection(); - } + #region Timing - #endregion - } + ser.Sync(nameof(LastCPUCycle), ref LastCPUCycle); + ser.Sync(nameof(StatusDelay), ref StatusDelay); + ser.Sync(nameof(TickCounter), ref TickCounter); + ser.Sync(nameof(DriveCycleCounter), ref DriveCycleCounter); + + #endregion + + ser.EndSection(); + } + + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPS765.Static.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPS765.Static.cs index f74d8b4d29..9abd27e6a5 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPS765.Static.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPS765.Static.cs @@ -2,95 +2,95 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Static helper methods - /// - #region Attribution - /* + /// + /// Static helper methods + /// + #region Attribution + /* Implementation based on the information contained here: http://www.cpcwiki.eu/index.php/765_FDC and here: http://www.cpcwiki.eu/imgs/f/f3/UPD765_Datasheet_OCRed.pdf */ - #endregion - public partial class NECUPD765 - { - /// - /// Returns the specified bit value from supplied byte - /// - public static bool GetBit(int bitNumber, byte dataByte) - { - if (bitNumber < 0 || bitNumber > 7) - return false; + #endregion + public partial class NECUPD765 + { + /// + /// Returns the specified bit value from supplied byte + /// + public static bool GetBit(int bitNumber, byte dataByte) + { + if (bitNumber < 0 || bitNumber > 7) + return false; - BitArray bi = new BitArray(new byte[] { dataByte }); + BitArray bi = new BitArray(new byte[] { dataByte }); - return bi[bitNumber]; - } + return bi[bitNumber]; + } - /// - /// Sets the specified bit of the supplied byte to 1 - /// - public static void SetBit(int bitNumber, ref byte dataByte) - { - if (bitNumber < 0 || bitNumber > 7) - return; + /// + /// Sets the specified bit of the supplied byte to 1 + /// + public static void SetBit(int bitNumber, ref byte dataByte) + { + if (bitNumber < 0 || bitNumber > 7) + return; - int db = (int)dataByte; + int db = (int)dataByte; - db |= 1 << bitNumber; + db |= 1 << bitNumber; - dataByte = (byte)db; - } + dataByte = (byte)db; + } - /// - /// Sets the specified bit of the supplied byte to 0 - /// - public static void UnSetBit(int bitNumber, ref byte dataByte) - { - if (bitNumber < 0 || bitNumber > 7) - return; + /// + /// Sets the specified bit of the supplied byte to 0 + /// + public static void UnSetBit(int bitNumber, ref byte dataByte) + { + if (bitNumber < 0 || bitNumber > 7) + return; - int db = (int)dataByte; + int db = (int)dataByte; - db &= ~(1 << bitNumber); + db &= ~(1 << bitNumber); - dataByte = (byte)db; - } + dataByte = (byte)db; + } - /// - /// Returns a drive number (0-3) based on the first two bits of the supplied byte - /// - public static int GetUnitSelect(byte dataByte) - { - int driveNumber = dataByte & 0x03; - return driveNumber; - } + /// + /// Returns a drive number (0-3) based on the first two bits of the supplied byte + /// + public static int GetUnitSelect(byte dataByte) + { + int driveNumber = dataByte & 0x03; + return driveNumber; + } - /// - /// Sets the first two bits of a byte based on the supplied drive number (0-3) - /// - public static void SetUnitSelect(int driveNumber, ref byte dataByte) - { - switch (driveNumber) - { - case 0: - UnSetBit(SR0_US0, ref dataByte); - UnSetBit(SR0_US1, ref dataByte); - break; - case 1: - SetBit(SR0_US0, ref dataByte); - UnSetBit(SR0_US1, ref dataByte); - break; - case 2: - SetBit(SR0_US1, ref dataByte); - UnSetBit(SR0_US0, ref dataByte); - break; - case 3: - SetBit(SR0_US0, ref dataByte); - SetBit(SR0_US1, ref dataByte); - break; - } - } - } + /// + /// Sets the first two bits of a byte based on the supplied drive number (0-3) + /// + public static void SetUnitSelect(int driveNumber, ref byte dataByte) + { + switch (driveNumber) + { + case 0: + UnSetBit(SR0_US0, ref dataByte); + UnSetBit(SR0_US1, ref dataByte); + break; + case 1: + SetBit(SR0_US0, ref dataByte); + UnSetBit(SR0_US1, ref dataByte); + break; + case 2: + SetBit(SR0_US1, ref dataByte); + UnSetBit(SR0_US0, ref dataByte); + break; + case 3: + SetBit(SR0_US0, ref dataByte); + SetBit(SR0_US1, ref dataByte); + break; + } + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/AmstradGateArray.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/AmstradGateArray.cs index 38c2da72d9..55b2bf0106 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/AmstradGateArray.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/AmstradGateArray.cs @@ -11,38 +11,38 @@ using System.Threading.Tasks; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// * Amstrad Gate Array * - /// http://www.cpcwiki.eu/index.php/Gate_Array - /// https://web.archive.org/web/20170612081209/http://www.grimware.org/doku.php/documentations/devices/gatearray - /// - public class AmstradGateArray : IPortIODevice, IVideoProvider - { - #region Devices + /// + /// * Amstrad Gate Array * + /// http://www.cpcwiki.eu/index.php/Gate_Array + /// https://web.archive.org/web/20170612081209/http://www.grimware.org/doku.php/documentations/devices/gatearray + /// + public class AmstradGateArray : IPortIODevice, IVideoProvider + { + #region Devices - private CPCBase _machine; - private Z80A CPU => _machine.CPU; - private CRCT_6845 CRCT => _machine.CRCT; - //private CRTDevice CRT => _machine.CRT; - private IPSG PSG => _machine.AYDevice; - private NECUPD765 FDC => _machine.UPDDiskDevice; - private DatacorderDevice DATACORDER => _machine.TapeDevice; - private ushort BUSRQ => CPU.MEMRQ[CPU.bus_pntr]; - public const ushort PCh = 1; + private CPCBase _machine; + private Z80A CPU => _machine.CPU; + private CRCT_6845 CRCT => _machine.CRCT; + //private CRTDevice CRT => _machine.CRT; + private IPSG PSG => _machine.AYDevice; + private NECUPD765 FDC => _machine.UPDDiskDevice; + private DatacorderDevice DATACORDER => _machine.TapeDevice; + private ushort BUSRQ => CPU.MEMRQ[CPU.bus_pntr]; + public const ushort PCh = 1; - private GateArrayType ChipType; + private GateArrayType ChipType; - #endregion + #endregion - #region Palettes + #region Palettes - /// - /// The standard CPC Pallete (ordered by firmware #) - /// http://www.cpcwiki.eu/index.php/CPC_Palette - /// - public static readonly int[] CPCFirmwarePalette = - { - Colors.ARGB(0x00, 0x00, 0x00), // Black + /// + /// The standard CPC Pallete (ordered by firmware #) + /// http://www.cpcwiki.eu/index.php/CPC_Palette + /// + public static readonly int[] CPCFirmwarePalette = + { + Colors.ARGB(0x00, 0x00, 0x00), // Black Colors.ARGB(0x00, 0x00, 0x80), // Blue Colors.ARGB(0x00, 0x00, 0xFF), // Bright Blue Colors.ARGB(0x80, 0x00, 0x00), // Red @@ -71,13 +71,13 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC Colors.ARGB(0xFF, 0xFF, 0xFF), // Bright White }; - /// - /// The standard CPC Pallete (ordered by hardware #) - /// http://www.cpcwiki.eu/index.php/CPC_Palette - /// - public static readonly int[] CPCHardwarePalette = - { - Colors.ARGB(0x80, 0x80, 0x80), // White + /// + /// The standard CPC Pallete (ordered by hardware #) + /// http://www.cpcwiki.eu/index.php/CPC_Palette + /// + public static readonly int[] CPCHardwarePalette = + { + Colors.ARGB(0x80, 0x80, 0x80), // White Colors.ARGB(0x80, 0x80, 0x80), // White (duplicate) Colors.ARGB(0x00, 0xFF, 0x80), // Sea Green Colors.ARGB(0xFF, 0xFF, 0x80), // Pastel Yellow @@ -111,997 +111,997 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC Colors.ARGB(0x80, 0x80, 0xFF), // Pastel Blue }; - #endregion - - #region Clocks and Timing - - /// - /// The Gate Array Clock Speed - /// - public int GAClockSpeed = 16000000; - - /// - /// The CPU Clock Speed - /// - public int Z80ClockSpeed = 4000000; - - /// - /// CRCT Clock Speed - /// - public int CRCTClockSpeed = 1000000; - - /// - /// AY-3-8912 Clock Speed - /// - public int PSGClockSpeed = 1000000; - - /// - /// Number of CPU cycles in one frame - /// - public int FrameLength = 79872; - - /// - /// Number of Gate Array cycles within one frame - /// - public int GAFrameLength = 319488; - - #endregion - - #region Construction - - public AmstradGateArray(CPCBase machine, GateArrayType chipType) - { - _machine = machine; - ChipType = chipType; - //PenColours = new int[17]; - borderType = _machine.CPC.SyncSettings.BorderType; - SetupScreenSize(); - //Reset(); - - CRCT.AttachHSYNCCallback(OnHSYNC); - CRCT.AttachVSYNCCallback(OnVSYNC); - - CurrentLine = new CharacterLine(); - InitByteLookup(); - CalculateNextScreenMemory(); - } - - #endregion - - #region Registers and Internal State - - /// - /// PENR (register 0) - Pen Selection - /// This register can be used to select one of the 17 color-registers (pen 0 to 15 or the border). - /// It will remain selected until another PENR command is executed. - /// PENR Index - /// 7 6 5 4 3 2 1 0 color register selected - /// 0 0 0 0 n n n n pen n from 0 to 15 (4bits) - /// 0 0 0 1 x x x x border - /// - /// x can be 0 or 1, it doesn't matter - /// - private byte _PENR; - public byte PENR - { - get { return _PENR; } - set - { - _PENR = value; - if (_PENR.Bit(4)) - { - // border select - CurrentPen = 16; - } - else - { - // pen select - CurrentPen = _PENR & 0x0f; - } - } - } - - /// - /// 0-15: Pen Registers - /// 16: Border Colour - /// - public int[] ColourRegisters = new int[17]; - - /// - /// The currently selected Pen - /// - private int CurrentPen; - - /// - /// INKR (register 1) - Colour Selection - /// This register takes a 5bits parameter which is a color-code. This color-code range from 0 to 31 but there's only 27 differents colors - /// (because the Gate Array use a 3-states logic on the R,G and B signals, thus 3x3x3=27). - /// INKR Color - /// 7 6 5 4 3 2 1 0 - /// 0 1 0 n n n n n where n is a color code (5 bits) - /// - /// The PEN affected by the INKR command is updated (almost) immediatly - /// - private byte _INKR; - public byte INKR - { - get { return _INKR; } - set - { - _INKR = value; - ColourRegisters[CurrentPen] = _INKR & 0x1f; - } - } - - /// - /// RMR (register 2) - Select screen mode and ROM configuration - /// This register control the interrupt counter (reset), the upper and lower ROM paging and the video mode. - /// RMR Commands - /// 7 6 5 4 3 2 1 0 - /// 1 0 0 I UR LR VM--> - /// - /// I : if set (1), this will reset the interrupt counter - /// UR : Enable (0) or Disable (1) the upper ROM paging (&C000 to &FFFF). You can select which upper ROM with the I/O address &DF00 - /// LR : Enable (0) or Disable (1) the lower ROM paging - /// VM : Select the video mode 0,1,2 or 3 (it will take effect after the next HSync) - /// - private byte _RMR; - public byte RMR - { - get { return _RMR; } - set - { - _RMR = value; - //ScreenMode = _RMR & 0x03; - var sm = _RMR & 0x03; - if (sm != 1) - { - - } - - if ((_RMR & 0x08) != 0) - _machine.UpperROMPaged = false; - else - _machine.UpperROMPaged = true; - - if ((_RMR & 0x04) != 0) - _machine.LowerROMPaged = false; - else - _machine.LowerROMPaged = true; - - if (_RMR.Bit(4)) - { - // reset interrupt counter - InterruptCounter = 0; - } - } - } - - /// - /// RAMR (register 3) - RAM Banking - /// This register exists only in CPCs with 128K RAM (like the CPC 6128, or CPCs with Standard Memory Expansions) - /// Note: In the CPC 6128, the register is a separate PAL that assists the Gate Array chip - /// - /// Bit Value Function - /// 7 1 Gate Array function 3 - /// 6 1 - /// 5 b 64K bank number(0..7); always 0 on an unexpanded CPC6128, 0-7 on Standard Memory Expansions - /// 4 b - /// 3 b - /// 2 x RAM Config(0..7) - /// 1 x "" - /// 0 x "" - /// - /// The 3bit RAM Config value is used to access the second 64K of the total 128K RAM that is built into the CPC 6128 or the additional 64K-512K of standard memory expansions. - /// These contain up to eight 64K ram banks, which are selected with bit 3-5. A standard CPC 6128 only contains bank 0. Normally the register is set to 0, so that only the - /// first 64K RAM are used (identical to the CPC 464 and 664 models). The register can be used to select between the following eight predefined configurations only: - /// - /// -Address- 0 1 2 3 4 5 6 7 - /// 0000-3FFF RAM_0 RAM_0 RAM_4 RAM_0 RAM_0 RAM_0 RAM_0 RAM_0 - /// 4000-7FFF RAM_1 RAM_1 RAM_5 RAM_3 RAM_4 RAM_5 RAM_6 RAM_7 - /// 8000-BFFF RAM_2 RAM_2 RAM_6 RAM_2 RAM_2 RAM_2 RAM_2 RAM_2 - /// C000-FFFF RAM_3 RAM_7 RAM_7 RAM_7 RAM_3 RAM_3 RAM_3 RAM_3 - /// - /// The Video RAM is always located in the first 64K, VRAM is in no way affected by this register - /// - private byte _RAMR; - /// - /// This is actually implemented outside of here. These values do nothing. - /// - public byte RAMR - { - get { return _RAMR; } - set - { - _RAMR = value; - } - } - - /// - /// The selected screen mode (updated after every HSYNC) - /// - private int ScreenMode; - - /// - /// Simulates the internal 6bit INT counter - /// - private int _interruptCounter; - public int InterruptCounter - { - get { return _interruptCounter; } - set { _interruptCounter = value; } - } - - /// - /// Interrupts are delayed when a VSYNC occurs - /// - private int VSYNCDelay; - - /// - /// Signals that the frame end has been reached - /// - public bool FrameEnd; - - /// - /// Internal phase clock - /// - private int ClockCounter; - - /// - /// Master frame clock counter - /// - public int FrameClock; - - /// - /// Simulates the gate array memory /WAIT line - /// - private bool WaitLine; - - /// - /// 16-bit address - read from the CRCT - /// - private short _MA; - private short MA - { - get - { - _MA = CRCT.MA; - return _MA; - } - } - - /// - /// Set when the HSYNC signal is detected from the CRCT - /// - private bool HSYNC; - -// /// -// /// Is set when an initial HSYNC is seen from the CRCT -// /// On real hardware interrupt generation is based on the falling edge of the HSYNC signal -// /// So in this emulation, once the falling edge is detected, interrupt processing happens -// /// -// private bool HSYNC_falling; - - /// - /// Used to count HSYNCs during a VSYNC - /// - private int HSYNC_counter; - - /// - /// Set when the VSYNC signal is detected from the CRCT - /// - private bool VSYNC; - - /// - /// TRUE when the /INT pin is held low - /// - private bool InterruptRaised; - - /// - /// Counts the GA cycles that the /INT pin should be held low - /// - private int InterruptHoldCounter; - - /// - /// Set at the start of a new frame - /// - public bool IsNewFrame; - - /// - /// Set when a new line is beginning - /// - public bool IsNewLine; - - /// - /// Horizontal Character Counter - /// - private int HCC; - - /// - /// Vertical Line Counter - /// - private int VLC; - - /// - /// The first video byte fetched - /// - private byte VideoByte1; - - /// - /// The second video byte fetched - /// - private byte VideoByte2; - - #endregion - - #region Clock Business - - /// - /// Called every CPU cycle - /// In reality the GA is clocked at 16Mhz (4 times the frequency of the CPU) - /// Therefore this method has to take care of: - /// 4 GA cycles - /// 1 CRCT cycle every 4 calls - /// 1 PSG cycle every 4 calls - /// 1 CPU cycle (uncontended) - /// - public void ClockCycle() - { - // gatearray uses 4-phase clock to supply clocks to other devices - switch (ClockCounter) - { - case 0: - CRCT.ClockCycle(); - WaitLine = false; - break; - case 1: - WaitLine = true; - // detect new scanline and upcoming new frame on next render cycle - //FrameDetector(); - break; - case 2: - // video fetch - WaitLine = true; - //FetchByte(1); - break; - case 3: - // video fetch and render - WaitLine = true; - //FetchByte(2); - GACharacterCycle(); - //PixelGenerator(); - break; - } - - if (!HSYNC && CRCT.HSYNC) - { - HSYNC = true; - } - - // run the interrupt generator routine - InterruptGenerator(); - - if (!CRCT.HSYNC) - { - HSYNC = false; - } - - // conditional CPU cycle - DoConditionalCPUCycle(); - - AdvanceClock(); - } - - /// - /// Increments the internal clock counters by one - /// - private void AdvanceClock() - { - FrameClock++; - ClockCounter++; - - if (ClockCounter == 4) - ClockCounter = 0; - - // check for frame end - if (FrameClock == FrameLength) - { - FrameEnd = true; - } - } - - /// - /// Runs a 4 Mhz CPU cycle if neccessary - /// /WAIT line status is a factor here - /// - private void DoConditionalCPUCycle() - { - if (!WaitLine) - { - // /WAIT line is NOT active - CPU.ExecuteOne(); - return; - } - - // /WAIT line is active - switch (ClockCounter) - { - case 2: - case 3: - // gate array video fetch is occuring - // check for memory access - if (BUSRQ > 0) - { - // memory action upcoming - CPU clock is halted - CPU.TotalExecutedCycles++; - } - break; - - case 1: - // CPU accesses RAM if it's performing a non-opcode read or write - // assume for now that an opcode fetch is always looking at PC - if (BUSRQ == PCh) - { - // opcode fetch memory action upcoming - CPU clock is halted - CPU.TotalExecutedCycles++; - } - else - { - // no fetch, or non-opcode fetch - CPU.ExecuteOne(); - } - break; - } - } - - #endregion - - #region Frame & Interrupt Handling - - /// - /// The CRCT builds the picture in a strange way, so that the top left of the display area is the first pixel from - /// video RAM. The borders come either side of the HSYNC and VSYNCs later on: - /// https://web.archive.org/web/20170501112330im_/http://www.grimware.org/lib/exe/fetch.php/documentations/devices/crtc.6845/crtc.standard.video.frame.png?w=800&h=500 - /// Therefore when the gate array initialises, we will attempt end the frame early in order to - /// sync up at the point where VSYNC is active and HSYNC just begins. This is roughly how a CRT monitor would display the picture. - /// The CRT would start a new line at the point where an HSYNC is detected. - /// - private void FrameDetector() - { - if (CRCT.HSYNC && !IsNewLine) - { - // start of a new line on the next render cycle - IsNewLine = true; - - // process scanline - //CRT.CurrentLine.CommitScanline(); - - // check for end of frame - if (CRCT.VSYNC && !IsNewFrame) - { - // start of a new frame on the next render cycle - IsNewFrame = true; - //FrameEnd = true; - VLC = 0; - } - else if (!CRCT.VSYNC) - { - // increment line counter - VLC++; - IsNewFrame = false; - } - - HCC = 0; - - // update screenmode - //ScreenMode = RMR & 0x03; - //CRT.CurrentLine.InitScanline(ScreenMode, VLC); - } - else if (!CRCT.HSYNC) - { - // reset the flags - IsNewLine = false; - IsNewFrame = false; - } - } - - /// - /// Handles interrupt generation - /// - private void InterruptGenerator() - { - if (HSYNC && !CRCT.HSYNC) - { - // falling edge of the HSYNC detected - InterruptCounter++; - - if (CRCT.VSYNC) - { - if (HSYNC_counter >= 2) - { - // x2 HSYNC have happened during VSYNC - if (InterruptCounter >= 32) - { - // no interrupt - InterruptCounter = 0; - } - else if (InterruptCounter < 32) - { - // interrupt - InterruptRaised = true; - InterruptCounter = 0; - } - - HSYNC_counter = 0; - } - else - { - HSYNC_counter++; - } - } - - if (InterruptCounter == 52) - { - // gatearray should raise an interrupt - InterruptRaised = true; - InterruptCounter = 0; - } - } - - if (InterruptRaised) - { - // interrupt should been raised - CPU.FlagI = true; - InterruptHoldCounter++; - - // the INT signal should be held low for 1.4us. - // in gatearray cycles, this equates to 22.4 - // we will round down to 22 for emulation purposes - if (InterruptHoldCounter >= 22) - { - CPU.FlagI = false; - InterruptRaised = false; - InterruptHoldCounter = 0; - } - } - } - - #endregion - - #region Rendering Business - - /// - /// Builds up current scanline character information - /// Ther GA modifies HSYNC and VSYNC signals before they are sent to the monitor - /// This is handled here - /// Runs at 1Mhz - /// - private void GACharacterCycle() - { - if (CRCT.VSYNC && CRCT.HSYNC) - { - // both hsync and vsync active - CurrentLine.AddCharacter(Phase.HSYNCandVSYNC); - } - else if (CRCT.VSYNC) - { - // vsync is active but hsync is not - CurrentLine.AddCharacter(Phase.VSYNC); - } - else if (CRCT.HSYNC) - { - // hsync is active but vsync is not - CurrentLine.AddCharacter(Phase.HSYNC); - } - else if (!CRCT.DISPTMG) - { - // border generation - CurrentLine.AddCharacter(Phase.BORDER); - } - else if (CRCT.DISPTMG) - { - // pixels generated from video RAM - CurrentLine.AddCharacter(Phase.DISPLAY); - } - } - - /// - /// Holds the upcoming video RAM addresses for the next scanline - /// Firmware default size is 80 (40 characters - 2 bytes per character) - /// - private ushort[] NextVidRamLine = new ushort[40 * 2]; - - /// - /// The current character line we are working from - /// - private CharacterLine CurrentLine; - - /// - /// List of screen lines as they are built up - /// - private List ScreenLines = new List(); - - /// - /// Pixel value lookups for every scanline byte value - /// Based on the lookup at https://github.com/gavinpugh/xnacpc - /// - private int[][] ByteLookup = new int[4][]; - private void InitByteLookup() - { - int pix; - for (int m = 0; m < 4; m++) - { - int pos = 0; - ByteLookup[m] = new int[256 * 8]; - for (int b = 0; b < 256; b++) - { - switch (m) - { - case 0: - pix = b & 0xaa; - pix = (((pix & 0x80) >> 7) | ((pix & 0x08) >> 2) | ((pix & 0x20) >> 3) | ((pix & 0x02) << 2)); - for (int c = 0; c < 4; c++) - ByteLookup[m][pos++] = pix; - pix = b & 0x55; - pix = (((pix & 0x40) >> 6) | ((pix & 0x04) >> 1) | ((pix & 0x10) >> 2) | ((pix & 0x01) << 3)); - for (int c = 0; c < 4; c++) - ByteLookup[m][pos++] = pix; - break; - case 1: - pix = (((b & 0x80) >> 7) | ((b & 0x08) >> 2)); - ByteLookup[m][pos++] = pix; - ByteLookup[m][pos++] = pix; - pix = (((b & 0x40) >> 6) | ((b & 0x04) >> 1)); - ByteLookup[m][pos++] = pix; - ByteLookup[m][pos++] = pix; - pix = (((b & 0x20) >> 5) | (b & 0x02)); - ByteLookup[m][pos++] = pix; - ByteLookup[m][pos++] = pix; - pix = (((b & 0x10) >> 4) | ((b & 0x01) << 1)); - ByteLookup[m][pos++] = pix; - ByteLookup[m][pos++] = pix; - break; - case 2: - for (int i = 7; i >= 0; i--) - ByteLookup[m][pos++] = ((b & (1 << i)) != 0) ? 1 : 0; - break; - case 3: - pix = b & 0xaa; - pix = (((pix & 0x80) >> 7) | ((pix & 0x08) >> 2) | ((pix & 0x20) >> 3) | ((pix & 0x02) << 2)); - for (int c = 0; c < 4; c++) - ByteLookup[m][pos++] = pix; - pix = b & 0x55; - pix = (((pix & 0x40) >> 6) | ((pix & 0x04) >> 1) | ((pix & 0x10) >> 2) | ((pix & 0x01) << 3)); - for (int c = 0; c < 4; c++) - ByteLookup[m][pos++] = pix; - break; - } - } - } - } - - /// - /// Runs at HSYNC *AFTER* the scanline has been commmitted - /// Sets up the upcoming memory addresses for the next scanline - /// - private void CalculateNextScreenMemory() - { - var verCharCount = CRCT.VCC; - var verRasCount = CRCT.VLC; - - var screenWidthByteCount = CRCT.DisplayWidth * 2; - NextVidRamLine = new ushort[screenWidthByteCount * 2]; - var screenHeightCharCount = CRCT.DisplayHeightInChars; - var screenAddress = CRCT.MA; - - int baseAddress = ((screenAddress << 2) & 0xf000); - int offset = (screenAddress * 2) & 0x7ff; - - int x = offset + ((verCharCount * screenWidthByteCount) & 0x7ff); - int y = baseAddress + (verRasCount * 0x800); - - for (int b = 0; b < screenWidthByteCount; b++) - { - NextVidRamLine[b] = (ushort)(y + x); - x++; - x &= 0x7ff; - } - } - - /// - /// Called at the start of HSYNC, this renders the currently built-up scanline - /// - private void RenderScanline() - { - // memory addresses - int cRow = CRCT.VCC; - int cRas = CRCT.VLC; - - int screenByteWidth = CRCT.DisplayWidth * 2; - var screenHeightCharCount = CRCT.DisplayHeightInChars; - //CalculateNextScreenMemory(); - var crctAddr = CRCT.DStartHigh << 8; - crctAddr |= CRCT.DStartLow; - var baseAddr = ((crctAddr << 2) & (0xF000)); //CRCT.VideoPageBase;// - var baseOffset = (crctAddr * 2) & 0x7FF; //CRCT.VideoRAMOffset * 2; // - var xA = baseOffset + ((cRow * screenByteWidth) & 0x7ff); - var yA = baseAddr + (cRas * 2048); - - // border and display - int pix = 0; - int scrByte = 0; - - for (int i = 0; i < CurrentLine.PhaseCount; i++) - { - // every character renders 8 pixels - switch (CurrentLine.Phases[i]) - { - case Phase.NONE: - break; - - case Phase.HSYNC: - break; - case Phase.HSYNCandVSYNC: - break; - case Phase.VSYNC: - break; - case Phase.BORDER: - // output current border colour - for (pix = 0; pix < 16; pix++) - { - CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[16]]); - } - break; - case Phase.DISPLAY: - // each character references 2 bytes in video RAM - byte data; - - for (int by = 0; by < 2; by++) - { - ushort addr = (ushort)(yA + xA); - data = _machine.FetchScreenMemory(addr); - scrByte++; - - switch (CurrentLine.ScreenMode) - { - case 0: - pix = data & 0xaa; - pix = (((pix & 0x80) >> 7) | ((pix & 0x08) >> 2) | ((pix & 0x20) >> 3) | ((pix & 0x02) << 2)); - for (int c = 0; c < 4; c++) - CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); - pix = data & 0x55; - pix = (((pix & 0x40) >> 6) | ((pix & 0x04) >> 1) | ((pix & 0x10) >> 2) | ((pix & 0x01) << 3)); - for (int c = 0; c < 4; c++) - CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); - break; - case 1: - pix = (((data & 0x80) >> 7) | ((data & 0x08) >> 2)); - CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); - CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); - pix = (((data & 0x40) >> 6) | ((data & 0x04) >> 1)); - CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); - CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); - pix = (((data & 0x20) >> 5) | (data & 0x02)); - CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); - CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); - pix = (((data & 0x10) >> 4) | ((data & 0x01) << 1)); - CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); - CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); - break; - case 2: - pix = data; - CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix.Bit(7) ? 1 : 0]]); - CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix.Bit(6) ? 1 : 0]]); - CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix.Bit(5) ? 1 : 0]]); - CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix.Bit(4) ? 1 : 0]]); - CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix.Bit(3) ? 1 : 0]]); - CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix.Bit(2) ? 1 : 0]]); - CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix.Bit(1) ? 1 : 0]]); - CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix.Bit(0) ? 1 : 0]]); - break; - case 3: - pix = data & 0xaa; - pix = (((pix & 0x80) >> 7) | ((pix & 0x08) >> 2) | ((pix & 0x20) >> 3) | ((pix & 0x02) << 2)); - for (int c = 0; c < 4; c++) - CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); - pix = data & 0x55; - pix = (((pix & 0x40) >> 6) | ((pix & 0x04) >> 1) | ((pix & 0x10) >> 2) | ((pix & 0x01) << 3)); - for (int c = 0; c < 4; c++) - CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); - break; - } - - xA++; - xA &= 0x7ff; - } - - break; - } - } - - // add to the list - ScreenLines.Add(new CharacterLine - { - ScreenMode = CurrentLine.ScreenMode, - Phases = CurrentLine.Phases.ToList(), - Pixels = CurrentLine.Pixels.ToList() - }); - } - - #endregion - - #region Public Methods - - /// - /// Called when the Z80 acknowledges an interrupt - /// - public void IORQA() - { - // bit 5 of the interrupt counter is reset - InterruptCounter &= ~(1 << 5); - } - - private int slCounter = 0; - private int slBackup = 0; - - /// - /// Fired when the CRCT flags HSYNC - /// - public void OnHSYNC() - { - HSYNC = true; - slCounter++; - - // commit the scanline - RenderScanline(); - - // setup vid memory for next scanline - CalculateNextScreenMemory(); - - if (CRCT.VLC == 0) - { - // update screenmode - ScreenMode = _RMR & 0x03; - } - - // setup scanline for next - CurrentLine.Clear(ScreenMode); - } - - /// - /// Fired when the CRCT flags VSYNC - /// - public void OnVSYNC() - { - FrameEnd = true; - slBackup = slCounter; - slCounter = 0; - } - - #endregion - - #region IVideoProvider - - public int[] ScreenBuffer; - - private int _virtualWidth; - private int _virtualHeight; - private int _bufferWidth; - private int _bufferHeight; - - public int BackgroundColor - { - get { return CPCHardwarePalette[0]; } - } - - public int VirtualWidth - { - get { return _virtualWidth; } - set { _virtualWidth = value; } - } - - public int VirtualHeight - { - get { return _virtualHeight; } - set { _virtualHeight = value; } - } - - public int BufferWidth - { - get { return _bufferWidth; } - set { _bufferWidth = value; } - } - - public int BufferHeight - { - get { return _bufferHeight; } - set { _bufferHeight = value; } - } - - public int SysBufferWidth; - public int SysBufferHeight; - - public int VsyncNumerator - { - get { return 200000000; } - set { } - } - - public int VsyncDenominator - { - get { return Z80ClockSpeed; } - } - - public int[] GetVideoBuffer() - { - // get only lines that have pixel data - var lines = ScreenLines.Where(a => a.Pixels.Count > 0); - - int pos = 0; - int lCount = 0; - foreach (var l in lines) - { - var lCop = l.Pixels.ToList(); - var len = l.Pixels.Count; - if (l.Phases.Contains(Phase.VSYNC) && l.Phases.Contains(Phase.BORDER)) - continue; - - if (len < 320) - continue; - - var pad = BufferWidth - len; - if (pad < 0) - { - // trim the left and right - var padPos = pad * -1; - var excessL = padPos / 2; - var excessR = excessL + (padPos % 2); - for (int i = 0; i < excessL; i++) - { - var lThing = lCop.First(); - - lCop.Remove(lThing); - } - for (int i = 0; i < excessL; i++) - { - var lThing = lCop.Last(); - - lCop.Remove(lThing); - } - } - - var lPad = pad / 2; - var rPad = lPad + (pad % 2); - - for (int i = 0; i < 2; i++) - { - lCount++; - - for (int pL = 0; pL < lPad; pL++) - { - ScreenBuffer[pos++] = 0; - } - - for (int pix = 0; pix < lCop.Count; pix++) - { - ScreenBuffer[pos++] = lCop[pix]; - } - - for (int pR = 0; pR < rPad; pR++) - { - ScreenBuffer[pos++] = 0; - } - } - - if (lCount >= BufferHeight - 2) - { - break; - } - } - - ScreenLines.Clear(); - - return ScreenBuffer; + #endregion + + #region Clocks and Timing + + /// + /// The Gate Array Clock Speed + /// + public int GAClockSpeed = 16000000; + + /// + /// The CPU Clock Speed + /// + public int Z80ClockSpeed = 4000000; + + /// + /// CRCT Clock Speed + /// + public int CRCTClockSpeed = 1000000; + + /// + /// AY-3-8912 Clock Speed + /// + public int PSGClockSpeed = 1000000; + + /// + /// Number of CPU cycles in one frame + /// + public int FrameLength = 79872; + + /// + /// Number of Gate Array cycles within one frame + /// + public int GAFrameLength = 319488; + + #endregion + + #region Construction + + public AmstradGateArray(CPCBase machine, GateArrayType chipType) + { + _machine = machine; + ChipType = chipType; + //PenColours = new int[17]; + borderType = _machine.CPC.SyncSettings.BorderType; + SetupScreenSize(); + //Reset(); + + CRCT.AttachHSYNCCallback(OnHSYNC); + CRCT.AttachVSYNCCallback(OnVSYNC); + + CurrentLine = new CharacterLine(); + InitByteLookup(); + CalculateNextScreenMemory(); + } + + #endregion + + #region Registers and Internal State + + /// + /// PENR (register 0) - Pen Selection + /// This register can be used to select one of the 17 color-registers (pen 0 to 15 or the border). + /// It will remain selected until another PENR command is executed. + /// PENR Index + /// 7 6 5 4 3 2 1 0 color register selected + /// 0 0 0 0 n n n n pen n from 0 to 15 (4bits) + /// 0 0 0 1 x x x x border + /// + /// x can be 0 or 1, it doesn't matter + /// + private byte _PENR; + public byte PENR + { + get { return _PENR; } + set + { + _PENR = value; + if (_PENR.Bit(4)) + { + // border select + CurrentPen = 16; + } + else + { + // pen select + CurrentPen = _PENR & 0x0f; + } + } + } + + /// + /// 0-15: Pen Registers + /// 16: Border Colour + /// + public int[] ColourRegisters = new int[17]; + + /// + /// The currently selected Pen + /// + private int CurrentPen; + + /// + /// INKR (register 1) - Colour Selection + /// This register takes a 5bits parameter which is a color-code. This color-code range from 0 to 31 but there's only 27 differents colors + /// (because the Gate Array use a 3-states logic on the R,G and B signals, thus 3x3x3=27). + /// INKR Color + /// 7 6 5 4 3 2 1 0 + /// 0 1 0 n n n n n where n is a color code (5 bits) + /// + /// The PEN affected by the INKR command is updated (almost) immediatly + /// + private byte _INKR; + public byte INKR + { + get { return _INKR; } + set + { + _INKR = value; + ColourRegisters[CurrentPen] = _INKR & 0x1f; + } + } + + /// + /// RMR (register 2) - Select screen mode and ROM configuration + /// This register control the interrupt counter (reset), the upper and lower ROM paging and the video mode. + /// RMR Commands + /// 7 6 5 4 3 2 1 0 + /// 1 0 0 I UR LR VM--> + /// + /// I : if set (1), this will reset the interrupt counter + /// UR : Enable (0) or Disable (1) the upper ROM paging (&C000 to &FFFF). You can select which upper ROM with the I/O address &DF00 + /// LR : Enable (0) or Disable (1) the lower ROM paging + /// VM : Select the video mode 0,1,2 or 3 (it will take effect after the next HSync) + /// + private byte _RMR; + public byte RMR + { + get { return _RMR; } + set + { + _RMR = value; + //ScreenMode = _RMR & 0x03; + var sm = _RMR & 0x03; + if (sm != 1) + { + + } + + if ((_RMR & 0x08) != 0) + _machine.UpperROMPaged = false; + else + _machine.UpperROMPaged = true; + + if ((_RMR & 0x04) != 0) + _machine.LowerROMPaged = false; + else + _machine.LowerROMPaged = true; + + if (_RMR.Bit(4)) + { + // reset interrupt counter + InterruptCounter = 0; + } + } + } + + /// + /// RAMR (register 3) - RAM Banking + /// This register exists only in CPCs with 128K RAM (like the CPC 6128, or CPCs with Standard Memory Expansions) + /// Note: In the CPC 6128, the register is a separate PAL that assists the Gate Array chip + /// + /// Bit Value Function + /// 7 1 Gate Array function 3 + /// 6 1 + /// 5 b 64K bank number(0..7); always 0 on an unexpanded CPC6128, 0-7 on Standard Memory Expansions + /// 4 b + /// 3 b + /// 2 x RAM Config(0..7) + /// 1 x "" + /// 0 x "" + /// + /// The 3bit RAM Config value is used to access the second 64K of the total 128K RAM that is built into the CPC 6128 or the additional 64K-512K of standard memory expansions. + /// These contain up to eight 64K ram banks, which are selected with bit 3-5. A standard CPC 6128 only contains bank 0. Normally the register is set to 0, so that only the + /// first 64K RAM are used (identical to the CPC 464 and 664 models). The register can be used to select between the following eight predefined configurations only: + /// + /// -Address- 0 1 2 3 4 5 6 7 + /// 0000-3FFF RAM_0 RAM_0 RAM_4 RAM_0 RAM_0 RAM_0 RAM_0 RAM_0 + /// 4000-7FFF RAM_1 RAM_1 RAM_5 RAM_3 RAM_4 RAM_5 RAM_6 RAM_7 + /// 8000-BFFF RAM_2 RAM_2 RAM_6 RAM_2 RAM_2 RAM_2 RAM_2 RAM_2 + /// C000-FFFF RAM_3 RAM_7 RAM_7 RAM_7 RAM_3 RAM_3 RAM_3 RAM_3 + /// + /// The Video RAM is always located in the first 64K, VRAM is in no way affected by this register + /// + private byte _RAMR; + /// + /// This is actually implemented outside of here. These values do nothing. + /// + public byte RAMR + { + get { return _RAMR; } + set + { + _RAMR = value; + } + } + + /// + /// The selected screen mode (updated after every HSYNC) + /// + private int ScreenMode; + + /// + /// Simulates the internal 6bit INT counter + /// + private int _interruptCounter; + public int InterruptCounter + { + get { return _interruptCounter; } + set { _interruptCounter = value; } + } + + /// + /// Interrupts are delayed when a VSYNC occurs + /// + private int VSYNCDelay; + + /// + /// Signals that the frame end has been reached + /// + public bool FrameEnd; + + /// + /// Internal phase clock + /// + private int ClockCounter; + + /// + /// Master frame clock counter + /// + public int FrameClock; + + /// + /// Simulates the gate array memory /WAIT line + /// + private bool WaitLine; + + /// + /// 16-bit address - read from the CRCT + /// + private short _MA; + private short MA + { + get + { + _MA = CRCT.MA; + return _MA; + } + } + + /// + /// Set when the HSYNC signal is detected from the CRCT + /// + private bool HSYNC; + + // /// + // /// Is set when an initial HSYNC is seen from the CRCT + // /// On real hardware interrupt generation is based on the falling edge of the HSYNC signal + // /// So in this emulation, once the falling edge is detected, interrupt processing happens + // /// + // private bool HSYNC_falling; + + /// + /// Used to count HSYNCs during a VSYNC + /// + private int HSYNC_counter; + + /// + /// Set when the VSYNC signal is detected from the CRCT + /// + private bool VSYNC; + + /// + /// TRUE when the /INT pin is held low + /// + private bool InterruptRaised; + + /// + /// Counts the GA cycles that the /INT pin should be held low + /// + private int InterruptHoldCounter; + + /// + /// Set at the start of a new frame + /// + public bool IsNewFrame; + + /// + /// Set when a new line is beginning + /// + public bool IsNewLine; + + /// + /// Horizontal Character Counter + /// + private int HCC; + + /// + /// Vertical Line Counter + /// + private int VLC; + + /// + /// The first video byte fetched + /// + private byte VideoByte1; + + /// + /// The second video byte fetched + /// + private byte VideoByte2; + + #endregion + + #region Clock Business + + /// + /// Called every CPU cycle + /// In reality the GA is clocked at 16Mhz (4 times the frequency of the CPU) + /// Therefore this method has to take care of: + /// 4 GA cycles + /// 1 CRCT cycle every 4 calls + /// 1 PSG cycle every 4 calls + /// 1 CPU cycle (uncontended) + /// + public void ClockCycle() + { + // gatearray uses 4-phase clock to supply clocks to other devices + switch (ClockCounter) + { + case 0: + CRCT.ClockCycle(); + WaitLine = false; + break; + case 1: + WaitLine = true; + // detect new scanline and upcoming new frame on next render cycle + //FrameDetector(); + break; + case 2: + // video fetch + WaitLine = true; + //FetchByte(1); + break; + case 3: + // video fetch and render + WaitLine = true; + //FetchByte(2); + GACharacterCycle(); + //PixelGenerator(); + break; + } + + if (!HSYNC && CRCT.HSYNC) + { + HSYNC = true; + } + + // run the interrupt generator routine + InterruptGenerator(); + + if (!CRCT.HSYNC) + { + HSYNC = false; + } + + // conditional CPU cycle + DoConditionalCPUCycle(); + + AdvanceClock(); + } + + /// + /// Increments the internal clock counters by one + /// + private void AdvanceClock() + { + FrameClock++; + ClockCounter++; + + if (ClockCounter == 4) + ClockCounter = 0; + + // check for frame end + if (FrameClock == FrameLength) + { + FrameEnd = true; + } + } + + /// + /// Runs a 4 Mhz CPU cycle if neccessary + /// /WAIT line status is a factor here + /// + private void DoConditionalCPUCycle() + { + if (!WaitLine) + { + // /WAIT line is NOT active + CPU.ExecuteOne(); + return; + } + + // /WAIT line is active + switch (ClockCounter) + { + case 2: + case 3: + // gate array video fetch is occuring + // check for memory access + if (BUSRQ > 0) + { + // memory action upcoming - CPU clock is halted + CPU.TotalExecutedCycles++; + } + break; + + case 1: + // CPU accesses RAM if it's performing a non-opcode read or write + // assume for now that an opcode fetch is always looking at PC + if (BUSRQ == PCh) + { + // opcode fetch memory action upcoming - CPU clock is halted + CPU.TotalExecutedCycles++; + } + else + { + // no fetch, or non-opcode fetch + CPU.ExecuteOne(); + } + break; + } + } + + #endregion + + #region Frame & Interrupt Handling + + /// + /// The CRCT builds the picture in a strange way, so that the top left of the display area is the first pixel from + /// video RAM. The borders come either side of the HSYNC and VSYNCs later on: + /// https://web.archive.org/web/20170501112330im_/http://www.grimware.org/lib/exe/fetch.php/documentations/devices/crtc.6845/crtc.standard.video.frame.png?w=800&h=500 + /// Therefore when the gate array initialises, we will attempt end the frame early in order to + /// sync up at the point where VSYNC is active and HSYNC just begins. This is roughly how a CRT monitor would display the picture. + /// The CRT would start a new line at the point where an HSYNC is detected. + /// + private void FrameDetector() + { + if (CRCT.HSYNC && !IsNewLine) + { + // start of a new line on the next render cycle + IsNewLine = true; + + // process scanline + //CRT.CurrentLine.CommitScanline(); + + // check for end of frame + if (CRCT.VSYNC && !IsNewFrame) + { + // start of a new frame on the next render cycle + IsNewFrame = true; + //FrameEnd = true; + VLC = 0; + } + else if (!CRCT.VSYNC) + { + // increment line counter + VLC++; + IsNewFrame = false; + } + + HCC = 0; + + // update screenmode + //ScreenMode = RMR & 0x03; + //CRT.CurrentLine.InitScanline(ScreenMode, VLC); + } + else if (!CRCT.HSYNC) + { + // reset the flags + IsNewLine = false; + IsNewFrame = false; + } + } + + /// + /// Handles interrupt generation + /// + private void InterruptGenerator() + { + if (HSYNC && !CRCT.HSYNC) + { + // falling edge of the HSYNC detected + InterruptCounter++; + + if (CRCT.VSYNC) + { + if (HSYNC_counter >= 2) + { + // x2 HSYNC have happened during VSYNC + if (InterruptCounter >= 32) + { + // no interrupt + InterruptCounter = 0; + } + else if (InterruptCounter < 32) + { + // interrupt + InterruptRaised = true; + InterruptCounter = 0; + } + + HSYNC_counter = 0; + } + else + { + HSYNC_counter++; + } + } + + if (InterruptCounter == 52) + { + // gatearray should raise an interrupt + InterruptRaised = true; + InterruptCounter = 0; + } + } + + if (InterruptRaised) + { + // interrupt should been raised + CPU.FlagI = true; + InterruptHoldCounter++; + + // the INT signal should be held low for 1.4us. + // in gatearray cycles, this equates to 22.4 + // we will round down to 22 for emulation purposes + if (InterruptHoldCounter >= 22) + { + CPU.FlagI = false; + InterruptRaised = false; + InterruptHoldCounter = 0; + } + } + } + + #endregion + + #region Rendering Business + + /// + /// Builds up current scanline character information + /// Ther GA modifies HSYNC and VSYNC signals before they are sent to the monitor + /// This is handled here + /// Runs at 1Mhz + /// + private void GACharacterCycle() + { + if (CRCT.VSYNC && CRCT.HSYNC) + { + // both hsync and vsync active + CurrentLine.AddCharacter(Phase.HSYNCandVSYNC); + } + else if (CRCT.VSYNC) + { + // vsync is active but hsync is not + CurrentLine.AddCharacter(Phase.VSYNC); + } + else if (CRCT.HSYNC) + { + // hsync is active but vsync is not + CurrentLine.AddCharacter(Phase.HSYNC); + } + else if (!CRCT.DISPTMG) + { + // border generation + CurrentLine.AddCharacter(Phase.BORDER); + } + else if (CRCT.DISPTMG) + { + // pixels generated from video RAM + CurrentLine.AddCharacter(Phase.DISPLAY); + } + } + + /// + /// Holds the upcoming video RAM addresses for the next scanline + /// Firmware default size is 80 (40 characters - 2 bytes per character) + /// + private ushort[] NextVidRamLine = new ushort[40 * 2]; + + /// + /// The current character line we are working from + /// + private CharacterLine CurrentLine; + + /// + /// List of screen lines as they are built up + /// + private List ScreenLines = new List(); + + /// + /// Pixel value lookups for every scanline byte value + /// Based on the lookup at https://github.com/gavinpugh/xnacpc + /// + private int[][] ByteLookup = new int[4][]; + private void InitByteLookup() + { + int pix; + for (int m = 0; m < 4; m++) + { + int pos = 0; + ByteLookup[m] = new int[256 * 8]; + for (int b = 0; b < 256; b++) + { + switch (m) + { + case 0: + pix = b & 0xaa; + pix = (((pix & 0x80) >> 7) | ((pix & 0x08) >> 2) | ((pix & 0x20) >> 3) | ((pix & 0x02) << 2)); + for (int c = 0; c < 4; c++) + ByteLookup[m][pos++] = pix; + pix = b & 0x55; + pix = (((pix & 0x40) >> 6) | ((pix & 0x04) >> 1) | ((pix & 0x10) >> 2) | ((pix & 0x01) << 3)); + for (int c = 0; c < 4; c++) + ByteLookup[m][pos++] = pix; + break; + case 1: + pix = (((b & 0x80) >> 7) | ((b & 0x08) >> 2)); + ByteLookup[m][pos++] = pix; + ByteLookup[m][pos++] = pix; + pix = (((b & 0x40) >> 6) | ((b & 0x04) >> 1)); + ByteLookup[m][pos++] = pix; + ByteLookup[m][pos++] = pix; + pix = (((b & 0x20) >> 5) | (b & 0x02)); + ByteLookup[m][pos++] = pix; + ByteLookup[m][pos++] = pix; + pix = (((b & 0x10) >> 4) | ((b & 0x01) << 1)); + ByteLookup[m][pos++] = pix; + ByteLookup[m][pos++] = pix; + break; + case 2: + for (int i = 7; i >= 0; i--) + ByteLookup[m][pos++] = ((b & (1 << i)) != 0) ? 1 : 0; + break; + case 3: + pix = b & 0xaa; + pix = (((pix & 0x80) >> 7) | ((pix & 0x08) >> 2) | ((pix & 0x20) >> 3) | ((pix & 0x02) << 2)); + for (int c = 0; c < 4; c++) + ByteLookup[m][pos++] = pix; + pix = b & 0x55; + pix = (((pix & 0x40) >> 6) | ((pix & 0x04) >> 1) | ((pix & 0x10) >> 2) | ((pix & 0x01) << 3)); + for (int c = 0; c < 4; c++) + ByteLookup[m][pos++] = pix; + break; + } + } + } + } + + /// + /// Runs at HSYNC *AFTER* the scanline has been commmitted + /// Sets up the upcoming memory addresses for the next scanline + /// + private void CalculateNextScreenMemory() + { + var verCharCount = CRCT.VCC; + var verRasCount = CRCT.VLC; + + var screenWidthByteCount = CRCT.DisplayWidth * 2; + NextVidRamLine = new ushort[screenWidthByteCount * 2]; + var screenHeightCharCount = CRCT.DisplayHeightInChars; + var screenAddress = CRCT.MA; + + int baseAddress = ((screenAddress << 2) & 0xf000); + int offset = (screenAddress * 2) & 0x7ff; + + int x = offset + ((verCharCount * screenWidthByteCount) & 0x7ff); + int y = baseAddress + (verRasCount * 0x800); + + for (int b = 0; b < screenWidthByteCount; b++) + { + NextVidRamLine[b] = (ushort)(y + x); + x++; + x &= 0x7ff; + } + } + + /// + /// Called at the start of HSYNC, this renders the currently built-up scanline + /// + private void RenderScanline() + { + // memory addresses + int cRow = CRCT.VCC; + int cRas = CRCT.VLC; + + int screenByteWidth = CRCT.DisplayWidth * 2; + var screenHeightCharCount = CRCT.DisplayHeightInChars; + //CalculateNextScreenMemory(); + var crctAddr = CRCT.DStartHigh << 8; + crctAddr |= CRCT.DStartLow; + var baseAddr = ((crctAddr << 2) & (0xF000)); //CRCT.VideoPageBase;// + var baseOffset = (crctAddr * 2) & 0x7FF; //CRCT.VideoRAMOffset * 2; // + var xA = baseOffset + ((cRow * screenByteWidth) & 0x7ff); + var yA = baseAddr + (cRas * 2048); + + // border and display + int pix = 0; + int scrByte = 0; + + for (int i = 0; i < CurrentLine.PhaseCount; i++) + { + // every character renders 8 pixels + switch (CurrentLine.Phases[i]) + { + case Phase.NONE: + break; + + case Phase.HSYNC: + break; + case Phase.HSYNCandVSYNC: + break; + case Phase.VSYNC: + break; + case Phase.BORDER: + // output current border colour + for (pix = 0; pix < 16; pix++) + { + CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[16]]); + } + break; + case Phase.DISPLAY: + // each character references 2 bytes in video RAM + byte data; + + for (int by = 0; by < 2; by++) + { + ushort addr = (ushort)(yA + xA); + data = _machine.FetchScreenMemory(addr); + scrByte++; + + switch (CurrentLine.ScreenMode) + { + case 0: + pix = data & 0xaa; + pix = (((pix & 0x80) >> 7) | ((pix & 0x08) >> 2) | ((pix & 0x20) >> 3) | ((pix & 0x02) << 2)); + for (int c = 0; c < 4; c++) + CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); + pix = data & 0x55; + pix = (((pix & 0x40) >> 6) | ((pix & 0x04) >> 1) | ((pix & 0x10) >> 2) | ((pix & 0x01) << 3)); + for (int c = 0; c < 4; c++) + CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); + break; + case 1: + pix = (((data & 0x80) >> 7) | ((data & 0x08) >> 2)); + CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); + CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); + pix = (((data & 0x40) >> 6) | ((data & 0x04) >> 1)); + CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); + CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); + pix = (((data & 0x20) >> 5) | (data & 0x02)); + CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); + CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); + pix = (((data & 0x10) >> 4) | ((data & 0x01) << 1)); + CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); + CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); + break; + case 2: + pix = data; + CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix.Bit(7) ? 1 : 0]]); + CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix.Bit(6) ? 1 : 0]]); + CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix.Bit(5) ? 1 : 0]]); + CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix.Bit(4) ? 1 : 0]]); + CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix.Bit(3) ? 1 : 0]]); + CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix.Bit(2) ? 1 : 0]]); + CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix.Bit(1) ? 1 : 0]]); + CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix.Bit(0) ? 1 : 0]]); + break; + case 3: + pix = data & 0xaa; + pix = (((pix & 0x80) >> 7) | ((pix & 0x08) >> 2) | ((pix & 0x20) >> 3) | ((pix & 0x02) << 2)); + for (int c = 0; c < 4; c++) + CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); + pix = data & 0x55; + pix = (((pix & 0x40) >> 6) | ((pix & 0x04) >> 1) | ((pix & 0x10) >> 2) | ((pix & 0x01) << 3)); + for (int c = 0; c < 4; c++) + CurrentLine.Pixels.Add(CPCHardwarePalette[ColourRegisters[pix]]); + break; + } + + xA++; + xA &= 0x7ff; + } + + break; + } + } + + // add to the list + ScreenLines.Add(new CharacterLine + { + ScreenMode = CurrentLine.ScreenMode, + Phases = CurrentLine.Phases.ToList(), + Pixels = CurrentLine.Pixels.ToList() + }); + } + + #endregion + + #region Public Methods + + /// + /// Called when the Z80 acknowledges an interrupt + /// + public void IORQA() + { + // bit 5 of the interrupt counter is reset + InterruptCounter &= ~(1 << 5); + } + + private int slCounter = 0; + private int slBackup = 0; + + /// + /// Fired when the CRCT flags HSYNC + /// + public void OnHSYNC() + { + HSYNC = true; + slCounter++; + + // commit the scanline + RenderScanline(); + + // setup vid memory for next scanline + CalculateNextScreenMemory(); + + if (CRCT.VLC == 0) + { + // update screenmode + ScreenMode = _RMR & 0x03; + } + + // setup scanline for next + CurrentLine.Clear(ScreenMode); + } + + /// + /// Fired when the CRCT flags VSYNC + /// + public void OnVSYNC() + { + FrameEnd = true; + slBackup = slCounter; + slCounter = 0; + } + + #endregion + + #region IVideoProvider + + public int[] ScreenBuffer; + + private int _virtualWidth; + private int _virtualHeight; + private int _bufferWidth; + private int _bufferHeight; + + public int BackgroundColor + { + get { return CPCHardwarePalette[0]; } + } + + public int VirtualWidth + { + get { return _virtualWidth; } + set { _virtualWidth = value; } + } + + public int VirtualHeight + { + get { return _virtualHeight; } + set { _virtualHeight = value; } + } + + public int BufferWidth + { + get { return _bufferWidth; } + set { _bufferWidth = value; } + } + + public int BufferHeight + { + get { return _bufferHeight; } + set { _bufferHeight = value; } + } + + public int SysBufferWidth; + public int SysBufferHeight; + + public int VsyncNumerator + { + get { return 200000000; } + set { } + } + + public int VsyncDenominator + { + get { return Z80ClockSpeed; } + } + + public int[] GetVideoBuffer() + { + // get only lines that have pixel data + var lines = ScreenLines.Where(a => a.Pixels.Count > 0); + + int pos = 0; + int lCount = 0; + foreach (var l in lines) + { + var lCop = l.Pixels.ToList(); + var len = l.Pixels.Count; + if (l.Phases.Contains(Phase.VSYNC) && l.Phases.Contains(Phase.BORDER)) + continue; + + if (len < 320) + continue; + + var pad = BufferWidth - len; + if (pad < 0) + { + // trim the left and right + var padPos = pad * -1; + var excessL = padPos / 2; + var excessR = excessL + (padPos % 2); + for (int i = 0; i < excessL; i++) + { + var lThing = lCop.First(); + + lCop.Remove(lThing); + } + for (int i = 0; i < excessL; i++) + { + var lThing = lCop.Last(); + + lCop.Remove(lThing); + } + } + + var lPad = pad / 2; + var rPad = lPad + (pad % 2); + + for (int i = 0; i < 2; i++) + { + lCount++; + + for (int pL = 0; pL < lPad; pL++) + { + ScreenBuffer[pos++] = 0; + } + + for (int pix = 0; pix < lCop.Count; pix++) + { + ScreenBuffer[pos++] = lCop[pix]; + } + + for (int pR = 0; pR < rPad; pR++) + { + ScreenBuffer[pos++] = 0; + } + } + + if (lCount >= BufferHeight - 2) + { + break; + } + } + + ScreenLines.Clear(); + + return ScreenBuffer; /* switch (borderType) { @@ -1151,249 +1151,249 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC } public void SetupScreenSize() - { - SysBufferWidth = 800; - SysBufferHeight = 600; - BufferHeight = SysBufferHeight; - BufferWidth = SysBufferWidth; - VirtualHeight = BufferHeight; - VirtualWidth = BufferWidth; - ScreenBuffer = new int[BufferWidth * BufferHeight]; - croppedBuffer = ScreenBuffer; + { + SysBufferWidth = 800; + SysBufferHeight = 600; + BufferHeight = SysBufferHeight; + BufferWidth = SysBufferWidth; + VirtualHeight = BufferHeight; + VirtualWidth = BufferWidth; + ScreenBuffer = new int[BufferWidth * BufferHeight]; + croppedBuffer = ScreenBuffer; - switch (borderType) - { - case AmstradCPC.BorderType.Uncropped: - break; + switch (borderType) + { + case AmstradCPC.BorderType.Uncropped: + break; - case AmstradCPC.BorderType.Uniform: - BufferWidth = 800; - BufferHeight = 600; - VirtualHeight = BufferHeight; - VirtualWidth = BufferWidth; - croppedBuffer = new int[BufferWidth * BufferHeight]; - break; + case AmstradCPC.BorderType.Uniform: + BufferWidth = 800; + BufferHeight = 600; + VirtualHeight = BufferHeight; + VirtualWidth = BufferWidth; + croppedBuffer = new int[BufferWidth * BufferHeight]; + break; - case AmstradCPC.BorderType.Widescreen: - break; - } - } + case AmstradCPC.BorderType.Widescreen: + break; + } + } - protected int[] croppedBuffer; + protected int[] croppedBuffer; - private AmstradCPC.BorderType _borderType; + private AmstradCPC.BorderType _borderType; - public AmstradCPC.BorderType borderType - { - get { return _borderType; } - set { _borderType = value; } - } + public AmstradCPC.BorderType borderType + { + get { return _borderType; } + set { _borderType = value; } + } - #endregion + #endregion - #region IPortIODevice + #region IPortIODevice - /// - /// Device responds to an IN instruction - /// - public bool ReadPort(ushort port, ref int result) - { - // gate array is OUT only - return false; - } + /// + /// Device responds to an IN instruction + /// + public bool ReadPort(ushort port, ref int result) + { + // gate array is OUT only + return false; + } - /// - /// Device responds to an OUT instruction - /// - public bool WritePort(ushort port, int result) - { - BitArray portBits = new BitArray(BitConverter.GetBytes(port)); - BitArray dataBits = new BitArray(BitConverter.GetBytes((byte)result)); - byte portUpper = (byte)(port >> 8); - byte portLower = (byte)(port & 0xff); + /// + /// Device responds to an OUT instruction + /// + public bool WritePort(ushort port, int result) + { + BitArray portBits = new BitArray(BitConverter.GetBytes(port)); + BitArray dataBits = new BitArray(BitConverter.GetBytes((byte)result)); + byte portUpper = (byte)(port >> 8); + byte portLower = (byte)(port & 0xff); - // The gate array is selected when bit 15 of the I/O port address is set to "0" and bit 14 of the I/O port address is set to "1" - bool accessed = false; - if (!portUpper.Bit(7) && portUpper.Bit(6)) - accessed = true; + // The gate array is selected when bit 15 of the I/O port address is set to "0" and bit 14 of the I/O port address is set to "1" + bool accessed = false; + if (!portUpper.Bit(7) && portUpper.Bit(6)) + accessed = true; - if (!accessed) - return accessed; + if (!accessed) + return accessed; - // Bit 9 and 8 of the data byte define the function to access - if (!dataBits[6] && !dataBits[7]) - { - // select pen - PENR = (byte)result; - } + // Bit 9 and 8 of the data byte define the function to access + if (!dataBits[6] && !dataBits[7]) + { + // select pen + PENR = (byte)result; + } - if (dataBits[6] && !dataBits[7]) - { - // select colour for selected pen - INKR = (byte)result; - } + if (dataBits[6] && !dataBits[7]) + { + // select colour for selected pen + INKR = (byte)result; + } - if (!dataBits[6] && dataBits[7]) - { - // select screen mode, ROM configuration and interrupt control - RMR = (byte)result; - } + if (!dataBits[6] && dataBits[7]) + { + // select screen mode, ROM configuration and interrupt control + RMR = (byte)result; + } - if (dataBits[6] && dataBits[7]) - { - // RAM memory management - RAMR = (byte)result; - } + if (dataBits[6] && dataBits[7]) + { + // RAM memory management + RAMR = (byte)result; + } - return true; - } + return true; + } - #endregion + #endregion - #region Serialization + #region Serialization - public void SyncState(Serializer ser) - { - ser.BeginSection("GateArray"); - ser.SyncEnum(nameof(ChipType), ref ChipType); - ser.Sync(nameof(_PENR), ref _PENR); - ser.Sync(nameof(_INKR), ref _INKR); - ser.Sync(nameof(_RMR), ref _RMR); - ser.Sync(nameof(_RAMR), ref _RAMR); - ser.Sync(nameof(ColourRegisters), ref ColourRegisters, false); - ser.Sync(nameof(CurrentPen), ref CurrentPen); - ser.Sync(nameof(ClockCounter), ref ClockCounter); - ser.Sync(nameof(FrameClock), ref FrameClock); - ser.Sync(nameof(FrameEnd), ref FrameEnd); - ser.Sync(nameof(WaitLine), ref WaitLine); - ser.Sync(nameof(_interruptCounter), ref _interruptCounter); - ser.Sync(nameof(VSYNCDelay), ref VSYNCDelay); - ser.Sync(nameof(ScreenMode), ref ScreenMode); - ser.Sync(nameof(HSYNC), ref HSYNC); - //ser.Sync(nameof(HSYNC_falling), ref HSYNC_falling); - ser.Sync(nameof(HSYNC_counter), ref HSYNC_counter); - ser.Sync(nameof(VSYNC), ref VSYNC); - ser.Sync(nameof(InterruptRaised), ref InterruptRaised); - ser.Sync(nameof(InterruptHoldCounter), ref InterruptHoldCounter); - ser.Sync(nameof(_MA), ref _MA); - ser.Sync(nameof(IsNewFrame), ref IsNewFrame); - ser.Sync(nameof(IsNewLine), ref IsNewLine); - ser.Sync(nameof(HCC), ref HCC); - ser.Sync(nameof(VLC), ref VLC); - ser.Sync(nameof(VideoByte1), ref VideoByte1); - ser.Sync(nameof(VideoByte2), ref VideoByte2); - ser.Sync(nameof(NextVidRamLine), ref NextVidRamLine, false); - ser.EndSection(); - } + public void SyncState(Serializer ser) + { + ser.BeginSection("GateArray"); + ser.SyncEnum(nameof(ChipType), ref ChipType); + ser.Sync(nameof(_PENR), ref _PENR); + ser.Sync(nameof(_INKR), ref _INKR); + ser.Sync(nameof(_RMR), ref _RMR); + ser.Sync(nameof(_RAMR), ref _RAMR); + ser.Sync(nameof(ColourRegisters), ref ColourRegisters, false); + ser.Sync(nameof(CurrentPen), ref CurrentPen); + ser.Sync(nameof(ClockCounter), ref ClockCounter); + ser.Sync(nameof(FrameClock), ref FrameClock); + ser.Sync(nameof(FrameEnd), ref FrameEnd); + ser.Sync(nameof(WaitLine), ref WaitLine); + ser.Sync(nameof(_interruptCounter), ref _interruptCounter); + ser.Sync(nameof(VSYNCDelay), ref VSYNCDelay); + ser.Sync(nameof(ScreenMode), ref ScreenMode); + ser.Sync(nameof(HSYNC), ref HSYNC); + //ser.Sync(nameof(HSYNC_falling), ref HSYNC_falling); + ser.Sync(nameof(HSYNC_counter), ref HSYNC_counter); + ser.Sync(nameof(VSYNC), ref VSYNC); + ser.Sync(nameof(InterruptRaised), ref InterruptRaised); + ser.Sync(nameof(InterruptHoldCounter), ref InterruptHoldCounter); + ser.Sync(nameof(_MA), ref _MA); + ser.Sync(nameof(IsNewFrame), ref IsNewFrame); + ser.Sync(nameof(IsNewLine), ref IsNewLine); + ser.Sync(nameof(HCC), ref HCC); + ser.Sync(nameof(VLC), ref VLC); + ser.Sync(nameof(VideoByte1), ref VideoByte1); + ser.Sync(nameof(VideoByte2), ref VideoByte2); + ser.Sync(nameof(NextVidRamLine), ref NextVidRamLine, false); + ser.EndSection(); + } - #endregion + #endregion - #region Enums, Classes & Lookups + #region Enums, Classes & Lookups - /// - /// Represents a single scanline (in characters) - /// - public class CharacterLine - { - /// - /// Screenmode is defined at each HSYNC (start of a new character line) - /// Therefore we pass the mode in via constructor - /// - //public CharacterLine(int screenMode) - //{ - //ScreenMode = screenMode; - //} + /// + /// Represents a single scanline (in characters) + /// + public class CharacterLine + { + /// + /// Screenmode is defined at each HSYNC (start of a new character line) + /// Therefore we pass the mode in via constructor + /// + //public CharacterLine(int screenMode) + //{ + //ScreenMode = screenMode; + //} - public int ScreenMode = 1; - public List Phases = new List(); - public List Pixels = new List(); + public int ScreenMode = 1; + public List Phases = new List(); + public List Pixels = new List(); - /// - /// Adds a new horizontal character to the list - /// - public void AddCharacter(Phase phase) - { - Phases.Add(phase); - } + /// + /// Adds a new horizontal character to the list + /// + public void AddCharacter(Phase phase) + { + Phases.Add(phase); + } - public int PhaseCount - { - get { return Phases.Count(); } - } + public int PhaseCount + { + get { return Phases.Count(); } + } - public void Clear(int screenMode) - { - ScreenMode = screenMode; - Phases.Clear(); - Pixels.Clear(); - } - } + public void Clear(int screenMode) + { + ScreenMode = screenMode; + Phases.Clear(); + Pixels.Clear(); + } + } - [Flags] - public enum Phase : int - { - /// - /// Nothing - /// - NONE = 0, - /// - /// Border is being rendered - /// - BORDER = 1, - /// - /// Display rendered from video RAM - /// - DISPLAY = 2, - /// - /// HSYNC in progress - /// - HSYNC = 3, - /// - /// VSYNC in process - /// - VSYNC = 4, - /// - /// HSYNC occurs within a VSYNC - /// - HSYNCandVSYNC = 5 - } + [Flags] + public enum Phase : int + { + /// + /// Nothing + /// + NONE = 0, + /// + /// Border is being rendered + /// + BORDER = 1, + /// + /// Display rendered from video RAM + /// + DISPLAY = 2, + /// + /// HSYNC in progress + /// + HSYNC = 3, + /// + /// VSYNC in process + /// + VSYNC = 4, + /// + /// HSYNC occurs within a VSYNC + /// + HSYNCandVSYNC = 5 + } - public enum GateArrayType - { - /// - /// CPC 464 - /// The first version of the Gate Array is the 40007 and was released with the CPC 464 - /// - Amstrad40007, - /// - /// CPC 664 - /// Later, the CPC 664 came out fitted with the 40008 version (and at the same time, the CPC 464 was also upgraded with this version). - /// This version is pinout incompatible with the 40007 (that's why the upgraded 464 of this period have two Gate Array slots on the motherboard, - /// one for a 40007 and one for a 40008) - /// - Amstrad40008, - /// - /// CPC 6128 - /// The CPC 6128 was released with the 40010 version (and the CPC 464 and 664 manufactured at that time were also upgraded to this version). - /// The 40010 is pinout compatible with the previous 40008 - /// - Amstrad40010, - /// - /// Costdown CPC - /// In the last serie of CPC 464 and 6128 produced by Amstrad in 1988, a small ASIC chip have been used to reduce the manufacturing costs. - /// This ASIC emulates the Gate Array, the PAL and the CRTC 6845. And no, there is no extra features like on the Amstrad Plus. - /// The only noticeable difference seems to be about the RGB output levels which are not exactly the same than those produced with a real Gate Array - /// - Amstrad40226, - /// - /// Plus & GX-4000 - /// All the Plus range is built upon a bigger ASIC chip which is integrating many features of the classic CPC (FDC, CRTC, PPI, Gate Array/PAL) and all - /// the new Plus specific features. The Gate Array on the Plus have a new register, named RMR2, to expand the ROM mapping functionnalities of the machine. - /// This register requires to be unlocked first to be available. And finally, the RGB levels produced by the ASIC on the Plus are noticeably differents - /// - Amstrad40489, - } + public enum GateArrayType + { + /// + /// CPC 464 + /// The first version of the Gate Array is the 40007 and was released with the CPC 464 + /// + Amstrad40007, + /// + /// CPC 664 + /// Later, the CPC 664 came out fitted with the 40008 version (and at the same time, the CPC 464 was also upgraded with this version). + /// This version is pinout incompatible with the 40007 (that's why the upgraded 464 of this period have two Gate Array slots on the motherboard, + /// one for a 40007 and one for a 40008) + /// + Amstrad40008, + /// + /// CPC 6128 + /// The CPC 6128 was released with the 40010 version (and the CPC 464 and 664 manufactured at that time were also upgraded to this version). + /// The 40010 is pinout compatible with the previous 40008 + /// + Amstrad40010, + /// + /// Costdown CPC + /// In the last serie of CPC 464 and 6128 produced by Amstrad in 1988, a small ASIC chip have been used to reduce the manufacturing costs. + /// This ASIC emulates the Gate Array, the PAL and the CRTC 6845. And no, there is no extra features like on the Amstrad Plus. + /// The only noticeable difference seems to be about the RGB output levels which are not exactly the same than those produced with a real Gate Array + /// + Amstrad40226, + /// + /// Plus & GX-4000 + /// All the Plus range is built upon a bigger ASIC chip which is integrating many features of the classic CPC (FDC, CRTC, PPI, Gate Array/PAL) and all + /// the new Plus specific features. The Gate Array on the Plus have a new register, named RMR2, to expand the ROM mapping functionnalities of the machine. + /// This register requires to be unlocked first to be available. And finally, the RGB levels produced by the ASIC on the Plus are noticeably differents + /// + Amstrad40489, + } - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRCT_6845.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRCT_6845.cs index eb8e17b87d..61119c3748 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRCT_6845.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRCT_6845.cs @@ -5,303 +5,303 @@ using System.Collections; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Cathode Ray Tube Controller Chip - 6845 - /// http://www.cpcwiki.eu/index.php/CRTC - /// https://web.archive.org/web/20170501112330/http://www.grimware.org/doku.php/documentations/devices/crtc - /// - public class CRCT_6845 : IPortIODevice - { - #region Devices + /// + /// Cathode Ray Tube Controller Chip - 6845 + /// http://www.cpcwiki.eu/index.php/CRTC + /// https://web.archive.org/web/20170501112330/http://www.grimware.org/doku.php/documentations/devices/crtc + /// + public class CRCT_6845 : IPortIODevice + { + #region Devices - private CPCBase _machine { get; set; } - private CRCTType ChipType; + private CPCBase _machine { get; set; } + private CRCTType ChipType; - #endregion + #endregion - #region CallBacks + #region CallBacks - public delegate void CallBack(); + public delegate void CallBack(); - private CallBack HSYNC_Callbacks; - private CallBack VSYNC_Callbacks; + private CallBack HSYNC_Callbacks; + private CallBack VSYNC_Callbacks; - public void AttachVSYNCCallback(CallBack vCall) - { - VSYNC_Callbacks += vCall; - } + public void AttachVSYNCCallback(CallBack vCall) + { + VSYNC_Callbacks += vCall; + } - public void AttachHSYNCCallback(CallBack hCall) - { - HSYNC_Callbacks += hCall; - } + public void AttachHSYNCCallback(CallBack hCall) + { + HSYNC_Callbacks += hCall; + } - #endregion + #endregion - #region Construction + #region Construction - public CRCT_6845(CRCTType chipType, CPCBase machine) - { - _machine = machine; - ChipType = chipType; - Reset(); - } + public CRCT_6845(CRCTType chipType, CPCBase machine) + { + _machine = machine; + ChipType = chipType; + Reset(); + } - private const int WRITE = 0; - private const int READ = 1; + private const int WRITE = 0; + private const int READ = 1; - #endregion + #endregion - #region Public Lines + #region Public Lines - /// - /// Denotes that HSYNC is active - /// - public bool HSYNC = false; + /// + /// Denotes that HSYNC is active + /// + public bool HSYNC = false; - /// - /// Denotes that VSYNC is active - /// - public bool VSYNC = false; + /// + /// Denotes that VSYNC is active + /// + public bool VSYNC = false; - /// - /// TRUE: bits outputted to screen from video RAM - /// FALSE: current border colour is outputted - /// - public bool DISPTMG = true; + /// + /// TRUE: bits outputted to screen from video RAM + /// FALSE: current border colour is outputted + /// + public bool DISPTMG = true; - /// - /// 16-bit memory address lines - /// The gate array uses this to grab the correct bits from video RAM - /// - public short MA; + /// + /// 16-bit memory address lines + /// The gate array uses this to grab the correct bits from video RAM + /// + public short MA; - /// - /// Vertical Character Count - /// - public int VCC; + /// + /// Vertical Character Count + /// + public int VCC; - /// - /// Vertical Scanline Count (within the current vertical character) - /// - public int VLC; + /// + /// Vertical Scanline Count (within the current vertical character) + /// + public int VLC; - #endregion + #endregion - #region Public Lookups + #region Public Lookups - /* + /* * These are not accessible directlyon real hardware * It just makes screen generation easier to have these accessbile from the gate array */ - /// - /// The total frame width (in characters) - /// - public int FrameWidth - { - get - { - return (int)Regs[HOR_TOTAL] + 1; - } - } + /// + /// The total frame width (in characters) + /// + public int FrameWidth + { + get + { + return (int)Regs[HOR_TOTAL] + 1; + } + } - /// - /// The total frame height (in scanlines) - /// - public int FrameHeight - { - get - { - return ((int)Regs[VER_TOTAL] + 1) * ((int)Regs[MAX_RASTER_ADDR] + 1); - } - } + /// + /// The total frame height (in scanlines) + /// + public int FrameHeight + { + get + { + return ((int)Regs[VER_TOTAL] + 1) * ((int)Regs[MAX_RASTER_ADDR] + 1); + } + } - /// - /// The total frame height (in scanlines) - /// - public int FrameHeightInChars - { - get - { - return ((int)Regs[VER_TOTAL] + 1); - } - } + /// + /// The total frame height (in scanlines) + /// + public int FrameHeightInChars + { + get + { + return ((int)Regs[VER_TOTAL] + 1); + } + } - /// - /// The width of the display area (in characters) - /// - public int DisplayWidth - { - get - { - return (int)Regs[HOR_DISPLAYED]; - } - } + /// + /// The width of the display area (in characters) + /// + public int DisplayWidth + { + get + { + return (int)Regs[HOR_DISPLAYED]; + } + } - /// - /// The width of the display area (in scanlines) - /// - public int DisplayHeight - { - get - { - return (int)Regs[VER_DISPLAYED] * ((int)Regs[MAX_RASTER_ADDR] + 1); - } - } + /// + /// The width of the display area (in scanlines) + /// + public int DisplayHeight + { + get + { + return (int)Regs[VER_DISPLAYED] * ((int)Regs[MAX_RASTER_ADDR] + 1); + } + } - /// - /// The width of the display area (in scanlines) - /// - public int DisplayHeightInChars - { - get - { - return (int)Regs[VER_DISPLAYED]; - } - } + /// + /// The width of the display area (in scanlines) + /// + public int DisplayHeightInChars + { + get + { + return (int)Regs[VER_DISPLAYED]; + } + } - /// - /// The character at which to start HSYNC - /// - public int HorizontalSyncPos - { - get - { - return (int)Regs[HOR_SYNC_POS]; - } - } + /// + /// The character at which to start HSYNC + /// + public int HorizontalSyncPos + { + get + { + return (int)Regs[HOR_SYNC_POS]; + } + } - /// - /// Width (in characters) of the HSYNC - /// - public int HorizontalSyncWidth - { - get - { - return HSYNCWidth; - } - } + /// + /// Width (in characters) of the HSYNC + /// + public int HorizontalSyncWidth + { + get + { + return HSYNCWidth; + } + } - /// - /// The vertical scanline at which to start VSYNC - /// - public int VerticalSyncPos - { - get - { - return (int)Regs[VER_SYNC_POS] * ((int)Regs[MAX_RASTER_ADDR] + 1); - } - } + /// + /// The vertical scanline at which to start VSYNC + /// + public int VerticalSyncPos + { + get + { + return (int)Regs[VER_SYNC_POS] * ((int)Regs[MAX_RASTER_ADDR] + 1); + } + } - /// - /// Height (in scanlines) of the VSYNC - /// - public int VerticalSyncHeight - { - get - { - return VSYNCWidth; // * ((int)Regs[MAX_RASTER_ADDR] + 1); - } - } + /// + /// Height (in scanlines) of the VSYNC + /// + public int VerticalSyncHeight + { + get + { + return VSYNCWidth; // * ((int)Regs[MAX_RASTER_ADDR] + 1); + } + } - /// - /// The number of scanlines in one character (MAXRASTER) - /// - public int ScanlinesPerCharacter - { - get - { - return (int)Regs[MAX_RASTER_ADDR] + 1; - } - } + /// + /// The number of scanlines in one character (MAXRASTER) + /// + public int ScanlinesPerCharacter + { + get + { + return (int)Regs[MAX_RASTER_ADDR] + 1; + } + } - /// - /// Returns the starting video page address as specified within R12 - /// - public int VideoPageBase - { - get - { - if (!Regs[12].Bit(4) && Regs[12].Bit(5)) - return 0x8000; + /// + /// Returns the starting video page address as specified within R12 + /// + public int VideoPageBase + { + get + { + if (!Regs[12].Bit(4) && Regs[12].Bit(5)) + return 0x8000; - if (Regs[12].Bit(4) && !Regs[12].Bit(5)) - return 0x4000; + if (Regs[12].Bit(4) && !Regs[12].Bit(5)) + return 0x4000; - if (!Regs[12].Bit(4) && !Regs[12].Bit(5)) - return 0x0000; + if (!Regs[12].Bit(4) && !Regs[12].Bit(5)) + return 0x0000; - return 0xC000; - } - } + return 0xC000; + } + } - public int DStartHigh - { get { return Regs[DISP_START_ADDR_H]; } } + public int DStartHigh + { get { return Regs[DISP_START_ADDR_H]; } } - public int DStartLow - { get { return Regs[DISP_START_ADDR_L]; } } + public int DStartLow + { get { return Regs[DISP_START_ADDR_L]; } } - /// - /// Returns the video buffer size as specified within R12 - /// - public int VideoBufferSize - { - get - { - if (Regs[12].Bit(3) && Regs[12].Bit(2)) - return 0x8000; + /// + /// Returns the video buffer size as specified within R12 + /// + public int VideoBufferSize + { + get + { + if (Regs[12].Bit(3) && Regs[12].Bit(2)) + return 0x8000; - return 0x4000; - } - } + return 0x4000; + } + } - /// - /// The offset into vRAM - /// - public int VideoRAMOffset - { - get - { - ushort combined = (ushort)(Regs[12] << 8 | Regs[13]); - int offset = combined & 0x3ff; - return offset; - } - } + /// + /// The offset into vRAM + /// + public int VideoRAMOffset + { + get + { + ushort combined = (ushort)(Regs[12] << 8 | Regs[13]); + int offset = combined & 0x3ff; + return offset; + } + } - /* Easier memory functions */ + /* Easier memory functions */ - /// - /// The current byte address - /// - public ushort CurrentByteAddress; + /// + /// The current byte address + /// + public ushort CurrentByteAddress; - /// - /// ByteCounter - /// - public int ByteCounter; + /// + /// ByteCounter + /// + public int ByteCounter; - /// - /// Set at every HSYNC - /// - public int LatchedRAMOffset; + /// + /// Set at every HSYNC + /// + public int LatchedRAMOffset; - /// - /// set at every HSYNC - /// - public int LatchedRAMStartAddress; + /// + /// set at every HSYNC + /// + public int LatchedRAMStartAddress; - /// - /// set at every HSYNC - /// - public int LatchedScreenWidthBytes; + /// + /// set at every HSYNC + /// + public int LatchedScreenWidthBytes; - #endregion + #endregion - #region Internal Registers and State + #region Internal Registers and State - /* + /* Index Register Name Range CPC Setting Notes 0 Horizontal Total 00000000 63 Width of the screen, in characters. Should always be 63 (64 characters). 1 character == 1μs. 1 Horizontal Displayed 00000000 40 Number of characters displayed. Once horizontal character count (HCC) matches this value, DISPTMG is set to 1. @@ -322,502 +322,502 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC 16 Light Pen Address (High) xx000000 Read Only 17 Light Pen Address (Low) 00000000 Read Only */ - /// - /// 6845 internal registers - /// - private byte[] Regs = new byte[18]; + /// + /// 6845 internal registers + /// + private byte[] Regs = new byte[18]; - // CRTC Register constants - /// - /// R0: Horizontal total character number - /// Unit: Character - /// Notes: Defines the width of a scanline - /// - public const int HOR_TOTAL = 0; - /// - /// R1: Horizontal displayed character number - /// Unit: Character - /// Notes: Defines when DISPEN goes OFF on the scanline - /// - public const int HOR_DISPLAYED = 1; - /// - /// R2: Position of horizontal sync. pulse - /// Unit: Character - /// Notes: Defines when the HSync goes ON on the scanline - /// - public const int HOR_SYNC_POS = 2; - /// - /// R3: Width of horizontal/vertical sync. pulses - /// Unit: Character - /// Notes: VSync width can only be changed on type 3 and 4 - /// - public const int HOR_AND_VER_SYNC_WIDTHS = 3; - /// - /// R4: Vertical total Line character number - /// Unit: Character - /// Notes: Defines the height of a screen - /// - public const int VER_TOTAL = 4; - /// - /// R5: Vertical raster adjust - /// Unit: Scanline - /// Notes: Defines additionnal scanlines at the end of a screen - /// can be used for smooth vertical scrolling on CPC - /// - public const int VER_TOTAL_ADJUST = 5; - /// - /// R6: Vertical displayed character number - /// Unit: Character - /// Notes: Define when DISPEN remains OFF until a new screen starts - /// Height of displayed screen in characters (Once vertical character count (VCC) matches this value, DISPTMG is set to 1) - /// - public const int VER_DISPLAYED = 6; - /// - /// R7: Position of vertical sync. pulse - /// Unit: Character - /// Notes: Define when the VSync goes ON on a screen - /// - public const int VER_SYNC_POS = 7; - /// - /// R8: Interlaced mode - /// Unit: - /// Notes: 00: No interlace; 01: Interlace Sync Raster Scan Mode; 10: No Interlace; 11: Interlace Sync and Video Raster Scan Mode - /// (crct type specific) - /// - public const int INTERLACE_SKEW = 8; - /// - /// R9: Maximum raster - /// Unit: Scanline - /// Notes: Defines the height of a CRTC-Char in scanlines - /// - public const int MAX_RASTER_ADDR = 9; - /// - /// R10: Cursor start raster - /// Unit: - /// Notes: Cursor not used on CPC. - /// (xBP00000) - /// B = Blink On/Off; - /// P = Blink Period Control (Slow/Fast). - /// Sets first raster row of character that cursor is on to invert - /// - public const int CUR_START_RASTER = 10; - /// - /// R11: Cursor end - /// Unit: - /// Notes: Sets last raster row of character that cursor is on to invert - /// - public const int CUR_END_RASTER = 11; - /// - /// R12: Display Start Address (High) - /// Unit: - /// Notes: Define the MSB of MA when a CRTC-screen starts - /// - public const int DISP_START_ADDR_H = 12; - /// - /// R13: Display Start Address (Low) - /// Unit: - /// Notes: Define the LSB of MA when a CRTC-screen starts - /// Allows you to offset the start of screen memory for hardware scrolling, and if using memory from address &0000 with the firmware. - /// - public const int DISP_START_ADDR_L = 13; - /// - /// R14: Cursor Address (High) - /// Unit: - /// Notes: Useless on the Amstrad CPC/Plus (text-mode is not wired) - /// - public const int CUR_ADDR_H = 14; - /// - /// R15: Cursor Address (Low) - /// Unit: - /// Notes: Useless on the Amstrad CPC/Plus (text-mode is not wired) - /// - public const int CUR_ADDR_L = 15; - /// - /// R16: Light Pen Address (High) - /// Unit: - /// Notes: Hold the MSB of the cursor position when the lightpen was ON - /// - public const int LPEN_ADDR_H = 16; - /// - /// R17: Light Pen Address (Low) - /// Unit: - /// Notes: Hold the LSB of the cursor position when the lightpen was ON - /// - public const int LPEN_ADDR_L = 17; + // CRTC Register constants + /// + /// R0: Horizontal total character number + /// Unit: Character + /// Notes: Defines the width of a scanline + /// + public const int HOR_TOTAL = 0; + /// + /// R1: Horizontal displayed character number + /// Unit: Character + /// Notes: Defines when DISPEN goes OFF on the scanline + /// + public const int HOR_DISPLAYED = 1; + /// + /// R2: Position of horizontal sync. pulse + /// Unit: Character + /// Notes: Defines when the HSync goes ON on the scanline + /// + public const int HOR_SYNC_POS = 2; + /// + /// R3: Width of horizontal/vertical sync. pulses + /// Unit: Character + /// Notes: VSync width can only be changed on type 3 and 4 + /// + public const int HOR_AND_VER_SYNC_WIDTHS = 3; + /// + /// R4: Vertical total Line character number + /// Unit: Character + /// Notes: Defines the height of a screen + /// + public const int VER_TOTAL = 4; + /// + /// R5: Vertical raster adjust + /// Unit: Scanline + /// Notes: Defines additionnal scanlines at the end of a screen + /// can be used for smooth vertical scrolling on CPC + /// + public const int VER_TOTAL_ADJUST = 5; + /// + /// R6: Vertical displayed character number + /// Unit: Character + /// Notes: Define when DISPEN remains OFF until a new screen starts + /// Height of displayed screen in characters (Once vertical character count (VCC) matches this value, DISPTMG is set to 1) + /// + public const int VER_DISPLAYED = 6; + /// + /// R7: Position of vertical sync. pulse + /// Unit: Character + /// Notes: Define when the VSync goes ON on a screen + /// + public const int VER_SYNC_POS = 7; + /// + /// R8: Interlaced mode + /// Unit: + /// Notes: 00: No interlace; 01: Interlace Sync Raster Scan Mode; 10: No Interlace; 11: Interlace Sync and Video Raster Scan Mode + /// (crct type specific) + /// + public const int INTERLACE_SKEW = 8; + /// + /// R9: Maximum raster + /// Unit: Scanline + /// Notes: Defines the height of a CRTC-Char in scanlines + /// + public const int MAX_RASTER_ADDR = 9; + /// + /// R10: Cursor start raster + /// Unit: + /// Notes: Cursor not used on CPC. + /// (xBP00000) + /// B = Blink On/Off; + /// P = Blink Period Control (Slow/Fast). + /// Sets first raster row of character that cursor is on to invert + /// + public const int CUR_START_RASTER = 10; + /// + /// R11: Cursor end + /// Unit: + /// Notes: Sets last raster row of character that cursor is on to invert + /// + public const int CUR_END_RASTER = 11; + /// + /// R12: Display Start Address (High) + /// Unit: + /// Notes: Define the MSB of MA when a CRTC-screen starts + /// + public const int DISP_START_ADDR_H = 12; + /// + /// R13: Display Start Address (Low) + /// Unit: + /// Notes: Define the LSB of MA when a CRTC-screen starts + /// Allows you to offset the start of screen memory for hardware scrolling, and if using memory from address &0000 with the firmware. + /// + public const int DISP_START_ADDR_L = 13; + /// + /// R14: Cursor Address (High) + /// Unit: + /// Notes: Useless on the Amstrad CPC/Plus (text-mode is not wired) + /// + public const int CUR_ADDR_H = 14; + /// + /// R15: Cursor Address (Low) + /// Unit: + /// Notes: Useless on the Amstrad CPC/Plus (text-mode is not wired) + /// + public const int CUR_ADDR_L = 15; + /// + /// R16: Light Pen Address (High) + /// Unit: + /// Notes: Hold the MSB of the cursor position when the lightpen was ON + /// + public const int LPEN_ADDR_H = 16; + /// + /// R17: Light Pen Address (Low) + /// Unit: + /// Notes: Hold the LSB of the cursor position when the lightpen was ON + /// + public const int LPEN_ADDR_L = 17; - /// - /// The currently selected register - /// - private int SelectedRegister; + /// + /// The currently selected register + /// + private int SelectedRegister; - /// - /// CPC register default values - /// Taken from https://web.archive.org/web/20170501112330/http://www.grimware.org/doku.php/documentations/devices/crtc - /// http://www.cantrell.org.uk/david/tech/cpc/cpc-firmware/firmware.pdf - /// (The defaults values given here are those programmed by the firmware ROM after a cold/warm boot of the CPC/Plus) - /// - private byte[] RegDefaults = new byte[] { 63, 40, 46, 112, 38, 0, 25, 30, 0, 7, 0, 0, 48, 0, 192, 7, 0, 0 }; + /// + /// CPC register default values + /// Taken from https://web.archive.org/web/20170501112330/http://www.grimware.org/doku.php/documentations/devices/crtc + /// http://www.cantrell.org.uk/david/tech/cpc/cpc-firmware/firmware.pdf + /// (The defaults values given here are those programmed by the firmware ROM after a cold/warm boot of the CPC/Plus) + /// + private byte[] RegDefaults = new byte[] { 63, 40, 46, 112, 38, 0, 25, 30, 0, 7, 0, 0, 48, 0, 192, 7, 0, 0 }; - /// - /// Register masks - /// 0 = WRITE - /// 1 = READ - /// - private byte[] CPCMask = new byte[] { 255, 255, 255, 255, 127, 31, 127, 126, 3, 31, 31, 31, 63, 255, 63, 255, 63, 255 }; + /// + /// Register masks + /// 0 = WRITE + /// 1 = READ + /// + private byte[] CPCMask = new byte[] { 255, 255, 255, 255, 127, 31, 127, 126, 3, 31, 31, 31, 63, 255, 63, 255, 63, 255 }; - /// - /// Horizontal Character Count - /// - private int HCC; + /// + /// Horizontal Character Count + /// + private int HCC; - /// - /// Internal cycle counter - /// - private int CycleCounter; + /// + /// Internal cycle counter + /// + private int CycleCounter; - /// - /// Signs that we have finished the last character row - /// - private bool EndOfScreen; + /// + /// Signs that we have finished the last character row + /// + private bool EndOfScreen; - /// - /// HSYNC pulse width (in characters) - /// - private int HSYNCWidth; + /// + /// HSYNC pulse width (in characters) + /// + private int HSYNCWidth; - /// - /// Internal HSYNC counter - /// - private int HSYNCCounter; + /// + /// Internal HSYNC counter + /// + private int HSYNCCounter; - /// - /// VSYNC pulse width (in characters) - /// - private int VSYNCWidth; + /// + /// VSYNC pulse width (in characters) + /// + private int VSYNCWidth; - /// - /// Internal VSYNC counter - /// - private int VSYNCCounter; + /// + /// Internal VSYNC counter + /// + private int VSYNCCounter; - #endregion + #endregion - #region Public Methods + #region Public Methods - public void ClockCycle() - { - CheckHSYNCOff(); + public void ClockCycle() + { + CheckHSYNCOff(); - HCC++; + HCC++; - if (HCC == Regs[HOR_TOTAL] + 1) - { - // end of scanline - HCC = 0; - - if (VSYNCCounter > 0) - { - VSYNCCounter--; - if (VSYNCCounter == 0) - { - VSYNC = false; - } - } + if (HCC == Regs[HOR_TOTAL] + 1) + { + // end of scanline + HCC = 0; - VLC++; + if (VSYNCCounter > 0) + { + VSYNCCounter--; + if (VSYNCCounter == 0) + { + VSYNC = false; + } + } - if (VLC == Regs[MAX_RASTER_ADDR] + 1) - { - // end of rasterline - VLC = 0; - VCC++; + VLC++; - if (VCC == Regs[VER_TOTAL] + 1) - { - // end of screen - VCC = 0; - } + if (VLC == Regs[MAX_RASTER_ADDR] + 1) + { + // end of rasterline + VLC = 0; + VCC++; - if (VCC == Regs[VER_SYNC_POS] && !VSYNC) - { - VSYNC = true; - VSYNCCounter = VSYNCWidth; - VSYNC_Callbacks(); - } - } - } - else - { - // still on the current scanline - if (HCC == Regs[HOR_SYNC_POS] && !HSYNC) - { - HSYNC = true; - HSYNCCounter = HSYNCWidth; - HSYNC_Callbacks(); - ByteCounter = 0; - } + if (VCC == Regs[VER_TOTAL] + 1) + { + // end of screen + VCC = 0; + } - if (HCC >= Regs[HOR_DISPLAYED] + 1 || VCC >= Regs[VER_DISPLAYED]) - { - DISPTMG = false; - } - else - { - DISPTMG = true; + if (VCC == Regs[VER_SYNC_POS] && !VSYNC) + { + VSYNC = true; + VSYNCCounter = VSYNCWidth; + VSYNC_Callbacks(); + } + } + } + else + { + // still on the current scanline + if (HCC == Regs[HOR_SYNC_POS] && !HSYNC) + { + HSYNC = true; + HSYNCCounter = HSYNCWidth; + HSYNC_Callbacks(); + ByteCounter = 0; + } - var line = VCC; - var row = VLC; - var addrX = (LatchedRAMOffset * 2) + ((VCC * LatchedScreenWidthBytes) & 0x7ff) + ByteCounter; - // remove artifacts caused by certain hardware scrolling addresses - addrX &= 0x7ff; - var addrY = LatchedRAMStartAddress + (2048 * VLC); + if (HCC >= Regs[HOR_DISPLAYED] + 1 || VCC >= Regs[VER_DISPLAYED]) + { + DISPTMG = false; + } + else + { + DISPTMG = true; - //var addr = VideoPageBase + (line * (0x50)) + (row * 0x800) + (ByteCounter); - CurrentByteAddress = (ushort)(addrX + addrY); + var line = VCC; + var row = VLC; + var addrX = (LatchedRAMOffset * 2) + ((VCC * LatchedScreenWidthBytes) & 0x7ff) + ByteCounter; + // remove artifacts caused by certain hardware scrolling addresses + addrX &= 0x7ff; + var addrY = LatchedRAMStartAddress + (2048 * VLC); - ByteCounter += 2; - } - } - } + //var addr = VideoPageBase + (line * (0x50)) + (row * 0x800) + (ByteCounter); + CurrentByteAddress = (ushort)(addrX + addrY); - private void CheckHSYNCOff() - { - if (HSYNCCounter > 0) - { - HSYNCCounter--; - if (HSYNCCounter == 0) - { - HSYNC = false; - } - } - } + ByteCounter += 2; + } + } + } - /// - /// Runs a CRCT clock cycle - /// This should be called at 1Mhz / 1us / every 4 uncontended CPU t-states - /// - public void ClockCycle2() - { - if (HSYNC) - { - // HSYNC in progress - HSYNCCounter++; + private void CheckHSYNCOff() + { + if (HSYNCCounter > 0) + { + HSYNCCounter--; + if (HSYNCCounter == 0) + { + HSYNC = false; + } + } + } - ByteCounter = 0; + /// + /// Runs a CRCT clock cycle + /// This should be called at 1Mhz / 1us / every 4 uncontended CPU t-states + /// + public void ClockCycle2() + { + if (HSYNC) + { + // HSYNC in progress + HSYNCCounter++; - if (HSYNCCounter >= HSYNCWidth) - { - // end of HSYNC - HSYNCCounter = 0; - HSYNC = false; - } - } + ByteCounter = 0; - if (HSYNC && HSYNCCounter == 1) - { + if (HSYNCCounter >= HSYNCWidth) + { + // end of HSYNC + HSYNCCounter = 0; + HSYNC = false; + } + } - } + if (HSYNC && HSYNCCounter == 1) + { - // move one horizontal character - HCC++; + } - // check for DISPTMG - if (HCC >= Regs[HOR_DISPLAYED] + 1) - { - DISPTMG = false; - } - else if (VCC >= Regs[VER_DISPLAYED]) - { - DISPTMG = false; - } - else - { - DISPTMG = true; + // move one horizontal character + HCC++; - var line = VCC; - var row = VLC; - var addrX = (LatchedRAMOffset * 2) + ((VCC * LatchedScreenWidthBytes) & 0x7ff) + ByteCounter; - // remove artifacts caused by certain hardware scrolling addresses - addrX &= 0x7ff; - var addrY = LatchedRAMStartAddress + (2048 * VLC); + // check for DISPTMG + if (HCC >= Regs[HOR_DISPLAYED] + 1) + { + DISPTMG = false; + } + else if (VCC >= Regs[VER_DISPLAYED]) + { + DISPTMG = false; + } + else + { + DISPTMG = true; - //var addr = VideoPageBase + (line * (0x50)) + (row * 0x800) + (ByteCounter); - CurrentByteAddress = (ushort)(addrX + addrY); + var line = VCC; + var row = VLC; + var addrX = (LatchedRAMOffset * 2) + ((VCC * LatchedScreenWidthBytes) & 0x7ff) + ByteCounter; + // remove artifacts caused by certain hardware scrolling addresses + addrX &= 0x7ff; + var addrY = LatchedRAMStartAddress + (2048 * VLC); - ByteCounter += 2; - } + //var addr = VideoPageBase + (line * (0x50)) + (row * 0x800) + (ByteCounter); + CurrentByteAddress = (ushort)(addrX + addrY); - // check for the end of the current scanline - if (HCC == Regs[HOR_TOTAL] + 1) - { - // end of the current scanline - HCC = 0; + ByteCounter += 2; + } + + // check for the end of the current scanline + if (HCC == Regs[HOR_TOTAL] + 1) + { + // end of the current scanline + HCC = 0; - if (ChipType == (CRCTType)1 && VLC <= Regs[MAX_RASTER_ADDR]) - { - // https://web.archive.org/web/20170501112330/http://www.grimware.org/doku.php/documentations/devices/crtc - // The MA is reloaded with the value from R12 and R13 when VCC=0 and VLC=0 (that's when a new CRTC screen begin). - // However, CRTC Type 1 keep updating the MA on every new scanline while VCC=0 (and VLC== Regs[VER_TOTAL] + 1) - { - VCC = 0; - EndOfScreen = true; - } - } + // end of screen? + if (VCC >= Regs[VER_TOTAL] + 1) + { + VCC = 0; + EndOfScreen = true; + } + } - // does VSYNC need to be raised? - if (!VSYNC) - { - if (VCC == Regs[VER_SYNC_POS]) - { - VSYNC = true; - VSYNCCounter = 0; - VSYNC_Callbacks(); - } - } - } - else - { - // still processing a scanline - // check whether HSYNC needs raising - if (!HSYNC) - { - if (HCC == Regs[HOR_SYNC_POS]) - { - HSYNC = true; - HSYNCCounter = 0; - HSYNC_Callbacks(); - lineCounter++; + // does VSYNC need to be raised? + if (!VSYNC) + { + if (VCC == Regs[VER_SYNC_POS]) + { + VSYNC = true; + VSYNCCounter = 0; + VSYNC_Callbacks(); + } + } + } + else + { + // still processing a scanline + // check whether HSYNC needs raising + if (!HSYNC) + { + if (HCC == Regs[HOR_SYNC_POS]) + { + HSYNC = true; + HSYNCCounter = 0; + HSYNC_Callbacks(); + lineCounter++; - LatchedRAMStartAddress = VideoPageBase; - LatchedRAMOffset = VideoRAMOffset; - LatchedScreenWidthBytes = DisplayWidth * 2; + LatchedRAMStartAddress = VideoPageBase; + LatchedRAMOffset = VideoRAMOffset; + LatchedScreenWidthBytes = DisplayWidth * 2; - } - } - } - } + } + } + } + } - /// - /// Runs a CRCT clock cycle - /// This should be called at 1Mhz / 1us / every 4 uncontended CPU t-states - /// - public void ClockCycle1() - { - // HSYNC processing - if (HSYNCCounter > 0) - { - HSYNCCounter--; - if (HSYNCCounter == 0) - HSYNC = false; - } + /// + /// Runs a CRCT clock cycle + /// This should be called at 1Mhz / 1us / every 4 uncontended CPU t-states + /// + public void ClockCycle1() + { + // HSYNC processing + if (HSYNCCounter > 0) + { + HSYNCCounter--; + if (HSYNCCounter == 0) + HSYNC = false; + } - HCC++; + HCC++; - if (HCC == FrameWidth) - { - // we have finished the current scanline - HCC = 0; + if (HCC == FrameWidth) + { + // we have finished the current scanline + HCC = 0; - if (VSYNCCounter > 0) - { - VSYNCCounter--; - if (VSYNCCounter == 0) - VSYNC = false; - } + if (VSYNCCounter > 0) + { + VSYNCCounter--; + if (VSYNCCounter == 0) + VSYNC = false; + } - VLC++; + VLC++; - if (VLC == ScanlinesPerCharacter) - { - // completed a vertical character - VLC = 0; - VCC++; + if (VLC == ScanlinesPerCharacter) + { + // completed a vertical character + VLC = 0; + VCC++; - if (VCC == FrameHeight) - { - // screen has completed - VCC = 0; - } - } + if (VCC == FrameHeight) + { + // screen has completed + VCC = 0; + } + } - // check whether VSYNC should be raised - if (VCC == VerticalSyncPos && !VSYNC) - { - VSYNC = true; - VSYNCCounter = VSYNCWidth; - VSYNC_Callbacks(); - } - } - else if (HCC == HorizontalSyncPos && !HSYNC) - { - // start of HSYNC period - HSYNC = true; - HSYNCCounter = HSYNCWidth; - HSYNC_Callbacks(); - } + // check whether VSYNC should be raised + if (VCC == VerticalSyncPos && !VSYNC) + { + VSYNC = true; + VSYNCCounter = VSYNCWidth; + VSYNC_Callbacks(); + } + } + else if (HCC == HorizontalSyncPos && !HSYNC) + { + // start of HSYNC period + HSYNC = true; + HSYNCCounter = HSYNCWidth; + HSYNC_Callbacks(); + } - // DISPTMG - if (HCC >= Regs[HOR_DISPLAYED] || VCC >= Regs[VER_DISPLAYED]) - { - DISPTMG = false; - } - else - { - DISPTMG = true; - } - /* + // DISPTMG + if (HCC >= Regs[HOR_DISPLAYED] || VCC >= Regs[VER_DISPLAYED]) + { + DISPTMG = false; + } + else + { + DISPTMG = true; + } + /* // check for DISPTMG if (HCC >= Regs[HOR_DISPLAYED] + 1) { @@ -832,53 +832,53 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC DISPTMG = true; } */ - } + } - public int lineCounter = 0; + public int lineCounter = 0; - - /// - /// Resets the chip - /// - public void Reset() - { - // set regs to default - for (int i = 0; i < 18; i++) - Regs[i] = RegDefaults[i]; - SelectedRegister = 0; + /// + /// Resets the chip + /// + public void Reset() + { + // set regs to default + for (int i = 0; i < 18; i++) + Regs[i] = RegDefaults[i]; - // populate initial MA address - MA = (short)(((Regs[DISP_START_ADDR_H]) & 0xff) << 8 | (Regs[DISP_START_ADDR_L]) & 0xff); + SelectedRegister = 0; - // updates widths - UpdateWidths(); + // populate initial MA address + MA = (short)(((Regs[DISP_START_ADDR_H]) & 0xff) << 8 | (Regs[DISP_START_ADDR_L]) & 0xff); - HSYNC = false; - VSYNC = false; + // updates widths + UpdateWidths(); - HSYNCCounter = 0; - VSYNCCounter = 0; + HSYNC = false; + VSYNC = false; - HCC = 0; - VCC = 0; - VLC = 0; - } + HSYNCCounter = 0; + VSYNCCounter = 0; - #endregion + HCC = 0; + VCC = 0; + VLC = 0; + } - #region Internal Methods + #endregion - /// - /// Selects a register - /// - private void RegisterSelect(int data) - { - SelectedRegister = data & 0x1F; - } + #region Internal Methods - /* + /// + /// Selects a register + /// + private void RegisterSelect(int data) + { + SelectedRegister = data & 0x1F; + } + + /* RegIdx Register Name Type 0 1 2 3 4 0 Horizontal Total Write Only Write Only Write Only (note 2) (note 3) @@ -905,310 +905,310 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC 3. CRTC type 4 is the same as CRTC type 3. The registers also repeat as they do on the type 3. */ - /// - /// Writes to the currently selected register - /// - private void WriteRegister(int data) - { - // 16 and 17 are read only registers on all types - if (SelectedRegister == 16 || SelectedRegister == 17) - return; + /// + /// Writes to the currently selected register + /// + private void WriteRegister(int data) + { + // 16 and 17 are read only registers on all types + if (SelectedRegister == 16 || SelectedRegister == 17) + return; - // non existing registers - if (SelectedRegister > 17) - return; + // non existing registers + if (SelectedRegister > 17) + return; - if (SelectedRegister == DISP_START_ADDR_L) - { + if (SelectedRegister == DISP_START_ADDR_L) + { - } + } - if (SelectedRegister == DISP_START_ADDR_H) - { + if (SelectedRegister == DISP_START_ADDR_H) + { - } + } - if (SelectedRegister == HOR_TOTAL) - { - // always 63 - if (data != 63) - return; - } + if (SelectedRegister == HOR_TOTAL) + { + // always 63 + if (data != 63) + return; + } - if (SelectedRegister == 1) - { - var d = data; - } + if (SelectedRegister == 1) + { + var d = data; + } - Regs[SelectedRegister] = (byte)(data & CPCMask[SelectedRegister]); + Regs[SelectedRegister] = (byte)(data & CPCMask[SelectedRegister]); - if (SelectedRegister == HOR_AND_VER_SYNC_WIDTHS) - { - UpdateWidths(); - } - } + if (SelectedRegister == HOR_AND_VER_SYNC_WIDTHS) + { + UpdateWidths(); + } + } - /// - /// Reads from the currently selected register - /// - private bool ReadRegister(ref int data) - { - bool addressed = false; - switch (SelectedRegister) - { - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - if ((int)ChipType == 0 || (int)ChipType == 1) - { - addressed = true; - data = 0; - } - break; - case 12: - case 13: - addressed = true; - if ((int)ChipType == 0) - data = Regs[SelectedRegister]; - else if ((int)ChipType == 1) - data = 0; - break; - case 14: - case 15: - case 16: - case 17: - addressed = true; - data = Regs[SelectedRegister]; - break; + /// + /// Reads from the currently selected register + /// + private bool ReadRegister(ref int data) + { + bool addressed = false; + switch (SelectedRegister) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + if ((int)ChipType == 0 || (int)ChipType == 1) + { + addressed = true; + data = 0; + } + break; + case 12: + case 13: + addressed = true; + if ((int)ChipType == 0) + data = Regs[SelectedRegister]; + else if ((int)ChipType == 1) + data = 0; + break; + case 14: + case 15: + case 16: + case 17: + addressed = true; + data = Regs[SelectedRegister]; + break; - default: - // registers 18-31 read as 0, on type 0 and 2. registers 18-30 read as 0 on type1, register 31 reads as 0x0ff. - if (SelectedRegister >= 18 && SelectedRegister <= 30) - { - switch ((int)ChipType) - { - case 0: - case 2: - case 1: - addressed = true; - data = 0; - break; - } - } - else if (SelectedRegister == 31) - { - if ((int)ChipType == 1) - { - addressed = true; - data = 0x0ff; - } - else if ((int)ChipType == 0 || (int)ChipType == 2) - { - addressed = true; - data = 0; - } - } - break; - } + default: + // registers 18-31 read as 0, on type 0 and 2. registers 18-30 read as 0 on type1, register 31 reads as 0x0ff. + if (SelectedRegister >= 18 && SelectedRegister <= 30) + { + switch ((int)ChipType) + { + case 0: + case 2: + case 1: + addressed = true; + data = 0; + break; + } + } + else if (SelectedRegister == 31) + { + if ((int)ChipType == 1) + { + addressed = true; + data = 0x0ff; + } + else if ((int)ChipType == 0 || (int)ChipType == 2) + { + addressed = true; + data = 0; + } + } + break; + } - return addressed; - } + return addressed; + } - /// - /// Reads from the status register - /// - private bool ReadStatus(ref int data) - { - bool addressed = false; - switch ((int)ChipType) - { - case 1: - // read status - //todo!! - addressed = true; - break; - case 0: - case 2: - // status reg not available - break; - case 3: - case 4: - // read from internal register instead - addressed = ReadRegister(ref data); - break; - } - return addressed; - } + /// + /// Reads from the status register + /// + private bool ReadStatus(ref int data) + { + bool addressed = false; + switch ((int)ChipType) + { + case 1: + // read status + //todo!! + addressed = true; + break; + case 0: + case 2: + // status reg not available + break; + case 3: + case 4: + // read from internal register instead + addressed = ReadRegister(ref data); + break; + } + return addressed; + } - /// - /// Updates the V and H SYNC widths - /// - private void UpdateWidths() - { - switch (ChipType) - { - case CRCTType.HD6845S: - // Bits 7..4 define Vertical Sync Width. If 0 is programmed this gives 16 lines of VSYNC. Bits 3..0 define Horizontal Sync Width. - // If 0 is programmed no HSYNC is generated. - HSYNCWidth = (Regs[HOR_AND_VER_SYNC_WIDTHS] >> 0) & 0x0F; - VSYNCWidth = (Regs[HOR_AND_VER_SYNC_WIDTHS] >> 4) & 0x0F; - break; - case CRCTType.UM6845R: - // Bits 7..4 are ignored. Vertical Sync is fixed at 16 lines. Bits 3..0 define Horizontal Sync Width. If 0 is programmed no HSYNC is generated. - HSYNCWidth = (Regs[HOR_AND_VER_SYNC_WIDTHS] >> 0) & 0x0F; - VSYNCWidth = 16; - break; - case CRCTType.MC6845: - // Bits 7..4 are ignored. Vertical Sync is fixed at 16 lines. Bits 3..0 define Horizontal Sync Width. If 0 is programmed this gives a HSYNC width of 16. - HSYNCWidth = (Regs[HOR_AND_VER_SYNC_WIDTHS] >> 0) & 0x0F; - if (HSYNCWidth == 0) - HSYNCWidth = 16; - VSYNCWidth = 16; - break; - case CRCTType.AMS40489: - case CRCTType.AMS40226: - // Bits 7..4 define Vertical Sync Width. If 0 is programmed this gives 16 lines of VSYNC.Bits 3..0 define Horizontal Sync Width. - // If 0 is programmed this gives a HSYNC width of 16. - HSYNCWidth = (Regs[HOR_AND_VER_SYNC_WIDTHS] >> 0) & 0x0F; - VSYNCWidth = (Regs[HOR_AND_VER_SYNC_WIDTHS] >> 4) & 0x0F; - if (HSYNCWidth == 0) - HSYNCWidth = 16; - if (VSYNCWidth == 0) - VSYNCWidth = 16; - break; - } - } + /// + /// Updates the V and H SYNC widths + /// + private void UpdateWidths() + { + switch (ChipType) + { + case CRCTType.HD6845S: + // Bits 7..4 define Vertical Sync Width. If 0 is programmed this gives 16 lines of VSYNC. Bits 3..0 define Horizontal Sync Width. + // If 0 is programmed no HSYNC is generated. + HSYNCWidth = (Regs[HOR_AND_VER_SYNC_WIDTHS] >> 0) & 0x0F; + VSYNCWidth = (Regs[HOR_AND_VER_SYNC_WIDTHS] >> 4) & 0x0F; + break; + case CRCTType.UM6845R: + // Bits 7..4 are ignored. Vertical Sync is fixed at 16 lines. Bits 3..0 define Horizontal Sync Width. If 0 is programmed no HSYNC is generated. + HSYNCWidth = (Regs[HOR_AND_VER_SYNC_WIDTHS] >> 0) & 0x0F; + VSYNCWidth = 16; + break; + case CRCTType.MC6845: + // Bits 7..4 are ignored. Vertical Sync is fixed at 16 lines. Bits 3..0 define Horizontal Sync Width. If 0 is programmed this gives a HSYNC width of 16. + HSYNCWidth = (Regs[HOR_AND_VER_SYNC_WIDTHS] >> 0) & 0x0F; + if (HSYNCWidth == 0) + HSYNCWidth = 16; + VSYNCWidth = 16; + break; + case CRCTType.AMS40489: + case CRCTType.AMS40226: + // Bits 7..4 define Vertical Sync Width. If 0 is programmed this gives 16 lines of VSYNC.Bits 3..0 define Horizontal Sync Width. + // If 0 is programmed this gives a HSYNC width of 16. + HSYNCWidth = (Regs[HOR_AND_VER_SYNC_WIDTHS] >> 0) & 0x0F; + VSYNCWidth = (Regs[HOR_AND_VER_SYNC_WIDTHS] >> 4) & 0x0F; + if (HSYNCWidth == 0) + HSYNCWidth = 16; + if (VSYNCWidth == 0) + VSYNCWidth = 16; + break; + } + } - #endregion + #endregion - #region PortIODevice + #region PortIODevice - /* + /* #BCXX %x0xxxx00 xxxxxxxx 6845 CRTC Index - Write #BDXX %x0xxxx01 xxxxxxxx 6845 CRTC Data Out - Write #BEXX %x0xxxx10 xxxxxxxx 6845 CRTC Status (as far as supported) Read - #BFXX %x0xxxx11 xxxxxxxx 6845 CRTC Data In (as far as supported) Read - */ - /// - /// Device responds to an IN instruction - /// - public bool ReadPort(ushort port, ref int result) - { - byte portUpper = (byte)(port >> 8); - byte portLower = (byte)(port & 0xff); + /// + /// Device responds to an IN instruction + /// + public bool ReadPort(ushort port, ref int result) + { + byte portUpper = (byte)(port >> 8); + byte portLower = (byte)(port & 0xff); - bool accessed = false; + bool accessed = false; - // The 6845 is selected when bit 14 of the I/O port address is set to "0" - if (portUpper.Bit(6)) - return accessed; + // The 6845 is selected when bit 14 of the I/O port address is set to "0" + if (portUpper.Bit(6)) + return accessed; - // Bit 9 and 8 of the I/O port address define the function to access - if (portUpper.Bit(1) && !portUpper.Bit(0)) - { - // read status register - accessed = ReadStatus(ref result); - } - else if ((portUpper & 3) == 3) - { - // read data register - accessed = ReadRegister(ref result); - } - else - { - result = 0; - } + // Bit 9 and 8 of the I/O port address define the function to access + if (portUpper.Bit(1) && !portUpper.Bit(0)) + { + // read status register + accessed = ReadStatus(ref result); + } + else if ((portUpper & 3) == 3) + { + // read data register + accessed = ReadRegister(ref result); + } + else + { + result = 0; + } - return accessed; - } + return accessed; + } - /// - /// Device responds to an OUT instruction - /// - public bool WritePort(ushort port, int result) - { - byte portUpper = (byte)(port >> 8); - byte portLower = (byte)(port & 0xff); + /// + /// Device responds to an OUT instruction + /// + public bool WritePort(ushort port, int result) + { + byte portUpper = (byte)(port >> 8); + byte portLower = (byte)(port & 0xff); - bool accessed = false; + bool accessed = false; - // The 6845 is selected when bit 14 of the I/O port address is set to "0" - if (portUpper.Bit(6)) - return accessed; + // The 6845 is selected when bit 14 of the I/O port address is set to "0" + if (portUpper.Bit(6)) + return accessed; - var func = portUpper & 3; + var func = portUpper & 3; - switch (func) - { - // reg select - case 0: - RegisterSelect(result); - break; + switch (func) + { + // reg select + case 0: + RegisterSelect(result); + break; - // data write - case 1: - WriteRegister(result); - break; - } + // data write + case 1: + WriteRegister(result); + break; + } - return accessed; - } + return accessed; + } - #endregion + #endregion - #region Serialization + #region Serialization - public void SyncState(Serializer ser) - { - ser.BeginSection("CRTC"); - ser.SyncEnum(nameof(ChipType), ref ChipType); - ser.Sync(nameof(HSYNC), ref HSYNC); - ser.Sync(nameof(VSYNC), ref VSYNC); - ser.Sync(nameof(DISPTMG), ref DISPTMG); - ser.Sync(nameof(MA), ref MA); - ser.Sync(nameof(CurrentByteAddress), ref CurrentByteAddress); - ser.Sync(nameof(ByteCounter), ref ByteCounter); - ser.Sync(nameof(Regs), ref Regs, false); - ser.Sync(nameof(SelectedRegister), ref SelectedRegister); - ser.Sync(nameof(HCC), ref HCC); - ser.Sync(nameof(VCC), ref VCC); - ser.Sync(nameof(VLC), ref VLC); - ser.Sync(nameof(CycleCounter), ref CycleCounter); - ser.Sync(nameof(EndOfScreen), ref EndOfScreen); - ser.Sync(nameof(HSYNCWidth), ref HSYNCWidth); - ser.Sync(nameof(HSYNCCounter), ref HSYNCCounter); - ser.Sync(nameof(VSYNCWidth), ref VSYNCWidth); - ser.Sync(nameof(VSYNCCounter), ref VSYNCCounter); - ser.EndSection(); - } + public void SyncState(Serializer ser) + { + ser.BeginSection("CRTC"); + ser.SyncEnum(nameof(ChipType), ref ChipType); + ser.Sync(nameof(HSYNC), ref HSYNC); + ser.Sync(nameof(VSYNC), ref VSYNC); + ser.Sync(nameof(DISPTMG), ref DISPTMG); + ser.Sync(nameof(MA), ref MA); + ser.Sync(nameof(CurrentByteAddress), ref CurrentByteAddress); + ser.Sync(nameof(ByteCounter), ref ByteCounter); + ser.Sync(nameof(Regs), ref Regs, false); + ser.Sync(nameof(SelectedRegister), ref SelectedRegister); + ser.Sync(nameof(HCC), ref HCC); + ser.Sync(nameof(VCC), ref VCC); + ser.Sync(nameof(VLC), ref VLC); + ser.Sync(nameof(CycleCounter), ref CycleCounter); + ser.Sync(nameof(EndOfScreen), ref EndOfScreen); + ser.Sync(nameof(HSYNCWidth), ref HSYNCWidth); + ser.Sync(nameof(HSYNCCounter), ref HSYNCCounter); + ser.Sync(nameof(VSYNCWidth), ref VSYNCWidth); + ser.Sync(nameof(VSYNCCounter), ref VSYNCCounter); + ser.EndSection(); + } - #endregion + #endregion - #region Enums + #region Enums - /// - /// The types of CRCT chip found in the CPC range - /// - public enum CRCTType - { - HD6845S = 0, - UM6845 = 0, - UM6845R = 1, - MC6845 = 2, - AMS40489 = 3, - AMS40226 = 4 - } + /// + /// The types of CRCT chip found in the CPC range + /// + public enum CRCTType + { + HD6845S = 0, + UM6845 = 0, + UM6845R = 1, + MC6845 = 2, + AMS40489 = 3, + AMS40226 = 4 + } - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRTC6845.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRTC6845.cs index c13fcd6522..e43c30d8cc 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRTC6845.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRTC6845.cs @@ -283,7 +283,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// The CRTC latches the Display Start H & L address at different times /// (depending on the chip type) /// - private int StartAddressLatch; + private int StartAddressLatch; #endregion @@ -541,7 +541,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC case 1: return ReadStatus_Type1(ref data); case 3: case 4: return ReadStatus_Type3_4(ref data); - default: return false; + default: return false; } } @@ -561,7 +561,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC // Bits 5 and 4 determine the skew res = (val & 0x30) >> 4; if (res > 2) - return -1; + return -1; break; // UMR6845R @@ -600,7 +600,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC if (res > 2) return -1; break; - + // UMR6845R case 1: return 0; @@ -1141,7 +1141,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC #region Clock Cycles - /* persistent switch signals */ + /* persistent switch signals */ bool s_VS; bool s_HDISP; bool s_VDISP; @@ -1172,7 +1172,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// private void ClockCycle_Generic() { - + } /// @@ -1788,7 +1788,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC else { _DISPTMG = false; - } + } /* Cursor Control */ if (s_HDISP && s_VDISP) diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRTDevice.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRTDevice.cs index c1bc6b89a2..2b6ffdec7e 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRTDevice.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/CRTDevice.cs @@ -9,41 +9,41 @@ using System.Threading.Tasks; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Render pixels to the screen - /// - public class CRTDevice : IVideoProvider - { - #region Devices + /// + /// Render pixels to the screen + /// + public class CRTDevice : IVideoProvider + { + #region Devices - private CPCBase _machine; - private CRCT_6845 CRCT => _machine.CRCT; - private AmstradGateArray GateArray => _machine.GateArray; + private CPCBase _machine; + private CRCT_6845 CRCT => _machine.CRCT; + private AmstradGateArray GateArray => _machine.GateArray; - #endregion + #endregion - #region Construction + #region Construction - public CRTDevice(CPCBase machine) - { - _machine = machine; - CurrentLine = new ScanLine(this); + public CRTDevice(CPCBase machine) + { + _machine = machine; + CurrentLine = new ScanLine(this); - CRCT.AttachHSYNCCallback(OnHSYNC); - CRCT.AttachVSYNCCallback(OnVSYNC); - } + CRCT.AttachHSYNCCallback(OnHSYNC); + CRCT.AttachVSYNCCallback(OnVSYNC); + } - #endregion + #endregion - #region Palettes - - /// - /// The standard CPC Pallete (ordered by firmware #) - /// http://www.cpcwiki.eu/index.php/CPC_Palette - /// - public static readonly int[] CPCFirmwarePalette = - { - Colors.ARGB(0x00, 0x00, 0x00), // Black + #region Palettes + + /// + /// The standard CPC Pallete (ordered by firmware #) + /// http://www.cpcwiki.eu/index.php/CPC_Palette + /// + public static readonly int[] CPCFirmwarePalette = + { + Colors.ARGB(0x00, 0x00, 0x00), // Black Colors.ARGB(0x00, 0x00, 0x80), // Blue Colors.ARGB(0x00, 0x00, 0xFF), // Bright Blue Colors.ARGB(0x80, 0x00, 0x00), // Red @@ -72,13 +72,13 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC Colors.ARGB(0xFF, 0xFF, 0xFF), // Bright White }; - /// - /// The standard CPC Pallete (ordered by hardware #) - /// http://www.cpcwiki.eu/index.php/CPC_Palette - /// - public static readonly int[] CPCHardwarePalette = - { - Colors.ARGB(0x80, 0x80, 0x80), // White + /// + /// The standard CPC Pallete (ordered by hardware #) + /// http://www.cpcwiki.eu/index.php/CPC_Palette + /// + public static readonly int[] CPCHardwarePalette = + { + Colors.ARGB(0x80, 0x80, 0x80), // White Colors.ARGB(0x80, 0x80, 0x80), // White (duplicate) Colors.ARGB(0x00, 0xFF, 0x80), // Sea Green Colors.ARGB(0xFF, 0xFF, 0x80), // Pastel Yellow @@ -111,306 +111,306 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC Colors.ARGB(0x80, 0x80, 0x00), // Yellow Colors.ARGB(0x80, 0x80, 0xFF), // Pastel Blue }; - - #endregion - #region Public Stuff + #endregion - /// - /// The current scanline that is being added to - /// (will be processed and committed to the screen buffer every HSYNC) - /// - public ScanLine CurrentLine; + #region Public Stuff - /// - /// The number of top border scanlines to ommit when rendering - /// - public int TopLinesToTrim = 20; + /// + /// The current scanline that is being added to + /// (will be processed and committed to the screen buffer every HSYNC) + /// + public ScanLine CurrentLine; - /// - /// Count of rendered scanlines this frame - /// - public int ScanlineCounter = 0; + /// + /// The number of top border scanlines to ommit when rendering + /// + public int TopLinesToTrim = 20; - /// - /// Video buffer processing - /// - public int[] ProcessVideoBuffer() - { - return ScreenBuffer; - } + /// + /// Count of rendered scanlines this frame + /// + public int ScanlineCounter = 0; - /// - /// Sets up buffers and the like at the start of a frame - /// - public void SetupVideo() - { - if (BufferHeight == 576) - return; + /// + /// Video buffer processing + /// + public int[] ProcessVideoBuffer() + { + return ScreenBuffer; + } - BufferWidth = 800; - BufferHeight = 576; + /// + /// Sets up buffers and the like at the start of a frame + /// + public void SetupVideo() + { + if (BufferHeight == 576) + return; - VirtualWidth = BufferWidth / 2; - VirtualHeight = BufferHeight / 2; + BufferWidth = 800; + BufferHeight = 576; - ScreenBuffer = new int[BufferWidth * BufferHeight]; - } + VirtualWidth = BufferWidth / 2; + VirtualHeight = BufferHeight / 2; - /// - /// Fired when the CRCT flags HSYNC - /// - public void OnHSYNC() - { + ScreenBuffer = new int[BufferWidth * BufferHeight]; + } - } + /// + /// Fired when the CRCT flags HSYNC + /// + public void OnHSYNC() + { - /// - /// Fired when the CRCT flags VSYNC - /// - public void OnVSYNC() - { + } - } + /// + /// Fired when the CRCT flags VSYNC + /// + public void OnVSYNC() + { - #endregion + } - #region IVideoProvider + #endregion - /// - /// Video output buffer - /// - public int[] ScreenBuffer; + #region IVideoProvider - private int _virtualWidth; - private int _virtualHeight; - private int _bufferWidth; - private int _bufferHeight; + /// + /// Video output buffer + /// + public int[] ScreenBuffer; - public int BackgroundColor - { - get { return CPCHardwarePalette[0]; } - } + private int _virtualWidth; + private int _virtualHeight; + private int _bufferWidth; + private int _bufferHeight; - public int VirtualWidth - { - get { return _virtualWidth; } - set { _virtualWidth = value; } - } + public int BackgroundColor + { + get { return CPCHardwarePalette[0]; } + } - public int VirtualHeight - { - get { return _virtualHeight; } - set { _virtualHeight = value; } - } + public int VirtualWidth + { + get { return _virtualWidth; } + set { _virtualWidth = value; } + } - public int BufferWidth - { - get { return _bufferWidth; } - set { _bufferWidth = value; } - } + public int VirtualHeight + { + get { return _virtualHeight; } + set { _virtualHeight = value; } + } - public int BufferHeight - { - get { return _bufferHeight; } - set { _bufferHeight = value; } - } + public int BufferWidth + { + get { return _bufferWidth; } + set { _bufferWidth = value; } + } - public int VsyncNumerator - { - get { return GateArray.Z80ClockSpeed * 50; } - set { } - } + public int BufferHeight + { + get { return _bufferHeight; } + set { _bufferHeight = value; } + } - public int VsyncDenominator - { - get { return GateArray.Z80ClockSpeed; } - } + public int VsyncNumerator + { + get { return GateArray.Z80ClockSpeed * 50; } + set { } + } - public int[] GetVideoBuffer() - { - return ProcessVideoBuffer(); - } + public int VsyncDenominator + { + get { return GateArray.Z80ClockSpeed; } + } - public void SetupScreenSize() - { - BufferWidth = 1024; // 512; - BufferHeight = 768; - VirtualHeight = BufferHeight; - VirtualWidth = BufferWidth; - ScreenBuffer = new int[BufferWidth * BufferHeight]; - croppedBuffer = ScreenBuffer; - } + public int[] GetVideoBuffer() + { + return ProcessVideoBuffer(); + } - protected int[] croppedBuffer; + public void SetupScreenSize() + { + BufferWidth = 1024; // 512; + BufferHeight = 768; + VirtualHeight = BufferHeight; + VirtualWidth = BufferWidth; + ScreenBuffer = new int[BufferWidth * BufferHeight]; + croppedBuffer = ScreenBuffer; + } - #endregion + protected int[] croppedBuffer; - #region Serialization + #endregion - public void SyncState(Serializer ser) - { - ser.BeginSection("CRT"); - ser.Sync("BufferWidth", ref _bufferWidth); - ser.Sync("BufferHeight", ref _bufferHeight); - ser.Sync("VirtualHeight", ref _virtualHeight); - ser.Sync("VirtualWidth", ref _virtualWidth); - ser.Sync(nameof(ScreenBuffer), ref ScreenBuffer, false); - ser.Sync(nameof(ScanlineCounter), ref ScanlineCounter); - ser.EndSection(); - } + #region Serialization - #endregion - } + public void SyncState(Serializer ser) + { + ser.BeginSection("CRT"); + ser.Sync("BufferWidth", ref _bufferWidth); + ser.Sync("BufferHeight", ref _bufferHeight); + ser.Sync("VirtualHeight", ref _virtualHeight); + ser.Sync("VirtualWidth", ref _virtualWidth); + ser.Sync(nameof(ScreenBuffer), ref ScreenBuffer, false); + ser.Sync(nameof(ScanlineCounter), ref ScanlineCounter); + ser.EndSection(); + } - /// - /// Represents a single scanline buffer - /// - public class ScanLine - { - /// - /// Array of character information - /// - public Character[] Characters; + #endregion + } - /// - /// The screenmode that was set at the start of this scanline - /// - public int ScreenMode = 1; + /// + /// Represents a single scanline buffer + /// + public class ScanLine + { + /// + /// Array of character information + /// + public Character[] Characters; - /// - /// The scanline number (0 based) - /// - public int LineIndex; + /// + /// The screenmode that was set at the start of this scanline + /// + public int ScreenMode = 1; - /// - /// The calling CRT device - /// - private CRTDevice CRT; + /// + /// The scanline number (0 based) + /// + public int LineIndex; - public ScanLine(CRTDevice crt) - { - Reset(); - CRT = crt; - } + /// + /// The calling CRT device + /// + private CRTDevice CRT; - // To be run after scanline has been fully processed - public void InitScanline(int screenMode, int lineIndex) - { - Reset(); - ScreenMode = screenMode; - LineIndex = lineIndex; - } + public ScanLine(CRTDevice crt) + { + Reset(); + CRT = crt; + } - /// - /// Adds a single scanline character into the matrix - /// - public void AddScanlineCharacter(int index, RenderPhase phase, byte vid1, byte vid2, int[] pens) - { - if (index >= 64) - { - return; - } + // To be run after scanline has been fully processed + public void InitScanline(int screenMode, int lineIndex) + { + Reset(); + ScreenMode = screenMode; + LineIndex = lineIndex; + } - switch (phase) - { - case RenderPhase.BORDER: - AddBorderValue(index, CRTDevice.CPCHardwarePalette[pens[16]]); - break; - case RenderPhase.DISPLAY: - AddDisplayValue(index, vid1, vid2, pens); - break; - default: - AddSyncValue(index, phase); - break; - } - } + /// + /// Adds a single scanline character into the matrix + /// + public void AddScanlineCharacter(int index, RenderPhase phase, byte vid1, byte vid2, int[] pens) + { + if (index >= 64) + { + return; + } - /// - /// Adds a HSYNC, VSYNC or HSYNC+VSYNC character into the scanline - /// - private void AddSyncValue(int charIndex, RenderPhase phase) - { - Characters[charIndex].Phase = phase; - Characters[charIndex].Pixels = new int[0]; - } + switch (phase) + { + case RenderPhase.BORDER: + AddBorderValue(index, CRTDevice.CPCHardwarePalette[pens[16]]); + break; + case RenderPhase.DISPLAY: + AddDisplayValue(index, vid1, vid2, pens); + break; + default: + AddSyncValue(index, phase); + break; + } + } - /// - /// Adds a border character into the scanline - /// - private void AddBorderValue(int charIndex, int colourValue) - { - Characters[charIndex].Phase = RenderPhase.BORDER; + /// + /// Adds a HSYNC, VSYNC or HSYNC+VSYNC character into the scanline + /// + private void AddSyncValue(int charIndex, RenderPhase phase) + { + Characters[charIndex].Phase = phase; + Characters[charIndex].Pixels = new int[0]; + } - switch (ScreenMode) - { - case 0: - Characters[charIndex].Pixels = new int[4]; - break; - case 1: - Characters[charIndex].Pixels = new int[8]; - break; - case 2: - Characters[charIndex].Pixels = new int[16]; - break; - case 3: - Characters[charIndex].Pixels = new int[8]; - break; - } + /// + /// Adds a border character into the scanline + /// + private void AddBorderValue(int charIndex, int colourValue) + { + Characters[charIndex].Phase = RenderPhase.BORDER; - + switch (ScreenMode) + { + case 0: + Characters[charIndex].Pixels = new int[4]; + break; + case 1: + Characters[charIndex].Pixels = new int[8]; + break; + case 2: + Characters[charIndex].Pixels = new int[16]; + break; + case 3: + Characters[charIndex].Pixels = new int[8]; + break; + } - for (int i = 0; i < Characters[charIndex].Pixels.Length; i++) - { - Characters[charIndex].Pixels[i] = colourValue; - } - } - /// - /// Adds a display character into the scanline - /// Pixel matrix is calculated based on the current ScreenMode - /// - public void AddDisplayValue(int charIndex, byte vid1, byte vid2, int[] pens) - { - Characters[charIndex].Phase = RenderPhase.DISPLAY; - // generate pixels based on screen mode - switch (ScreenMode) - { - // 4 bits per pixel - 2 bytes - 4 pixels (8 CRT pixels) - // RECT - case 0: - Characters[charIndex].Pixels = new int[16]; + for (int i = 0; i < Characters[charIndex].Pixels.Length; i++) + { + Characters[charIndex].Pixels[i] = colourValue; + } + } - int m0Count = 0; + /// + /// Adds a display character into the scanline + /// Pixel matrix is calculated based on the current ScreenMode + /// + public void AddDisplayValue(int charIndex, byte vid1, byte vid2, int[] pens) + { + Characters[charIndex].Phase = RenderPhase.DISPLAY; - int pix = vid1 & 0xaa; - pix = ((pix & 0x80) >> 7) | ((pix & 0x08) >> 2) | ((pix & 0x20) >> 3) | ((pix & 0x02 << 2)); - Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; - Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; - Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; - Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; - pix = vid1 & 0x55; - pix = (((pix & 0x40) >> 6) | ((pix & 0x04) >> 1) | ((pix & 0x10) >> 2) | ((pix & 0x01 << 3))); - Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; - Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; - Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; - Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; + // generate pixels based on screen mode + switch (ScreenMode) + { + // 4 bits per pixel - 2 bytes - 4 pixels (8 CRT pixels) + // RECT + case 0: + Characters[charIndex].Pixels = new int[16]; - pix = vid2 & 0xaa; - pix = ((pix & 0x80) >> 7) | ((pix & 0x08) >> 2) | ((pix & 0x20) >> 3) | ((pix & 0x02 << 2)); - Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; - Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; - Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; - Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; - pix = vid2 & 0x55; - pix = (((pix & 0x40) >> 6) | ((pix & 0x04) >> 1) | ((pix & 0x10) >> 2) | ((pix & 0x01 << 3))); - Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; - Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; - Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; - Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; - /* + int m0Count = 0; + + int pix = vid1 & 0xaa; + pix = ((pix & 0x80) >> 7) | ((pix & 0x08) >> 2) | ((pix & 0x20) >> 3) | ((pix & 0x02 << 2)); + Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; + Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; + Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; + Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; + pix = vid1 & 0x55; + pix = (((pix & 0x40) >> 6) | ((pix & 0x04) >> 1) | ((pix & 0x10) >> 2) | ((pix & 0x01 << 3))); + Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; + Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; + Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; + Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; + + pix = vid2 & 0xaa; + pix = ((pix & 0x80) >> 7) | ((pix & 0x08) >> 2) | ((pix & 0x20) >> 3) | ((pix & 0x02 << 2)); + Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; + Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; + Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; + Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; + pix = vid2 & 0x55; + pix = (((pix & 0x40) >> 6) | ((pix & 0x04) >> 1) | ((pix & 0x10) >> 2) | ((pix & 0x01 << 3))); + Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; + Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; + Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; + Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[pix]]; + /* int m0B0P0i = vid1 & 0xaa; int m0B0P0 = ((m0B0P0i & 0x80) >> 7) | ((m0B0P0i & 0x08) >> 2) | ((m0B0P0i & 0x20) >> 3) | ((m0B0P0i & 0x02 << 2)); int m0B0P1i = vid1 & 85; @@ -431,245 +431,245 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[m0B1P1]]; Characters[charIndex].Pixels[m0Count++] = CRTDevice.CPCHardwarePalette[pens[m0B1P1]]; */ - break; + break; - // 2 bits per pixel - 2 bytes - 8 pixels (16 CRT pixels) - // SQUARE - case 1: - Characters[charIndex].Pixels = new int[8]; + // 2 bits per pixel - 2 bytes - 8 pixels (16 CRT pixels) + // SQUARE + case 1: + Characters[charIndex].Pixels = new int[8]; - int m1Count = 0; + int m1Count = 0; - int m1B0P0 = (((vid1 & 0x80) >> 7) | ((vid1 & 0x08) >> 2)); - int m1B0P1 = (((vid1 & 0x40) >> 6) | ((vid1 & 0x04) >> 1)); - int m1B0P2 = (((vid1 & 0x20) >> 5) | ((vid1 & 0x02))); - int m1B0P3 = (((vid1 & 0x10) >> 4) | ((vid1 & 0x01) << 1)); + int m1B0P0 = (((vid1 & 0x80) >> 7) | ((vid1 & 0x08) >> 2)); + int m1B0P1 = (((vid1 & 0x40) >> 6) | ((vid1 & 0x04) >> 1)); + int m1B0P2 = (((vid1 & 0x20) >> 5) | ((vid1 & 0x02))); + int m1B0P3 = (((vid1 & 0x10) >> 4) | ((vid1 & 0x01) << 1)); - Characters[charIndex].Pixels[m1Count++] = CRTDevice.CPCHardwarePalette[pens[m1B0P0]]; - Characters[charIndex].Pixels[m1Count++] = CRTDevice.CPCHardwarePalette[pens[m1B0P1]]; - Characters[charIndex].Pixels[m1Count++] = CRTDevice.CPCHardwarePalette[pens[m1B0P2]]; - Characters[charIndex].Pixels[m1Count++] = CRTDevice.CPCHardwarePalette[pens[m1B0P3]]; + Characters[charIndex].Pixels[m1Count++] = CRTDevice.CPCHardwarePalette[pens[m1B0P0]]; + Characters[charIndex].Pixels[m1Count++] = CRTDevice.CPCHardwarePalette[pens[m1B0P1]]; + Characters[charIndex].Pixels[m1Count++] = CRTDevice.CPCHardwarePalette[pens[m1B0P2]]; + Characters[charIndex].Pixels[m1Count++] = CRTDevice.CPCHardwarePalette[pens[m1B0P3]]; - int m1B1P0 = (((vid2 & 0x80) >> 7) | ((vid2 & 0x08) >> 2)); - int m1B1P1 = (((vid2 & 0x40) >> 6) | ((vid2 & 0x04) >> 1)); - int m1B1P2 = (((vid2 & 0x20) >> 5) | ((vid2 & 0x02))); - int m1B1P3 = (((vid2 & 0x10) >> 4) | ((vid2 & 0x01) << 1)); + int m1B1P0 = (((vid2 & 0x80) >> 7) | ((vid2 & 0x08) >> 2)); + int m1B1P1 = (((vid2 & 0x40) >> 6) | ((vid2 & 0x04) >> 1)); + int m1B1P2 = (((vid2 & 0x20) >> 5) | ((vid2 & 0x02))); + int m1B1P3 = (((vid2 & 0x10) >> 4) | ((vid2 & 0x01) << 1)); - Characters[charIndex].Pixels[m1Count++] = CRTDevice.CPCHardwarePalette[pens[m1B1P0]]; - Characters[charIndex].Pixels[m1Count++] = CRTDevice.CPCHardwarePalette[pens[m1B1P1]]; - Characters[charIndex].Pixels[m1Count++] = CRTDevice.CPCHardwarePalette[pens[m1B1P2]]; - Characters[charIndex].Pixels[m1Count++] = CRTDevice.CPCHardwarePalette[pens[m1B1P3]]; - break; + Characters[charIndex].Pixels[m1Count++] = CRTDevice.CPCHardwarePalette[pens[m1B1P0]]; + Characters[charIndex].Pixels[m1Count++] = CRTDevice.CPCHardwarePalette[pens[m1B1P1]]; + Characters[charIndex].Pixels[m1Count++] = CRTDevice.CPCHardwarePalette[pens[m1B1P2]]; + Characters[charIndex].Pixels[m1Count++] = CRTDevice.CPCHardwarePalette[pens[m1B1P3]]; + break; - // 1 bit per pixel - 2 bytes - 16 pixels (16 CRT pixels) - // RECT - case 2: - Characters[charIndex].Pixels = new int[16]; + // 1 bit per pixel - 2 bytes - 16 pixels (16 CRT pixels) + // RECT + case 2: + Characters[charIndex].Pixels = new int[16]; - int m2Count = 0; + int m2Count = 0; - int[] pixBuff = new int[16]; + int[] pixBuff = new int[16]; - for (int bit = 7; bit >= 0; bit--) - { - int val = vid1.Bit(bit) ? 1 : 0; - Characters[charIndex].Pixels[m2Count++] = CRTDevice.CPCHardwarePalette[pens[val]]; + for (int bit = 7; bit >= 0; bit--) + { + int val = vid1.Bit(bit) ? 1 : 0; + Characters[charIndex].Pixels[m2Count++] = CRTDevice.CPCHardwarePalette[pens[val]]; - } - for (int bit = 7; bit >= 0; bit--) - { - int val = vid2.Bit(bit) ? 1 : 0; - Characters[charIndex].Pixels[m2Count++] = CRTDevice.CPCHardwarePalette[pens[val]]; - } - break; + } + for (int bit = 7; bit >= 0; bit--) + { + int val = vid2.Bit(bit) ? 1 : 0; + Characters[charIndex].Pixels[m2Count++] = CRTDevice.CPCHardwarePalette[pens[val]]; + } + break; - // 4 bits per pixel - 2 bytes - 4 pixels (8 CRT pixels) - // RECT - case 3: - Characters[charIndex].Pixels = new int[4]; + // 4 bits per pixel - 2 bytes - 4 pixels (8 CRT pixels) + // RECT + case 3: + Characters[charIndex].Pixels = new int[4]; - int m3Count = 0; + int m3Count = 0; - int m3B0P0i = vid1 & 170; - int m3B0P0 = ((m3B0P0i & 0x80) >> 7) | ((m3B0P0i & 0x08) >> 2) | ((m3B0P0i & 0x20) >> 3) | ((m3B0P0i & 0x02 << 2)); - int m3B0P1i = vid1 & 85; - int m3B0P1 = ((m3B0P1i & 0x40) >> 6) | ((m3B0P1i & 0x04) >> 1) | ((m3B0P1i & 0x10) >> 2) | ((m3B0P1i & 0x01 << 3)); + int m3B0P0i = vid1 & 170; + int m3B0P0 = ((m3B0P0i & 0x80) >> 7) | ((m3B0P0i & 0x08) >> 2) | ((m3B0P0i & 0x20) >> 3) | ((m3B0P0i & 0x02 << 2)); + int m3B0P1i = vid1 & 85; + int m3B0P1 = ((m3B0P1i & 0x40) >> 6) | ((m3B0P1i & 0x04) >> 1) | ((m3B0P1i & 0x10) >> 2) | ((m3B0P1i & 0x01 << 3)); - Characters[charIndex].Pixels[m3Count++] = CRTDevice.CPCHardwarePalette[pens[m3B0P0]]; - Characters[charIndex].Pixels[m3Count++] = CRTDevice.CPCHardwarePalette[pens[m3B0P1]]; + Characters[charIndex].Pixels[m3Count++] = CRTDevice.CPCHardwarePalette[pens[m3B0P0]]; + Characters[charIndex].Pixels[m3Count++] = CRTDevice.CPCHardwarePalette[pens[m3B0P1]]; - int m3B1P0i = vid1 & 170; - int m3B1P0 = ((m3B1P0i & 0x80) >> 7) | ((m3B1P0i & 0x08) >> 2) | ((m3B1P0i & 0x20) >> 3) | ((m3B1P0i & 0x02 << 2)); - int m3B1P1i = vid1 & 85; - int m3B1P1 = ((m3B1P1i & 0x40) >> 6) | ((m3B1P1i & 0x04) >> 1) | ((m3B1P1i & 0x10) >> 2) | ((m3B1P1i & 0x01 << 3)); + int m3B1P0i = vid1 & 170; + int m3B1P0 = ((m3B1P0i & 0x80) >> 7) | ((m3B1P0i & 0x08) >> 2) | ((m3B1P0i & 0x20) >> 3) | ((m3B1P0i & 0x02 << 2)); + int m3B1P1i = vid1 & 85; + int m3B1P1 = ((m3B1P1i & 0x40) >> 6) | ((m3B1P1i & 0x04) >> 1) | ((m3B1P1i & 0x10) >> 2) | ((m3B1P1i & 0x01 << 3)); - Characters[charIndex].Pixels[m3Count++] = CRTDevice.CPCHardwarePalette[pens[m3B1P0]]; - Characters[charIndex].Pixels[m3Count++] = CRTDevice.CPCHardwarePalette[pens[m3B1P1]]; - break; - } - } + Characters[charIndex].Pixels[m3Count++] = CRTDevice.CPCHardwarePalette[pens[m3B1P0]]; + Characters[charIndex].Pixels[m3Count++] = CRTDevice.CPCHardwarePalette[pens[m3B1P1]]; + break; + } + } - /// - /// Returns the number of pixels decoded in this scanline (border and display) - /// - private int GetPixelCount() - { - int cnt = 0; + /// + /// Returns the number of pixels decoded in this scanline (border and display) + /// + private int GetPixelCount() + { + int cnt = 0; - foreach (var c in Characters) - { - if (c.Pixels != null) - cnt += c.Pixels.Length; - } + foreach (var c in Characters) + { + if (c.Pixels != null) + cnt += c.Pixels.Length; + } - return cnt; - } + return cnt; + } - /// - /// Called at the start of HSYNC - /// Processes and adds the scanline to the Screen Buffer - /// - public void CommitScanline() - { - int hScale = 1; - int vScale = 1; + /// + /// Called at the start of HSYNC + /// Processes and adds the scanline to the Screen Buffer + /// + public void CommitScanline() + { + int hScale = 1; + int vScale = 1; - switch (ScreenMode) - { - case 0: - hScale = 1; - vScale = 2; - break; - case 1: - case 3: - hScale = 2; - vScale = 2; - break; + switch (ScreenMode) + { + case 0: + hScale = 1; + vScale = 2; + break; + case 1: + case 3: + hScale = 2; + vScale = 2; + break; - case 2: - hScale = 1; - vScale = 2; - break; - } + case 2: + hScale = 1; + vScale = 2; + break; + } - int hPix = GetPixelCount() * hScale; - //int hPix = GetPixelCount() * 2; - int leftOver = CRT.BufferWidth - hPix; - int lPad = leftOver / 2; - int rPad = lPad; - int rem = leftOver % 2; - if (rem != 0) - rPad += rem; + int hPix = GetPixelCount() * hScale; + //int hPix = GetPixelCount() * 2; + int leftOver = CRT.BufferWidth - hPix; + int lPad = leftOver / 2; + int rPad = lPad; + int rem = leftOver % 2; + if (rem != 0) + rPad += rem; - if (LineIndex < CRT.TopLinesToTrim) - { - return; - } + if (LineIndex < CRT.TopLinesToTrim) + { + return; + } - // render out the scanline - int pCount = (LineIndex - CRT.TopLinesToTrim) * vScale * CRT.BufferWidth; + // render out the scanline + int pCount = (LineIndex - CRT.TopLinesToTrim) * vScale * CRT.BufferWidth; - // vScale - for (int s = 0; s < vScale; s++) - { - // left padding - for (int lP = 0; lP < lPad; lP++) - { - CRT.ScreenBuffer[pCount++] = 0; - } + // vScale + for (int s = 0; s < vScale; s++) + { + // left padding + for (int lP = 0; lP < lPad; lP++) + { + CRT.ScreenBuffer[pCount++] = 0; + } - // border and display - foreach (var c in Characters) - { - if (c.Pixels == null || c.Pixels.Length == 0) - continue; + // border and display + foreach (var c in Characters) + { + if (c.Pixels == null || c.Pixels.Length == 0) + continue; - for (int p = 0; p < c.Pixels.Length; p++) - { - // hScale - for (int h = 0; h < hScale; h++) - { - CRT.ScreenBuffer[pCount++] = c.Pixels[p]; - } - - //CRT.ScreenBuffer[pCount++] = c.Pixels[p]; - } - } + for (int p = 0; p < c.Pixels.Length; p++) + { + // hScale + for (int h = 0; h < hScale; h++) + { + CRT.ScreenBuffer[pCount++] = c.Pixels[p]; + } - // right padding - for (int rP = 0; rP < rPad; rP++) - { - CRT.ScreenBuffer[pCount++] = 0; - } + //CRT.ScreenBuffer[pCount++] = c.Pixels[p]; + } + } - if (pCount != hPix) - { + // right padding + for (int rP = 0; rP < rPad; rP++) + { + CRT.ScreenBuffer[pCount++] = 0; + } - } + if (pCount != hPix) + { - CRT.ScanlineCounter++; - } - } + } - public void Reset() - { - ScreenMode = 1; - Characters = new Character[64]; + CRT.ScanlineCounter++; + } + } - for (int i = 0; i < Characters.Length; i++) - { - Characters[i] = new Character(); - } - } - } + public void Reset() + { + ScreenMode = 1; + Characters = new Character[64]; - /// - /// Contains data relating to one character written on one scanline - /// - public class Character - { - /// - /// Array of pixels generated for this character - /// - public int[] Pixels; + for (int i = 0; i < Characters.Length; i++) + { + Characters[i] = new Character(); + } + } + } - /// - /// The type (NONE/BORDER/DISPLAY/HSYNC/VSYNC/HSYNC+VSYNC - /// - public RenderPhase Phase = RenderPhase.NONE; + /// + /// Contains data relating to one character written on one scanline + /// + public class Character + { + /// + /// Array of pixels generated for this character + /// + public int[] Pixels; - public Character() - { - Pixels = new int[0]; - } - } + /// + /// The type (NONE/BORDER/DISPLAY/HSYNC/VSYNC/HSYNC+VSYNC + /// + public RenderPhase Phase = RenderPhase.NONE; - [Flags] - public enum RenderPhase : int - { - /// - /// Nothing - /// - NONE = 0, - /// - /// Border is being rendered - /// - BORDER = 1, - /// - /// Display rendered from video RAM - /// - DISPLAY = 2, - /// - /// HSYNC in progress - /// - HSYNC = 3, - /// - /// VSYNC in process - /// - VSYNC = 4, - /// - /// HSYNC occurs within a VSYNC - /// - HSYNCandVSYNC = 5 - } + public Character() + { + Pixels = new int[0]; + } + } + + [Flags] + public enum RenderPhase : int + { + /// + /// Nothing + /// + NONE = 0, + /// + /// Border is being rendered + /// + BORDER = 1, + /// + /// Display rendered from video RAM + /// + DISPLAY = 2, + /// + /// HSYNC in progress + /// + HSYNC = 3, + /// + /// VSYNC in process + /// + VSYNC = 4, + /// + /// HSYNC occurs within a VSYNC + /// + HSYNCandVSYNC = 5 + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Input/StandardKeyboard.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Input/StandardKeyboard.cs index 993943a333..5ceb1bcae3 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Input/StandardKeyboard.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Input/StandardKeyboard.cs @@ -6,61 +6,61 @@ using System.Linq; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// The 48k keyboard device - /// - public class StandardKeyboard : IKeyboard - { - public CPCBase _machine { get; set; } + /// + /// The 48k keyboard device + /// + public class StandardKeyboard : IKeyboard + { + public CPCBase _machine { get; set; } - private int _currentLine; - public int CurrentLine - { - get { return _currentLine; } - set - { - // bits 0-3 contain the line - var line = value & 0x0f; + private int _currentLine; + public int CurrentLine + { + get { return _currentLine; } + set + { + // bits 0-3 contain the line + var line = value & 0x0f; - if (line > 0) - { + if (line > 0) + { - } + } - _currentLine = line; - } - } + _currentLine = line; + } + } - private bool[] _keyStatus; - public bool[] KeyStatus - { - get { return _keyStatus; } - set { _keyStatus = value; } - } + private bool[] _keyStatus; + public bool[] KeyStatus + { + get { return _keyStatus; } + set { _keyStatus = value; } + } - private string[] _keyboardMatrix; - public string[] KeyboardMatrix - { - get { return _keyboardMatrix; } - set { _keyboardMatrix = value; } - } + private string[] _keyboardMatrix; + public string[] KeyboardMatrix + { + get { return _keyboardMatrix; } + set { _keyboardMatrix = value; } + } - private string[] _nonMatrixKeys; - public string[] NonMatrixKeys - { - get { return _nonMatrixKeys; } - set { _nonMatrixKeys = value; } - } + private string[] _nonMatrixKeys; + public string[] NonMatrixKeys + { + get { return _nonMatrixKeys; } + set { _nonMatrixKeys = value; } + } - public StandardKeyboard(CPCBase machine) - { - _machine = machine; - //_machine.AYDevice.PortA_IN_CallBack = INCallback; - //_machine.AYDevice.PortA_OUT_CallBack = OUTCallback; + public StandardKeyboard(CPCBase machine) + { + _machine = machine; + //_machine.AYDevice.PortA_IN_CallBack = INCallback; + //_machine.AYDevice.PortA_OUT_CallBack = OUTCallback; - // scancode rows, ascending (Bit0 - Bit7) - KeyboardMatrix = new string[] - { + // scancode rows, ascending (Bit0 - Bit7) + KeyboardMatrix = new string[] + { // 0x40 "Key CURUP", "Key CURRIGHT", "Key CURDOWN", "Key NUM9", "Key NUM6", "Key NUM3", "Key ENTER", "Key NUMPERIOD", // 0x41 @@ -82,72 +82,72 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC // 0x49 "P1 Up", "P1 Down", "P1 Left", "P1 Right", "P1 Fire1", "P1 Fire2", "P1 Fire3", "Key DEL", - }; + }; - // keystatus array to match the matrix - KeyStatus = new bool[8 * 10]; - - // nonmatrix keys (anything that hasnt already been taken) - var nonMatrix = new List(); - - foreach (var key in _machine.CPC.AmstradCPCControllerDefinition.BoolButtons) - { - if (!KeyboardMatrix.Any(s => s == key)) - nonMatrix.Add(key); - } - - NonMatrixKeys = nonMatrix.ToArray(); - } + // keystatus array to match the matrix + KeyStatus = new bool[8 * 10]; - /// - /// Reads the currently selected line - /// - public byte ReadCurrentLine() - { - var lin = _currentLine; // - 0x40; - var pos = lin * 8; - var l = KeyStatus.Skip(pos).Take(8).ToArray(); - BitArray bi = new BitArray(l); - byte[] bytes = new byte[1]; - bi.CopyTo(bytes, 0); - byte inv = (byte)(~bytes[0]); - return inv; - } + // nonmatrix keys (anything that hasnt already been taken) + var nonMatrix = new List(); - /// - /// Returns the index of the key within the matrix - /// - public int GetKeyIndexFromMatrix(string key) - { - int index = Array.IndexOf(KeyboardMatrix, key); - return index; - } + foreach (var key in _machine.CPC.AmstradCPCControllerDefinition.BoolButtons) + { + if (!KeyboardMatrix.Any(s => s == key)) + nonMatrix.Add(key); + } - /// - /// Sets key status - /// - public void SetKeyStatus(string key, bool isPressed) - { - int index = GetKeyIndexFromMatrix(key); - KeyStatus[index] = isPressed; - } + NonMatrixKeys = nonMatrix.ToArray(); + } - /// - /// Gets a key's status - /// - public bool GetKeyStatus(string key) - { - int index = GetKeyIndexFromMatrix(key); - return KeyStatus[index]; - } + /// + /// Reads the currently selected line + /// + public byte ReadCurrentLine() + { + var lin = _currentLine; // - 0x40; + var pos = lin * 8; + var l = KeyStatus.Skip(pos).Take(8).ToArray(); + BitArray bi = new BitArray(l); + byte[] bytes = new byte[1]; + bi.CopyTo(bytes, 0); + byte inv = (byte)(~bytes[0]); + return inv; + } + + /// + /// Returns the index of the key within the matrix + /// + public int GetKeyIndexFromMatrix(string key) + { + int index = Array.IndexOf(KeyboardMatrix, key); + return index; + } + + /// + /// Sets key status + /// + public void SetKeyStatus(string key, bool isPressed) + { + int index = GetKeyIndexFromMatrix(key); + KeyStatus[index] = isPressed; + } + + /// + /// Gets a key's status + /// + public bool GetKeyStatus(string key) + { + int index = GetKeyIndexFromMatrix(key); + return KeyStatus[index]; + } - public void SyncState(Serializer ser) - { - ser.BeginSection("Keyboard"); - ser.Sync("currentLine", ref _currentLine); - ser.Sync("keyStatus", ref _keyStatus, false); - ser.EndSection(); - } - } + public void SyncState(Serializer ser) + { + ser.BeginSection("Keyboard"); + ser.Sync("currentLine", ref _currentLine); + ser.Sync("keyStatus", ref _keyStatus, false); + ser.EndSection(); + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/PPI/PPI_8255.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/PPI/PPI_8255.cs index 1e7822e773..cfc69b6744 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/PPI/PPI_8255.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/PPI/PPI_8255.cs @@ -5,456 +5,456 @@ using System.Collections; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Emulates the PPI (8255) chip - /// http://www.cpcwiki.eu/imgs/d/df/PPI_M5L8255AP-5.pdf - /// http://www.cpcwiki.eu/index.php/8255 - /// - public class PPI_8255 : IPortIODevice - { - #region Devices + /// + /// Emulates the PPI (8255) chip + /// http://www.cpcwiki.eu/imgs/d/df/PPI_M5L8255AP-5.pdf + /// http://www.cpcwiki.eu/index.php/8255 + /// + public class PPI_8255 : IPortIODevice + { + #region Devices - private CPCBase _machine; - private CRCT_6845 CRTC => _machine.CRCT; - private AmstradGateArray GateArray => _machine.GateArray; - private IPSG PSG => _machine.AYDevice; - private DatacorderDevice Tape => _machine.TapeDevice; - private IKeyboard Keyboard => _machine.KeyboardDevice; + private CPCBase _machine; + private CRCT_6845 CRTC => _machine.CRCT; + private AmstradGateArray GateArray => _machine.GateArray; + private IPSG PSG => _machine.AYDevice; + private DatacorderDevice Tape => _machine.TapeDevice; + private IKeyboard Keyboard => _machine.KeyboardDevice; - #endregion + #endregion - #region Construction + #region Construction - public PPI_8255(CPCBase machine) - { - _machine = machine; - Reset(); - } + public PPI_8255(CPCBase machine) + { + _machine = machine; + Reset(); + } - #endregion + #endregion - #region Implementation + #region Implementation - /// - /// BDIR Line connected to PSG - /// - public bool BDIR - { - get { return Regs[PORT_C].Bit(7); } - } + /// + /// BDIR Line connected to PSG + /// + public bool BDIR + { + get { return Regs[PORT_C].Bit(7); } + } - /// - /// BC1 Line connected to PSG - /// - public bool BC1 - { - get { return Regs[PORT_C].Bit(6); } - } + /// + /// BC1 Line connected to PSG + /// + public bool BC1 + { + get { return Regs[PORT_C].Bit(6); } + } - /* Port Constants */ - private const int PORT_A = 0; - private const int PORT_B = 1; - private const int PORT_C = 2; - private const int PORT_CONTROL = 3; + /* Port Constants */ + private const int PORT_A = 0; + private const int PORT_B = 1; + private const int PORT_C = 2; + private const int PORT_CONTROL = 3; - /// - /// The i8255 internal data registers - /// - private byte[] Regs = new byte[4]; + /// + /// The i8255 internal data registers + /// + private byte[] Regs = new byte[4]; - /// - /// Returns the currently latched port direction for Port A - /// - private PortDirection DirPortA - { - get { return Regs[PORT_CONTROL].Bit(4) ? PortDirection.Input : PortDirection.Output; } - } + /// + /// Returns the currently latched port direction for Port A + /// + private PortDirection DirPortA + { + get { return Regs[PORT_CONTROL].Bit(4) ? PortDirection.Input : PortDirection.Output; } + } - /// - /// Returns the currently latched port direction for Port B - /// - private PortDirection DirPortB - { - get { return Regs[PORT_CONTROL].Bit(1) ? PortDirection.Input : PortDirection.Output; } - } + /// + /// Returns the currently latched port direction for Port B + /// + private PortDirection DirPortB + { + get { return Regs[PORT_CONTROL].Bit(1) ? PortDirection.Input : PortDirection.Output; } + } - /// - /// Returns the currently latched port direction for Port C (lower half) - /// - private PortDirection DirPortCL - { - get { return Regs[PORT_CONTROL].Bit(0) ? PortDirection.Input : PortDirection.Output; } - } + /// + /// Returns the currently latched port direction for Port C (lower half) + /// + private PortDirection DirPortCL + { + get { return Regs[PORT_CONTROL].Bit(0) ? PortDirection.Input : PortDirection.Output; } + } - /// - /// Returns the currently latched port direction for Port C (upper half) - /// - private PortDirection DirPortCU - { - get { return Regs[PORT_CONTROL].Bit(3) ? PortDirection.Input : PortDirection.Output; } - } + /// + /// Returns the currently latched port direction for Port C (upper half) + /// + private PortDirection DirPortCU + { + get { return Regs[PORT_CONTROL].Bit(3) ? PortDirection.Input : PortDirection.Output; } + } - #region OUT Methods + #region OUT Methods - /// - /// Writes to Port A - /// - private void OUTPortA(int data) - { - // latch the data - Regs[PORT_A] = (byte)data; + /// + /// Writes to Port A + /// + private void OUTPortA(int data) + { + // latch the data + Regs[PORT_A] = (byte)data; - if (DirPortA == PortDirection.Output) - { - // PSG write - PSG.PortWrite(data); - } - } + if (DirPortA == PortDirection.Output) + { + // PSG write + PSG.PortWrite(data); + } + } - /// - /// Writes to Port B - /// - private void OUTPortB(int data) - { - // PortB is read only - // just latch the data - Regs[PORT_B] = (byte)data; - } + /// + /// Writes to Port B + /// + private void OUTPortB(int data) + { + // PortB is read only + // just latch the data + Regs[PORT_B] = (byte)data; + } - /// - /// Writes to Port C - /// - private void OUTPortC(int data) - { - // latch the data - Regs[PORT_C] = (byte)data; + /// + /// Writes to Port C + /// + private void OUTPortC(int data) + { + // latch the data + Regs[PORT_C] = (byte)data; - if (DirPortCL == PortDirection.Output) - { - // lower Port C bits OUT - // keyboard line update - Keyboard.CurrentLine = Regs[PORT_C] & 0x0f; - } + if (DirPortCL == PortDirection.Output) + { + // lower Port C bits OUT + // keyboard line update + Keyboard.CurrentLine = Regs[PORT_C] & 0x0f; + } - if (DirPortCU == PortDirection.Output) - { - // upper Port C bits OUT - // write to PSG using latched data - PSG.SetFunction(data); - PSG.PortWrite(Regs[PORT_A]); + if (DirPortCU == PortDirection.Output) + { + // upper Port C bits OUT + // write to PSG using latched data + PSG.SetFunction(data); + PSG.PortWrite(Regs[PORT_A]); - // cassete write data - //not implemeted + // cassete write data + //not implemeted - // cas motor control - Tape.TapeMotor = Regs[PORT_C].Bit(4); - } - } + // cas motor control + Tape.TapeMotor = Regs[PORT_C].Bit(4); + } + } - /// - /// Writes to the control register - /// - private void OUTControl(int data) - { - if (data.Bit(7)) - { - // update configuration - Regs[PORT_CONTROL] = (byte)data; + /// + /// Writes to the control register + /// + private void OUTControl(int data) + { + if (data.Bit(7)) + { + // update configuration + Regs[PORT_CONTROL] = (byte)data; - // Writing to PIO Control Register (with Bit7 set), automatically resets PIO Ports A,B,C to 00h each - Regs[PORT_A] = 0; - Regs[PORT_B] = 0; - Regs[PORT_C] = 0; - } - else - { - // register is used to set/reset a single bit in Port C - bool isSet = data.Bit(0); + // Writing to PIO Control Register (with Bit7 set), automatically resets PIO Ports A,B,C to 00h each + Regs[PORT_A] = 0; + Regs[PORT_B] = 0; + Regs[PORT_C] = 0; + } + else + { + // register is used to set/reset a single bit in Port C + bool isSet = data.Bit(0); - // get the bit in PortC that we wish to change - var bit = (data >> 1) & 7; + // get the bit in PortC that we wish to change + var bit = (data >> 1) & 7; - // modify this bit - if (isSet) - { - Regs[PORT_C] = (byte)(Regs[PORT_C] | (bit * bit)); - } - else - { - Regs[PORT_C] = (byte)(Regs[PORT_C] & ~(bit * bit)); - } + // modify this bit + if (isSet) + { + Regs[PORT_C] = (byte)(Regs[PORT_C] | (bit * bit)); + } + else + { + Regs[PORT_C] = (byte)(Regs[PORT_C] & ~(bit * bit)); + } - // any other ouput business - if (DirPortCL == PortDirection.Output) - { - // update keyboard line - Keyboard.CurrentLine = Regs[PORT_C] & 0x0f; - } + // any other ouput business + if (DirPortCL == PortDirection.Output) + { + // update keyboard line + Keyboard.CurrentLine = Regs[PORT_C] & 0x0f; + } - if (DirPortCU == PortDirection.Output) - { - // write to PSG using latched data - PSG.SetFunction(data); - PSG.PortWrite(Regs[PORT_A]); + if (DirPortCU == PortDirection.Output) + { + // write to PSG using latched data + PSG.SetFunction(data); + PSG.PortWrite(Regs[PORT_A]); - // cassete write data - //not implemeted + // cassete write data + //not implemeted - // cas motor control - Tape.TapeMotor = Regs[PORT_C].Bit(4); - } - } - } + // cas motor control + Tape.TapeMotor = Regs[PORT_C].Bit(4); + } + } + } - #endregion + #endregion - #region IN Methods + #region IN Methods - /// - /// Reads from Port A - /// - private int INPortA() - { - if (DirPortA == PortDirection.Input) - { - // read from PSG - return PSG.PortRead(); - } - else - { - // Port A is set to output - // return latched value - return Regs[PORT_A]; - } - } + /// + /// Reads from Port A + /// + private int INPortA() + { + if (DirPortA == PortDirection.Input) + { + // read from PSG + return PSG.PortRead(); + } + else + { + // Port A is set to output + // return latched value + return Regs[PORT_A]; + } + } - /// - /// Reads from Port B - /// - private int INPortB() - { - if (DirPortB == PortDirection.Input) - { - // build the PortB output - // start with every bit reset - BitArray rBits = new BitArray(8); + /// + /// Reads from Port B + /// + private int INPortB() + { + if (DirPortB == PortDirection.Input) + { + // build the PortB output + // start with every bit reset + BitArray rBits = new BitArray(8); - // Bit0 - Vertical Sync ("1"=VSYNC active, "0"=VSYNC inactive) - if (CRTC.VSYNC) - rBits[0] = true; + // Bit0 - Vertical Sync ("1"=VSYNC active, "0"=VSYNC inactive) + if (CRTC.VSYNC) + rBits[0] = true; - // Bits1-3 - Distributor ID. Usually set to 4=Awa, 5=Schneider, or 7=Amstrad - // force AMstrad - rBits[1] = true; - rBits[2] = true; - rBits[3] = true; + // Bits1-3 - Distributor ID. Usually set to 4=Awa, 5=Schneider, or 7=Amstrad + // force AMstrad + rBits[1] = true; + rBits[2] = true; + rBits[3] = true; - // Bit4 - Screen Refresh Rate ("1"=50Hz, "0"=60Hz) - rBits[4] = true; + // Bit4 - Screen Refresh Rate ("1"=50Hz, "0"=60Hz) + rBits[4] = true; - // Bit5 - Expansion Port /EXP pin - rBits[5] = false; + // Bit5 - Expansion Port /EXP pin + rBits[5] = false; - // Bit6 - Parallel/Printer port ready signal, "1" = not ready, "0" = Ready - rBits[6] = true; + // Bit6 - Parallel/Printer port ready signal, "1" = not ready, "0" = Ready + rBits[6] = true; - // Bit7 - Cassette data input - rBits[7] = Tape.GetEarBit(_machine.CPU.TotalExecutedCycles); + // Bit7 - Cassette data input + rBits[7] = Tape.GetEarBit(_machine.CPU.TotalExecutedCycles); - // return the byte - byte[] bytes = new byte[1]; - rBits.CopyTo(bytes, 0); - return bytes[0]; - } - else - { - // return the latched value - return Regs[PORT_B]; - } - } + // return the byte + byte[] bytes = new byte[1]; + rBits.CopyTo(bytes, 0); + return bytes[0]; + } + else + { + // return the latched value + return Regs[PORT_B]; + } + } - /// - /// Reads from Port C - /// - private int INPortC() - { - // get the PortC value - int val = Regs[PORT_C]; + /// + /// Reads from Port C + /// + private int INPortC() + { + // get the PortC value + int val = Regs[PORT_C]; - if (DirPortCU == PortDirection.Input) - { - // upper port C bits - // remove upper half - val &= 0x0f; + if (DirPortCU == PortDirection.Input) + { + // upper port C bits + // remove upper half + val &= 0x0f; - // isolate control bits - var v = Regs[PORT_C] & 0xc0; + // isolate control bits + var v = Regs[PORT_C] & 0xc0; - if (v == 0xc0) - { - // set reg is present. change to write reg - v = 0x80; - } + if (v == 0xc0) + { + // set reg is present. change to write reg + v = 0x80; + } - // cas wr is always set - val |= v | 0x20; + // cas wr is always set + val |= v | 0x20; - if (Tape.TapeMotor) - { - val |= 0x10; - } - } + if (Tape.TapeMotor) + { + val |= 0x10; + } + } - if (DirPortCL == PortDirection.Input) - { - // lower port C bits - val |= 0x0f; - } + if (DirPortCL == PortDirection.Input) + { + // lower port C bits + val |= 0x0f; + } - return val; - } + return val; + } - #endregion + #endregion - #endregion + #endregion - #region Reset + #region Reset - public void Reset() - { - for (int i = 0; i < 3; i++) - { - Regs[i] = 0xff; - } + public void Reset() + { + for (int i = 0; i < 3; i++) + { + Regs[i] = 0xff; + } - Regs[3] = 0xff; - } + Regs[3] = 0xff; + } - #endregion + #endregion - #region IPortIODevice + #region IPortIODevice - /* + /* #F4XX %xxxx0x00 xxxxxxxx 8255 PIO Port A (PSG Data) Read Write #F5XX %xxxx0x01 xxxxxxxx 8255 PIO Port B (Vsync,PrnBusy,Tape,etc.) Read - #F6XX %xxxx0x10 xxxxxxxx 8255 PIO Port C (KeybRow,Tape,PSG Control) - Write #F7XX %xxxx0x11 xxxxxxxx 8255 PIO Control-Register - Write */ - /// - /// Device responds to an IN instruction - /// - public bool ReadPort(ushort port, ref int result) - { - byte portUpper = (byte)(port >> 8); - byte portLower = (byte)(port & 0xff); + /// + /// Device responds to an IN instruction + /// + public bool ReadPort(ushort port, ref int result) + { + byte portUpper = (byte)(port >> 8); + byte portLower = (byte)(port & 0xff); - // The 8255 responds to bit 11 reset with A10 and A12-A15 set - //if (portUpper.Bit(3)) - //return false; + // The 8255 responds to bit 11 reset with A10 and A12-A15 set + //if (portUpper.Bit(3)) + //return false; - var PPIFunc = (port & 0x0300) >> 8; // portUpper & 3; + var PPIFunc = (port & 0x0300) >> 8; // portUpper & 3; - switch (PPIFunc) - { - // Port A Read - case 0: - - // PSG (Sound/Keyboard/Joystick) - result = INPortA(); + switch (PPIFunc) + { + // Port A Read + case 0: - break; + // PSG (Sound/Keyboard/Joystick) + result = INPortA(); - // Port B Read - case 1: + break; - // Vsync/Jumpers/PrinterBusy/CasIn/Exp - result = INPortB(); + // Port B Read + case 1: - break; + // Vsync/Jumpers/PrinterBusy/CasIn/Exp + result = INPortB(); - // Port C Read (docs define this as write-only but we do need to do some processing) - case 2: + break; - // KeybRow/CasOut/PSG - result = INPortC(); + // Port C Read (docs define this as write-only but we do need to do some processing) + case 2: - break; - } + // KeybRow/CasOut/PSG + result = INPortC(); - return true; - } + break; + } - /// - /// Device responds to an OUT instruction - /// - public bool WritePort(ushort port, int result) - { - byte portUpper = (byte)(port >> 8); - byte portLower = (byte)(port & 0xff); + return true; + } - // The 8255 responds to bit 11 reset with A10 and A12-A15 set - if (portUpper.Bit(3)) - return false; + /// + /// Device responds to an OUT instruction + /// + public bool WritePort(ushort port, int result) + { + byte portUpper = (byte)(port >> 8); + byte portLower = (byte)(port & 0xff); - var PPIFunc = portUpper & 3; + // The 8255 responds to bit 11 reset with A10 and A12-A15 set + if (portUpper.Bit(3)) + return false; - switch (PPIFunc) - { - // Port A Write - case 0: + var PPIFunc = portUpper & 3; - // PSG (Sound/Keyboard/Joystick) - OUTPortA(result); + switch (PPIFunc) + { + // Port A Write + case 0: - break; + // PSG (Sound/Keyboard/Joystick) + OUTPortA(result); - // Port B Write - case 1: + break; - // Vsync/Jumpers/PrinterBusy/CasIn/Exp - OUTPortB(result); + // Port B Write + case 1: - break; + // Vsync/Jumpers/PrinterBusy/CasIn/Exp + OUTPortB(result); - // Port C Write - case 2: + break; - // KeybRow/CasOut/PSG - OUTPortC(result); + // Port C Write + case 2: - break; + // KeybRow/CasOut/PSG + OUTPortC(result); - // Control Register Write - case 3: + break; - // Control - OUTControl((byte)result); + // Control Register Write + case 3: - break; - } + // Control + OUTControl((byte)result); - return true; - } + break; + } - #endregion + return true; + } - #region Serialization + #endregion - public void SyncState(Serializer ser) - { - ser.BeginSection("PPI"); - ser.Sync(nameof(Regs), ref Regs, false); - ser.EndSection(); - } + #region Serialization - #endregion - } + public void SyncState(Serializer ser) + { + ser.BeginSection("PPI"); + ser.Sync(nameof(Regs), ref Regs, false); + ser.EndSection(); + } - public enum PortDirection - { - Input, - Output - } + #endregion + } + + public enum PortDirection + { + Input, + Output + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/AY38912.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/AY38912.cs index 34057aa8c6..67e329f654 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/AY38912.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/AY38912.cs @@ -5,144 +5,144 @@ using System.Collections.Generic; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Based heavily on the YM-2149F / AY-3-8910 emulator used in Unreal Speccy - /// (Originally created under Public Domain license by SMT jan.2006) /// - /// https://github.com/mkoloberdin/unrealspeccy/blob/master/sndrender/sndchip.cpp - /// https://github.com/mkoloberdin/unrealspeccy/blob/master/sndrender/sndchip.h - /// - public class AY38912 : IPSG - { - #region Device Fields + /// + /// Based heavily on the YM-2149F / AY-3-8910 emulator used in Unreal Speccy + /// (Originally created under Public Domain license by SMT jan.2006) /// + /// https://github.com/mkoloberdin/unrealspeccy/blob/master/sndrender/sndchip.cpp + /// https://github.com/mkoloberdin/unrealspeccy/blob/master/sndrender/sndchip.h + /// + public class AY38912 : IPSG + { + #region Device Fields - /// - /// The emulated machine (passed in via constructor) - /// - private CPCBase _machine; - private IKeyboard _keyboard => _machine.KeyboardDevice; + /// + /// The emulated machine (passed in via constructor) + /// + private CPCBase _machine; + private IKeyboard _keyboard => _machine.KeyboardDevice; - private int _tStatesPerFrame; - private int _sampleRate; - private int _samplesPerFrame; - private double _tStatesPerSample; - private short[] _audioBuffer; - private int _audioBufferIndex; - private int _lastStateRendered; - //private int _clockCyclesPerFrame; - //private int _cyclesPerSample; + private int _tStatesPerFrame; + private int _sampleRate; + private int _samplesPerFrame; + private double _tStatesPerSample; + private short[] _audioBuffer; + private int _audioBufferIndex; + private int _lastStateRendered; + //private int _clockCyclesPerFrame; + //private int _cyclesPerSample; - #endregion + #endregion - #region Construction & Initialization + #region Construction & Initialization - /// - /// Main constructor - /// - public AY38912(CPCBase machine) - { - _machine = machine; + /// + /// Main constructor + /// + public AY38912(CPCBase machine) + { + _machine = machine; - //_blipL.SetRates(1000000, 44100); - //_blipL.SetRates((_machine.GateArray.FrameLength * 50) / 4, 44100); - //_blipR.SetRates(1000000, 44100); - //_blipR.SetRates((_machine.GateArray.FrameLength * 50) / 4, 44100); - } + //_blipL.SetRates(1000000, 44100); + //_blipL.SetRates((_machine.GateArray.FrameLength * 50) / 4, 44100); + //_blipR.SetRates(1000000, 44100); + //_blipR.SetRates((_machine.GateArray.FrameLength * 50) / 4, 44100); + } - /// - /// Initialises the AY chip - /// - public void Init(int sampleRate, int tStatesPerFrame) - { - InitTiming(sampleRate, tStatesPerFrame); - UpdateVolume(); - Reset(); - } + /// + /// Initialises the AY chip + /// + public void Init(int sampleRate, int tStatesPerFrame) + { + InitTiming(sampleRate, tStatesPerFrame); + UpdateVolume(); + Reset(); + } - #endregion + #endregion - #region AY Implementation + #region AY Implementation - #region Public Properties + #region Public Properties - /// - /// AY mixer panning configuration - /// - [Flags] - public enum AYPanConfig - { - MONO = 0, - ABC = 1, - ACB = 2, - BAC = 3, - BCA = 4, - CAB = 5, - CBA = 6, - } + /// + /// AY mixer panning configuration + /// + [Flags] + public enum AYPanConfig + { + MONO = 0, + ABC = 1, + ACB = 2, + BAC = 3, + BCA = 4, + CAB = 5, + CBA = 6, + } - /// - /// The AY panning configuration - /// - public AYPanConfig PanningConfiguration - { - get - { - return _currentPanTab; - } - set - { - if (value != _currentPanTab) - { - _currentPanTab = value; - UpdateVolume(); - } - } - } + /// + /// The AY panning configuration + /// + public AYPanConfig PanningConfiguration + { + get + { + return _currentPanTab; + } + set + { + if (value != _currentPanTab) + { + _currentPanTab = value; + UpdateVolume(); + } + } + } - /// - /// The AY chip output volume - /// (0 - 100) - /// - public int Volume - { - get - { - return _volume; - } - set - { - //value = Math.Max(0, value); - //value = Math.Max(100, value); - if (_volume == value) - { - return; - } - _volume = value; - UpdateVolume(); - } - } + /// + /// The AY chip output volume + /// (0 - 100) + /// + public int Volume + { + get + { + return _volume; + } + set + { + //value = Math.Max(0, value); + //value = Math.Max(100, value); + if (_volume == value) + { + return; + } + _volume = value; + UpdateVolume(); + } + } - /// - /// The currently selected register - /// - public int SelectedRegister - { - get { return _activeRegister; } - set - { - _activeRegister = (byte)value; - } - } + /// + /// The currently selected register + /// + public int SelectedRegister + { + get { return _activeRegister; } + set + { + _activeRegister = (byte)value; + } + } - #endregion + #endregion - #region Public Methods + #region Public Methods - /// - /// Resets the PSG - /// - public void Reset() - { - /* + /// + /// Resets the PSG + /// + public void Reset() + { + /* _noiseVal = 0x0FFFF; _outABC = 0; _outNoiseABC = 0; @@ -167,233 +167,233 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC // update the audio buffer BufferUpdate(fr); */ - } + } - /// - /// 0: Inactive - /// 1: Read Register - /// 2: Write Register - /// 3: Select Register - /// - public int ActiveFunction; + /// + /// 0: Inactive + /// 1: Read Register + /// 2: Write Register + /// 3: Select Register + /// + public int ActiveFunction; - public void SetFunction(int val) - { - int b = ((val & 0xc0) >> 6); - ActiveFunction = b; - } + public void SetFunction(int val) + { + int b = ((val & 0xc0) >> 6); + ActiveFunction = b; + } - /// - /// Reads the value from the currently selected register - /// - public int PortRead() - { - if (ActiveFunction == 1) - { - if (_activeRegister == 14) - { - if (PortAInput) - { - // exteral keyboard register - return _keyboard.ReadCurrentLine(); - } - else - { - return _keyboard.ReadCurrentLine() & _registers[_activeRegister]; - } - } + /// + /// Reads the value from the currently selected register + /// + public int PortRead() + { + if (ActiveFunction == 1) + { + if (_activeRegister == 14) + { + if (PortAInput) + { + // exteral keyboard register + return _keyboard.ReadCurrentLine(); + } + else + { + return _keyboard.ReadCurrentLine() & _registers[_activeRegister]; + } + } - if (_activeRegister < 16) - return _registers[_activeRegister]; - } + if (_activeRegister < 16) + return _registers[_activeRegister]; + } - return 0; - } + return 0; + } - /// - /// Writes to the currently selected register - /// - public void PortWrite(int value) - { - switch (ActiveFunction) - { - default: - break; - // select reg - case 3: + /// + /// Writes to the currently selected register + /// + public void PortWrite(int value) + { + switch (ActiveFunction) + { + default: + break; + // select reg + case 3: - int b = (value & 0x0f); - SelectedRegister = b; + int b = (value & 0x0f); + SelectedRegister = b; - break; + break; - // write reg - case 2: + // write reg + case 2: - if (_activeRegister == 14) - { - // external keyboard register - //return; - } + if (_activeRegister == 14) + { + // external keyboard register + //return; + } - if (_activeRegister >= 0x10) - return; + if (_activeRegister >= 0x10) + return; - byte val = (byte)value; + byte val = (byte)value; - if (((1 << _activeRegister) & ((1 << 1) | (1 << 3) | (1 << 5) | (1 << 13))) != 0) - val &= 0x0F; + if (((1 << _activeRegister) & ((1 << 1) | (1 << 3) | (1 << 5) | (1 << 13))) != 0) + val &= 0x0F; - if (((1 << _activeRegister) & ((1 << 6) | (1 << 8) | (1 << 9) | (1 << 10))) != 0) - val &= 0x1F; + if (((1 << _activeRegister) & ((1 << 6) | (1 << 8) | (1 << 9) | (1 << 10))) != 0) + val &= 0x1F; - if (_activeRegister != 13 && _registers[_activeRegister] == val) - return; + if (_activeRegister != 13 && _registers[_activeRegister] == val) + return; - _registers[_activeRegister] = val; + _registers[_activeRegister] = val; - switch (_activeRegister) - { - // Channel A (Combined Pitch) - // (not written to directly) - case 0: - case 1: - _dividerA = _registers[AY_A_FINE] | (_registers[AY_A_COARSE] << 8); - break; - // Channel B (Combined Pitch) - // (not written to directly) - case 2: - case 3: - _dividerB = _registers[AY_B_FINE] | (_registers[AY_B_COARSE] << 8); - break; - // Channel C (Combined Pitch) - // (not written to directly) - case 4: - case 5: - _dividerC = _registers[AY_C_FINE] | (_registers[AY_C_COARSE] << 8); - break; - // Noise Pitch - case 6: - _dividerN = val * 2; - break; - // Mixer - case 7: - _bit0 = 0 - ((val >> 0) & 1); - _bit1 = 0 - ((val >> 1) & 1); - _bit2 = 0 - ((val >> 2) & 1); - _bit3 = 0 - ((val >> 3) & 1); - _bit4 = 0 - ((val >> 4) & 1); - _bit5 = 0 - ((val >> 5) & 1); + switch (_activeRegister) + { + // Channel A (Combined Pitch) + // (not written to directly) + case 0: + case 1: + _dividerA = _registers[AY_A_FINE] | (_registers[AY_A_COARSE] << 8); + break; + // Channel B (Combined Pitch) + // (not written to directly) + case 2: + case 3: + _dividerB = _registers[AY_B_FINE] | (_registers[AY_B_COARSE] << 8); + break; + // Channel C (Combined Pitch) + // (not written to directly) + case 4: + case 5: + _dividerC = _registers[AY_C_FINE] | (_registers[AY_C_COARSE] << 8); + break; + // Noise Pitch + case 6: + _dividerN = val * 2; + break; + // Mixer + case 7: + _bit0 = 0 - ((val >> 0) & 1); + _bit1 = 0 - ((val >> 1) & 1); + _bit2 = 0 - ((val >> 2) & 1); + _bit3 = 0 - ((val >> 3) & 1); + _bit4 = 0 - ((val >> 4) & 1); + _bit5 = 0 - ((val >> 5) & 1); - PortAInput = ((value & 0x40) == 0); - PortBInput = ((value & 0x80) == 0); + PortAInput = ((value & 0x40) == 0); + PortBInput = ((value & 0x80) == 0); - break; - // Channel Volumes - case 8: - _eMaskA = (val & 0x10) != 0 ? -1 : 0; - _vA = ((val & 0x0F) * 2 + 1) & ~_eMaskA; - break; - case 9: - _eMaskB = (val & 0x10) != 0 ? -1 : 0; - _vB = ((val & 0x0F) * 2 + 1) & ~_eMaskB; - break; - case 10: - _eMaskC = (val & 0x10) != 0 ? -1 : 0; - _vC = ((val & 0x0F) * 2 + 1) & ~_eMaskC; - break; - // Envelope (Combined Duration) - // (not written to directly) - case 11: - case 12: - _dividerE = _registers[AY_E_FINE] | (_registers[AY_E_COARSE] << 8); - break; - // Envelope Shape - case 13: - // reset the envelope counter - _countE = 0; + break; + // Channel Volumes + case 8: + _eMaskA = (val & 0x10) != 0 ? -1 : 0; + _vA = ((val & 0x0F) * 2 + 1) & ~_eMaskA; + break; + case 9: + _eMaskB = (val & 0x10) != 0 ? -1 : 0; + _vB = ((val & 0x0F) * 2 + 1) & ~_eMaskB; + break; + case 10: + _eMaskC = (val & 0x10) != 0 ? -1 : 0; + _vC = ((val & 0x0F) * 2 + 1) & ~_eMaskC; + break; + // Envelope (Combined Duration) + // (not written to directly) + case 11: + case 12: + _dividerE = _registers[AY_E_FINE] | (_registers[AY_E_COARSE] << 8); + break; + // Envelope Shape + case 13: + // reset the envelope counter + _countE = 0; - if ((_registers[AY_E_SHAPE] & 4) != 0) - { - // attack - _eState = 0; - _eDirection = 1; - } - else - { - // decay - _eState = 31; - _eDirection = -1; - } - break; - case 14: - // IO Port - not implemented - break; - } + if ((_registers[AY_E_SHAPE] & 4) != 0) + { + // attack + _eState = 0; + _eDirection = 1; + } + else + { + // decay + _eState = 31; + _eDirection = -1; + } + break; + case 14: + // IO Port - not implemented + break; + } - // do audio processing - BufferUpdate((int)_machine.CurrentFrameCycle); + // do audio processing + BufferUpdate((int)_machine.CurrentFrameCycle); - break; - } + break; + } - } + } - /// - /// Start of frame - /// - public void StartFrame() - { - _audioBufferIndex = 0; - BufferUpdate(0); - } + /// + /// Start of frame + /// + public void StartFrame() + { + _audioBufferIndex = 0; + BufferUpdate(0); + } - /// - /// End of frame - /// - public void EndFrame() - { - BufferUpdate(_tStatesPerFrame); - } + /// + /// End of frame + /// + public void EndFrame() + { + BufferUpdate(_tStatesPerFrame); + } - /// - /// Updates the audiobuffer based on the current frame t-state - /// - public void UpdateSound(int frameCycle) - { - BufferUpdate(frameCycle); - } + /// + /// Updates the audiobuffer based on the current frame t-state + /// + public void UpdateSound(int frameCycle) + { + BufferUpdate(frameCycle); + } - #endregion + #endregion - #region Private Fields + #region Private Fields - /// - /// Register indicies - /// - private const int AY_A_FINE = 0; - private const int AY_A_COARSE = 1; - private const int AY_B_FINE = 2; - private const int AY_B_COARSE = 3; - private const int AY_C_FINE = 4; - private const int AY_C_COARSE = 5; - private const int AY_NOISEPITCH = 6; - private const int AY_MIXER = 7; - private const int AY_A_VOL = 8; - private const int AY_B_VOL = 9; - private const int AY_C_VOL = 10; - private const int AY_E_FINE = 11; - private const int AY_E_COARSE = 12; - private const int AY_E_SHAPE = 13; - private const int AY_PORT_A = 14; - private const int AY_PORT_B = 15; + /// + /// Register indicies + /// + private const int AY_A_FINE = 0; + private const int AY_A_COARSE = 1; + private const int AY_B_FINE = 2; + private const int AY_B_COARSE = 3; + private const int AY_C_FINE = 4; + private const int AY_C_COARSE = 5; + private const int AY_NOISEPITCH = 6; + private const int AY_MIXER = 7; + private const int AY_A_VOL = 8; + private const int AY_B_VOL = 9; + private const int AY_C_VOL = 10; + private const int AY_E_FINE = 11; + private const int AY_E_COARSE = 12; + private const int AY_E_SHAPE = 13; + private const int AY_PORT_A = 14; + private const int AY_PORT_B = 15; - /// - /// The register array - /// - /* + /// + /// The register array + /// + /* The AY-3-8910/8912 contains 16 internal registers as follows: Register Function Range @@ -424,117 +424,117 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC The AY-3-8912 ignores bit 7 of this register. */ - private int[] _registers = new int[16]; + private int[] _registers = new int[16]; - /// - /// The currently selected register - /// - private byte _activeRegister; + /// + /// The currently selected register + /// + private byte _activeRegister; - private bool PortAInput = true; - private bool PortBInput = true; + private bool PortAInput = true; + private bool PortBInput = true; - /// - /// The frequency of the AY chip - /// - private static int _chipFrequency = 1000000; // 1773400; + /// + /// The frequency of the AY chip + /// + private static int _chipFrequency = 1000000; // 1773400; - /// - /// The rendering resolution of the chip - /// - private double _resolution = 50D * 8D / _chipFrequency; + /// + /// The rendering resolution of the chip + /// + private double _resolution = 50D * 8D / _chipFrequency; - /// - /// Channel generator state - /// - private int _bitA; - private int _bitB; - private int _bitC; + /// + /// Channel generator state + /// + private int _bitA; + private int _bitB; + private int _bitC; - /// - /// Envelope state - /// - private int _eState; + /// + /// Envelope state + /// + private int _eState; - /// - /// Envelope direction - /// - private int _eDirection; + /// + /// Envelope direction + /// + private int _eDirection; - /// - /// Noise seed - /// - private int _noiseSeed; + /// + /// Noise seed + /// + private int _noiseSeed; - /// - /// Mixer state - /// - private int _bit0; - private int _bit1; - private int _bit2; - private int _bit3; - private int _bit4; - private int _bit5; + /// + /// Mixer state + /// + private int _bit0; + private int _bit1; + private int _bit2; + private int _bit3; + private int _bit4; + private int _bit5; - /// - /// Noise generator state - /// - private int _bitN; + /// + /// Noise generator state + /// + private int _bitN; - /// - /// Envelope masks - /// - private int _eMaskA; - private int _eMaskB; - private int _eMaskC; + /// + /// Envelope masks + /// + private int _eMaskA; + private int _eMaskB; + private int _eMaskC; - /// - /// Amplitudes - /// - private int _vA; - private int _vB; - private int _vC; + /// + /// Amplitudes + /// + private int _vA; + private int _vB; + private int _vC; - /// - /// Channel gen counters - /// - private int _countA; - private int _countB; - private int _countC; + /// + /// Channel gen counters + /// + private int _countA; + private int _countB; + private int _countC; - /// - /// Envelope gen counter - /// - private int _countE; + /// + /// Envelope gen counter + /// + private int _countE; - /// - /// Noise gen counter - /// - private int _countN; + /// + /// Noise gen counter + /// + private int _countN; - /// - /// Channel gen dividers - /// - private int _dividerA; - private int _dividerB; - private int _dividerC; + /// + /// Channel gen dividers + /// + private int _dividerA; + private int _dividerB; + private int _dividerC; - /// - /// Envelope gen divider - /// - private int _dividerE; + /// + /// Envelope gen divider + /// + private int _dividerE; - /// - /// Noise gen divider - /// - private int _dividerN; + /// + /// Noise gen divider + /// + private int _dividerN; - /// - /// Panning table list - /// - private static List PanTabs = new List - { + /// + /// Panning table list + /// + private static List PanTabs = new List + { // MONO new uint[] { 50,50, 50,50, 50,50 }, // ABC @@ -549,228 +549,228 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC new uint[] { 66,66, 10,100, 100,10 }, // CBA new uint[] { 10,100, 66,66, 100,10 } - }; + }; - /// - /// The currently selected panning configuration - /// - private AYPanConfig _currentPanTab = AYPanConfig.ABC; + /// + /// The currently selected panning configuration + /// + private AYPanConfig _currentPanTab = AYPanConfig.ABC; - /// - /// The current volume - /// - private int _volume = 75; + /// + /// The current volume + /// + private int _volume = 75; - /// - /// Volume tables state - /// - private uint[][] _volumeTables; + /// + /// Volume tables state + /// + private uint[][] _volumeTables; - /// - /// Volume table to be used - /// - private static uint[] AYVolumes = new uint[] - { - 0x0000,0x0000,0x0340,0x0340,0x04C0,0x04C0,0x06F2,0x06F2, - 0x0A44,0x0A44,0x0F13,0x0F13,0x1510,0x1510,0x227E,0x227E, - 0x289F,0x289F,0x414E,0x414E,0x5B21,0x5B21,0x7258,0x7258, - 0x905E,0x905E,0xB550,0xB550,0xD7A0,0xD7A0,0xFFFF,0xFFFF, - }; + /// + /// Volume table to be used + /// + private static uint[] AYVolumes = new uint[] + { + 0x0000,0x0000,0x0340,0x0340,0x04C0,0x04C0,0x06F2,0x06F2, + 0x0A44,0x0A44,0x0F13,0x0F13,0x1510,0x1510,0x227E,0x227E, + 0x289F,0x289F,0x414E,0x414E,0x5B21,0x5B21,0x7258,0x7258, + 0x905E,0x905E,0xB550,0xB550,0xD7A0,0xD7A0,0xFFFF,0xFFFF, + }; - #endregion + #endregion - #region Private Methods + #region Private Methods - /// - /// Forces an update of the volume tables - /// - private void UpdateVolume() - { - int upperFloor = 40000; - var inc = (0xFFFF - upperFloor) / 100; + /// + /// Forces an update of the volume tables + /// + private void UpdateVolume() + { + int upperFloor = 40000; + var inc = (0xFFFF - upperFloor) / 100; - var vol = inc * _volume; // ((ulong)0xFFFF * (ulong)_volume / 100UL) - 20000 ; - _volumeTables = new uint[6][]; + var vol = inc * _volume; // ((ulong)0xFFFF * (ulong)_volume / 100UL) - 20000 ; + _volumeTables = new uint[6][]; - // parent array - for (int j = 0; j < _volumeTables.Length; j++) - { - _volumeTables[j] = new uint[32]; + // parent array + for (int j = 0; j < _volumeTables.Length; j++) + { + _volumeTables[j] = new uint[32]; - // child array - for (int i = 0; i < _volumeTables[j].Length; i++) - { - _volumeTables[j][i] = (uint)( - (PanTabs[(int)_currentPanTab][j] * AYVolumes[i] * vol) / - (3 * 65535 * 100)); - } - } - } + // child array + for (int i = 0; i < _volumeTables[j].Length; i++) + { + _volumeTables[j][i] = (uint)( + (PanTabs[(int)_currentPanTab][j] * AYVolumes[i] * vol) / + (3 * 65535 * 100)); + } + } + } - /// - /// Initializes timing information for the frame - /// - private void InitTiming(int sampleRate, int frameTactCount) - { - _sampleRate = sampleRate; - _tStatesPerFrame = frameTactCount; - _samplesPerFrame = sampleRate / 50; //882 + /// + /// Initializes timing information for the frame + /// + private void InitTiming(int sampleRate, int frameTactCount) + { + _sampleRate = sampleRate; + _tStatesPerFrame = frameTactCount; + _samplesPerFrame = sampleRate / 50; //882 - _tStatesPerSample = (double)frameTactCount / (double)_samplesPerFrame; // 90; //(int)Math.Round(((double)_tStatesPerFrame * 50D) / - //(16D * (double)_sampleRate), - //MidpointRounding.AwayFromZero); - _audioBuffer = new short[_samplesPerFrame * 2]; - _audioBufferIndex = 0; + _tStatesPerSample = (double)frameTactCount / (double)_samplesPerFrame; // 90; //(int)Math.Round(((double)_tStatesPerFrame * 50D) / + //(16D * (double)_sampleRate), + //MidpointRounding.AwayFromZero); + _audioBuffer = new short[_samplesPerFrame * 2]; + _audioBufferIndex = 0; - ticksPerSample = ((double)_chipFrequency / sampleRate / 8); - } - private double ticksPerSample; - - private double tickCounter = 0; + ticksPerSample = ((double)_chipFrequency / sampleRate / 8); + } + private double ticksPerSample; - /// - /// Updates the audiobuffer based on the current frame t-state - /// - private void BufferUpdate(int cycle) - { - if (cycle > _tStatesPerFrame) - { - // we are outside of the frame - just process the last value - cycle = _tStatesPerFrame; - } + private double tickCounter = 0; - // get the current length of the audiobuffer - int bufferLength = _samplesPerFrame; // _audioBuffer.Length; + /// + /// Updates the audiobuffer based on the current frame t-state + /// + private void BufferUpdate(int cycle) + { + if (cycle > _tStatesPerFrame) + { + // we are outside of the frame - just process the last value + cycle = _tStatesPerFrame; + } - double toEnd = ((double)(bufferLength * cycle) / (double)_tStatesPerFrame); + // get the current length of the audiobuffer + int bufferLength = _samplesPerFrame; // _audioBuffer.Length; - // loop through the number of samples we need to render - while (_audioBufferIndex < toEnd) - { - // run the AY chip processing at the correct resolution - tickCounter += ticksPerSample; + double toEnd = ((double)(bufferLength * cycle) / (double)_tStatesPerFrame); - while (tickCounter > 0) - { - tickCounter--; + // loop through the number of samples we need to render + while (_audioBufferIndex < toEnd) + { + // run the AY chip processing at the correct resolution + tickCounter += ticksPerSample; - if (++_countA >= _dividerA) - { - _countA = 0; - _bitA ^= -1; - } + while (tickCounter > 0) + { + tickCounter--; - if (++_countB >= _dividerB) - { - _countB = 0; - _bitB ^= -1; - } + if (++_countA >= _dividerA) + { + _countA = 0; + _bitA ^= -1; + } - if (++_countC >= _dividerC) - { - _countC = 0; - _bitC ^= -1; - } + if (++_countB >= _dividerB) + { + _countB = 0; + _bitB ^= -1; + } - if (++_countN >= _dividerN) - { - _countN = 0; - _noiseSeed = (_noiseSeed * 2 + 1) ^ (((_noiseSeed >> 16) ^ (_noiseSeed >> 13)) & 1); - _bitN = 0 - ((_noiseSeed >> 16) & 1); - } + if (++_countC >= _dividerC) + { + _countC = 0; + _bitC ^= -1; + } - if (++_countE >= _dividerE) - { - _countE = 0; - _eState += +_eDirection; + if (++_countN >= _dividerN) + { + _countN = 0; + _noiseSeed = (_noiseSeed * 2 + 1) ^ (((_noiseSeed >> 16) ^ (_noiseSeed >> 13)) & 1); + _bitN = 0 - ((_noiseSeed >> 16) & 1); + } - if ((_eState & ~31) != 0) - { - var mask = (1 << _registers[AY_E_SHAPE]); + if (++_countE >= _dividerE) + { + _countE = 0; + _eState += +_eDirection; - if ((mask & ((1 << 0) | (1 << 1) | (1 << 2) | - (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | - (1 << 7) | (1 << 9) | (1 << 15))) != 0) - { - _eState = _eDirection = 0; - } - else if ((mask & ((1 << 8) | (1 << 12))) != 0) - { - _eState &= 31; - } - else if ((mask & ((1 << 10) | (1 << 14))) != 0) - { - _eDirection = -_eDirection; - _eState += _eDirection; - } - else - { - // 11,13 - _eState = 31; - _eDirection = 0; - } - } - } - } + if ((_eState & ~31) != 0) + { + var mask = (1 << _registers[AY_E_SHAPE]); - // mix the sample - var mixA = ((_eMaskA & _eState) | _vA) & ((_bitA | _bit0) & (_bitN | _bit3)); - var mixB = ((_eMaskB & _eState) | _vB) & ((_bitB | _bit1) & (_bitN | _bit4)); - var mixC = ((_eMaskC & _eState) | _vC) & ((_bitC | _bit2) & (_bitN | _bit5)); + if ((mask & ((1 << 0) | (1 << 1) | (1 << 2) | + (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | + (1 << 7) | (1 << 9) | (1 << 15))) != 0) + { + _eState = _eDirection = 0; + } + else if ((mask & ((1 << 8) | (1 << 12))) != 0) + { + _eState &= 31; + } + else if ((mask & ((1 << 10) | (1 << 14))) != 0) + { + _eDirection = -_eDirection; + _eState += _eDirection; + } + else + { + // 11,13 + _eState = 31; + _eDirection = 0; + } + } + } + } - var l = _volumeTables[0][mixA]; - var r = _volumeTables[1][mixA]; + // mix the sample + var mixA = ((_eMaskA & _eState) | _vA) & ((_bitA | _bit0) & (_bitN | _bit3)); + var mixB = ((_eMaskB & _eState) | _vB) & ((_bitB | _bit1) & (_bitN | _bit4)); + var mixC = ((_eMaskC & _eState) | _vC) & ((_bitC | _bit2) & (_bitN | _bit5)); - l += _volumeTables[2][mixB]; - r += _volumeTables[3][mixB]; - l += _volumeTables[4][mixC]; - r += _volumeTables[5][mixC]; + var l = _volumeTables[0][mixA]; + var r = _volumeTables[1][mixA]; - _audioBuffer[_audioBufferIndex * 2] = (short)l; - _audioBuffer[(_audioBufferIndex * 2) + 1] = (short)r; + l += _volumeTables[2][mixB]; + r += _volumeTables[3][mixB]; + l += _volumeTables[4][mixC]; + r += _volumeTables[5][mixC]; - _audioBufferIndex++; - } + _audioBuffer[_audioBufferIndex * 2] = (short)l; + _audioBuffer[(_audioBufferIndex * 2) + 1] = (short)r; - _lastStateRendered = cycle; - } + _audioBufferIndex++; + } - #endregion + _lastStateRendered = cycle; + } - #endregion + #endregion - #region ISoundProvider + #endregion - public bool CanProvideAsync => false; + #region ISoundProvider - public SyncSoundMode SyncMode => SyncSoundMode.Sync; + public bool CanProvideAsync => false; - public void SetSyncMode(SyncSoundMode mode) - { - if (mode != SyncSoundMode.Sync) - throw new InvalidOperationException("Only Sync mode is supported."); - } + public SyncSoundMode SyncMode => SyncSoundMode.Sync; - public void GetSamplesAsync(short[] samples) - { - throw new NotSupportedException("Async is not available"); - } + public void SetSyncMode(SyncSoundMode mode) + { + if (mode != SyncSoundMode.Sync) + throw new InvalidOperationException("Only Sync mode is supported."); + } - public void DiscardSamples() - { - _audioBuffer = new short[_samplesPerFrame * 2]; - //_blipL.Clear(); - //_blipR.Clear(); - } + public void GetSamplesAsync(short[] samples) + { + throw new NotSupportedException("Async is not available"); + } - public void GetSamplesSync(out short[] samples, out int nsamp) - { - nsamp = _samplesPerFrame; - samples = _audioBuffer; - DiscardSamples(); - tickCounter = 0; - return; - /* + public void DiscardSamples() + { + _audioBuffer = new short[_samplesPerFrame * 2]; + //_blipL.Clear(); + //_blipR.Clear(); + } + + public void GetSamplesSync(out short[] samples, out int nsamp) + { + nsamp = _samplesPerFrame; + samples = _audioBuffer; + DiscardSamples(); + tickCounter = 0; + return; + /* _blipL.EndFrame((uint)SampleClock); _blipR.EndFrame((uint)SampleClock); SampleClock = 0; @@ -805,77 +805,77 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC samples = _audioBuffer; DiscardSamples(); */ - } + } - #endregion + #endregion - #region State Serialization + #region State Serialization - public int nullDump = 0; + public int nullDump = 0; - /// - /// State serialization - /// - public void SyncState(Serializer ser) - { - ser.BeginSection("PSG-AY"); + /// + /// State serialization + /// + public void SyncState(Serializer ser) + { + ser.BeginSection("PSG-AY"); - ser.Sync(nameof(ActiveFunction), ref ActiveFunction); + ser.Sync(nameof(ActiveFunction), ref ActiveFunction); - ser.Sync(nameof(_tStatesPerFrame), ref _tStatesPerFrame); - ser.Sync(nameof(_sampleRate), ref _sampleRate); - ser.Sync(nameof(_samplesPerFrame), ref _samplesPerFrame); - //ser.Sync(nameof(_tStatesPerSample), ref _tStatesPerSample); - ser.Sync(nameof(_audioBufferIndex), ref _audioBufferIndex); - ser.Sync(nameof(_audioBuffer), ref _audioBuffer, false); - ser.Sync(nameof(PortAInput), ref PortAInput); - ser.Sync(nameof(PortBInput), ref PortBInput); + ser.Sync(nameof(_tStatesPerFrame), ref _tStatesPerFrame); + ser.Sync(nameof(_sampleRate), ref _sampleRate); + ser.Sync(nameof(_samplesPerFrame), ref _samplesPerFrame); + //ser.Sync(nameof(_tStatesPerSample), ref _tStatesPerSample); + ser.Sync(nameof(_audioBufferIndex), ref _audioBufferIndex); + ser.Sync(nameof(_audioBuffer), ref _audioBuffer, false); + ser.Sync(nameof(PortAInput), ref PortAInput); + ser.Sync(nameof(PortBInput), ref PortBInput); - ser.Sync(nameof(_registers), ref _registers, false); - ser.Sync(nameof(_activeRegister), ref _activeRegister); - ser.Sync(nameof(_bitA), ref _bitA); - ser.Sync(nameof(_bitB), ref _bitB); - ser.Sync(nameof(_bitC), ref _bitC); - ser.Sync(nameof(_eState), ref _eState); - ser.Sync(nameof(_eDirection), ref _eDirection); - ser.Sync(nameof(_noiseSeed), ref _noiseSeed); - ser.Sync(nameof(_bit0), ref _bit0); - ser.Sync(nameof(_bit1), ref _bit1); - ser.Sync(nameof(_bit2), ref _bit2); - ser.Sync(nameof(_bit3), ref _bit3); - ser.Sync(nameof(_bit4), ref _bit4); - ser.Sync(nameof(_bit5), ref _bit5); - ser.Sync(nameof(_bitN), ref _bitN); - ser.Sync(nameof(_eMaskA), ref _eMaskA); - ser.Sync(nameof(_eMaskB), ref _eMaskB); - ser.Sync(nameof(_eMaskC), ref _eMaskC); - ser.Sync(nameof(_vA), ref _vA); - ser.Sync(nameof(_vB), ref _vB); - ser.Sync(nameof(_vC), ref _vC); - ser.Sync(nameof(_countA), ref _countA); - ser.Sync(nameof(_countB), ref _countB); - ser.Sync(nameof(_countC), ref _countC); - ser.Sync(nameof(_countE), ref _countE); - ser.Sync(nameof(_countN), ref _countN); - ser.Sync(nameof(_dividerA), ref _dividerA); - ser.Sync(nameof(_dividerB), ref _dividerB); - ser.Sync(nameof(_dividerC), ref _dividerC); - ser.Sync(nameof(_dividerE), ref _dividerE); - ser.Sync(nameof(_dividerN), ref _dividerN); - ser.SyncEnum(nameof(_currentPanTab), ref _currentPanTab); - ser.Sync(nameof(_volume), ref nullDump); + ser.Sync(nameof(_registers), ref _registers, false); + ser.Sync(nameof(_activeRegister), ref _activeRegister); + ser.Sync(nameof(_bitA), ref _bitA); + ser.Sync(nameof(_bitB), ref _bitB); + ser.Sync(nameof(_bitC), ref _bitC); + ser.Sync(nameof(_eState), ref _eState); + ser.Sync(nameof(_eDirection), ref _eDirection); + ser.Sync(nameof(_noiseSeed), ref _noiseSeed); + ser.Sync(nameof(_bit0), ref _bit0); + ser.Sync(nameof(_bit1), ref _bit1); + ser.Sync(nameof(_bit2), ref _bit2); + ser.Sync(nameof(_bit3), ref _bit3); + ser.Sync(nameof(_bit4), ref _bit4); + ser.Sync(nameof(_bit5), ref _bit5); + ser.Sync(nameof(_bitN), ref _bitN); + ser.Sync(nameof(_eMaskA), ref _eMaskA); + ser.Sync(nameof(_eMaskB), ref _eMaskB); + ser.Sync(nameof(_eMaskC), ref _eMaskC); + ser.Sync(nameof(_vA), ref _vA); + ser.Sync(nameof(_vB), ref _vB); + ser.Sync(nameof(_vC), ref _vC); + ser.Sync(nameof(_countA), ref _countA); + ser.Sync(nameof(_countB), ref _countB); + ser.Sync(nameof(_countC), ref _countC); + ser.Sync(nameof(_countE), ref _countE); + ser.Sync(nameof(_countN), ref _countN); + ser.Sync(nameof(_dividerA), ref _dividerA); + ser.Sync(nameof(_dividerB), ref _dividerB); + ser.Sync(nameof(_dividerC), ref _dividerC); + ser.Sync(nameof(_dividerE), ref _dividerE); + ser.Sync(nameof(_dividerN), ref _dividerN); + ser.SyncEnum(nameof(_currentPanTab), ref _currentPanTab); + ser.Sync(nameof(_volume), ref nullDump); - for (int i = 0; i < 6; i++) - { - ser.Sync("volTable" + i, ref _volumeTables[i], false); - } + for (int i = 0; i < 6; i++) + { + ser.Sync("volTable" + i, ref _volumeTables[i], false); + } - if (ser.IsReader) - _volume = _machine.CPC.Settings.AYVolume; + if (ser.IsReader) + _volume = _machine.CPC.Settings.AYVolume; - ser.EndSection(); - } + ser.EndSection(); + } - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/Beeper.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/Beeper.cs index e655305d41..fd34c3abd8 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/Beeper.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/Beeper.cs @@ -4,206 +4,206 @@ using System; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Logical Beeper class - /// Used to emulate the sound generated by tape loading - /// This implementation uses BlipBuffer and should *always* output at 44100 with 882 samples per frame - /// (so that it can be mixed easily further down the line) - /// - public class Beeper : ISoundProvider, IBeeperDevice - { - #region Fields and Properties + /// + /// Logical Beeper class + /// Used to emulate the sound generated by tape loading + /// This implementation uses BlipBuffer and should *always* output at 44100 with 882 samples per frame + /// (so that it can be mixed easily further down the line) + /// + public class Beeper : ISoundProvider, IBeeperDevice + { + #region Fields and Properties - /// - /// Sample Rate - /// This usually has to be 44100 for ISoundProvider - /// - private int _sampleRate; - public int SampleRate - { - get { return _sampleRate; } - set { _sampleRate = value; } - } + /// + /// Sample Rate + /// This usually has to be 44100 for ISoundProvider + /// + private int _sampleRate; + public int SampleRate + { + get { return _sampleRate; } + set { _sampleRate = value; } + } - /// - /// Buzzer volume - /// Accepts an int 0-100 value - /// - private int _volume; - public int Volume - { - get - { - return VolumeConverterOut(_volume); - } - set - { - var newVol = VolumeConverterIn(value); - if (newVol != _volume) - blip.Clear(); - _volume = VolumeConverterIn(value); - } - } + /// + /// Buzzer volume + /// Accepts an int 0-100 value + /// + private int _volume; + public int Volume + { + get + { + return VolumeConverterOut(_volume); + } + set + { + var newVol = VolumeConverterIn(value); + if (newVol != _volume) + blip.Clear(); + _volume = VolumeConverterIn(value); + } + } - /// - /// The last used volume (used to modify blipbuffer delta values) - /// - private int lastVolume; + /// + /// The last used volume (used to modify blipbuffer delta values) + /// + private int lastVolume; - /// - /// The number of cpu cycles per frame - /// - private long _tStatesPerFrame; + /// + /// The number of cpu cycles per frame + /// + private long _tStatesPerFrame; - /// - /// The parent emulated machine - /// - private CPCBase _machine; + /// + /// The parent emulated machine + /// + private CPCBase _machine; - /// - /// The last pulse - /// - private bool LastPulse; + /// + /// The last pulse + /// + private bool LastPulse; - /// - /// The last T-State (cpu cycle) that the last pulse was received - /// - private long LastPulseTState; + /// + /// The last T-State (cpu cycle) that the last pulse was received + /// + private long LastPulseTState; - /// - /// Device blipbuffer - /// - private readonly BlipBuffer blip = new BlipBuffer(883); + /// + /// Device blipbuffer + /// + private readonly BlipBuffer blip = new BlipBuffer(883); - #endregion + #endregion - #region Private Methods + #region Private Methods - /// - /// Takes an int 0-100 and returns the relevant short volume to output - /// - private int VolumeConverterIn(int vol) - { - int maxLimit = short.MaxValue / 3; - int increment = maxLimit / 100; + /// + /// Takes an int 0-100 and returns the relevant short volume to output + /// + private int VolumeConverterIn(int vol) + { + int maxLimit = short.MaxValue / 3; + int increment = maxLimit / 100; - return vol * increment; - } + return vol * increment; + } - /// - /// Takes an short volume and returns the relevant int value 0-100 - /// - private int VolumeConverterOut(int shortvol) - { - int maxLimit = short.MaxValue / 3; - int increment = maxLimit / 100; + /// + /// Takes an short volume and returns the relevant int value 0-100 + /// + private int VolumeConverterOut(int shortvol) + { + int maxLimit = short.MaxValue / 3; + int increment = maxLimit / 100; - if (shortvol > maxLimit) - shortvol = maxLimit; + if (shortvol > maxLimit) + shortvol = maxLimit; - return shortvol / increment; - } + return shortvol / increment; + } - #endregion + #endregion - #region Construction & Initialisation + #region Construction & Initialisation - public Beeper(CPCBase machine) - { - _machine = machine; - } + public Beeper(CPCBase machine) + { + _machine = machine; + } - /// - /// Initialises the beeper - /// - public void Init(int sampleRate, int tStatesPerFrame) - { - blip.SetRates((4000000), sampleRate); - _sampleRate = sampleRate; - _tStatesPerFrame = tStatesPerFrame; - } + /// + /// Initialises the beeper + /// + public void Init(int sampleRate, int tStatesPerFrame) + { + blip.SetRates((4000000), sampleRate); + _sampleRate = sampleRate; + _tStatesPerFrame = tStatesPerFrame; + } - #endregion + #endregion - #region IBeeperDevice + #region IBeeperDevice - /// - /// Processes an incoming pulse value and adds it to the blipbuffer - /// - public void ProcessPulseValue(bool pulse) - { - if (!_machine._renderSound) - return; + /// + /// Processes an incoming pulse value and adds it to the blipbuffer + /// + public void ProcessPulseValue(bool pulse) + { + if (!_machine._renderSound) + return; - if (LastPulse == pulse) - { - // no change - blip.AddDelta((uint)_machine.CurrentFrameCycle, 0); - } - - else - { - if (pulse) - blip.AddDelta((uint)_machine.CurrentFrameCycle, (short)(_volume)); - else - blip.AddDelta((uint)_machine.CurrentFrameCycle, -(short)(_volume)); + if (LastPulse == pulse) + { + // no change + blip.AddDelta((uint)_machine.CurrentFrameCycle, 0); + } - lastVolume = _volume; - } + else + { + if (pulse) + blip.AddDelta((uint)_machine.CurrentFrameCycle, (short)(_volume)); + else + blip.AddDelta((uint)_machine.CurrentFrameCycle, -(short)(_volume)); - LastPulse = pulse; - } + lastVolume = _volume; + } - #endregion + LastPulse = pulse; + } - #region ISoundProvider + #endregion - public bool CanProvideAsync => false; + #region ISoundProvider - public SyncSoundMode SyncMode => SyncSoundMode.Sync; + public bool CanProvideAsync => false; - public void SetSyncMode(SyncSoundMode mode) - { - if (mode != SyncSoundMode.Sync) - throw new InvalidOperationException("Only Sync mode is supported."); - } + public SyncSoundMode SyncMode => SyncSoundMode.Sync; - public void GetSamplesAsync(short[] samples) - { - throw new NotSupportedException("Async is not available"); - } + public void SetSyncMode(SyncSoundMode mode) + { + if (mode != SyncSoundMode.Sync) + throw new InvalidOperationException("Only Sync mode is supported."); + } - public void DiscardSamples() - { - blip.Clear(); - } + public void GetSamplesAsync(short[] samples) + { + throw new NotSupportedException("Async is not available"); + } - public void GetSamplesSync(out short[] samples, out int nsamp) - { - blip.EndFrame((uint)_tStatesPerFrame); - nsamp = blip.SamplesAvailable(); - samples = new short[nsamp * 2]; - blip.ReadSamples(samples, nsamp, true); - for (int i = 0; i < nsamp * 2; i += 2) - { - samples[i + 1] = samples[i]; - } - } + public void DiscardSamples() + { + blip.Clear(); + } - #endregion + public void GetSamplesSync(out short[] samples, out int nsamp) + { + blip.EndFrame((uint)_tStatesPerFrame); + nsamp = blip.SamplesAvailable(); + samples = new short[nsamp * 2]; + blip.ReadSamples(samples, nsamp, true); + for (int i = 0; i < nsamp * 2; i += 2) + { + samples[i + 1] = samples[i]; + } + } - #region State Serialization + #endregion - public void SyncState(Serializer ser) - { - ser.BeginSection("Buzzer"); - ser.Sync(nameof(_tStatesPerFrame), ref _tStatesPerFrame); - ser.Sync(nameof(_sampleRate), ref _sampleRate); - ser.Sync(nameof(LastPulse), ref LastPulse); - ser.Sync(nameof(LastPulseTState), ref LastPulseTState); - ser.EndSection(); - } + #region State Serialization - #endregion - } + public void SyncState(Serializer ser) + { + ser.BeginSection("Buzzer"); + ser.Sync(nameof(_tStatesPerFrame), ref _tStatesPerFrame); + ser.Sync(nameof(_sampleRate), ref _sampleRate); + ser.Sync(nameof(LastPulse), ref LastPulse); + ser.Sync(nameof(LastPulseTState), ref LastPulseTState); + ser.EndSection(); + } + + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Memory.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Memory.cs index 6ba6df3e80..62dc8b29a3 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Memory.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Memory.cs @@ -6,142 +6,142 @@ using System.Threading.Tasks; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// CPC464 - /// * Memory * - /// - public partial class CPC464 : CPCBase - { - /// - /// Simulates reading from the bus - /// ROM paging should be handled here - /// - public override byte ReadBus(ushort addr) - { - int divisor = addr / 0x4000; - byte result = 0xff; + /// + /// CPC464 + /// * Memory * + /// + public partial class CPC464 : CPCBase + { + /// + /// Simulates reading from the bus + /// ROM paging should be handled here + /// + public override byte ReadBus(ushort addr) + { + int divisor = addr / 0x4000; + byte result = 0xff; - switch (divisor) - { - // 0x000 or LowerROM - case 0: - if (LowerROMPaged) - result = ROMLower[addr % 0x4000]; - else - result = RAM0[addr % 0x4000]; - break; + switch (divisor) + { + // 0x000 or LowerROM + case 0: + if (LowerROMPaged) + result = ROMLower[addr % 0x4000]; + else + result = RAM0[addr % 0x4000]; + break; - // 0x4000 - case 1: - result = RAM1[addr % 0x4000]; - break; + // 0x4000 + case 1: + result = RAM1[addr % 0x4000]; + break; - // 0x8000 - case 2: - result = RAM2[addr % 0x4000]; - break; + // 0x8000 + case 2: + result = RAM2[addr % 0x4000]; + break; - // 0xc000 or UpperROM - case 3: - if (UpperROMPaged) - result = ROM0[addr % 0x4000]; - else - result = RAM3[addr % 0x4000]; - break; - default: - break; - } + // 0xc000 or UpperROM + case 3: + if (UpperROMPaged) + result = ROM0[addr % 0x4000]; + else + result = RAM3[addr % 0x4000]; + break; + default: + break; + } - return result; - } + return result; + } - /// - /// Simulates writing to the bus - /// Writes to the bus ALWAYS go to RAM, regardless of what upper and lower ROMs are paged in - /// - public override void WriteBus(ushort addr, byte value) - { - int divisor = addr / 0x4000; + /// + /// Simulates writing to the bus + /// Writes to the bus ALWAYS go to RAM, regardless of what upper and lower ROMs are paged in + /// + public override void WriteBus(ushort addr, byte value) + { + int divisor = addr / 0x4000; - switch (divisor) - { - // RAM 0x000 - case 0: - RAM0[addr % 0x4000] = value; - break; + switch (divisor) + { + // RAM 0x000 + case 0: + RAM0[addr % 0x4000] = value; + break; - // RAM 0x4000 - case 1: - RAM1[addr % 0x4000] = value; - break; + // RAM 0x4000 + case 1: + RAM1[addr % 0x4000] = value; + break; - // RAM 0x8000 - case 2: - RAM2[addr % 0x4000] = value; - break; + // RAM 0x8000 + case 2: + RAM2[addr % 0x4000] = value; + break; - // RAM 0xc000 - case 3: - RAM3[addr % 0x4000] = value; - break; - default: - break; - } - } + // RAM 0xc000 + case 3: + RAM3[addr % 0x4000] = value; + break; + default: + break; + } + } - /// - /// Reads a byte of data from a specified memory address - /// - public override byte ReadMemory(ushort addr) - { - var data = ReadBus(addr); - return data; - } + /// + /// Reads a byte of data from a specified memory address + /// + public override byte ReadMemory(ushort addr) + { + var data = ReadBus(addr); + return data; + } - /// - /// Writes a byte of data to a specified memory address - /// (with memory contention if appropriate) - /// - public override void WriteMemory(ushort addr, byte value) - { - WriteBus(addr, value); - } + /// + /// Writes a byte of data to a specified memory address + /// (with memory contention if appropriate) + /// + public override void WriteMemory(ushort addr, byte value) + { + WriteBus(addr, value); + } - /// - /// Sets up the ROM - /// - public override void InitROM(RomData[] romData) - { - foreach (var r in romData) - { - if (r.ROMType == RomData.ROMChipType.Lower) - { - for (int i = 0; i < 0x4000; i++) - { - ROMLower[i] = r.RomBytes[i]; + /// + /// Sets up the ROM + /// + public override void InitROM(RomData[] romData) + { + foreach (var r in romData) + { + if (r.ROMType == RomData.ROMChipType.Lower) + { + for (int i = 0; i < 0x4000; i++) + { + ROMLower[i] = r.RomBytes[i]; - } - } - else - { - for (int i = 0; i < 0x4000; i++) - { - switch (r.ROMPosition) - { - case 0: - ROM0[i] = r.RomBytes[i]; - break; - case 7: - ROM7[i] = r.RomBytes[i]; - break; - } - } - } - } + } + } + else + { + for (int i = 0; i < 0x4000; i++) + { + switch (r.ROMPosition) + { + case 0: + ROM0[i] = r.RomBytes[i]; + break; + case 7: + ROM7[i] = r.RomBytes[i]; + break; + } + } + } + } - LowerROMPaged = true; - UpperROMPaged = true; - } - } + LowerROMPaged = true; + UpperROMPaged = true; + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Port.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Port.cs index 73f6e99746..6f7a2cae3d 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Port.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Port.cs @@ -7,97 +7,97 @@ using System.Threading.Tasks; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// CPC464 - /// * Port * - /// - public partial class CPC464 : CPCBase - { - /// - /// Reads a byte of data from a specified port address - /// - public override byte ReadPort(ushort port) - { - BitArray portBits = new BitArray(BitConverter.GetBytes(port)); - byte portUpper = (byte)(port >> 8); - byte portLower = (byte)(port & 0xff); + /// + /// CPC464 + /// * Port * + /// + public partial class CPC464 : CPCBase + { + /// + /// Reads a byte of data from a specified port address + /// + public override byte ReadPort(ushort port) + { + BitArray portBits = new BitArray(BitConverter.GetBytes(port)); + byte portUpper = (byte)(port >> 8); + byte portLower = (byte)(port & 0xff); - int result = 0xff; + int result = 0xff; - if (DecodeINPort(port) == PortDevice.GateArray) - { - GateArray.ReadPort(port, ref result); - } - else if (DecodeINPort(port) == PortDevice.CRCT) - { - CRCT.ReadPort(port, ref result); - } - else if (DecodeINPort(port) == PortDevice.ROMSelect) - { + if (DecodeINPort(port) == PortDevice.GateArray) + { + GateArray.ReadPort(port, ref result); + } + else if (DecodeINPort(port) == PortDevice.CRCT) + { + CRCT.ReadPort(port, ref result); + } + else if (DecodeINPort(port) == PortDevice.ROMSelect) + { - } - else if (DecodeINPort(port) == PortDevice.Printer) - { + } + else if (DecodeINPort(port) == PortDevice.Printer) + { - } - else if (DecodeINPort(port) == PortDevice.PPI) - { - PPI.ReadPort(port, ref result); - } - else if (DecodeINPort(port) == PortDevice.Expansion) - { + } + else if (DecodeINPort(port) == PortDevice.PPI) + { + PPI.ReadPort(port, ref result); + } + else if (DecodeINPort(port) == PortDevice.Expansion) + { - } + } - return (byte)result; - } + return (byte)result; + } - /// - /// Writes a byte of data to a specified port address - /// Because of the port decoding, multiple devices can be written to - /// - public override void WritePort(ushort port, byte value) - { - BitArray portBits = new BitArray(BitConverter.GetBytes(port)); - BitArray dataBits = new BitArray(BitConverter.GetBytes(value)); - byte portUpper = (byte)(port >> 8); - byte portLower = (byte)(port & 0xff); + /// + /// Writes a byte of data to a specified port address + /// Because of the port decoding, multiple devices can be written to + /// + public override void WritePort(ushort port, byte value) + { + BitArray portBits = new BitArray(BitConverter.GetBytes(port)); + BitArray dataBits = new BitArray(BitConverter.GetBytes(value)); + byte portUpper = (byte)(port >> 8); + byte portLower = (byte)(port & 0xff); - var devs = DecodeOUTPort(port); + var devs = DecodeOUTPort(port); - foreach (var d in devs) - { - if (d == PortDevice.GateArray) - { - GateArray.WritePort(port, value); - } - else if (d == PortDevice.RAMManagement) - { - // not present in the unexpanded CPC464 - } - else if (d == PortDevice.CRCT) - { - CRCT.WritePort(port, value); - } - else if (d == PortDevice.ROMSelect) - { + foreach (var d in devs) + { + if (d == PortDevice.GateArray) + { + GateArray.WritePort(port, value); + } + else if (d == PortDevice.RAMManagement) + { + // not present in the unexpanded CPC464 + } + else if (d == PortDevice.CRCT) + { + CRCT.WritePort(port, value); + } + else if (d == PortDevice.ROMSelect) + { - } - else if (d == PortDevice.Printer) - { + } + else if (d == PortDevice.Printer) + { - } - else if (d == PortDevice.PPI) - { - PPI.WritePort(port, value); - } - else if (d == PortDevice.Expansion) - { + } + else if (d == PortDevice.PPI) + { + PPI.WritePort(port, value); + } + else if (d == PortDevice.Expansion) + { - } - } + } + } - return; - } - } + return; + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.cs index e1f1f57511..3deca82750 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.cs @@ -4,43 +4,43 @@ using System.Collections.Generic; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// CPC464 construction - /// - public partial class CPC464 : CPCBase - { - #region Construction + /// + /// CPC464 construction + /// + public partial class CPC464 : CPCBase + { + #region Construction - /// - /// Main constructor - /// - public CPC464(AmstradCPC cpc, Z80A cpu, List files, bool autoTape, AmstradCPC.BorderType borderType) - { - CPC = cpc; - CPU = cpu; + /// + /// Main constructor + /// + public CPC464(AmstradCPC cpc, Z80A cpu, List files, bool autoTape, AmstradCPC.BorderType borderType) + { + CPC = cpc; + CPU = cpu; - FrameLength = 79872; + FrameLength = 79872; - CRCT = new CRCT_6845(CRCT_6845.CRCTType.MC6845, this); - //CRT = new CRTDevice(this); - GateArray = new AmstradGateArray(this, AmstradGateArray.GateArrayType.Amstrad40007); - PPI = new PPI_8255(this); + CRCT = new CRCT_6845(CRCT_6845.CRCTType.MC6845, this); + //CRT = new CRTDevice(this); + GateArray = new AmstradGateArray(this, AmstradGateArray.GateArrayType.Amstrad40007); + PPI = new PPI_8255(this); - TapeBuzzer = new Beeper(this); - TapeBuzzer.Init(44100, FrameLength); + TapeBuzzer = new Beeper(this); + TapeBuzzer.Init(44100, FrameLength); - //AYDevice = new PSG(this, PSG.ay38910_type_t.AY38910_TYPE_8912, GateArray.PSGClockSpeed, 882 * 50); - AYDevice = new AY38912(this); - AYDevice.Init(44100, FrameLength); + //AYDevice = new PSG(this, PSG.ay38910_type_t.AY38910_TYPE_8912, GateArray.PSGClockSpeed, 882 * 50); + AYDevice = new AY38912(this); + AYDevice.Init(44100, FrameLength); - KeyboardDevice = new StandardKeyboard(this); + KeyboardDevice = new StandardKeyboard(this); - TapeDevice = new DatacorderDevice(autoTape); - TapeDevice.Init(this); + TapeDevice = new DatacorderDevice(autoTape); + TapeDevice.Init(this); - InitializeMedia(files); - } + InitializeMedia(files); + } - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Memory.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Memory.cs index 0f89faff43..731fe3cd4d 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Memory.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Memory.cs @@ -6,257 +6,257 @@ using System.Threading.Tasks; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// CPC6128 - /// * Memory * - /// - public partial class CPC6128 : CPCBase - { - /// - /// Simulates reading from the bus - /// ROM and RAM paging should be handled here - /// - public override byte ReadBus(ushort addr) - { - int divisor = addr / 0x4000; - byte result = 0xff; + /// + /// CPC6128 + /// * Memory * + /// + public partial class CPC6128 : CPCBase + { + /// + /// Simulates reading from the bus + /// ROM and RAM paging should be handled here + /// + public override byte ReadBus(ushort addr) + { + int divisor = addr / 0x4000; + byte result = 0xff; - switch (divisor) - { - // RAM 0x000 - case 0: - if (LowerROMPaged) - { - result = ROMLower[addr % 0x4000]; - } - else - { - switch (RAMConfig) - { - case 2: - result = RAM4[addr % 0x4000]; - break; - default: - result = RAM0[addr % 0x4000]; - break; - } - } - break; + switch (divisor) + { + // RAM 0x000 + case 0: + if (LowerROMPaged) + { + result = ROMLower[addr % 0x4000]; + } + else + { + switch (RAMConfig) + { + case 2: + result = RAM4[addr % 0x4000]; + break; + default: + result = RAM0[addr % 0x4000]; + break; + } + } + break; - // RAM 0x4000 - case 1: - switch (RAMConfig) - { - case 0: - case 1: - result = RAM1[addr % 0x4000]; - break; - case 2: - case 5: - result = RAM5[addr % 0x4000]; - break; - case 3: - result = RAM3[addr % 0x4000]; - break; - case 4: - result = RAM4[addr % 0x4000]; - break; - case 6: - result = RAM6[addr % 0x4000]; - break; - case 7: - result = RAM7[addr % 0x4000]; - break; - } + // RAM 0x4000 + case 1: + switch (RAMConfig) + { + case 0: + case 1: + result = RAM1[addr % 0x4000]; + break; + case 2: + case 5: + result = RAM5[addr % 0x4000]; + break; + case 3: + result = RAM3[addr % 0x4000]; + break; + case 4: + result = RAM4[addr % 0x4000]; + break; + case 6: + result = RAM6[addr % 0x4000]; + break; + case 7: + result = RAM7[addr % 0x4000]; + break; + } - break; + break; - // RAM 0x8000 - case 2: - switch (RAMConfig) - { - case 2: - result = RAM6[addr % 0x4000]; - break; - default: - result = RAM2[addr % 0x4000]; - break; - } - break; + // RAM 0x8000 + case 2: + switch (RAMConfig) + { + case 2: + result = RAM6[addr % 0x4000]; + break; + default: + result = RAM2[addr % 0x4000]; + break; + } + break; - // RAM 0xc000 - case 3: - if (UpperROMPaged) - { - switch (UpperROMPosition) - { - case 7: - result = ROM7[addr % 0x4000]; - break; - case 0: - default: - result = ROM0[addr % 0x4000]; - break; - } - } - else - { - switch (RAMConfig) - { - case 1: - case 2: - case 3: - result = RAM7[addr % 0x4000]; - break; - default: - result = RAM3[addr % 0x4000]; - break; - } - } - break; - default: - break; - } + // RAM 0xc000 + case 3: + if (UpperROMPaged) + { + switch (UpperROMPosition) + { + case 7: + result = ROM7[addr % 0x4000]; + break; + case 0: + default: + result = ROM0[addr % 0x4000]; + break; + } + } + else + { + switch (RAMConfig) + { + case 1: + case 2: + case 3: + result = RAM7[addr % 0x4000]; + break; + default: + result = RAM3[addr % 0x4000]; + break; + } + } + break; + default: + break; + } - return result; - } + return result; + } - /// - /// Simulates writing to the bus - /// Writes to the bus ALWAYS go to RAM, regardless of what upper and lower ROMs are paged in - /// - public override void WriteBus(ushort addr, byte value) - { - int divisor = addr / 0x4000; + /// + /// Simulates writing to the bus + /// Writes to the bus ALWAYS go to RAM, regardless of what upper and lower ROMs are paged in + /// + public override void WriteBus(ushort addr, byte value) + { + int divisor = addr / 0x4000; - switch (divisor) - { - // RAM 0x000 - case 0: - switch (RAMConfig) - { - case 2: - RAM4[addr % 0x4000] = value; - break; - default: - RAM0[addr % 0x4000] = value; - break; - } - break; + switch (divisor) + { + // RAM 0x000 + case 0: + switch (RAMConfig) + { + case 2: + RAM4[addr % 0x4000] = value; + break; + default: + RAM0[addr % 0x4000] = value; + break; + } + break; - // RAM 0x4000 - case 1: - switch (RAMConfig) - { - case 0: - case 1: - RAM1[addr % 0x4000] = value; - break; - case 2: - case 5: - RAM5[addr % 0x4000] = value; - break; - case 3: - RAM3[addr % 0x4000] = value; - break; - case 4: - RAM4[addr % 0x4000] = value; - break; - case 6: - RAM6[addr % 0x4000] = value; - break; - case 7: - RAM7[addr % 0x4000] = value; - break; - } - - break; + // RAM 0x4000 + case 1: + switch (RAMConfig) + { + case 0: + case 1: + RAM1[addr % 0x4000] = value; + break; + case 2: + case 5: + RAM5[addr % 0x4000] = value; + break; + case 3: + RAM3[addr % 0x4000] = value; + break; + case 4: + RAM4[addr % 0x4000] = value; + break; + case 6: + RAM6[addr % 0x4000] = value; + break; + case 7: + RAM7[addr % 0x4000] = value; + break; + } - // RAM 0x8000 - case 2: - switch (RAMConfig) - { - case 2: - RAM6[addr % 0x4000] = value; - break; - default: - RAM2[addr % 0x4000] = value; - break; - } - break; + break; - // RAM 0xc000 - case 3: - switch (RAMConfig) - { - case 1: - case 2: - case 3: - RAM7[addr % 0x4000] = value; - break; - default: - RAM3[addr % 0x4000] = value; - break; - } - break; - default: - break; - } - } + // RAM 0x8000 + case 2: + switch (RAMConfig) + { + case 2: + RAM6[addr % 0x4000] = value; + break; + default: + RAM2[addr % 0x4000] = value; + break; + } + break; - /// - /// Reads a byte of data from a specified memory address - /// - public override byte ReadMemory(ushort addr) - { - var data = ReadBus(addr); - return data; - } + // RAM 0xc000 + case 3: + switch (RAMConfig) + { + case 1: + case 2: + case 3: + RAM7[addr % 0x4000] = value; + break; + default: + RAM3[addr % 0x4000] = value; + break; + } + break; + default: + break; + } + } - /// - /// Writes a byte of data to a specified memory address - /// (with memory contention if appropriate) - /// - public override void WriteMemory(ushort addr, byte value) - { - WriteBus(addr, value); - } + /// + /// Reads a byte of data from a specified memory address + /// + public override byte ReadMemory(ushort addr) + { + var data = ReadBus(addr); + return data; + } + + /// + /// Writes a byte of data to a specified memory address + /// (with memory contention if appropriate) + /// + public override void WriteMemory(ushort addr, byte value) + { + WriteBus(addr, value); + } - /// - /// Sets up the ROM - /// - public override void InitROM(RomData[] romData) - { - foreach (var r in romData) - { - if (r.ROMType == RomData.ROMChipType.Lower) - { - for (int i = 0; i < 0x4000; i++) - { - ROMLower[i] = r.RomBytes[i]; + /// + /// Sets up the ROM + /// + public override void InitROM(RomData[] romData) + { + foreach (var r in romData) + { + if (r.ROMType == RomData.ROMChipType.Lower) + { + for (int i = 0; i < 0x4000; i++) + { + ROMLower[i] = r.RomBytes[i]; - } - } - else - { - for (int i = 0; i < 0x4000; i++) - { - switch (r.ROMPosition) - { - case 0: - ROM0[i] = r.RomBytes[i]; - break; - case 7: - ROM7[i] = r.RomBytes[i]; - break; - } - } - } - } + } + } + else + { + for (int i = 0; i < 0x4000; i++) + { + switch (r.ROMPosition) + { + case 0: + ROM0[i] = r.RomBytes[i]; + break; + case 7: + ROM7[i] = r.RomBytes[i]; + break; + } + } + } + } - LowerROMPaged = true; - UpperROMPaged = true; - } - } + LowerROMPaged = true; + UpperROMPaged = true; + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Port.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Port.cs index 86c2fb5536..80138015c3 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Port.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Port.cs @@ -8,129 +8,129 @@ using System.Threading.Tasks; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// CPC6128 - /// * Port * - /// - public partial class CPC6128 : CPCBase - { - /// - /// Reads a byte of data from a specified port address - /// - public override byte ReadPort(ushort port) - { - BitArray portBits = new BitArray(BitConverter.GetBytes(port)); - byte portUpper = (byte)(port >> 8); - byte portLower = (byte)(port & 0xff); + /// + /// CPC6128 + /// * Port * + /// + public partial class CPC6128 : CPCBase + { + /// + /// Reads a byte of data from a specified port address + /// + public override byte ReadPort(ushort port) + { + BitArray portBits = new BitArray(BitConverter.GetBytes(port)); + byte portUpper = (byte)(port >> 8); + byte portLower = (byte)(port & 0xff); - int result = 0xff; + int result = 0xff; - if (DecodeINPort(port) == PortDevice.GateArray) - { - GateArray.ReadPort(port, ref result); - } - else if (DecodeINPort(port) == PortDevice.CRCT) - { - CRCT.ReadPort(port, ref result); - } - else if (DecodeINPort(port) == PortDevice.ROMSelect) - { + if (DecodeINPort(port) == PortDevice.GateArray) + { + GateArray.ReadPort(port, ref result); + } + else if (DecodeINPort(port) == PortDevice.CRCT) + { + CRCT.ReadPort(port, ref result); + } + else if (DecodeINPort(port) == PortDevice.ROMSelect) + { - } - else if (DecodeINPort(port) == PortDevice.Printer) - { + } + else if (DecodeINPort(port) == PortDevice.Printer) + { - } - else if (DecodeINPort(port) == PortDevice.PPI) - { - PPI.ReadPort(port, ref result); - } - else if (DecodeINPort(port) == PortDevice.Expansion) - { - if (!port.Bit(7)) - { - // FDC - if (port.Bit(8) && !port.Bit(0)) - { - // FDC status register - UPDDiskDevice.ReadStatus(ref result); - } - if (port.Bit(8) && port.Bit(0)) - { - // FDC data register - UPDDiskDevice.ReadData(ref result); - } - } - } + } + else if (DecodeINPort(port) == PortDevice.PPI) + { + PPI.ReadPort(port, ref result); + } + else if (DecodeINPort(port) == PortDevice.Expansion) + { + if (!port.Bit(7)) + { + // FDC + if (port.Bit(8) && !port.Bit(0)) + { + // FDC status register + UPDDiskDevice.ReadStatus(ref result); + } + if (port.Bit(8) && port.Bit(0)) + { + // FDC data register + UPDDiskDevice.ReadData(ref result); + } + } + } - return (byte)result; - } + return (byte)result; + } - /// - /// Writes a byte of data to a specified port address - /// Because of the port decoding, multiple devices can be written to - /// - public override void WritePort(ushort port, byte value) - { - BitArray portBits = new BitArray(BitConverter.GetBytes(port)); - BitArray dataBits = new BitArray(BitConverter.GetBytes(value)); - byte portUpper = (byte)(port >> 8); - byte portLower = (byte)(port & 0xff); + /// + /// Writes a byte of data to a specified port address + /// Because of the port decoding, multiple devices can be written to + /// + public override void WritePort(ushort port, byte value) + { + BitArray portBits = new BitArray(BitConverter.GetBytes(port)); + BitArray dataBits = new BitArray(BitConverter.GetBytes(value)); + byte portUpper = (byte)(port >> 8); + byte portLower = (byte)(port & 0xff); - var devs = DecodeOUTPort(port); + var devs = DecodeOUTPort(port); - foreach (var d in devs) - { - if (d == PortDevice.GateArray) - { - GateArray.WritePort(port, value); - } - else if (d == PortDevice.RAMManagement) - { - if (value.Bit(7) && value.Bit(6)) - { - RAMConfig = value & 0x07; + foreach (var d in devs) + { + if (d == PortDevice.GateArray) + { + GateArray.WritePort(port, value); + } + else if (d == PortDevice.RAMManagement) + { + if (value.Bit(7) && value.Bit(6)) + { + RAMConfig = value & 0x07; - // additional 64K bank index - var b64 = value & 0x38; - } - } - else if (d == PortDevice.CRCT) - { - CRCT.WritePort(port, value); - } - else if (d == PortDevice.ROMSelect) - { - UpperROMPosition = value; - } - else if (d == PortDevice.Printer) - { + // additional 64K bank index + var b64 = value & 0x38; + } + } + else if (d == PortDevice.CRCT) + { + CRCT.WritePort(port, value); + } + else if (d == PortDevice.ROMSelect) + { + UpperROMPosition = value; + } + else if (d == PortDevice.Printer) + { - } - else if (d == PortDevice.PPI) - { - PPI.WritePort(port, value); - } - else if (d == PortDevice.Expansion) - { - if (!port.Bit(7)) - { - // FDC - if (port.Bit(8) && !port.Bit(0) || port.Bit(8) && port.Bit(0)) - { - // FDC data register - UPDDiskDevice.WriteData(value); - } - if ((!port.Bit(8) && !port.Bit(0)) || (!port.Bit(8) && port.Bit(0))) - { - // FDC motor - UPDDiskDevice.Motor(value); - } - } - } - } + } + else if (d == PortDevice.PPI) + { + PPI.WritePort(port, value); + } + else if (d == PortDevice.Expansion) + { + if (!port.Bit(7)) + { + // FDC + if (port.Bit(8) && !port.Bit(0) || port.Bit(8) && port.Bit(0)) + { + // FDC data register + UPDDiskDevice.WriteData(value); + } + if ((!port.Bit(8) && !port.Bit(0)) || (!port.Bit(8) && port.Bit(0))) + { + // FDC motor + UPDDiskDevice.Motor(value); + } + } + } + } - return; - } - } + return; + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.cs index d14333524d..fee955f0f9 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.cs @@ -4,46 +4,46 @@ using System.Collections.Generic; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// CPC6128 construction - /// - public partial class CPC6128 : CPCBase - { - #region Construction + /// + /// CPC6128 construction + /// + public partial class CPC6128 : CPCBase + { + #region Construction - /// - /// Main constructor - /// - public CPC6128(AmstradCPC cpc, Z80A cpu, List files, bool autoTape, AmstradCPC.BorderType borderType) - { - CPC = cpc; - CPU = cpu; + /// + /// Main constructor + /// + public CPC6128(AmstradCPC cpc, Z80A cpu, List files, bool autoTape, AmstradCPC.BorderType borderType) + { + CPC = cpc; + CPU = cpu; - FrameLength = 79872; + FrameLength = 79872; - CRCT = new CRCT_6845(CRCT_6845.CRCTType.MC6845, this); - //CRT = new CRTDevice(this); - GateArray = new AmstradGateArray(this, AmstradGateArray.GateArrayType.Amstrad40007); - PPI = new PPI_8255(this); + CRCT = new CRCT_6845(CRCT_6845.CRCTType.MC6845, this); + //CRT = new CRTDevice(this); + GateArray = new AmstradGateArray(this, AmstradGateArray.GateArrayType.Amstrad40007); + PPI = new PPI_8255(this); - TapeBuzzer = new Beeper(this); - TapeBuzzer.Init(44100, FrameLength); + TapeBuzzer = new Beeper(this); + TapeBuzzer.Init(44100, FrameLength); - //AYDevice = new PSG(this, PSG.ay38910_type_t.AY38910_TYPE_8912, GateArray.PSGClockSpeed, 882 * 50); - AYDevice = new AY38912(this); - AYDevice.Init(44100, FrameLength); + //AYDevice = new PSG(this, PSG.ay38910_type_t.AY38910_TYPE_8912, GateArray.PSGClockSpeed, 882 * 50); + AYDevice = new AY38912(this); + AYDevice.Init(44100, FrameLength); - KeyboardDevice = new StandardKeyboard(this); + KeyboardDevice = new StandardKeyboard(this); - TapeDevice = new DatacorderDevice(autoTape); - TapeDevice.Init(this); + TapeDevice = new DatacorderDevice(autoTape); + TapeDevice.Init(this); - UPDDiskDevice = new NECUPD765(); - UPDDiskDevice.Init(this); + UPDDiskDevice = new NECUPD765(); + UPDDiskDevice.Init(this); - InitializeMedia(files); - } + InitializeMedia(files); + } - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Input.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Input.cs index 5fc7868bab..bd22b023a8 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Input.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Input.cs @@ -3,293 +3,293 @@ using System.Linq; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// The abstract class that all emulated models will inherit from - /// * Input * - /// - public abstract partial class CPCBase - { - string Play = "Play Tape"; - string Stop = "Stop Tape"; - string RTZ = "RTZ Tape"; - string Record = "Record Tape"; - string NextTape = "Insert Next Tape"; - string PrevTape = "Insert Previous Tape"; - string NextBlock = "Next Tape Block"; - string PrevBlock = "Prev Tape Block"; - string TapeStatus = "Get Tape Status"; + /// + /// The abstract class that all emulated models will inherit from + /// * Input * + /// + public abstract partial class CPCBase + { + string Play = "Play Tape"; + string Stop = "Stop Tape"; + string RTZ = "RTZ Tape"; + string Record = "Record Tape"; + string NextTape = "Insert Next Tape"; + string PrevTape = "Insert Previous Tape"; + string NextBlock = "Next Tape Block"; + string PrevBlock = "Prev Tape Block"; + string TapeStatus = "Get Tape Status"; - string NextDisk = "Insert Next Disk"; - string PrevDisk = "Insert Previous Disk"; - string EjectDisk = "Eject Current Disk"; - string DiskStatus = "Get Disk Status"; + string NextDisk = "Insert Next Disk"; + string PrevDisk = "Insert Previous Disk"; + string EjectDisk = "Eject Current Disk"; + string DiskStatus = "Get Disk Status"; - string HardResetStr = "Power"; - string SoftResetStr = "Reset"; + string HardResetStr = "Power"; + string SoftResetStr = "Reset"; - bool pressed_Play = false; - bool pressed_Stop = false; - bool pressed_RTZ = false; - bool pressed_NextTape = false; - bool pressed_PrevTape = false; - bool pressed_NextBlock = false; - bool pressed_PrevBlock = false; - bool pressed_TapeStatus = false; - bool pressed_NextDisk = false; - bool pressed_PrevDisk = false; - bool pressed_EjectDisk = false; - bool pressed_DiskStatus = false; - bool pressed_HardReset = false; - bool pressed_SoftReset = false; + bool pressed_Play = false; + bool pressed_Stop = false; + bool pressed_RTZ = false; + bool pressed_NextTape = false; + bool pressed_PrevTape = false; + bool pressed_NextBlock = false; + bool pressed_PrevBlock = false; + bool pressed_TapeStatus = false; + bool pressed_NextDisk = false; + bool pressed_PrevDisk = false; + bool pressed_EjectDisk = false; + bool pressed_DiskStatus = false; + bool pressed_HardReset = false; + bool pressed_SoftReset = false; - /// - /// Cycles through all the input callbacks - /// This should be done once per frame - /// - public void PollInput() - { - CPC.InputCallbacks.Call(); + /// + /// Cycles through all the input callbacks + /// This should be done once per frame + /// + public void PollInput() + { + CPC.InputCallbacks.Call(); - lock (this) - { - // parse single keyboard matrix keys. - // J1 and J2 are scanned as part of the keyboard - for (var i = 0; i < KeyboardDevice.KeyboardMatrix.Length; i++) - { - string key = KeyboardDevice.KeyboardMatrix[i]; - bool prevState = KeyboardDevice.GetKeyStatus(key); - bool currState = CPC._controller.IsPressed(key); + lock (this) + { + // parse single keyboard matrix keys. + // J1 and J2 are scanned as part of the keyboard + for (var i = 0; i < KeyboardDevice.KeyboardMatrix.Length; i++) + { + string key = KeyboardDevice.KeyboardMatrix[i]; + bool prevState = KeyboardDevice.GetKeyStatus(key); + bool currState = CPC._controller.IsPressed(key); - if (currState != prevState) - KeyboardDevice.SetKeyStatus(key, currState); - } + if (currState != prevState) + KeyboardDevice.SetKeyStatus(key, currState); + } - // non matrix keys (J2) - foreach (string k in KeyboardDevice.NonMatrixKeys) - { - if (!k.StartsWith("P2")) - continue; + // non matrix keys (J2) + foreach (string k in KeyboardDevice.NonMatrixKeys) + { + if (!k.StartsWith("P2")) + continue; - bool currState = CPC._controller.IsPressed(k); + bool currState = CPC._controller.IsPressed(k); - switch (k) - { - case "P2 Up": - if (currState) - KeyboardDevice.SetKeyStatus("Key 6", true); - else if (!KeyboardDevice.GetKeyStatus("Key 6")) - KeyboardDevice.SetKeyStatus("Key 6", false); - break; - case "P2 Down": - if (currState) - KeyboardDevice.SetKeyStatus("Key 5", true); - else if (!KeyboardDevice.GetKeyStatus("Key 5")) - KeyboardDevice.SetKeyStatus("Key 5", false); - break; - case "P2 Left": - if (currState) - KeyboardDevice.SetKeyStatus("Key R", true); - else if (!KeyboardDevice.GetKeyStatus("Key R")) - KeyboardDevice.SetKeyStatus("Key R", false); - break; - case "P2 Right": - if (currState) - KeyboardDevice.SetKeyStatus("Key T", true); - else if (!KeyboardDevice.GetKeyStatus("Key T")) - KeyboardDevice.SetKeyStatus("Key T", false); - break; - case "P2 Fire": - if (currState) - KeyboardDevice.SetKeyStatus("Key G", true); - else if (!KeyboardDevice.GetKeyStatus("Key G")) - KeyboardDevice.SetKeyStatus("Key G", false); - break; - } - } - } + switch (k) + { + case "P2 Up": + if (currState) + KeyboardDevice.SetKeyStatus("Key 6", true); + else if (!KeyboardDevice.GetKeyStatus("Key 6")) + KeyboardDevice.SetKeyStatus("Key 6", false); + break; + case "P2 Down": + if (currState) + KeyboardDevice.SetKeyStatus("Key 5", true); + else if (!KeyboardDevice.GetKeyStatus("Key 5")) + KeyboardDevice.SetKeyStatus("Key 5", false); + break; + case "P2 Left": + if (currState) + KeyboardDevice.SetKeyStatus("Key R", true); + else if (!KeyboardDevice.GetKeyStatus("Key R")) + KeyboardDevice.SetKeyStatus("Key R", false); + break; + case "P2 Right": + if (currState) + KeyboardDevice.SetKeyStatus("Key T", true); + else if (!KeyboardDevice.GetKeyStatus("Key T")) + KeyboardDevice.SetKeyStatus("Key T", false); + break; + case "P2 Fire": + if (currState) + KeyboardDevice.SetKeyStatus("Key G", true); + else if (!KeyboardDevice.GetKeyStatus("Key G")) + KeyboardDevice.SetKeyStatus("Key G", false); + break; + } + } + } - // Tape control - if (CPC._controller.IsPressed(Play)) - { - if (!pressed_Play) - { - CPC.OSD_FireInputMessage(Play); - TapeDevice.Play(); - pressed_Play = true; - } - } - else - pressed_Play = false; + // Tape control + if (CPC._controller.IsPressed(Play)) + { + if (!pressed_Play) + { + CPC.OSD_FireInputMessage(Play); + TapeDevice.Play(); + pressed_Play = true; + } + } + else + pressed_Play = false; - if (CPC._controller.IsPressed(Stop)) - { - if (!pressed_Stop) - { - CPC.OSD_FireInputMessage(Stop); - TapeDevice.Stop(); - pressed_Stop = true; - } - } - else - pressed_Stop = false; + if (CPC._controller.IsPressed(Stop)) + { + if (!pressed_Stop) + { + CPC.OSD_FireInputMessage(Stop); + TapeDevice.Stop(); + pressed_Stop = true; + } + } + else + pressed_Stop = false; - if (CPC._controller.IsPressed(RTZ)) - { - if (!pressed_RTZ) - { - CPC.OSD_FireInputMessage(RTZ); - TapeDevice.RTZ(); - pressed_RTZ = true; - } - } - else - pressed_RTZ = false; + if (CPC._controller.IsPressed(RTZ)) + { + if (!pressed_RTZ) + { + CPC.OSD_FireInputMessage(RTZ); + TapeDevice.RTZ(); + pressed_RTZ = true; + } + } + else + pressed_RTZ = false; - if (CPC._controller.IsPressed(Record)) - { + if (CPC._controller.IsPressed(Record)) + { - } - if (CPC._controller.IsPressed(NextTape)) - { - if (!pressed_NextTape) - { - CPC.OSD_FireInputMessage(NextTape); - TapeMediaIndex++; - pressed_NextTape = true; - } - } - else - pressed_NextTape = false; + } + if (CPC._controller.IsPressed(NextTape)) + { + if (!pressed_NextTape) + { + CPC.OSD_FireInputMessage(NextTape); + TapeMediaIndex++; + pressed_NextTape = true; + } + } + else + pressed_NextTape = false; - if (CPC._controller.IsPressed(PrevTape)) - { - if (!pressed_PrevTape) - { - CPC.OSD_FireInputMessage(PrevTape); - TapeMediaIndex--; - pressed_PrevTape = true; - } - } - else - pressed_PrevTape = false; + if (CPC._controller.IsPressed(PrevTape)) + { + if (!pressed_PrevTape) + { + CPC.OSD_FireInputMessage(PrevTape); + TapeMediaIndex--; + pressed_PrevTape = true; + } + } + else + pressed_PrevTape = false; - if (CPC._controller.IsPressed(NextBlock)) - { - if (!pressed_NextBlock) - { - CPC.OSD_FireInputMessage(NextBlock); - TapeDevice.SkipBlock(true); - pressed_NextBlock = true; - } - } - else - pressed_NextBlock = false; + if (CPC._controller.IsPressed(NextBlock)) + { + if (!pressed_NextBlock) + { + CPC.OSD_FireInputMessage(NextBlock); + TapeDevice.SkipBlock(true); + pressed_NextBlock = true; + } + } + else + pressed_NextBlock = false; - if (CPC._controller.IsPressed(PrevBlock)) - { - if (!pressed_PrevBlock) - { - CPC.OSD_FireInputMessage(PrevBlock); - TapeDevice.SkipBlock(false); - pressed_PrevBlock = true; - } - } - else - pressed_PrevBlock = false; + if (CPC._controller.IsPressed(PrevBlock)) + { + if (!pressed_PrevBlock) + { + CPC.OSD_FireInputMessage(PrevBlock); + TapeDevice.SkipBlock(false); + pressed_PrevBlock = true; + } + } + else + pressed_PrevBlock = false; - if (CPC._controller.IsPressed(TapeStatus)) - { - if (!pressed_TapeStatus) - { - //Spectrum.OSD_FireInputMessage(TapeStatus); - CPC.OSD_ShowTapeStatus(); - pressed_TapeStatus = true; - } - } - else - pressed_TapeStatus = false; + if (CPC._controller.IsPressed(TapeStatus)) + { + if (!pressed_TapeStatus) + { + //Spectrum.OSD_FireInputMessage(TapeStatus); + CPC.OSD_ShowTapeStatus(); + pressed_TapeStatus = true; + } + } + else + pressed_TapeStatus = false; - if (CPC._controller.IsPressed(HardResetStr)) - { - if (!pressed_HardReset) - { - HardReset(); - pressed_HardReset = true; - } - } - else - pressed_HardReset = false; + if (CPC._controller.IsPressed(HardResetStr)) + { + if (!pressed_HardReset) + { + HardReset(); + pressed_HardReset = true; + } + } + else + pressed_HardReset = false; - if (CPC._controller.IsPressed(SoftResetStr)) - { - if (!pressed_SoftReset) - { - SoftReset(); - pressed_SoftReset = true; - } - } - else - pressed_SoftReset = false; + if (CPC._controller.IsPressed(SoftResetStr)) + { + if (!pressed_SoftReset) + { + SoftReset(); + pressed_SoftReset = true; + } + } + else + pressed_SoftReset = false; - // disk control - if (CPC._controller.IsPressed(NextDisk)) - { - if (!pressed_NextDisk) - { - CPC.OSD_FireInputMessage(NextDisk); - DiskMediaIndex++; - pressed_NextDisk = true; - } - } - else - pressed_NextDisk = false; + // disk control + if (CPC._controller.IsPressed(NextDisk)) + { + if (!pressed_NextDisk) + { + CPC.OSD_FireInputMessage(NextDisk); + DiskMediaIndex++; + pressed_NextDisk = true; + } + } + else + pressed_NextDisk = false; - if (CPC._controller.IsPressed(PrevDisk)) - { - if (!pressed_PrevDisk) - { - CPC.OSD_FireInputMessage(PrevDisk); - DiskMediaIndex--; - pressed_PrevDisk = true; - } - } - else - pressed_PrevDisk = false; + if (CPC._controller.IsPressed(PrevDisk)) + { + if (!pressed_PrevDisk) + { + CPC.OSD_FireInputMessage(PrevDisk); + DiskMediaIndex--; + pressed_PrevDisk = true; + } + } + else + pressed_PrevDisk = false; - if (CPC._controller.IsPressed(EjectDisk)) - { - if (!pressed_EjectDisk) - { - CPC.OSD_FireInputMessage(EjectDisk); - //if (UPDDiskDevice != null) - // UPDDiskDevice.FDD_EjectDisk(); - } - } - else - pressed_EjectDisk = false; + if (CPC._controller.IsPressed(EjectDisk)) + { + if (!pressed_EjectDisk) + { + CPC.OSD_FireInputMessage(EjectDisk); + //if (UPDDiskDevice != null) + // UPDDiskDevice.FDD_EjectDisk(); + } + } + else + pressed_EjectDisk = false; - if (CPC._controller.IsPressed(DiskStatus)) - { - if (!pressed_DiskStatus) - { - //Spectrum.OSD_FireInputMessage(TapeStatus); - CPC.OSD_ShowDiskStatus(); - pressed_DiskStatus = true; - } - } - else - pressed_DiskStatus = false; - } + if (CPC._controller.IsPressed(DiskStatus)) + { + if (!pressed_DiskStatus) + { + //Spectrum.OSD_FireInputMessage(TapeStatus); + CPC.OSD_ShowDiskStatus(); + pressed_DiskStatus = true; + } + } + else + pressed_DiskStatus = false; + } - /// - /// Signs whether input read has been requested - /// This forms part of the IEmulator LagFrame implementation - /// - private bool inputRead; - public bool InputRead - { - get { return inputRead; } - set { inputRead = value; } - } - } + /// + /// Signs whether input read has been requested + /// This forms part of the IEmulator LagFrame implementation + /// + private bool inputRead; + public bool InputRead + { + get { return inputRead; } + set { inputRead = value; } + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Media.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Media.cs index 0c3d98f48a..e790fb1afe 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Media.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Media.cs @@ -5,262 +5,262 @@ using System.Text; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// The abstract class that all emulated models will inherit from - /// * Imported media * - /// - public abstract partial class CPCBase - { - /// - /// The tape or disk image(s) that are passed in from the main ZXSpectrum class - /// + /// + /// The abstract class that all emulated models will inherit from + /// * Imported media * + /// + public abstract partial class CPCBase + { + /// + /// The tape or disk image(s) that are passed in from the main ZXSpectrum class + /// protected List mediaImages { get; set; } - /// - /// Tape images - /// - public List tapeImages { get; set; } + /// + /// Tape images + /// + public List tapeImages { get; set; } - /// - /// Disk images - /// - public List diskImages { get; set; } + /// + /// Disk images + /// + public List diskImages { get; set; } - /// - /// The index of the currently 'loaded' tape image - /// - protected int tapeMediaIndex; - public int TapeMediaIndex - { - get { return tapeMediaIndex; } - set - { - int tmp = value; - int result = value; + /// + /// The index of the currently 'loaded' tape image + /// + protected int tapeMediaIndex; + public int TapeMediaIndex + { + get { return tapeMediaIndex; } + set + { + int tmp = value; + int result = value; - if (tapeImages == null || tapeImages.Count() == 0) - { - // no tape images found - return; - } + if (tapeImages == null || tapeImages.Count() == 0) + { + // no tape images found + return; + } - if (value >= tapeImages.Count()) - { - // media at this index does not exist - loop back to 0 - result = 0; - } - else if (value < 0) - { - // negative index not allowed - move to last item in the collection - result = tapeImages.Count() - 1; - } + if (value >= tapeImages.Count()) + { + // media at this index does not exist - loop back to 0 + result = 0; + } + else if (value < 0) + { + // negative index not allowed - move to last item in the collection + result = tapeImages.Count() - 1; + } - // load the media into the tape device - tapeMediaIndex = result; - // fire osd message - //Spectrum.OSD_TapeInserted(); - LoadTapeMedia(); - } - } + // load the media into the tape device + tapeMediaIndex = result; + // fire osd message + //Spectrum.OSD_TapeInserted(); + LoadTapeMedia(); + } + } - /// - /// The index of the currently 'loaded' disk image - /// - protected int diskMediaIndex; - public int DiskMediaIndex - { - get { return diskMediaIndex; } - set - { - int tmp = value; - int result = value; + /// + /// The index of the currently 'loaded' disk image + /// + protected int diskMediaIndex; + public int DiskMediaIndex + { + get { return diskMediaIndex; } + set + { + int tmp = value; + int result = value; - if (diskImages == null || diskImages.Count() == 0) - { - // no tape images found - return; - } + if (diskImages == null || diskImages.Count() == 0) + { + // no tape images found + return; + } - if (value >= diskImages.Count()) - { - // media at this index does not exist - loop back to 0 - result = 0; - } - else if (value < 0) - { - // negative index not allowed - move to last item in the collection - result = diskImages.Count() - 1; - } + if (value >= diskImages.Count()) + { + // media at this index does not exist - loop back to 0 + result = 0; + } + else if (value < 0) + { + // negative index not allowed - move to last item in the collection + result = diskImages.Count() - 1; + } - // load the media into the disk device - diskMediaIndex = result; + // load the media into the disk device + diskMediaIndex = result; - // fire osd message - CPC.OSD_DiskInserted(); + // fire osd message + CPC.OSD_DiskInserted(); - LoadDiskMedia(); - } - } + LoadDiskMedia(); + } + } - /// - /// Called on first instantiation (and subsequent core reboots) - /// - protected void InitializeMedia(List files) - { - mediaImages = files; - LoadAllMedia(); - } + /// + /// Called on first instantiation (and subsequent core reboots) + /// + protected void InitializeMedia(List files) + { + mediaImages = files; + LoadAllMedia(); + } - /// - /// Attempts to load all media into the relevant structures - /// - protected void LoadAllMedia() - { - tapeImages = new List(); - diskImages = new List(); + /// + /// Attempts to load all media into the relevant structures + /// + protected void LoadAllMedia() + { + tapeImages = new List(); + diskImages = new List(); - int cnt = 0; - foreach (var m in mediaImages) - { - switch (IdentifyMedia(m)) - { - case CPCMediaType.Tape: - tapeImages.Add(m); - CPC._tapeInfo.Add(CPC._gameInfo[cnt]); - break; - case CPCMediaType.Disk: - diskImages.Add(m); - CPC._diskInfo.Add(CPC._gameInfo[cnt]); - break; - case CPCMediaType.DiskDoubleSided: - // this is a bit tricky. we will attempt to parse the double sided disk image byte array, - // then output two separate image byte arrays - List working = new List(); - foreach (DiskType type in Enum.GetValues(typeof(DiskType))) - { - bool found = false; + int cnt = 0; + foreach (var m in mediaImages) + { + switch (IdentifyMedia(m)) + { + case CPCMediaType.Tape: + tapeImages.Add(m); + CPC._tapeInfo.Add(CPC._gameInfo[cnt]); + break; + case CPCMediaType.Disk: + diskImages.Add(m); + CPC._diskInfo.Add(CPC._gameInfo[cnt]); + break; + case CPCMediaType.DiskDoubleSided: + // this is a bit tricky. we will attempt to parse the double sided disk image byte array, + // then output two separate image byte arrays + List working = new List(); + foreach (DiskType type in Enum.GetValues(typeof(DiskType))) + { + bool found = false; - switch (type) - { - case DiskType.CPCExtended: - found = CPCExtendedFloppyDisk.SplitDoubleSided(m, working); - break; - case DiskType.CPC: - found = CPCFloppyDisk.SplitDoubleSided(m, working); - break; - } + switch (type) + { + case DiskType.CPCExtended: + found = CPCExtendedFloppyDisk.SplitDoubleSided(m, working); + break; + case DiskType.CPC: + found = CPCFloppyDisk.SplitDoubleSided(m, working); + break; + } - if (found) - { - // add side 1 - diskImages.Add(working[0]); - // add side 2 - diskImages.Add(working[1]); + if (found) + { + // add side 1 + diskImages.Add(working[0]); + // add side 2 + diskImages.Add(working[1]); - Common.GameInfo one = new Common.GameInfo(); - Common.GameInfo two = new Common.GameInfo(); - var gi = CPC._gameInfo[cnt]; - for (int i = 0; i < 2; i++) - { - Common.GameInfo work = new Common.GameInfo(); - if (i == 0) - { - work = one; - } - else if (i == 1) - { - work = two; - } + Common.GameInfo one = new Common.GameInfo(); + Common.GameInfo two = new Common.GameInfo(); + var gi = CPC._gameInfo[cnt]; + for (int i = 0; i < 2; i++) + { + Common.GameInfo work = new Common.GameInfo(); + if (i == 0) + { + work = one; + } + else if (i == 1) + { + work = two; + } - work.FirmwareHash = gi.FirmwareHash; - work.Hash = gi.Hash; - work.Name = gi.Name + " (Parsed Side " + (i + 1) + ")"; - work.Region = gi.Region; - work.NotInDatabase = gi.NotInDatabase; - work.Status = gi.Status; - work.System = gi.System; + work.FirmwareHash = gi.FirmwareHash; + work.Hash = gi.Hash; + work.Name = gi.Name + " (Parsed Side " + (i + 1) + ")"; + work.Region = gi.Region; + work.NotInDatabase = gi.NotInDatabase; + work.Status = gi.Status; + work.System = gi.System; - CPC._diskInfo.Add(work); - } - } - else - { + CPC._diskInfo.Add(work); + } + } + else + { - } - } - break; - } + } + } + break; + } - cnt++; - } + cnt++; + } - if (tapeImages.Count > 0) - LoadTapeMedia(); + if (tapeImages.Count > 0) + LoadTapeMedia(); - if (diskImages.Count > 0) - LoadDiskMedia(); - } + if (diskImages.Count > 0) + LoadDiskMedia(); + } - /// - /// Attempts to load a tape into the tape device based on tapeMediaIndex - /// - protected void LoadTapeMedia() - { - TapeDevice.LoadTape(tapeImages[tapeMediaIndex]); - } + /// + /// Attempts to load a tape into the tape device based on tapeMediaIndex + /// + protected void LoadTapeMedia() + { + TapeDevice.LoadTape(tapeImages[tapeMediaIndex]); + } - /// - /// Attempts to load a disk into the disk device based on diskMediaIndex - /// - protected void LoadDiskMedia() - { - if (this.GetType() == typeof(CPC464)) - { - CPC.CoreComm.ShowMessage("You are trying to load one of more disk images.\n\n Please select something other than CPC 464 emulation immediately and reboot the core"); - return; - } + /// + /// Attempts to load a disk into the disk device based on diskMediaIndex + /// + protected void LoadDiskMedia() + { + if (this.GetType() == typeof(CPC464)) + { + CPC.CoreComm.ShowMessage("You are trying to load one of more disk images.\n\n Please select something other than CPC 464 emulation immediately and reboot the core"); + return; + } - UPDDiskDevice.FDD_LoadDisk(diskImages[diskMediaIndex]); - } + UPDDiskDevice.FDD_LoadDisk(diskImages[diskMediaIndex]); + } - /// - /// Identifies and sorts the various media types - /// - private CPCMediaType IdentifyMedia(byte[] data) - { - // get first 16 bytes as a string - string hdr = Encoding.ASCII.GetString(data.Take(16).ToArray()); + /// + /// Identifies and sorts the various media types + /// + private CPCMediaType IdentifyMedia(byte[] data) + { + // get first 16 bytes as a string + string hdr = Encoding.ASCII.GetString(data.Take(16).ToArray()); - // disk checking first - if (hdr.ToUpper().Contains("EXTENDED CPC DSK") || hdr.ToUpper().Contains("MV - CPC")) - { - // amstrad .dsk disk file - // check for number of sides - var sides = data[0x31]; - if (sides == 1) - return CPCMediaType.Disk; - else - return CPCMediaType.DiskDoubleSided; - } + // disk checking first + if (hdr.ToUpper().Contains("EXTENDED CPC DSK") || hdr.ToUpper().Contains("MV - CPC")) + { + // amstrad .dsk disk file + // check for number of sides + var sides = data[0x31]; + if (sides == 1) + return CPCMediaType.Disk; + else + return CPCMediaType.DiskDoubleSided; + } - // tape checking - if (hdr.ToUpper().StartsWith("ZXTAPE!")) - { - // cdt tape file - return CPCMediaType.Tape; - } + // tape checking + if (hdr.ToUpper().StartsWith("ZXTAPE!")) + { + // cdt tape file + return CPCMediaType.Tape; + } - // not found - return CPCMediaType.None; - } - } + // not found + return CPCMediaType.None; + } + } - public enum CPCMediaType - { - None, - Tape, - Disk, - DiskDoubleSided - } + public enum CPCMediaType + { + None, + Tape, + Disk, + DiskDoubleSided + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Memory.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Memory.cs index ccfdf22ccc..b4e3badeb8 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Memory.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Memory.cs @@ -3,144 +3,144 @@ using System.Collections.Generic; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// The abstract class that all emulated models will inherit from - /// * Memory * - /// - public abstract partial class CPCBase - { - #region Memory Fields & Properties + /// + /// The abstract class that all emulated models will inherit from + /// * Memory * + /// + public abstract partial class CPCBase + { + #region Memory Fields & Properties - /* ROM Banks */ - /// - /// Lower: OS ROM - /// - public byte[] ROMLower = new byte[0x4000]; - /// - /// Upper: POS 0 (usually BASIC) - /// - public byte[] ROM0 = new byte[0x4000]; - /// - /// Upper: POS 7 (usually AMSDOS) - /// - public byte[] ROM7 = new byte[0x4000]; + /* ROM Banks */ + /// + /// Lower: OS ROM + /// + public byte[] ROMLower = new byte[0x4000]; + /// + /// Upper: POS 0 (usually BASIC) + /// + public byte[] ROM0 = new byte[0x4000]; + /// + /// Upper: POS 7 (usually AMSDOS) + /// + public byte[] ROM7 = new byte[0x4000]; - /* RAM Banks - Lower 64K */ - public byte[] RAM0 = new byte[0x4000]; - public byte[] RAM1 = new byte[0x4000]; - public byte[] RAM2 = new byte[0x4000]; - public byte[] RAM3 = new byte[0x4000]; + /* RAM Banks - Lower 64K */ + public byte[] RAM0 = new byte[0x4000]; + public byte[] RAM1 = new byte[0x4000]; + public byte[] RAM2 = new byte[0x4000]; + public byte[] RAM3 = new byte[0x4000]; - /* RAM Banks - Upper 64K */ - public byte[] RAM4 = new byte[0x4000]; - public byte[] RAM5 = new byte[0x4000]; - public byte[] RAM6 = new byte[0x4000]; - public byte[] RAM7 = new byte[0x4000]; + /* RAM Banks - Upper 64K */ + public byte[] RAM4 = new byte[0x4000]; + public byte[] RAM5 = new byte[0x4000]; + public byte[] RAM6 = new byte[0x4000]; + public byte[] RAM7 = new byte[0x4000]; - /// - /// Signs whether Upper ROM is paged in - /// - public bool UpperROMPaged; + /// + /// Signs whether Upper ROM is paged in + /// + public bool UpperROMPaged; - /// - /// The position of the currently paged upper ROM - /// - public int UpperROMPosition; + /// + /// The position of the currently paged upper ROM + /// + public int UpperROMPosition; - /// - /// Signs whether Lower ROM is paged in - /// - public bool LowerROMPaged; + /// + /// Signs whether Lower ROM is paged in + /// + public bool LowerROMPaged; - /// - /// The currently selected RAM config - /// - public int RAMConfig; + /// + /// The currently selected RAM config + /// + public int RAMConfig; - /// - /// Always 0 on a CPC6128 - /// On a machine with more than 128K RAM (standard memory expansion) this selects each additional 64K above the first upper 64K - /// - public int RAM64KBank; + /// + /// Always 0 on a CPC6128 + /// On a machine with more than 128K RAM (standard memory expansion) this selects each additional 64K above the first upper 64K + /// + public int RAM64KBank; - #endregion + #endregion - #region Memory Related Methods + #region Memory Related Methods - /// - /// Simulates reading from the bus - /// Paging should be handled here - /// - public abstract byte ReadBus(ushort addr); + /// + /// Simulates reading from the bus + /// Paging should be handled here + /// + public abstract byte ReadBus(ushort addr); - /// - /// Pushes a value onto the data bus that should be valid as long as the interrupt is true - /// - public virtual byte PushBus() - { - return 0xFF; - } + /// + /// Pushes a value onto the data bus that should be valid as long as the interrupt is true + /// + public virtual byte PushBus() + { + return 0xFF; + } - /// - /// Simulates writing to the bus - /// Paging should be handled here - /// - public abstract void WriteBus(ushort addr, byte value); + /// + /// Simulates writing to the bus + /// Paging should be handled here + /// + public abstract void WriteBus(ushort addr, byte value); - /// - /// Reads a byte of data from a specified memory address - /// (with memory contention if appropriate) - /// - public abstract byte ReadMemory(ushort addr); + /// + /// Reads a byte of data from a specified memory address + /// (with memory contention if appropriate) + /// + public abstract byte ReadMemory(ushort addr); - /// - /// Writes a byte of data to a specified memory address - /// (with memory contention if appropriate) - /// - public abstract void WriteMemory(ushort addr, byte value); + /// + /// Writes a byte of data to a specified memory address + /// (with memory contention if appropriate) + /// + public abstract void WriteMemory(ushort addr, byte value); - /// - /// Sets up the ROM - /// - public abstract void InitROM(RomData[] romData); + /// + /// Sets up the ROM + /// + public abstract void InitROM(RomData[] romData); - /// - /// ULA reads the memory at the specified address - /// (No memory contention) - /// - public virtual byte FetchScreenMemory(ushort addr) - { - int divisor = addr / 0x4000; - byte result = 0xff; + /// + /// ULA reads the memory at the specified address + /// (No memory contention) + /// + public virtual byte FetchScreenMemory(ushort addr) + { + int divisor = addr / 0x4000; + byte result = 0xff; - switch (divisor) - { - // 0x000 - case 0: - result = RAM0[addr % 0x4000]; - break; + switch (divisor) + { + // 0x000 + case 0: + result = RAM0[addr % 0x4000]; + break; - // 0x4000 - case 1: - result = RAM1[addr % 0x4000]; - break; + // 0x4000 + case 1: + result = RAM1[addr % 0x4000]; + break; - // 0x8000 - case 2: - result = RAM2[addr % 0x4000]; - break; + // 0x8000 + case 2: + result = RAM2[addr % 0x4000]; + break; - // 0xc000 or UpperROM - case 3: - result = RAM3[addr % 0x4000]; - break; - default: - break; - } + // 0xc000 or UpperROM + case 3: + result = RAM3[addr % 0x4000]; + break; + default: + break; + } - return result; - } + return result; + } - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Port.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Port.cs index 4cee77f59f..73fc120790 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Port.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Port.cs @@ -5,103 +5,103 @@ using System.Collections.Generic; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// The abstract class that all emulated models will inherit from - /// * Port Access * - /// - public abstract partial class CPCBase - { - /// - /// Reads a byte of data from a specified port address - /// - public abstract byte ReadPort(ushort port); + /// + /// The abstract class that all emulated models will inherit from + /// * Port Access * + /// + public abstract partial class CPCBase + { + /// + /// Reads a byte of data from a specified port address + /// + public abstract byte ReadPort(ushort port); - /// - /// Writes a byte of data to a specified port address - /// - public abstract void WritePort(ushort port, byte value); + /// + /// Writes a byte of data to a specified port address + /// + public abstract void WritePort(ushort port, byte value); - /// - /// Returns a single port device enum based on the port address - /// (for IN operations) - /// https://web.archive.org/web/20090808085929/http://www.cepece.info/amstrad/docs/iopord.html - /// http://www.cpcwiki.eu/index.php/I/O_Port_Summary - /// - protected virtual PortDevice DecodeINPort(ushort port) - { - PortDevice dev = PortDevice.Unknown; + /// + /// Returns a single port device enum based on the port address + /// (for IN operations) + /// https://web.archive.org/web/20090808085929/http://www.cepece.info/amstrad/docs/iopord.html + /// http://www.cpcwiki.eu/index.php/I/O_Port_Summary + /// + protected virtual PortDevice DecodeINPort(ushort port) + { + PortDevice dev = PortDevice.Unknown; - if (!port.Bit(15) && port.Bit(14)) - dev = PortDevice.GateArray; + if (!port.Bit(15) && port.Bit(14)) + dev = PortDevice.GateArray; - else if (!port.Bit(15)) - dev = PortDevice.RAMManagement; + else if (!port.Bit(15)) + dev = PortDevice.RAMManagement; - else if (!port.Bit(14)) - dev = PortDevice.CRCT; + else if (!port.Bit(14)) + dev = PortDevice.CRCT; - else if (!port.Bit(13)) - dev = PortDevice.ROMSelect; + else if (!port.Bit(13)) + dev = PortDevice.ROMSelect; - else if (!port.Bit(12)) - dev = PortDevice.Printer; + else if (!port.Bit(12)) + dev = PortDevice.Printer; - else if (!port.Bit(11)) - dev = PortDevice.PPI; + else if (!port.Bit(11)) + dev = PortDevice.PPI; - else if (!port.Bit(10)) - dev = PortDevice.Expansion; + else if (!port.Bit(10)) + dev = PortDevice.Expansion; - return dev; - } + return dev; + } - /// - /// Returns a list of port device enums based on the port address - /// (for OUT operations) - /// https://web.archive.org/web/20090808085929/http://www.cepece.info/amstrad/docs/iopord.html - /// http://www.cpcwiki.eu/index.php/I/O_Port_Summary - /// - protected virtual List DecodeOUTPort(ushort port) - { - List devs = new List(); + /// + /// Returns a list of port device enums based on the port address + /// (for OUT operations) + /// https://web.archive.org/web/20090808085929/http://www.cepece.info/amstrad/docs/iopord.html + /// http://www.cpcwiki.eu/index.php/I/O_Port_Summary + /// + protected virtual List DecodeOUTPort(ushort port) + { + List devs = new List(); - if (!port.Bit(15) && port.Bit(14)) - devs.Add(PortDevice.GateArray); + if (!port.Bit(15) && port.Bit(14)) + devs.Add(PortDevice.GateArray); - if (!port.Bit(15)) - devs.Add(PortDevice.RAMManagement); + if (!port.Bit(15)) + devs.Add(PortDevice.RAMManagement); - if (!port.Bit(14)) - devs.Add(PortDevice.CRCT); + if (!port.Bit(14)) + devs.Add(PortDevice.CRCT); - if (!port.Bit(13)) - devs.Add(PortDevice.ROMSelect); + if (!port.Bit(13)) + devs.Add(PortDevice.ROMSelect); - if (!port.Bit(12)) - devs.Add(PortDevice.Printer); + if (!port.Bit(12)) + devs.Add(PortDevice.Printer); - if (!port.Bit(11)) - devs.Add(PortDevice.PPI); + if (!port.Bit(11)) + devs.Add(PortDevice.PPI); - if (!port.Bit(10)) - devs.Add(PortDevice.Expansion); + if (!port.Bit(10)) + devs.Add(PortDevice.Expansion); - return devs; - } + return devs; + } - /// - /// Potential port devices - /// - public enum PortDevice - { - Unknown, - GateArray, - RAMManagement, - CRCT, - ROMSelect, - Printer, - PPI, - Expansion - } - } + /// + /// Potential port devices + /// + public enum PortDevice + { + Unknown, + GateArray, + RAMManagement, + CRCT, + ROMSelect, + Printer, + PPI, + Expansion + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.cs index 60dab69ecc..89e7d94216 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.cs @@ -3,213 +3,213 @@ using BizHawk.Emulation.Cores.Components.Z80A; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// The abstract class that all emulated models will inherit from - /// * Main properties / fields / contruction* - /// - public abstract partial class CPCBase - { - #region Devices + /// + /// The abstract class that all emulated models will inherit from + /// * Main properties / fields / contruction* + /// + public abstract partial class CPCBase + { + #region Devices - /// - /// The calling ZXSpectrum class (piped in via constructor) - /// - public AmstradCPC CPC { get; set; } + /// + /// The calling ZXSpectrum class (piped in via constructor) + /// + public AmstradCPC CPC { get; set; } - /// - /// Reference to the instantiated Z80 cpu (piped in via constructor) - /// - public Z80A CPU { get; set; } + /// + /// Reference to the instantiated Z80 cpu (piped in via constructor) + /// + public Z80A CPU { get; set; } - /// - /// ROM and extended info - /// - public RomData RomData { get; set; } + /// + /// ROM and extended info + /// + public RomData RomData { get; set; } - /// - /// The Amstrad datacorder device - /// - public virtual DatacorderDevice TapeDevice { get; set; } + /// + /// The Amstrad datacorder device + /// + public virtual DatacorderDevice TapeDevice { get; set; } - /// - /// beeper output for the tape - /// - public IBeeperDevice TapeBuzzer { get; set; } + /// + /// beeper output for the tape + /// + public IBeeperDevice TapeBuzzer { get; set; } - /// - /// Device representing the AY-3-8912 chip found in the CPC - /// - public IPSG AYDevice { get; set; } + /// + /// Device representing the AY-3-8912 chip found in the CPC + /// + public IPSG AYDevice { get; set; } - /// - /// The keyboard device - /// Technically, this is controlled by the PSG, but has been abstracted due to the port over from ZXHawk - /// - public IKeyboard KeyboardDevice { get; set; } + /// + /// The keyboard device + /// Technically, this is controlled by the PSG, but has been abstracted due to the port over from ZXHawk + /// + public IKeyboard KeyboardDevice { get; set; } - /// - /// The Amstrad disk drive - /// - public virtual NECUPD765 UPDDiskDevice { get; set; } + /// + /// The Amstrad disk drive + /// + public virtual NECUPD765 UPDDiskDevice { get; set; } - /// - /// The Cathode Ray Tube Controller chip - /// - public CRCT_6845 CRCT { get; set; } + /// + /// The Cathode Ray Tube Controller chip + /// + public CRCT_6845 CRCT { get; set; } - /// - /// The Amstrad gate array - /// - public AmstradGateArray GateArray { get; set; } + /// + /// The Amstrad gate array + /// + public AmstradGateArray GateArray { get; set; } -// /// -// /// Renders pixels to the screen -// /// -// public CRTDevice CRT { get; set; } + // /// + // /// Renders pixels to the screen + // /// + // public CRTDevice CRT { get; set; } - /// - /// The PPI contoller chip - /// - public PPI_8255 PPI { get; set; } + /// + /// The PPI contoller chip + /// + public PPI_8255 PPI { get; set; } - /// - /// The length of a standard frame in CPU cycles - /// - public int FrameLength; + /// + /// The length of a standard frame in CPU cycles + /// + public int FrameLength; - #endregion + #endregion - #region Emulator State + #region Emulator State - /// - /// Signs whether the frame has ended - /// - public bool FrameCompleted; + /// + /// Signs whether the frame has ended + /// + public bool FrameCompleted; - /// - /// Overflow from the previous frame (in Z80 cycles) - /// - public int OverFlow; + /// + /// Overflow from the previous frame (in Z80 cycles) + /// + public int OverFlow; - /// - /// The total number of frames rendered - /// - public int FrameCount; + /// + /// The total number of frames rendered + /// + public int FrameCount; - /// - /// The current cycle (T-State) that we are at in the frame - /// - public long _frameCycles; + /// + /// The current cycle (T-State) that we are at in the frame + /// + public long _frameCycles; - /// - /// Stores where we are in the frame after each CPU cycle - /// - public long LastFrameStartCPUTick; + /// + /// Stores where we are in the frame after each CPU cycle + /// + public long LastFrameStartCPUTick; - /// - /// Gets the current frame cycle according to the CPU tick count - /// - public virtual long CurrentFrameCycle => GateArray.FrameClock; // CPU.TotalExecutedCycles - LastFrameStartCPUTick; + /// + /// Gets the current frame cycle according to the CPU tick count + /// + public virtual long CurrentFrameCycle => GateArray.FrameClock; // CPU.TotalExecutedCycles - LastFrameStartCPUTick; - /// - /// Non-Deterministic bools - /// - public bool _render; - public bool _renderSound; + /// + /// Non-Deterministic bools + /// + public bool _render; + public bool _renderSound; - #endregion + #endregion - #region Constants + #region Constants - /// - /// Mask constants & misc - /// - protected const int BORDER_BIT = 0x07; - protected const int EAR_BIT = 0x10; - protected const int MIC_BIT = 0x08; - protected const int TAPE_BIT = 0x40; - protected const int AY_SAMPLE_RATE = 16; + /// + /// Mask constants & misc + /// + protected const int BORDER_BIT = 0x07; + protected const int EAR_BIT = 0x10; + protected const int MIC_BIT = 0x08; + protected const int TAPE_BIT = 0x40; + protected const int AY_SAMPLE_RATE = 16; - #endregion + #endregion - #region Emulation Loop + #region Emulation Loop - /// - /// Executes a single frame - /// - public virtual void ExecuteFrame(bool render, bool renderSound) - { - GateArray.FrameEnd = false; - CRCT.lineCounter = 0; + /// + /// Executes a single frame + /// + public virtual void ExecuteFrame(bool render, bool renderSound) + { + GateArray.FrameEnd = false; + CRCT.lineCounter = 0; - InputRead = false; - _render = render; - _renderSound = renderSound; + InputRead = false; + _render = render; + _renderSound = renderSound; - FrameCompleted = false; + FrameCompleted = false; - if (UPDDiskDevice == null || !UPDDiskDevice.FDD_IsDiskLoaded) - TapeDevice.StartFrame(); + if (UPDDiskDevice == null || !UPDDiskDevice.FDD_IsDiskLoaded) + TapeDevice.StartFrame(); - if (_renderSound) - { - AYDevice.StartFrame(); - } + if (_renderSound) + { + AYDevice.StartFrame(); + } - PollInput(); + PollInput(); - //CRT.SetupVideo(); - //CRT.ScanlineCounter = 0; + //CRT.SetupVideo(); + //CRT.ScanlineCounter = 0; - while (!GateArray.FrameEnd) - { - GateArray.ClockCycle(); + while (!GateArray.FrameEnd) + { + GateArray.ClockCycle(); - // cycle the tape device - if (UPDDiskDevice == null || !UPDDiskDevice.FDD_IsDiskLoaded) - TapeDevice.TapeCycle(); - } - // we have reached the end of a frame - LastFrameStartCPUTick = CPU.TotalExecutedCycles; // - OverFlow; + // cycle the tape device + if (UPDDiskDevice == null || !UPDDiskDevice.FDD_IsDiskLoaded) + TapeDevice.TapeCycle(); + } + // we have reached the end of a frame + LastFrameStartCPUTick = CPU.TotalExecutedCycles; // - OverFlow; - if (AYDevice != null) - AYDevice.EndFrame(); + if (AYDevice != null) + AYDevice.EndFrame(); - FrameCount++; + FrameCount++; - if (UPDDiskDevice == null || !UPDDiskDevice.FDD_IsDiskLoaded) - TapeDevice.EndFrame(); + if (UPDDiskDevice == null || !UPDDiskDevice.FDD_IsDiskLoaded) + TapeDevice.EndFrame(); - FrameCompleted = true; + FrameCompleted = true; - // is this a lag frame? - CPC.IsLagFrame = !InputRead; + // is this a lag frame? + CPC.IsLagFrame = !InputRead; - // FDC debug - if (UPDDiskDevice != null && UPDDiskDevice.writeDebug) - { - // only write UPD log every second - if (FrameCount % 10 == 0) - { - System.IO.File.AppendAllLines(UPDDiskDevice.outputfile, UPDDiskDevice.dLog); - UPDDiskDevice.dLog = new System.Collections.Generic.List(); - //System.IO.File.WriteAllText(UPDDiskDevice.outputfile, UPDDiskDevice.outputString); - } - } + // FDC debug + if (UPDDiskDevice != null && UPDDiskDevice.writeDebug) + { + // only write UPD log every second + if (FrameCount % 10 == 0) + { + System.IO.File.AppendAllLines(UPDDiskDevice.outputfile, UPDDiskDevice.dLog); + UPDDiskDevice.dLog = new System.Collections.Generic.List(); + //System.IO.File.WriteAllText(UPDDiskDevice.outputfile, UPDDiskDevice.outputString); + } + } - GateArray.FrameClock = 0; - } + GateArray.FrameClock = 0; + } - #endregion + #endregion - #region Reset Functions + #region Reset Functions - /// - /// Hard reset of the emulated machine - /// - public virtual void HardReset() - { - /* + /// + /// Hard reset of the emulated machine + /// + public virtual void HardReset() + { + /* //ULADevice.ResetInterrupt(); ROMPaged = 0; SpecialPagingMode = false; @@ -256,14 +256,14 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC } } */ - } + } - /// - /// Soft reset of the emulated machine - /// - public virtual void SoftReset() - { - /* + /// + /// Soft reset of the emulated machine + /// + public virtual void SoftReset() + { + /* //ULADevice.ResetInterrupt(); ROMPaged = 0; SpecialPagingMode = false; @@ -310,65 +310,65 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC } } */ - } + } - #endregion + #endregion - #region IStatable + #region IStatable - public void SyncState(Serializer ser) - { - ser.BeginSection("CPCMachine"); - ser.Sync(nameof(FrameCompleted), ref FrameCompleted); - ser.Sync(nameof(OverFlow), ref OverFlow); - ser.Sync(nameof(FrameCount), ref FrameCount); - ser.Sync(nameof(_frameCycles), ref _frameCycles); - ser.Sync(nameof(inputRead), ref inputRead); - ser.Sync(nameof(LastFrameStartCPUTick), ref LastFrameStartCPUTick); - ser.Sync(nameof(ROMLower), ref ROMLower, false); - ser.Sync(nameof(ROM0), ref ROM0, false); - ser.Sync(nameof(ROM7), ref ROM7, false); - ser.Sync(nameof(RAM0), ref RAM0, false); - ser.Sync(nameof(RAM1), ref RAM1, false); - ser.Sync(nameof(RAM2), ref RAM2, false); - ser.Sync(nameof(RAM3), ref RAM3, false); - ser.Sync(nameof(RAM4), ref RAM4, false); - ser.Sync(nameof(RAM5), ref RAM5, false); - ser.Sync(nameof(RAM6), ref RAM6, false); - ser.Sync(nameof(RAM7), ref RAM7, false); + public void SyncState(Serializer ser) + { + ser.BeginSection("CPCMachine"); + ser.Sync(nameof(FrameCompleted), ref FrameCompleted); + ser.Sync(nameof(OverFlow), ref OverFlow); + ser.Sync(nameof(FrameCount), ref FrameCount); + ser.Sync(nameof(_frameCycles), ref _frameCycles); + ser.Sync(nameof(inputRead), ref inputRead); + ser.Sync(nameof(LastFrameStartCPUTick), ref LastFrameStartCPUTick); + ser.Sync(nameof(ROMLower), ref ROMLower, false); + ser.Sync(nameof(ROM0), ref ROM0, false); + ser.Sync(nameof(ROM7), ref ROM7, false); + ser.Sync(nameof(RAM0), ref RAM0, false); + ser.Sync(nameof(RAM1), ref RAM1, false); + ser.Sync(nameof(RAM2), ref RAM2, false); + ser.Sync(nameof(RAM3), ref RAM3, false); + ser.Sync(nameof(RAM4), ref RAM4, false); + ser.Sync(nameof(RAM5), ref RAM5, false); + ser.Sync(nameof(RAM6), ref RAM6, false); + ser.Sync(nameof(RAM7), ref RAM7, false); - ser.Sync(nameof(UpperROMPosition), ref UpperROMPosition); - ser.Sync(nameof(UpperROMPaged), ref UpperROMPaged); - ser.Sync(nameof(LowerROMPaged), ref LowerROMPaged); - ser.Sync(nameof(RAMConfig), ref RAMConfig); - ser.Sync(nameof(RAM64KBank), ref RAM64KBank); + ser.Sync(nameof(UpperROMPosition), ref UpperROMPosition); + ser.Sync(nameof(UpperROMPaged), ref UpperROMPaged); + ser.Sync(nameof(LowerROMPaged), ref LowerROMPaged); + ser.Sync(nameof(RAMConfig), ref RAMConfig); + ser.Sync(nameof(RAM64KBank), ref RAM64KBank); - CRCT.SyncState(ser); - //CRT.SyncState(ser); - GateArray.SyncState(ser); - KeyboardDevice.SyncState(ser); - TapeBuzzer.SyncState(ser); - AYDevice.SyncState(ser); + CRCT.SyncState(ser); + //CRT.SyncState(ser); + GateArray.SyncState(ser); + KeyboardDevice.SyncState(ser); + TapeBuzzer.SyncState(ser); + AYDevice.SyncState(ser); - ser.Sync(nameof(tapeMediaIndex), ref tapeMediaIndex); - if (ser.IsReader) - TapeMediaIndex = tapeMediaIndex; + ser.Sync(nameof(tapeMediaIndex), ref tapeMediaIndex); + if (ser.IsReader) + TapeMediaIndex = tapeMediaIndex; - TapeDevice.SyncState(ser); + TapeDevice.SyncState(ser); - ser.Sync(nameof(diskMediaIndex), ref diskMediaIndex); - if (ser.IsReader) - DiskMediaIndex = diskMediaIndex; + ser.Sync(nameof(diskMediaIndex), ref diskMediaIndex); + if (ser.IsReader) + DiskMediaIndex = diskMediaIndex; - if (UPDDiskDevice != null) - { - UPDDiskDevice.SyncState(ser); - } + if (UPDDiskDevice != null) + { + UPDDiskDevice.SyncState(ser); + } - ser.EndSection(); - } + ser.EndSection(); + } - #endregion + #endregion - } + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/GateArrayBase.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/GateArrayBase.cs index 31fd0a3573..fcbc6ad3aa 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/GateArrayBase.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/GateArrayBase.cs @@ -10,60 +10,60 @@ using System.Threading.Tasks; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// The abstract class that all emulated models will inherit from - /// * Amstrad Gate Array * - /// https://web.archive.org/web/20170612081209/http://www.grimware.org/doku.php/documentations/devices/gatearray - /// - public abstract class GateArrayBase : IVideoProvider - { - public int Z80ClockSpeed = 4000000; - public int FrameLength = 79872; + /// + /// The abstract class that all emulated models will inherit from + /// * Amstrad Gate Array * + /// https://web.archive.org/web/20170612081209/http://www.grimware.org/doku.php/documentations/devices/gatearray + /// + public abstract class GateArrayBase : IVideoProvider + { + public int Z80ClockSpeed = 4000000; + public int FrameLength = 79872; - #region Devices + #region Devices - private CPCBase _machine; - private Z80A CPU => _machine.CPU; - private CRCT_6845 CRCT => _machine.CRCT; - private IPSG PSG => _machine.AYDevice; + private CPCBase _machine; + private Z80A CPU => _machine.CPU; + private CRCT_6845 CRCT => _machine.CRCT; + private IPSG PSG => _machine.AYDevice; - #endregion + #endregion - #region Constants + #region Constants - /// - /// CRTC Register constants - /// - public const int HOR_TOTAL = 0; - public const int HOR_DISPLAYED = 1; - public const int HOR_SYNC_POS = 2; - public const int HOR_AND_VER_SYNC_WIDTHS = 3; - public const int VER_TOTAL = 4; - public const int VER_TOTAL_ADJUST = 5; - public const int VER_DISPLAYED = 6; - public const int VER_SYNC_POS = 7; - public const int INTERLACE_SKEW = 8; - public const int MAX_RASTER_ADDR = 9; - public const int CUR_START_RASTER = 10; - public const int CUR_END_RASTER = 11; - public const int DISP_START_ADDR_H = 12; - public const int DISP_START_ADDR_L = 13; - public const int CUR_ADDR_H = 14; - public const int CUR_ADDR_L = 15; - public const int LPEN_ADDR_H = 16; - public const int LPEN_ADDR_L = 17; + /// + /// CRTC Register constants + /// + public const int HOR_TOTAL = 0; + public const int HOR_DISPLAYED = 1; + public const int HOR_SYNC_POS = 2; + public const int HOR_AND_VER_SYNC_WIDTHS = 3; + public const int VER_TOTAL = 4; + public const int VER_TOTAL_ADJUST = 5; + public const int VER_DISPLAYED = 6; + public const int VER_SYNC_POS = 7; + public const int INTERLACE_SKEW = 8; + public const int MAX_RASTER_ADDR = 9; + public const int CUR_START_RASTER = 10; + public const int CUR_END_RASTER = 11; + public const int DISP_START_ADDR_H = 12; + public const int DISP_START_ADDR_L = 13; + public const int CUR_ADDR_H = 14; + public const int CUR_ADDR_L = 15; + public const int LPEN_ADDR_H = 16; + public const int LPEN_ADDR_L = 17; - #endregion + #endregion - #region Palletes + #region Palletes - /// - /// The standard CPC Pallete (ordered by firmware #) - /// http://www.cpcwiki.eu/index.php/CPC_Palette - /// - private static readonly int[] CPCFirmwarePalette = - { - Colors.ARGB(0x00, 0x00, 0x00), // Black + /// + /// The standard CPC Pallete (ordered by firmware #) + /// http://www.cpcwiki.eu/index.php/CPC_Palette + /// + private static readonly int[] CPCFirmwarePalette = + { + Colors.ARGB(0x00, 0x00, 0x00), // Black Colors.ARGB(0x00, 0x00, 0x80), // Blue Colors.ARGB(0x00, 0x00, 0xFF), // Bright Blue Colors.ARGB(0x80, 0x00, 0x00), // Red @@ -92,13 +92,13 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC Colors.ARGB(0xFF, 0xFF, 0xFF), // Bright White }; - /// - /// The standard CPC Pallete (ordered by hardware #) - /// http://www.cpcwiki.eu/index.php/CPC_Palette - /// - private static readonly int[] CPCHardwarePalette = - { - Colors.ARGB(0x80, 0x80, 0x80), // White + /// + /// The standard CPC Pallete (ordered by hardware #) + /// http://www.cpcwiki.eu/index.php/CPC_Palette + /// + private static readonly int[] CPCHardwarePalette = + { + Colors.ARGB(0x80, 0x80, 0x80), // White Colors.ARGB(0x80, 0x80, 0x80), // White (duplicate) Colors.ARGB(0x00, 0xFF, 0x80), // Sea Green Colors.ARGB(0xFF, 0xFF, 0x80), // Pastel Yellow @@ -132,374 +132,374 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC Colors.ARGB(0x80, 0x80, 0xFF), // Pastel Blue }; - #endregion + #endregion - #region Construction + #region Construction - public GateArrayBase(CPCBase machine) - { - _machine = machine; - PenColours = new int[17]; - SetupScreenSize(); - Reset(); - } + public GateArrayBase(CPCBase machine) + { + _machine = machine; + PenColours = new int[17]; + SetupScreenSize(); + Reset(); + } - /// - /// Inits the pen lookup table - /// - public void SetupScreenMapping() - { - for (int m = 0; m < 4; m++) - { - Lookup[m] = new int[256 * 8]; - int pos = 0; + /// + /// Inits the pen lookup table + /// + public void SetupScreenMapping() + { + for (int m = 0; m < 4; m++) + { + Lookup[m] = new int[256 * 8]; + int pos = 0; - for (int b = 0; b < 256; b++) - { - switch (m) - { - case 1: - int pc = (((b & 0x80) >> 7) | ((b & 0x80) >> 2)); - Lookup[m][pos++] = pc; - Lookup[m][pos++] = pc; - pc = (((b & 0x40) >> 6) | ((b & 0x04) >> 1)); - Lookup[m][pos++] = pc; - Lookup[m][pos++] = pc; - pc = (((b & 0x20) >> 5) | (b & 0x02)); - Lookup[m][pos++] = pc; - Lookup[m][pos++] = pc; - pc = (((b & 0x10) >> 4) | ((b & 0x01) << 1)); - break; + for (int b = 0; b < 256; b++) + { + switch (m) + { + case 1: + int pc = (((b & 0x80) >> 7) | ((b & 0x80) >> 2)); + Lookup[m][pos++] = pc; + Lookup[m][pos++] = pc; + pc = (((b & 0x40) >> 6) | ((b & 0x04) >> 1)); + Lookup[m][pos++] = pc; + Lookup[m][pos++] = pc; + pc = (((b & 0x20) >> 5) | (b & 0x02)); + Lookup[m][pos++] = pc; + Lookup[m][pos++] = pc; + pc = (((b & 0x10) >> 4) | ((b & 0x01) << 1)); + break; - case 2: - for (int i = 7; i >= 0; i--) - { - bool pixel_on = ((b & (1 << i)) != 0); - Lookup[m][pos++] = pixel_on ? 1 : 0; - } - break; + case 2: + for (int i = 7; i >= 0; i--) + { + bool pixel_on = ((b & (1 << i)) != 0); + Lookup[m][pos++] = pixel_on ? 1 : 0; + } + break; - case 3: - case 0: - int pc2 = (b & 0xAA); - pc2 = ( - ((pc2 & 0x80) >> 7) | - ((pc2 & 0x08) >> 2) | - ((pc2 & 0x20) >> 3) | - ((pc2 & 0x02) << 2)); - Lookup[m][pos++] = pc2; - Lookup[m][pos++] = pc2; - Lookup[m][pos++] = pc2; - Lookup[m][pos++] = pc2; - pc2 = (b & 0x55); - pc2 = ( - ((pc2 & 0x40) >> 6) | - ((pc2 & 0x04) >> 1) | - ((pc2 & 0x10) >> 2) | - ((pc2 & 0x01) << 3)); + case 3: + case 0: + int pc2 = (b & 0xAA); + pc2 = ( + ((pc2 & 0x80) >> 7) | + ((pc2 & 0x08) >> 2) | + ((pc2 & 0x20) >> 3) | + ((pc2 & 0x02) << 2)); + Lookup[m][pos++] = pc2; + Lookup[m][pos++] = pc2; + Lookup[m][pos++] = pc2; + Lookup[m][pos++] = pc2; + pc2 = (b & 0x55); + pc2 = ( + ((pc2 & 0x40) >> 6) | + ((pc2 & 0x04) >> 1) | + ((pc2 & 0x10) >> 2) | + ((pc2 & 0x01) << 3)); - Lookup[m][pos++] = pc2; - Lookup[m][pos++] = pc2; - Lookup[m][pos++] = pc2; - Lookup[m][pos++] = pc2; - break; - } - } - } - } + Lookup[m][pos++] = pc2; + Lookup[m][pos++] = pc2; + Lookup[m][pos++] = pc2; + Lookup[m][pos++] = pc2; + break; + } + } + } + } - #endregion + #endregion - #region State + #region State - private int[] PenColours; - private int CurrentPen; - private int ScreenMode; - private int INTScanlineCnt; - //private int VSYNCDelyCnt; + private int[] PenColours; + private int CurrentPen; + private int ScreenMode; + private int INTScanlineCnt; + //private int VSYNCDelyCnt; - private int[][] Lookup = new int[4][]; + private int[][] Lookup = new int[4][]; - //private bool DoModeUpdate; + //private bool DoModeUpdate; - //private int LatchedMode; - //private int buffPos; + //private int LatchedMode; + //private int buffPos; - public bool FrameEnd; + public bool FrameEnd; - public bool WaitLine; + public bool WaitLine; - #endregion + #endregion - #region Clock Operations + #region Clock Operations - /// - /// The gatearray runs on a 16Mhz clock - /// (for the purposes of emulation, we will use a 4Mhz clock) - /// From this it generates: - /// 1Mhz clock for the CRTC chip - /// 1Mhz clock for the AY-3-8912 PSG - /// 4Mhz clock for the Z80 CPU - /// - public void ClockCycle() - { - // 4-phase clock - for (int i = 1; i < 5; i++) - { - switch (i) - { - // Phase 1 - case 1: - CRCT.ClockCycle(); - CPU.ExecuteOne(); - break; - // Phase 2 - case 2: - CPU.ExecuteOne(); - break; - // Phase 3 - case 3: - // video fetch - break; - // Phase 4 - case 4: - // video fetch - break; - } - } - } + /// + /// The gatearray runs on a 16Mhz clock + /// (for the purposes of emulation, we will use a 4Mhz clock) + /// From this it generates: + /// 1Mhz clock for the CRTC chip + /// 1Mhz clock for the AY-3-8912 PSG + /// 4Mhz clock for the Z80 CPU + /// + public void ClockCycle() + { + // 4-phase clock + for (int i = 1; i < 5; i++) + { + switch (i) + { + // Phase 1 + case 1: + CRCT.ClockCycle(); + CPU.ExecuteOne(); + break; + // Phase 2 + case 2: + CPU.ExecuteOne(); + break; + // Phase 3 + case 3: + // video fetch + break; + // Phase 4 + case 4: + // video fetch + break; + } + } + } - #endregion + #endregion - #region Internal Methods + #region Internal Methods - /// - /// Selects the pen - /// - public virtual void SetPen(BitArray bi) - { - if (bi[4]) - { - // border select - CurrentPen = 16; - } - else - { - // pen select - byte[] b = new byte[1]; - bi.CopyTo(b, 0); - CurrentPen = b[0] & 0x0f; - } - } + /// + /// Selects the pen + /// + public virtual void SetPen(BitArray bi) + { + if (bi[4]) + { + // border select + CurrentPen = 16; + } + else + { + // pen select + byte[] b = new byte[1]; + bi.CopyTo(b, 0); + CurrentPen = b[0] & 0x0f; + } + } - /// - /// Selects colour for the currently selected pen - /// - public virtual void SetPenColour(BitArray bi) - { - byte[] b = new byte[1]; - bi.CopyTo(b, 0); - var colour = b[0] & 0x1f; - PenColours[CurrentPen] = colour; - } + /// + /// Selects colour for the currently selected pen + /// + public virtual void SetPenColour(BitArray bi) + { + byte[] b = new byte[1]; + bi.CopyTo(b, 0); + var colour = b[0] & 0x1f; + PenColours[CurrentPen] = colour; + } - /// - /// Returns the actual ARGB pen colour value - /// - public virtual int GetPenColour(int idx) - { - return CPCHardwarePalette[PenColours[idx]]; - } + /// + /// Returns the actual ARGB pen colour value + /// + public virtual int GetPenColour(int idx) + { + return CPCHardwarePalette[PenColours[idx]]; + } - /// - /// Screen mode and ROM config - /// - public virtual void SetReg2(BitArray bi) - { - byte[] b = new byte[1]; - bi.CopyTo(b, 0); + /// + /// Screen mode and ROM config + /// + public virtual void SetReg2(BitArray bi) + { + byte[] b = new byte[1]; + bi.CopyTo(b, 0); - // screen mode - var mode = b[0] & 0x03; - ScreenMode = mode; + // screen mode + var mode = b[0] & 0x03; + ScreenMode = mode; - // ROM + // ROM - // upper - if ((b[0] & 0x08) != 0) - { - _machine.UpperROMPaged = false; - } - else - { - _machine.UpperROMPaged = true; - } + // upper + if ((b[0] & 0x08) != 0) + { + _machine.UpperROMPaged = false; + } + else + { + _machine.UpperROMPaged = true; + } - // lower - if ((b[0] & 0x04) != 0) - { - _machine.LowerROMPaged = false; - } - else - { - _machine.LowerROMPaged = true; - } + // lower + if ((b[0] & 0x04) != 0) + { + _machine.LowerROMPaged = false; + } + else + { + _machine.LowerROMPaged = true; + } - // INT delay - if ((b[0] & 0x10) != 0) - { - INTScanlineCnt = 0; - } - } + // INT delay + if ((b[0] & 0x10) != 0) + { + INTScanlineCnt = 0; + } + } - /// - /// Only available on machines with a 64KB memory expansion - /// Default assume we dont have this - /// - public virtual void SetRAM(BitArray bi) - { - return; - } + /// + /// Only available on machines with a 64KB memory expansion + /// Default assume we dont have this + /// + public virtual void SetRAM(BitArray bi) + { + return; + } - public void InterruptACK() - { - INTScanlineCnt &= 0x01f; - } + public void InterruptACK() + { + INTScanlineCnt &= 0x01f; + } - - - #endregion - #region Reset - public void Reset() - { - CurrentPen = 0; - ScreenMode = 1; - for (int i = 0; i < 17; i++) - PenColours[i] = 0; - INTScanlineCnt = 0; - //VSYNCDelyCnt = 0; - } + #endregion - #endregion + #region Reset - #region IPortIODevice + public void Reset() + { + CurrentPen = 0; + ScreenMode = 1; + for (int i = 0; i < 17; i++) + PenColours[i] = 0; + INTScanlineCnt = 0; + //VSYNCDelyCnt = 0; + } - /// - /// Device responds to an IN instruction - /// - public bool ReadPort(ushort port, ref int result) - { - // gate array is OUT only - return false; - } + #endregion - /// - /// Device responds to an OUT instruction - /// - public bool WritePort(ushort port, int result) - { - BitArray portBits = new BitArray(BitConverter.GetBytes(port)); - BitArray dataBits = new BitArray(BitConverter.GetBytes((byte)result)); + #region IPortIODevice - // The gate array responds to port 0x7F - bool accessed = !portBits[15]; - if (!accessed) - return false; + /// + /// Device responds to an IN instruction + /// + public bool ReadPort(ushort port, ref int result) + { + // gate array is OUT only + return false; + } - // Bit 9 and 8 of the data byte define the function to access - if (!dataBits[6] && !dataBits[7]) - { - // select pen - SetPen(dataBits); - } + /// + /// Device responds to an OUT instruction + /// + public bool WritePort(ushort port, int result) + { + BitArray portBits = new BitArray(BitConverter.GetBytes(port)); + BitArray dataBits = new BitArray(BitConverter.GetBytes((byte)result)); - if (dataBits[6] && !dataBits[7]) - { - // select colour for selected pen - SetPenColour(dataBits); - } + // The gate array responds to port 0x7F + bool accessed = !portBits[15]; + if (!accessed) + return false; - if (!dataBits[6] && dataBits[7]) - { - // select screen mode, ROM configuration and interrupt control - SetReg2(dataBits); - } + // Bit 9 and 8 of the data byte define the function to access + if (!dataBits[6] && !dataBits[7]) + { + // select pen + SetPen(dataBits); + } - if (dataBits[6] && dataBits[7]) - { - // RAM memory management - SetRAM(dataBits); - } + if (dataBits[6] && !dataBits[7]) + { + // select colour for selected pen + SetPenColour(dataBits); + } - return true; - } + if (!dataBits[6] && dataBits[7]) + { + // select screen mode, ROM configuration and interrupt control + SetReg2(dataBits); + } - #endregion + if (dataBits[6] && dataBits[7]) + { + // RAM memory management + SetRAM(dataBits); + } - #region IVideoProvider + return true; + } - /// - /// Video output buffer - /// - public int[] ScreenBuffer; + #endregion - private int _virtualWidth; - private int _virtualHeight; - private int _bufferWidth; - private int _bufferHeight; + #region IVideoProvider - public int BackgroundColor - { - get { return CPCHardwarePalette[16]; } - } + /// + /// Video output buffer + /// + public int[] ScreenBuffer; - public int VirtualWidth - { - get { return _virtualWidth; } - set { _virtualWidth = value; } - } + private int _virtualWidth; + private int _virtualHeight; + private int _bufferWidth; + private int _bufferHeight; - public int VirtualHeight - { - get { return _virtualHeight; } - set { _virtualHeight = value; } - } + public int BackgroundColor + { + get { return CPCHardwarePalette[16]; } + } - public int BufferWidth - { - get { return _bufferWidth; } - set { _bufferWidth = value; } - } + public int VirtualWidth + { + get { return _virtualWidth; } + set { _virtualWidth = value; } + } - public int BufferHeight - { - get { return _bufferHeight; } - set { _bufferHeight = value; } - } + public int VirtualHeight + { + get { return _virtualHeight; } + set { _virtualHeight = value; } + } - public int VsyncNumerator - { - get { return Z80ClockSpeed * 50; } - set { } - } + public int BufferWidth + { + get { return _bufferWidth; } + set { _bufferWidth = value; } + } - public int VsyncDenominator - { - get { return Z80ClockSpeed; } - } + public int BufferHeight + { + get { return _bufferHeight; } + set { _bufferHeight = value; } + } - public int[] GetVideoBuffer() - { - return ScreenBuffer; - } + public int VsyncNumerator + { + get { return Z80ClockSpeed * 50; } + set { } + } - protected void SetupScreenSize() - { - /* + public int VsyncDenominator + { + get { return Z80ClockSpeed; } + } + + public int[] GetVideoBuffer() + { + return ScreenBuffer; + } + + protected void SetupScreenSize() + { + /* * Rect Pixels: Mode 0: 160×200 pixels with 16 colors (4 bpp) Sqaure Pixels: Mode 1: 320×200 pixels with 4 colors (2 bpp) Rect Pixels: Mode 2: 640×200 pixels with 2 colors (1 bpp) @@ -507,25 +507,25 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC * * */ - // define maximum screen buffer size - // to fit all possible resolutions, 640x400 should do it - // therefore a scanline will take two buffer rows - // and buffer columns will be: - // Mode 1: 2 pixels - // Mode 2: 1 pixel - // Mode 0: 4 pixels - // Mode 3: 4 pixels + // define maximum screen buffer size + // to fit all possible resolutions, 640x400 should do it + // therefore a scanline will take two buffer rows + // and buffer columns will be: + // Mode 1: 2 pixels + // Mode 2: 1 pixel + // Mode 0: 4 pixels + // Mode 3: 4 pixels - BufferWidth = 640; - BufferHeight = 400; - VirtualHeight = BufferHeight; - VirtualWidth = BufferWidth; - ScreenBuffer = new int[BufferWidth * BufferHeight]; - croppedBuffer = ScreenBuffer; - } + BufferWidth = 640; + BufferHeight = 400; + VirtualHeight = BufferHeight; + VirtualWidth = BufferWidth; + ScreenBuffer = new int[BufferWidth * BufferHeight]; + croppedBuffer = ScreenBuffer; + } - protected int[] croppedBuffer; + protected int[] croppedBuffer; - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/MachineType.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/MachineType.cs index f7f88a7a8b..0933141af9 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/MachineType.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/MachineType.cs @@ -1,18 +1,18 @@  namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// The various CPC models CPCHawk emulates - /// - public enum MachineType - { - /// - /// Original Amstrad CPC model with builtin datacorder - /// - CPC464, - /// - /// 128K model with builtin 3" disk drive - /// - CPC6128, - } + /// + /// The various CPC models CPCHawk emulates + /// + public enum MachineType + { + /// + /// Original Amstrad CPC model with builtin datacorder + /// + CPC464, + /// + /// 128K model with builtin 3" disk drive + /// + CPC6128, + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/CPCExtendedFloppyDisk.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/CPCExtendedFloppyDisk.cs index c83bf7d840..a386a01b5e 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/CPCExtendedFloppyDisk.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/CPCExtendedFloppyDisk.cs @@ -5,249 +5,249 @@ using System.Collections.Generic; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Logical object representing a standard +3 disk image - /// - public class CPCExtendedFloppyDisk : FloppyDisk - { - /// - /// The format type - /// - public override DiskType DiskFormatType => DiskType.CPCExtended; + /// + /// Logical object representing a standard +3 disk image + /// + public class CPCExtendedFloppyDisk : FloppyDisk + { + /// + /// The format type + /// + public override DiskType DiskFormatType => DiskType.CPCExtended; - /// - /// Attempts to parse incoming disk data - /// - /// - /// TRUE: disk parsed - /// FALSE: unable to parse disk - /// - public override bool ParseDisk(byte[] data) - { - // look for standard magic string - string ident = Encoding.ASCII.GetString(data, 0, 16); + /// + /// Attempts to parse incoming disk data + /// + /// + /// TRUE: disk parsed + /// FALSE: unable to parse disk + /// + public override bool ParseDisk(byte[] data) + { + // look for standard magic string + string ident = Encoding.ASCII.GetString(data, 0, 16); - if (!ident.ToUpper().Contains("EXTENDED CPC DSK")) - { - // incorrect format - return false; - } + if (!ident.ToUpper().Contains("EXTENDED CPC DSK")) + { + // incorrect format + return false; + } - // read the disk information block - DiskHeader.DiskIdent = ident; - DiskHeader.DiskCreatorString = Encoding.ASCII.GetString(data, 0x22, 14); - DiskHeader.NumberOfTracks = data[0x30]; - DiskHeader.NumberOfSides = data[0x31]; - DiskHeader.TrackSizes = new int[DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides]; - DiskTracks = new Track[DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides]; - DiskData = data; - int pos = 0x34; + // read the disk information block + DiskHeader.DiskIdent = ident; + DiskHeader.DiskCreatorString = Encoding.ASCII.GetString(data, 0x22, 14); + DiskHeader.NumberOfTracks = data[0x30]; + DiskHeader.NumberOfSides = data[0x31]; + DiskHeader.TrackSizes = new int[DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides]; + DiskTracks = new Track[DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides]; + DiskData = data; + int pos = 0x34; - if (DiskHeader.NumberOfSides > 1) - { - StringBuilder sbm = new StringBuilder(); - sbm.AppendLine(); - sbm.AppendLine(); - sbm.AppendLine("The detected disk image contains multiple sides."); - sbm.AppendLine("This is NOT currently supported in CPCHawk."); - sbm.AppendLine("Please find an alternate image/dump where each side has been saved as a separate *.dsk image (and use the mutli-disk bundler tool to load into Bizhawk)."); - throw new System.NotImplementedException(sbm.ToString()); - } + if (DiskHeader.NumberOfSides > 1) + { + StringBuilder sbm = new StringBuilder(); + sbm.AppendLine(); + sbm.AppendLine(); + sbm.AppendLine("The detected disk image contains multiple sides."); + sbm.AppendLine("This is NOT currently supported in CPCHawk."); + sbm.AppendLine("Please find an alternate image/dump where each side has been saved as a separate *.dsk image (and use the mutli-disk bundler tool to load into Bizhawk)."); + throw new System.NotImplementedException(sbm.ToString()); + } - for (int i = 0; i < DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; i++) - { - DiskHeader.TrackSizes[i] = data[pos++] * 256; - } + for (int i = 0; i < DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; i++) + { + DiskHeader.TrackSizes[i] = data[pos++] * 256; + } - // move to first track information block - pos = 0x100; + // move to first track information block + pos = 0x100; - // parse each track - for (int i = 0; i < DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; i++) - { - // check for unformatted track - if (DiskHeader.TrackSizes[i] == 0) - { - DiskTracks[i] = new Track(); - DiskTracks[i].Sectors = new Sector[0]; - continue; - } + // parse each track + for (int i = 0; i < DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; i++) + { + // check for unformatted track + if (DiskHeader.TrackSizes[i] == 0) + { + DiskTracks[i] = new Track(); + DiskTracks[i].Sectors = new Sector[0]; + continue; + } - int p = pos; - DiskTracks[i] = new Track(); + int p = pos; + DiskTracks[i] = new Track(); - // track info block - DiskTracks[i].TrackIdent = Encoding.ASCII.GetString(data, p, 12); - p += 16; - DiskTracks[i].TrackNumber = data[p++]; - DiskTracks[i].SideNumber = data[p++]; - DiskTracks[i].DataRate = data[p++]; - DiskTracks[i].RecordingMode = data[p++]; - DiskTracks[i].SectorSize = data[p++]; - DiskTracks[i].NumberOfSectors = data[p++]; - DiskTracks[i].GAP3Length = data[p++]; - DiskTracks[i].FillerByte = data[p++]; + // track info block + DiskTracks[i].TrackIdent = Encoding.ASCII.GetString(data, p, 12); + p += 16; + DiskTracks[i].TrackNumber = data[p++]; + DiskTracks[i].SideNumber = data[p++]; + DiskTracks[i].DataRate = data[p++]; + DiskTracks[i].RecordingMode = data[p++]; + DiskTracks[i].SectorSize = data[p++]; + DiskTracks[i].NumberOfSectors = data[p++]; + DiskTracks[i].GAP3Length = data[p++]; + DiskTracks[i].FillerByte = data[p++]; - int dpos = pos + 0x100; + int dpos = pos + 0x100; - // sector info list - DiskTracks[i].Sectors = new Sector[DiskTracks[i].NumberOfSectors]; - for (int s = 0; s < DiskTracks[i].NumberOfSectors; s++) - { - DiskTracks[i].Sectors[s] = new Sector(); + // sector info list + DiskTracks[i].Sectors = new Sector[DiskTracks[i].NumberOfSectors]; + for (int s = 0; s < DiskTracks[i].NumberOfSectors; s++) + { + DiskTracks[i].Sectors[s] = new Sector(); - DiskTracks[i].Sectors[s].TrackNumber = data[p++]; - DiskTracks[i].Sectors[s].SideNumber = data[p++]; - DiskTracks[i].Sectors[s].SectorID = data[p++]; - DiskTracks[i].Sectors[s].SectorSize = data[p++]; - DiskTracks[i].Sectors[s].Status1 = data[p++]; - DiskTracks[i].Sectors[s].Status2 = data[p++]; - DiskTracks[i].Sectors[s].ActualDataByteLength = MediaConverter.GetWordValue(data, p); - p += 2; + DiskTracks[i].Sectors[s].TrackNumber = data[p++]; + DiskTracks[i].Sectors[s].SideNumber = data[p++]; + DiskTracks[i].Sectors[s].SectorID = data[p++]; + DiskTracks[i].Sectors[s].SectorSize = data[p++]; + DiskTracks[i].Sectors[s].Status1 = data[p++]; + DiskTracks[i].Sectors[s].Status2 = data[p++]; + DiskTracks[i].Sectors[s].ActualDataByteLength = MediaConverter.GetWordValue(data, p); + p += 2; - // sector data - begins at 0x100 offset from the start of the track info block (in this case dpos) - DiskTracks[i].Sectors[s].SectorData = new byte[DiskTracks[i].Sectors[s].ActualDataByteLength]; + // sector data - begins at 0x100 offset from the start of the track info block (in this case dpos) + DiskTracks[i].Sectors[s].SectorData = new byte[DiskTracks[i].Sectors[s].ActualDataByteLength]; - // copy the data - for (int b = 0; b < DiskTracks[i].Sectors[s].ActualDataByteLength; b++) - { - DiskTracks[i].Sectors[s].SectorData[b] = data[dpos + b]; - } + // copy the data + for (int b = 0; b < DiskTracks[i].Sectors[s].ActualDataByteLength; b++) + { + DiskTracks[i].Sectors[s].SectorData[b] = data[dpos + b]; + } - // check for multiple weak/random sectors stored - if (DiskTracks[i].Sectors[s].SectorSize <= 7) - { - // sectorsize n=8 is equivilent to n=0 - FDC will use DTL for length - int specifiedSize = 0x80 << DiskTracks[i].Sectors[s].SectorSize; + // check for multiple weak/random sectors stored + if (DiskTracks[i].Sectors[s].SectorSize <= 7) + { + // sectorsize n=8 is equivilent to n=0 - FDC will use DTL for length + int specifiedSize = 0x80 << DiskTracks[i].Sectors[s].SectorSize; - if (specifiedSize < DiskTracks[i].Sectors[s].ActualDataByteLength) - { - // more data stored than sectorsize defines - // check for multiple weak/random copies - if (DiskTracks[i].Sectors[s].ActualDataByteLength % specifiedSize != 0) - { - DiskTracks[i].Sectors[s].ContainsMultipleWeakSectors = true; - } - } - } + if (specifiedSize < DiskTracks[i].Sectors[s].ActualDataByteLength) + { + // more data stored than sectorsize defines + // check for multiple weak/random copies + if (DiskTracks[i].Sectors[s].ActualDataByteLength % specifiedSize != 0) + { + DiskTracks[i].Sectors[s].ContainsMultipleWeakSectors = true; + } + } + } - // move dpos to the next sector data postion - dpos += DiskTracks[i].Sectors[s].ActualDataByteLength; - } + // move dpos to the next sector data postion + dpos += DiskTracks[i].Sectors[s].ActualDataByteLength; + } - // move to the next track info block - pos += DiskHeader.TrackSizes[i]; - } + // move to the next track info block + pos += DiskHeader.TrackSizes[i]; + } - // run protection scheme detector - ParseProtection(); + // run protection scheme detector + ParseProtection(); - return true; - } + return true; + } - /// - /// Takes a double-sided disk byte array and converts into 2 single-sided arrays - /// - public static bool SplitDoubleSided(byte[] data, List results) - { - // look for standard magic string - string ident = Encoding.ASCII.GetString(data, 0, 16); - if (!ident.ToUpper().Contains("EXTENDED CPC DSK")) - { - // incorrect format - return false; - } + /// + /// Takes a double-sided disk byte array and converts into 2 single-sided arrays + /// + public static bool SplitDoubleSided(byte[] data, List results) + { + // look for standard magic string + string ident = Encoding.ASCII.GetString(data, 0, 16); + if (!ident.ToUpper().Contains("EXTENDED CPC DSK")) + { + // incorrect format + return false; + } - byte[] S0 = new byte[data.Length]; - byte[] S1 = new byte[data.Length]; + byte[] S0 = new byte[data.Length]; + byte[] S1 = new byte[data.Length]; - // disk info block - Array.Copy(data, 0, S0, 0, 0x100); - Array.Copy(data, 0, S1, 0, 0x100); - // change side number - S0[0x31] = 1; - S1[0x31] = 1; + // disk info block + Array.Copy(data, 0, S0, 0, 0x100); + Array.Copy(data, 0, S1, 0, 0x100); + // change side number + S0[0x31] = 1; + S1[0x31] = 1; - // extended format has different track sizes - int[] trkSizes = new int[data[0x30] * data[0x31]]; + // extended format has different track sizes + int[] trkSizes = new int[data[0x30] * data[0x31]]; - int pos = 0x34; - for (int i = 0; i < data[0x30] * data[0x31]; i++) - { - trkSizes[i] = data[pos] * 256; - // clear destination trk sizes (will be added later) - S0[pos] = 0; - S1[pos] = 0; - pos++; - } + int pos = 0x34; + for (int i = 0; i < data[0x30] * data[0x31]; i++) + { + trkSizes[i] = data[pos] * 256; + // clear destination trk sizes (will be added later) + S0[pos] = 0; + S1[pos] = 0; + pos++; + } - // start at track info blocks - int mPos = 0x100; - int s0Pos = 0x100; - int s0tCount = 0; - int s1tCount = 0; - int s1Pos = 0x100; - int tCount = 0; + // start at track info blocks + int mPos = 0x100; + int s0Pos = 0x100; + int s0tCount = 0; + int s1tCount = 0; + int s1Pos = 0x100; + int tCount = 0; - while (tCount < data[0x30] * data[0x31]) - { - // which side is this? - var side = data[mPos + 0x11]; - if (side == 0) - { - // side 1 - Array.Copy(data, mPos, S0, s0Pos, trkSizes[tCount]); - s0Pos += trkSizes[tCount]; - // trk size table - S0[0x34 + s0tCount++] = (byte)(trkSizes[tCount] / 256); - } - else if (side == 1) - { - // side 2 - Array.Copy(data, mPos, S1, s1Pos, trkSizes[tCount]); - s1Pos += trkSizes[tCount]; - // trk size table - S1[0x34 + s1tCount++] = (byte)(trkSizes[tCount] / 256); - } - - mPos += trkSizes[tCount++]; - } + while (tCount < data[0x30] * data[0x31]) + { + // which side is this? + var side = data[mPos + 0x11]; + if (side == 0) + { + // side 1 + Array.Copy(data, mPos, S0, s0Pos, trkSizes[tCount]); + s0Pos += trkSizes[tCount]; + // trk size table + S0[0x34 + s0tCount++] = (byte)(trkSizes[tCount] / 256); + } + else if (side == 1) + { + // side 2 + Array.Copy(data, mPos, S1, s1Pos, trkSizes[tCount]); + s1Pos += trkSizes[tCount]; + // trk size table + S1[0x34 + s1tCount++] = (byte)(trkSizes[tCount] / 256); + } - byte[] s0final = new byte[s0Pos]; - byte[] s1final = new byte[s1Pos]; - Array.Copy(S0, 0, s0final, 0, s0Pos); - Array.Copy(S1, 0, s1final, 0, s1Pos); + mPos += trkSizes[tCount++]; + } - results.Add(s0final); - results.Add(s1final); + byte[] s0final = new byte[s0Pos]; + byte[] s1final = new byte[s1Pos]; + Array.Copy(S0, 0, s0final, 0, s0Pos); + Array.Copy(S1, 0, s1final, 0, s1Pos); - return true; - } + results.Add(s0final); + results.Add(s1final); - /// - /// State serlialization - /// - public override void SyncState(Serializer ser) - { - ser.BeginSection("Plus3FloppyDisk"); + return true; + } - ser.Sync(nameof(CylinderCount), ref CylinderCount); - ser.Sync(nameof(SideCount), ref SideCount); - ser.Sync(nameof(BytesPerTrack), ref BytesPerTrack); - ser.Sync(nameof(WriteProtected), ref WriteProtected); - ser.SyncEnum(nameof(Protection), ref Protection); + /// + /// State serlialization + /// + public override void SyncState(Serializer ser) + { + ser.BeginSection("Plus3FloppyDisk"); - ser.Sync(nameof(DirtyData), ref DirtyData); - if (DirtyData) - { + ser.Sync(nameof(CylinderCount), ref CylinderCount); + ser.Sync(nameof(SideCount), ref SideCount); + ser.Sync(nameof(BytesPerTrack), ref BytesPerTrack); + ser.Sync(nameof(WriteProtected), ref WriteProtected); + ser.SyncEnum(nameof(Protection), ref Protection); - } + ser.Sync(nameof(DirtyData), ref DirtyData); + if (DirtyData) + { - // sync deterministic track and sector counters - ser.Sync(nameof( _randomCounter), ref _randomCounter); - RandomCounter = _randomCounter; + } - ser.EndSection(); - } - } + // sync deterministic track and sector counters + ser.Sync(nameof(_randomCounter), ref _randomCounter); + RandomCounter = _randomCounter; + + ser.EndSection(); + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/CPCFloppyDisk.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/CPCFloppyDisk.cs index 54ac222dae..dc0455556e 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/CPCFloppyDisk.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/CPCFloppyDisk.cs @@ -5,232 +5,232 @@ using System; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Logical object representing a standard +3 disk image - /// - public class CPCFloppyDisk : FloppyDisk - { - /// - /// The format type - /// - public override DiskType DiskFormatType => DiskType.CPC; + /// + /// Logical object representing a standard +3 disk image + /// + public class CPCFloppyDisk : FloppyDisk + { + /// + /// The format type + /// + public override DiskType DiskFormatType => DiskType.CPC; - /// - /// Attempts to parse incoming disk data - /// - /// - /// TRUE: disk parsed - /// FALSE: unable to parse disk - /// - public override bool ParseDisk(byte[] data) - { - // look for standard magic string - string ident = Encoding.ASCII.GetString(data, 0, 16); + /// + /// Attempts to parse incoming disk data + /// + /// + /// TRUE: disk parsed + /// FALSE: unable to parse disk + /// + public override bool ParseDisk(byte[] data) + { + // look for standard magic string + string ident = Encoding.ASCII.GetString(data, 0, 16); - if (!ident.ToUpper().Contains("MV - CPC")) - { - // incorrect format - return false; - } + if (!ident.ToUpper().Contains("MV - CPC")) + { + // incorrect format + return false; + } - // read the disk information block - DiskHeader.DiskIdent = ident; - DiskHeader.DiskCreatorString = Encoding.ASCII.GetString(data, 0x22, 14); - DiskHeader.NumberOfTracks = data[0x30]; - DiskHeader.NumberOfSides = data[0x31]; - DiskHeader.TrackSizes = new int[DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides]; - DiskTracks = new Track[DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides]; - DiskData = data; - int pos = 0x32; + // read the disk information block + DiskHeader.DiskIdent = ident; + DiskHeader.DiskCreatorString = Encoding.ASCII.GetString(data, 0x22, 14); + DiskHeader.NumberOfTracks = data[0x30]; + DiskHeader.NumberOfSides = data[0x31]; + DiskHeader.TrackSizes = new int[DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides]; + DiskTracks = new Track[DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides]; + DiskData = data; + int pos = 0x32; - if (DiskHeader.NumberOfSides > 1) - { - StringBuilder sbm = new StringBuilder(); - sbm.AppendLine(); - sbm.AppendLine(); - sbm.AppendLine("The detected disk image contains multiple sides."); - sbm.AppendLine("This is NOT currently supported in CPCHawk."); - sbm.AppendLine("Please find an alternate image/dump where each side has been saved as a separate *.dsk image (and use the mutli-disk bundler tool to load into Bizhawk)."); - throw new System.NotImplementedException(sbm.ToString()); - } + if (DiskHeader.NumberOfSides > 1) + { + StringBuilder sbm = new StringBuilder(); + sbm.AppendLine(); + sbm.AppendLine(); + sbm.AppendLine("The detected disk image contains multiple sides."); + sbm.AppendLine("This is NOT currently supported in CPCHawk."); + sbm.AppendLine("Please find an alternate image/dump where each side has been saved as a separate *.dsk image (and use the mutli-disk bundler tool to load into Bizhawk)."); + throw new System.NotImplementedException(sbm.ToString()); + } - // standard CPC format all track sizes are the same in the image - for (int i = 0; i < DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; i++) - { - DiskHeader.TrackSizes[i] = MediaConverter.GetWordValue(data, pos); - } + // standard CPC format all track sizes are the same in the image + for (int i = 0; i < DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; i++) + { + DiskHeader.TrackSizes[i] = MediaConverter.GetWordValue(data, pos); + } - // move to first track information block - pos = 0x100; + // move to first track information block + pos = 0x100; - // parse each track - for (int i = 0; i < DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; i++) - { - // check for unformatted track - if (DiskHeader.TrackSizes[i] == 0) - { - DiskTracks[i] = new Track(); - DiskTracks[i].Sectors = new Sector[0]; - continue; - } + // parse each track + for (int i = 0; i < DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; i++) + { + // check for unformatted track + if (DiskHeader.TrackSizes[i] == 0) + { + DiskTracks[i] = new Track(); + DiskTracks[i].Sectors = new Sector[0]; + continue; + } - int p = pos; - DiskTracks[i] = new Track(); + int p = pos; + DiskTracks[i] = new Track(); - // track info block - DiskTracks[i].TrackIdent = Encoding.ASCII.GetString(data, p, 12); - p += 16; - DiskTracks[i].TrackNumber = data[p++]; - DiskTracks[i].SideNumber = data[p++]; - p += 2; - DiskTracks[i].SectorSize = data[p++]; - DiskTracks[i].NumberOfSectors = data[p++]; - DiskTracks[i].GAP3Length = data[p++]; - DiskTracks[i].FillerByte = data[p++]; + // track info block + DiskTracks[i].TrackIdent = Encoding.ASCII.GetString(data, p, 12); + p += 16; + DiskTracks[i].TrackNumber = data[p++]; + DiskTracks[i].SideNumber = data[p++]; + p += 2; + DiskTracks[i].SectorSize = data[p++]; + DiskTracks[i].NumberOfSectors = data[p++]; + DiskTracks[i].GAP3Length = data[p++]; + DiskTracks[i].FillerByte = data[p++]; - int dpos = pos + 0x100; + int dpos = pos + 0x100; - // sector info list - DiskTracks[i].Sectors = new Sector[DiskTracks[i].NumberOfSectors]; - for (int s = 0; s < DiskTracks[i].NumberOfSectors; s++) - { - DiskTracks[i].Sectors[s] = new Sector(); + // sector info list + DiskTracks[i].Sectors = new Sector[DiskTracks[i].NumberOfSectors]; + for (int s = 0; s < DiskTracks[i].NumberOfSectors; s++) + { + DiskTracks[i].Sectors[s] = new Sector(); - DiskTracks[i].Sectors[s].TrackNumber = data[p++]; - DiskTracks[i].Sectors[s].SideNumber = data[p++]; - DiskTracks[i].Sectors[s].SectorID = data[p++]; - DiskTracks[i].Sectors[s].SectorSize = data[p++]; - DiskTracks[i].Sectors[s].Status1 = data[p++]; - DiskTracks[i].Sectors[s].Status2 = data[p++]; - DiskTracks[i].Sectors[s].ActualDataByteLength = MediaConverter.GetWordValue(data, p); - p += 2; + DiskTracks[i].Sectors[s].TrackNumber = data[p++]; + DiskTracks[i].Sectors[s].SideNumber = data[p++]; + DiskTracks[i].Sectors[s].SectorID = data[p++]; + DiskTracks[i].Sectors[s].SectorSize = data[p++]; + DiskTracks[i].Sectors[s].Status1 = data[p++]; + DiskTracks[i].Sectors[s].Status2 = data[p++]; + DiskTracks[i].Sectors[s].ActualDataByteLength = MediaConverter.GetWordValue(data, p); + p += 2; - // actualdatabytelength value is calculated now - if (DiskTracks[i].Sectors[s].SectorSize == 0) - { - // no sectorsize specified - DTL will be used at runtime - DiskTracks[i].Sectors[s].ActualDataByteLength = DiskHeader.TrackSizes[i]; - } - else if (DiskTracks[i].Sectors[s].SectorSize > 6) - { - // invalid - wrap around to 0 - DiskTracks[i].Sectors[s].ActualDataByteLength = DiskHeader.TrackSizes[i]; - } - else if (DiskTracks[i].Sectors[s].SectorSize == 6) - { - // only 0x1800 bytes are stored - DiskTracks[i].Sectors[s].ActualDataByteLength = 0x1800; - } - else - { - // valid sector size for this format - DiskTracks[i].Sectors[s].ActualDataByteLength = 0x80 << DiskTracks[i].Sectors[s].SectorSize; - } + // actualdatabytelength value is calculated now + if (DiskTracks[i].Sectors[s].SectorSize == 0) + { + // no sectorsize specified - DTL will be used at runtime + DiskTracks[i].Sectors[s].ActualDataByteLength = DiskHeader.TrackSizes[i]; + } + else if (DiskTracks[i].Sectors[s].SectorSize > 6) + { + // invalid - wrap around to 0 + DiskTracks[i].Sectors[s].ActualDataByteLength = DiskHeader.TrackSizes[i]; + } + else if (DiskTracks[i].Sectors[s].SectorSize == 6) + { + // only 0x1800 bytes are stored + DiskTracks[i].Sectors[s].ActualDataByteLength = 0x1800; + } + else + { + // valid sector size for this format + DiskTracks[i].Sectors[s].ActualDataByteLength = 0x80 << DiskTracks[i].Sectors[s].SectorSize; + } - // sector data - begins at 0x100 offset from the start of the track info block (in this case dpos) - DiskTracks[i].Sectors[s].SectorData = new byte[DiskTracks[i].Sectors[s].ActualDataByteLength]; + // sector data - begins at 0x100 offset from the start of the track info block (in this case dpos) + DiskTracks[i].Sectors[s].SectorData = new byte[DiskTracks[i].Sectors[s].ActualDataByteLength]; - // copy the data - for (int b = 0; b < DiskTracks[i].Sectors[s].ActualDataByteLength; b++) - { - DiskTracks[i].Sectors[s].SectorData[b] = data[dpos + b]; - } + // copy the data + for (int b = 0; b < DiskTracks[i].Sectors[s].ActualDataByteLength; b++) + { + DiskTracks[i].Sectors[s].SectorData[b] = data[dpos + b]; + } - // move dpos to the next sector data postion - dpos += DiskTracks[i].Sectors[s].ActualDataByteLength; - } + // move dpos to the next sector data postion + dpos += DiskTracks[i].Sectors[s].ActualDataByteLength; + } - // move to the next track info block - pos += DiskHeader.TrackSizes[i]; - } + // move to the next track info block + pos += DiskHeader.TrackSizes[i]; + } - // run protection scheme detector - ParseProtection(); + // run protection scheme detector + ParseProtection(); - return true; - } + return true; + } - /// - /// Takes a double-sided disk byte array and converts into 2 single-sided arrays - /// - public static bool SplitDoubleSided(byte[] data, List results) - { - // look for standard magic string - string ident = Encoding.ASCII.GetString(data, 0, 16); - if (!ident.ToUpper().Contains("MV - CPC")) - { - // incorrect format - return false; - } + /// + /// Takes a double-sided disk byte array and converts into 2 single-sided arrays + /// + public static bool SplitDoubleSided(byte[] data, List results) + { + // look for standard magic string + string ident = Encoding.ASCII.GetString(data, 0, 16); + if (!ident.ToUpper().Contains("MV - CPC")) + { + // incorrect format + return false; + } - byte[] S0 = new byte[data.Length]; - byte[] S1 = new byte[data.Length]; + byte[] S0 = new byte[data.Length]; + byte[] S1 = new byte[data.Length]; - // disk info block - Array.Copy(data, 0, S0, 0, 0x100); - Array.Copy(data, 0, S1, 0, 0x100); - // change side number - S0[0x31] = 1; - S1[0x31] = 1; + // disk info block + Array.Copy(data, 0, S0, 0, 0x100); + Array.Copy(data, 0, S1, 0, 0x100); + // change side number + S0[0x31] = 1; + S1[0x31] = 1; - int trkSize = MediaConverter.GetWordValue(data, 0x32); + int trkSize = MediaConverter.GetWordValue(data, 0x32); - // start at track info blocks - int mPos = 0x100; - int s0Pos = 0x100; - int s1Pos = 0x100; + // start at track info blocks + int mPos = 0x100; + int s0Pos = 0x100; + int s1Pos = 0x100; - while (mPos < trkSize * data[0x30] * data[0x31]) - { - // which side is this? - var side = data[mPos + 0x11]; - if (side == 0) - { - // side 1 - Array.Copy(data, mPos, S0, s0Pos, trkSize); - s0Pos += trkSize; - } - else if (side == 1) - { - // side 2 - Array.Copy(data, mPos, S1, s1Pos, trkSize); - s1Pos += trkSize; - } + while (mPos < trkSize * data[0x30] * data[0x31]) + { + // which side is this? + var side = data[mPos + 0x11]; + if (side == 0) + { + // side 1 + Array.Copy(data, mPos, S0, s0Pos, trkSize); + s0Pos += trkSize; + } + else if (side == 1) + { + // side 2 + Array.Copy(data, mPos, S1, s1Pos, trkSize); + s1Pos += trkSize; + } - mPos += trkSize; - } + mPos += trkSize; + } - byte[] s0final = new byte[s0Pos]; - byte[] s1final = new byte[s1Pos]; - Array.Copy(S0, 0, s0final, 0, s0Pos); - Array.Copy(S1, 0, s1final, 0, s1Pos); + byte[] s0final = new byte[s0Pos]; + byte[] s1final = new byte[s1Pos]; + Array.Copy(S0, 0, s0final, 0, s0Pos); + Array.Copy(S1, 0, s1final, 0, s1Pos); - results.Add(s0final); - results.Add(s1final); + results.Add(s0final); + results.Add(s1final); - return true; - } + return true; + } - /// - /// State serlialization - /// - public override void SyncState(Serializer ser) - { - ser.BeginSection("Plus3FloppyDisk"); + /// + /// State serlialization + /// + public override void SyncState(Serializer ser) + { + ser.BeginSection("Plus3FloppyDisk"); - ser.Sync(nameof(CylinderCount), ref CylinderCount); - ser.Sync(nameof(SideCount), ref SideCount); - ser.Sync(nameof(BytesPerTrack), ref BytesPerTrack); - ser.Sync(nameof(WriteProtected), ref WriteProtected); - ser.SyncEnum(nameof(Protection), ref Protection); + ser.Sync(nameof(CylinderCount), ref CylinderCount); + ser.Sync(nameof(SideCount), ref SideCount); + ser.Sync(nameof(BytesPerTrack), ref BytesPerTrack); + ser.Sync(nameof(WriteProtected), ref WriteProtected); + ser.SyncEnum(nameof(Protection), ref Protection); - ser.Sync(nameof(DirtyData), ref DirtyData); - if (DirtyData) - { + ser.Sync(nameof(DirtyData), ref DirtyData); + if (DirtyData) + { - } + } - ser.EndSection(); - } - } + ser.EndSection(); + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/DiskHandler.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/DiskHandler.cs index bc06c1094b..b7f7a26520 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/DiskHandler.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/DiskHandler.cs @@ -6,12 +6,12 @@ using System.Threading.Tasks; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// This is called first when importing disk images - /// Disk images can be single or double-sided, so we need to handle that - /// - public class DiskHandler - { + /// + /// This is called first when importing disk images + /// Disk images can be single or double-sided, so we need to handle that + /// + public class DiskHandler + { - } + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/DiskType.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/DiskType.cs index 75719b9df9..df211b4e55 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/DiskType.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/DiskType.cs @@ -1,19 +1,19 @@  namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// The different disk formats ZXHawk currently supports - /// - public enum DiskType - { - /// - /// Standard CPCEMU disk format (used in the built-in +3 disk drive) - /// - CPC, + /// + /// The different disk formats ZXHawk currently supports + /// + public enum DiskType + { + /// + /// Standard CPCEMU disk format (used in the built-in +3 disk drive) + /// + CPC, - /// - /// Extended CPCEMU disk format (used in the built-in +3 disk drive) - /// - CPCExtended - } + /// + /// Extended CPCEMU disk format (used in the built-in +3 disk drive) + /// + CPCExtended + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/FloppyDisk.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/FloppyDisk.cs index c8145e910b..7d5aaabe47 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/FloppyDisk.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Disk/FloppyDisk.cs @@ -6,403 +6,403 @@ using System.Text; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// This abstract class defines a logical floppy disk - /// - public abstract class FloppyDisk - { - /// - /// The disk format type - /// - public abstract DiskType DiskFormatType { get; } + /// + /// This abstract class defines a logical floppy disk + /// + public abstract class FloppyDisk + { + /// + /// The disk format type + /// + public abstract DiskType DiskFormatType { get; } - /// - /// Disk information header - /// - public Header DiskHeader = new Header(); + /// + /// Disk information header + /// + public Header DiskHeader = new Header(); - /// - /// Track array - /// - public Track[] DiskTracks = null; + /// + /// Track array + /// + public Track[] DiskTracks = null; - /// - /// No. of tracks per side - /// - public int CylinderCount; - - /// - /// The number of physical sides - /// - public int SideCount; + /// + /// No. of tracks per side + /// + public int CylinderCount; - /// - /// The number of bytes per track - /// - public int BytesPerTrack; + /// + /// The number of physical sides + /// + public int SideCount; - /// - /// The write-protect tab on the disk - /// - public bool WriteProtected; + /// + /// The number of bytes per track + /// + public int BytesPerTrack; - /// - /// The detected protection scheme (if any) - /// - public ProtectionType Protection; + /// + /// The write-protect tab on the disk + /// + public bool WriteProtected; - /// - /// The actual disk image data - /// - public byte[] DiskData; + /// + /// The detected protection scheme (if any) + /// + public ProtectionType Protection; - /// - /// If TRUE then data on the disk has changed (been written to) - /// This will be used to determine whether the disk data needs to be included - /// in any SyncState operations - /// - protected bool DirtyData = false; + /// + /// The actual disk image data + /// + public byte[] DiskData; - /// - /// Used to deterministically choose a 'random' sector when dealing with weak reads - /// - public int RandomCounter - { - get { return _randomCounter; } - set - { - _randomCounter = value; + /// + /// If TRUE then data on the disk has changed (been written to) + /// This will be used to determine whether the disk data needs to be included + /// in any SyncState operations + /// + protected bool DirtyData = false; - foreach (var trk in DiskTracks) - { - foreach (var sec in trk.Sectors) - { - sec.RandSecCounter = _randomCounter; - } - } - } - } - protected int _randomCounter; + /// + /// Used to deterministically choose a 'random' sector when dealing with weak reads + /// + public int RandomCounter + { + get { return _randomCounter; } + set + { + _randomCounter = value; + + foreach (var trk in DiskTracks) + { + foreach (var sec in trk.Sectors) + { + sec.RandSecCounter = _randomCounter; + } + } + } + } + protected int _randomCounter; - /// - /// Attempts to parse incoming disk data - /// - /// - /// TRUE: disk parsed - /// FALSE: unable to parse disk - /// - public virtual bool ParseDisk(byte[] diskData) - { - // default result - // override in inheriting class - return false; - } + /// + /// Attempts to parse incoming disk data + /// + /// + /// TRUE: disk parsed + /// FALSE: unable to parse disk + /// + public virtual bool ParseDisk(byte[] diskData) + { + // default result + // override in inheriting class + return false; + } - /// - /// Examines the floppydisk data to work out what protection (if any) is present - /// If possible it will also fix the disk data for this protection - /// This should be run at the end of the ParseDisk() method - /// - public virtual void ParseProtection() - { - int[] weakArr = new int[2]; + /// + /// Examines the floppydisk data to work out what protection (if any) is present + /// If possible it will also fix the disk data for this protection + /// This should be run at the end of the ParseDisk() method + /// + public virtual void ParseProtection() + { + int[] weakArr = new int[2]; - // speedlock - if (DetectSpeedlock(ref weakArr)) - { - Protection = ProtectionType.Speedlock; + // speedlock + if (DetectSpeedlock(ref weakArr)) + { + Protection = ProtectionType.Speedlock; - Sector sec = DiskTracks[0].Sectors[1]; - if (!sec.ContainsMultipleWeakSectors) - { - byte[] origData = sec.SectorData.ToArray(); - List data = new List(); - for (int m = 0; m < 3; m++) - { - for (int i = 0; i < 512; i++) - { - // deterministic 'random' implementation - int n = origData[i] + m + 1; - if (n > 0xff) - n = n - 0xff; - else if (n < 0) - n = 0xff + n; + Sector sec = DiskTracks[0].Sectors[1]; + if (!sec.ContainsMultipleWeakSectors) + { + byte[] origData = sec.SectorData.ToArray(); + List data = new List(); + for (int m = 0; m < 3; m++) + { + for (int i = 0; i < 512; i++) + { + // deterministic 'random' implementation + int n = origData[i] + m + 1; + if (n > 0xff) + n = n - 0xff; + else if (n < 0) + n = 0xff + n; - byte nByte = (byte)n; + byte nByte = (byte)n; - if (m == 0) - { - data.Add(origData[i]); - continue; - } + if (m == 0) + { + data.Add(origData[i]); + continue; + } - if (i < weakArr[0]) - { - data.Add(origData[i]); - } - - else if (weakArr[1] > 0) - { - data.Add(nByte); - weakArr[1]--; - } - - else - { - data.Add(origData[i]); - } - } - } + if (i < weakArr[0]) + { + data.Add(origData[i]); + } - sec.SectorData = data.ToArray(); - sec.ActualDataByteLength = data.Count(); - sec.ContainsMultipleWeakSectors = true; - } - } - else if (DetectAlkatraz(ref weakArr)) - { - Protection = ProtectionType.Alkatraz; - } - else if (DetectPaulOwens(ref weakArr)) - { - Protection = ProtectionType.PaulOwens; - } - else if (DetectHexagon(ref weakArr)) - { - Protection = ProtectionType.Hexagon; - } - else if (DetectShadowOfTheBeast()) - { - Protection = ProtectionType.ShadowOfTheBeast; - } - } + else if (weakArr[1] > 0) + { + data.Add(nByte); + weakArr[1]--; + } - /// - /// Detection routine for shadow of the beast game - /// Still cannot get this to work, but at least the game is detected - /// - public bool DetectShadowOfTheBeast() - { - if (DiskTracks[0].Sectors.Length != 9) - return false; + else + { + data.Add(origData[i]); + } + } + } - var zeroSecs = DiskTracks[0].Sectors; - if (zeroSecs[0].SectorID != 65 || - zeroSecs[1].SectorID != 66 || - zeroSecs[2].SectorID != 67 || - zeroSecs[3].SectorID != 68 || - zeroSecs[4].SectorID != 69 || - zeroSecs[5].SectorID != 70 || - zeroSecs[6].SectorID != 71 || - zeroSecs[7].SectorID != 72 || - zeroSecs[8].SectorID != 73) - return false; + sec.SectorData = data.ToArray(); + sec.ActualDataByteLength = data.Count(); + sec.ContainsMultipleWeakSectors = true; + } + } + else if (DetectAlkatraz(ref weakArr)) + { + Protection = ProtectionType.Alkatraz; + } + else if (DetectPaulOwens(ref weakArr)) + { + Protection = ProtectionType.PaulOwens; + } + else if (DetectHexagon(ref weakArr)) + { + Protection = ProtectionType.Hexagon; + } + else if (DetectShadowOfTheBeast()) + { + Protection = ProtectionType.ShadowOfTheBeast; + } + } - var oneSecs = DiskTracks[1].Sectors; + /// + /// Detection routine for shadow of the beast game + /// Still cannot get this to work, but at least the game is detected + /// + public bool DetectShadowOfTheBeast() + { + if (DiskTracks[0].Sectors.Length != 9) + return false; - if (oneSecs.Length != 8) - return false; + var zeroSecs = DiskTracks[0].Sectors; + if (zeroSecs[0].SectorID != 65 || + zeroSecs[1].SectorID != 66 || + zeroSecs[2].SectorID != 67 || + zeroSecs[3].SectorID != 68 || + zeroSecs[4].SectorID != 69 || + zeroSecs[5].SectorID != 70 || + zeroSecs[6].SectorID != 71 || + zeroSecs[7].SectorID != 72 || + zeroSecs[8].SectorID != 73) + return false; - if (oneSecs[0].SectorID != 17 || - oneSecs[1].SectorID != 18 || - oneSecs[2].SectorID != 19 || - oneSecs[3].SectorID != 20 || - oneSecs[4].SectorID != 21 || - oneSecs[5].SectorID != 22 || - oneSecs[6].SectorID != 23 || - oneSecs[7].SectorID != 24) - return false; + var oneSecs = DiskTracks[1].Sectors; - return true; - } + if (oneSecs.Length != 8) + return false; - /// - /// Detect speedlock weak sector - /// - public bool DetectSpeedlock(ref int[] weak) - { - // SPEEDLOCK NOTES (-asni 2018-05-01) - // --------------------------------- - // Speedlock is one of the more common +3 disk protections and there are a few different versions - // Usually, track 0 sector 1 (ID 2) has data CRC errors that result in certain bytes returning a different value every time they are read - // Speedlock will generally read this track a number of times during the load process - // and if the correct bytes are not different between reads, the load fails + if (oneSecs[0].SectorID != 17 || + oneSecs[1].SectorID != 18 || + oneSecs[2].SectorID != 19 || + oneSecs[3].SectorID != 20 || + oneSecs[4].SectorID != 21 || + oneSecs[5].SectorID != 22 || + oneSecs[6].SectorID != 23 || + oneSecs[7].SectorID != 24) + return false; - // always must have track 0 containing 9 sectors - if (DiskTracks[0].Sectors.Length != 9) - return false; + return true; + } - // check for SPEEDLOCK ident in sector 0 - string ident = Encoding.ASCII.GetString(DiskTracks[0].Sectors[0].SectorData, 0, DiskTracks[0].Sectors[0].SectorData.Length); - if (!ident.ToUpper().Contains("SPEEDLOCK")) - return false; + /// + /// Detect speedlock weak sector + /// + public bool DetectSpeedlock(ref int[] weak) + { + // SPEEDLOCK NOTES (-asni 2018-05-01) + // --------------------------------- + // Speedlock is one of the more common +3 disk protections and there are a few different versions + // Usually, track 0 sector 1 (ID 2) has data CRC errors that result in certain bytes returning a different value every time they are read + // Speedlock will generally read this track a number of times during the load process + // and if the correct bytes are not different between reads, the load fails - // check for correct sector 0 lengths - if (DiskTracks[0].Sectors[0].SectorSize != 2 || - DiskTracks[0].Sectors[0].SectorData.Length < 0x200) - return false; + // always must have track 0 containing 9 sectors + if (DiskTracks[0].Sectors.Length != 9) + return false; - // sector[1] (SectorID 2) contains the weak sectors - Sector sec = DiskTracks[0].Sectors[1]; + // check for SPEEDLOCK ident in sector 0 + string ident = Encoding.ASCII.GetString(DiskTracks[0].Sectors[0].SectorData, 0, DiskTracks[0].Sectors[0].SectorData.Length); + if (!ident.ToUpper().Contains("SPEEDLOCK")) + return false; - // check for correct sector 1 lengths - if (sec.SectorSize != 2 || - sec.SectorData.Length < 0x200) - return false; + // check for correct sector 0 lengths + if (DiskTracks[0].Sectors[0].SectorSize != 2 || + DiskTracks[0].Sectors[0].SectorData.Length < 0x200) + return false; - // secID 2 needs a CRC error - //if (!(sec.Status1.Bit(5) || sec.Status2.Bit(5))) - //return false; + // sector[1] (SectorID 2) contains the weak sectors + Sector sec = DiskTracks[0].Sectors[1]; - // check for filler - bool startFillerFound = true; - for (int i = 0; i < 250; i++) - { - if (sec.SectorData[i] != sec.SectorData[i + 1]) - { - startFillerFound = false; - break; - } - } + // check for correct sector 1 lengths + if (sec.SectorSize != 2 || + sec.SectorData.Length < 0x200) + return false; - if (!startFillerFound) - { - weak[0] = 0; - weak[1] = 0x200; - } - else - { - weak[0] = 0x150; - weak[1] = 0x20; - } + // secID 2 needs a CRC error + //if (!(sec.Status1.Bit(5) || sec.Status2.Bit(5))) + //return false; - return true; - } + // check for filler + bool startFillerFound = true; + for (int i = 0; i < 250; i++) + { + if (sec.SectorData[i] != sec.SectorData[i + 1]) + { + startFillerFound = false; + break; + } + } - /// - /// Detect Alkatraz - /// - public bool DetectAlkatraz(ref int[] weak) - { - try - { - var data1 = DiskTracks[0].Sectors[0].SectorData; - var data2 = DiskTracks[0].Sectors[0].SectorData.Length; - } - catch (Exception) - { - return false; - } + if (!startFillerFound) + { + weak[0] = 0; + weak[1] = 0x200; + } + else + { + weak[0] = 0x150; + weak[1] = 0x20; + } - // check for ALKATRAZ ident in sector 0 - string ident = Encoding.ASCII.GetString(DiskTracks[0].Sectors[0].SectorData, 0, DiskTracks[0].Sectors[0].SectorData.Length); - if (!ident.ToUpper().Contains("ALKATRAZ PROTECTION SYSTEM")) - return false; + return true; + } - // ALKATRAZ NOTES (-asni 2018-05-01) - // --------------------------------- - // Alkatraz protection appears to revolve around a track on the disk with 18 sectors, - // (track position is not consistent) with the sector ID info being incorrect: - // TrackID is consistent between the sectors although is usually high (233, 237 etc) - // SideID is fairly random looking but with all IDs being even - // SectorID is also fairly random looking but contains both odd and even numbers - // - // There doesnt appear to be any CRC errors in this track, but the sector size is always 1 (256 bytes) - // Each sector contains different filler byte - // Once track 0 is loaded the CPU completely reads all the sectors in this track one-by-one. - // Data transferred during execution must be correct, also result ST0, ST1 and ST2 must be 64, 128 and 0 respectively + /// + /// Detect Alkatraz + /// + public bool DetectAlkatraz(ref int[] weak) + { + try + { + var data1 = DiskTracks[0].Sectors[0].SectorData; + var data2 = DiskTracks[0].Sectors[0].SectorData.Length; + } + catch (Exception) + { + return false; + } - // Immediately following this track are a number of tracks and sectors with a DAM set. - // These are all read in sector by sector - // Again, Alkatraz appears to require that ST0, ST1, and ST2 result bytes are set to 64, 128 and 0 respectively - // (so the CM in ST2 needs to be reset) + // check for ALKATRAZ ident in sector 0 + string ident = Encoding.ASCII.GetString(DiskTracks[0].Sectors[0].SectorData, 0, DiskTracks[0].Sectors[0].SectorData.Length); + if (!ident.ToUpper().Contains("ALKATRAZ PROTECTION SYSTEM")) + return false; - return true; - } + // ALKATRAZ NOTES (-asni 2018-05-01) + // --------------------------------- + // Alkatraz protection appears to revolve around a track on the disk with 18 sectors, + // (track position is not consistent) with the sector ID info being incorrect: + // TrackID is consistent between the sectors although is usually high (233, 237 etc) + // SideID is fairly random looking but with all IDs being even + // SectorID is also fairly random looking but contains both odd and even numbers + // + // There doesnt appear to be any CRC errors in this track, but the sector size is always 1 (256 bytes) + // Each sector contains different filler byte + // Once track 0 is loaded the CPU completely reads all the sectors in this track one-by-one. + // Data transferred during execution must be correct, also result ST0, ST1 and ST2 must be 64, 128 and 0 respectively - /// - /// Detect Paul Owens - /// - public bool DetectPaulOwens(ref int[] weak) - { - try - { - var data1 = DiskTracks[0].Sectors[2].SectorData; - var data2 = DiskTracks[0].Sectors[2].SectorData.Length; - } - catch (Exception) - { - return false; - } + // Immediately following this track are a number of tracks and sectors with a DAM set. + // These are all read in sector by sector + // Again, Alkatraz appears to require that ST0, ST1, and ST2 result bytes are set to 64, 128 and 0 respectively + // (so the CM in ST2 needs to be reset) - // check for PAUL OWENS ident in sector 2 - string ident = Encoding.ASCII.GetString(DiskTracks[0].Sectors[2].SectorData, 0, DiskTracks[0].Sectors[2].SectorData.Length); - if (!ident.ToUpper().Contains("PAUL OWENS")) - return false; + return true; + } - // Paul Owens Disk Protection Notes (-asni 2018-05-01) - // --------------------------------------------------- - // - // This scheme looks a little similar to Alkatraz with incorrect sector ID info in many places - // and deleted address marks (although these do not seem to show the strict relience on removing the CM mark from ST2 result that Alkatraz does) - // There are also data CRC errors but these dont look to be read more than once/checked for changes during load - // Main identifiers: - // - // * There are more than 10 cylinders - // * Cylinder 1 has no sector data - // * The sector ID infomation in most cases contains incorrect track IDs - // * Tracks 0 (boot) and 5 appear to be pretty much the only tracks that do not have incorrect sector ID marks + /// + /// Detect Paul Owens + /// + public bool DetectPaulOwens(ref int[] weak) + { + try + { + var data1 = DiskTracks[0].Sectors[2].SectorData; + var data2 = DiskTracks[0].Sectors[2].SectorData.Length; + } + catch (Exception) + { + return false; + } - return true; - } + // check for PAUL OWENS ident in sector 2 + string ident = Encoding.ASCII.GetString(DiskTracks[0].Sectors[2].SectorData, 0, DiskTracks[0].Sectors[2].SectorData.Length); + if (!ident.ToUpper().Contains("PAUL OWENS")) + return false; - /// - /// Detect Hexagon copy protection - /// - public bool DetectHexagon(ref int[] weak) - { - try - { - var data1 = DiskTracks[0].Sectors.Length; - var data2 = DiskTracks[0].Sectors[8].ActualDataByteLength; - var data3 = DiskTracks[0].Sectors[8].SectorData; - var data4 = DiskTracks[0].Sectors[8].SectorData.Length; - var data5 = DiskTracks[1].Sectors[0]; - } - catch (Exception) - { - return false; - } + // Paul Owens Disk Protection Notes (-asni 2018-05-01) + // --------------------------------------------------- + // + // This scheme looks a little similar to Alkatraz with incorrect sector ID info in many places + // and deleted address marks (although these do not seem to show the strict relience on removing the CM mark from ST2 result that Alkatraz does) + // There are also data CRC errors but these dont look to be read more than once/checked for changes during load + // Main identifiers: + // + // * There are more than 10 cylinders + // * Cylinder 1 has no sector data + // * The sector ID infomation in most cases contains incorrect track IDs + // * Tracks 0 (boot) and 5 appear to be pretty much the only tracks that do not have incorrect sector ID marks - if (DiskTracks[0].Sectors.Length != 10 || DiskTracks[0].Sectors[8].ActualDataByteLength != 512) - return false; + return true; + } - // check for Hexagon ident in sector 8 - string ident = Encoding.ASCII.GetString(DiskTracks[0].Sectors[8].SectorData, 0, DiskTracks[0].Sectors[8].SectorData.Length); - if (ident.ToUpper().Contains("GON DISK PROT")) - return true; + /// + /// Detect Hexagon copy protection + /// + public bool DetectHexagon(ref int[] weak) + { + try + { + var data1 = DiskTracks[0].Sectors.Length; + var data2 = DiskTracks[0].Sectors[8].ActualDataByteLength; + var data3 = DiskTracks[0].Sectors[8].SectorData; + var data4 = DiskTracks[0].Sectors[8].SectorData.Length; + var data5 = DiskTracks[1].Sectors[0]; + } + catch (Exception) + { + return false; + } - // hexagon protection may not be labelled as such - var track = DiskTracks[1]; - var sector = track.Sectors[0]; + if (DiskTracks[0].Sectors.Length != 10 || DiskTracks[0].Sectors[8].ActualDataByteLength != 512) + return false; - if (sector.SectorSize == 6 && sector.Status1 == 0x20 && sector.Status2 == 0x60) - { - if (track.Sectors.Length == 1) - return true; - } + // check for Hexagon ident in sector 8 + string ident = Encoding.ASCII.GetString(DiskTracks[0].Sectors[8].SectorData, 0, DiskTracks[0].Sectors[8].SectorData.Length); + if (ident.ToUpper().Contains("GON DISK PROT")) + return true; + + // hexagon protection may not be labelled as such + var track = DiskTracks[1]; + var sector = track.Sectors[0]; + + if (sector.SectorSize == 6 && sector.Status1 == 0x20 && sector.Status2 == 0x60) + { + if (track.Sectors.Length == 1) + return true; + } - // Hexagon Copy Protection Notes (-asni 2018-05-01) - // --------------------------------------------------- - // - // + // Hexagon Copy Protection Notes (-asni 2018-05-01) + // --------------------------------------------------- + // + // - return false; - } + return false; + } - /* + /* /// /// Should be run at the end of the ParseDisk process /// If speedlock is detected the flag is set in the disk image @@ -501,193 +501,193 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC } */ - /// - /// Returns the track count for the disk - /// - public virtual int GetTrackCount() - { - return DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; - } + /// + /// Returns the track count for the disk + /// + public virtual int GetTrackCount() + { + return DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; + } - /// - /// Reads the current sector ID info - /// - public virtual CHRN ReadID(byte trackIndex, byte side, int sectorIndex) - { - if (side != 0) - return null; + /// + /// Reads the current sector ID info + /// + public virtual CHRN ReadID(byte trackIndex, byte side, int sectorIndex) + { + if (side != 0) + return null; - if (DiskTracks.Length <= trackIndex || trackIndex < 0) - { - // invalid track - wrap around - trackIndex = 0; - } + if (DiskTracks.Length <= trackIndex || trackIndex < 0) + { + // invalid track - wrap around + trackIndex = 0; + } - var track = DiskTracks[trackIndex]; + var track = DiskTracks[trackIndex]; - if (track.NumberOfSectors <= sectorIndex) - { - // invalid sector - wrap around - sectorIndex = 0; - } + if (track.NumberOfSectors <= sectorIndex) + { + // invalid sector - wrap around + sectorIndex = 0; + } - var sector = track.Sectors[sectorIndex]; + var sector = track.Sectors[sectorIndex]; - CHRN chrn = new CHRN(); + CHRN chrn = new CHRN(); - chrn.C = sector.TrackNumber; - chrn.H = sector.SideNumber; - chrn.R = sector.SectorID; + chrn.C = sector.TrackNumber; + chrn.H = sector.SideNumber; + chrn.R = sector.SectorID; - // wrap around for N > 7 - if (sector.SectorSize > 7) - { - chrn.N = (byte)(sector.SectorSize - 7); - } - else if (sector.SectorSize < 0) - { - chrn.N = 0; - } - else - { - chrn.N = sector.SectorSize; - } + // wrap around for N > 7 + if (sector.SectorSize > 7) + { + chrn.N = (byte)(sector.SectorSize - 7); + } + else if (sector.SectorSize < 0) + { + chrn.N = 0; + } + else + { + chrn.N = sector.SectorSize; + } - chrn.Flag1 = (byte)(sector.Status1 & 0x25); - chrn.Flag2 = (byte)(sector.Status2 & 0x61); + chrn.Flag1 = (byte)(sector.Status1 & 0x25); + chrn.Flag2 = (byte)(sector.Status2 & 0x61); - chrn.DataBytes = sector.ActualData; + chrn.DataBytes = sector.ActualData; - return chrn; - } + return chrn; + } - /// - /// State serialization routines - /// - public abstract void SyncState(Serializer ser); + /// + /// State serialization routines + /// + public abstract void SyncState(Serializer ser); - public class Header - { - public string DiskIdent { get; set; } - public string DiskCreatorString { get; set; } - public byte NumberOfTracks { get; set; } - public byte NumberOfSides { get; set; } - public int[] TrackSizes { get; set; } - } + public class Header + { + public string DiskIdent { get; set; } + public string DiskCreatorString { get; set; } + public byte NumberOfTracks { get; set; } + public byte NumberOfSides { get; set; } + public int[] TrackSizes { get; set; } + } - public class Track - { - public string TrackIdent { get; set; } - public byte TrackNumber { get; set; } - public byte SideNumber { get; set; } - public byte DataRate { get; set; } - public byte RecordingMode { get; set; } - public byte SectorSize { get; set; } - public byte NumberOfSectors { get; set; } - public byte GAP3Length { get; set; } - public byte FillerByte { get; set; } - public Sector[] Sectors { get; set; } + public class Track + { + public string TrackIdent { get; set; } + public byte TrackNumber { get; set; } + public byte SideNumber { get; set; } + public byte DataRate { get; set; } + public byte RecordingMode { get; set; } + public byte SectorSize { get; set; } + public byte NumberOfSectors { get; set; } + public byte GAP3Length { get; set; } + public byte FillerByte { get; set; } + public Sector[] Sectors { get; set; } - /// - /// Presents a contiguous byte array of all sector data for this track - /// (including any multiple weak/random data) - /// - public byte[] TrackSectorData - { - get - { - List list = new List(); + /// + /// Presents a contiguous byte array of all sector data for this track + /// (including any multiple weak/random data) + /// + public byte[] TrackSectorData + { + get + { + List list = new List(); - foreach (var sec in Sectors) - { - list.AddRange(sec.ActualData); - } + foreach (var sec in Sectors) + { + list.AddRange(sec.ActualData); + } - return list.ToArray(); - } - } - } + return list.ToArray(); + } + } + } - public class Sector - { - public byte TrackNumber { get; set; } - public byte SideNumber { get; set; } - public byte SectorID { get; set; } - public byte SectorSize { get; set; } - public byte Status1 { get; set; } - public byte Status2 { get; set; } - public int ActualDataByteLength { get; set; } - public byte[] SectorData { get; set; } - public bool ContainsMultipleWeakSectors { get; set; } + public class Sector + { + public byte TrackNumber { get; set; } + public byte SideNumber { get; set; } + public byte SectorID { get; set; } + public byte SectorSize { get; set; } + public byte Status1 { get; set; } + public byte Status2 { get; set; } + public int ActualDataByteLength { get; set; } + public byte[] SectorData { get; set; } + public bool ContainsMultipleWeakSectors { get; set; } - public int WeakReadIndex = 0; + public int WeakReadIndex = 0; - public void SectorReadCompleted() - { - if (ContainsMultipleWeakSectors) - WeakReadIndex++; - } + public void SectorReadCompleted() + { + if (ContainsMultipleWeakSectors) + WeakReadIndex++; + } - public int DataLen - { - get - { - if (!ContainsMultipleWeakSectors) - { - return ActualDataByteLength; - } - else - { - return ActualDataByteLength / (ActualDataByteLength / (0x80 << SectorSize)); - } - } - } + public int DataLen + { + get + { + if (!ContainsMultipleWeakSectors) + { + return ActualDataByteLength; + } + else + { + return ActualDataByteLength / (ActualDataByteLength / (0x80 << SectorSize)); + } + } + } - public int RandSecCounter = 0; + public int RandSecCounter = 0; - public byte[] ActualData - { - get - { - if (!ContainsMultipleWeakSectors) - { - // check whether filler bytes are needed - int size = 0x80 << SectorSize; - if (size > ActualDataByteLength) - { - List l = new List(); - l.AddRange(SectorData); - for (int i = 0; i < size - ActualDataByteLength; i++) - { - //l.Add(SectorData[i]); - l.Add(SectorData.Last()); - } + public byte[] ActualData + { + get + { + if (!ContainsMultipleWeakSectors) + { + // check whether filler bytes are needed + int size = 0x80 << SectorSize; + if (size > ActualDataByteLength) + { + List l = new List(); + l.AddRange(SectorData); + for (int i = 0; i < size - ActualDataByteLength; i++) + { + //l.Add(SectorData[i]); + l.Add(SectorData.Last()); + } - return l.ToArray(); - } - else - { - return SectorData; - } - } - else - { - // weak read neccessary - int copies = ActualDataByteLength / (0x80 << SectorSize); + return l.ToArray(); + } + else + { + return SectorData; + } + } + else + { + // weak read neccessary + int copies = ActualDataByteLength / (0x80 << SectorSize); - // handle index wrap-around - if (WeakReadIndex > copies - 1) - WeakReadIndex = copies - 1; + // handle index wrap-around + if (WeakReadIndex > copies - 1) + WeakReadIndex = copies - 1; - // get the sector data based on the current weakreadindex - int step = WeakReadIndex * (0x80 << SectorSize); - byte[] res = new byte[(0x80 << SectorSize)]; - Array.Copy(SectorData, step, res, 0, 0x80 << SectorSize); - return res; + // get the sector data based on the current weakreadindex + int step = WeakReadIndex * (0x80 << SectorSize); + byte[] res = new byte[(0x80 << SectorSize)]; + Array.Copy(SectorData, step, res, 0, 0x80 << SectorSize); + return res; - /* + /* int copies = ActualDataByteLength / (0x80 << SectorSize); Random rnd = new Random(); int r = rnd.Next(0, copies - 1); @@ -696,40 +696,40 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC Array.Copy(SectorData, step, res, 0, 0x80 << SectorSize); return res; */ - } - } - } + } + } + } - public CHRN SectorIDInfo - { - get - { - return new CHRN - { - C = TrackNumber, - H = SideNumber, - R = SectorID, - N = SectorSize, - Flag1 = Status1, - Flag2 = Status2, - }; - } - } - } - } + public CHRN SectorIDInfo + { + get + { + return new CHRN + { + C = TrackNumber, + H = SideNumber, + R = SectorID, + N = SectorSize, + Flag1 = Status1, + Flag2 = Status2, + }; + } + } + } + } - /// - /// Defines the type of speedlock detection found - /// - public enum ProtectionType - { - None, - Speedlock, - Alkatraz, - Hexagon, - Frontier, - PaulOwens, - ShadowOfTheBeast - } + /// + /// Defines the type of speedlock detection found + /// + public enum ProtectionType + { + None, + Speedlock, + Alkatraz, + Hexagon, + Frontier, + PaulOwens, + ShadowOfTheBeast + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/MediaConverter.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/MediaConverter.cs index 435b067a90..effd75ba8a 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/MediaConverter.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/MediaConverter.cs @@ -4,132 +4,132 @@ using System.IO.Compression; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Abtract class that represents all Media Converters - /// - public abstract class MediaConverter - { - /// - /// The type of serializer - /// - public abstract MediaConverterType FormatType { get; } + /// + /// Abtract class that represents all Media Converters + /// + public abstract class MediaConverter + { + /// + /// The type of serializer + /// + public abstract MediaConverterType FormatType { get; } - /// - /// Signs whether this class can be used to read the data format - /// - public virtual bool IsReader - { - get - { - return false; - } - } + /// + /// Signs whether this class can be used to read the data format + /// + public virtual bool IsReader + { + get + { + return false; + } + } - /// - /// Signs whether this class can be used to write the data format - /// - public virtual bool IsWriter - { - get - { - return false; - } - } + /// + /// Signs whether this class can be used to write the data format + /// + public virtual bool IsWriter + { + get + { + return false; + } + } - /// - /// Serialization method - /// - public virtual void Read(byte[] data) - { - throw new NotImplementedException(this.GetType().ToString() + - "Read operation is not implemented for this converter"); - } + /// + /// Serialization method + /// + public virtual void Read(byte[] data) + { + throw new NotImplementedException(this.GetType().ToString() + + "Read operation is not implemented for this converter"); + } - /// - /// DeSerialization method - /// - public virtual void Write(byte[] data) - { - throw new NotImplementedException(this.GetType().ToString() + - "Write operation is not implemented for this converter"); - } + /// + /// DeSerialization method + /// + public virtual void Write(byte[] data) + { + throw new NotImplementedException(this.GetType().ToString() + + "Write operation is not implemented for this converter"); + } - /// - /// Serializer does a quick check, returns TRUE if file is detected as this type - /// - public virtual bool CheckType(byte[] data) - { - throw new NotImplementedException(this.GetType().ToString() + - "Check type operation is not implemented for this converter"); - } + /// + /// Serializer does a quick check, returns TRUE if file is detected as this type + /// + public virtual bool CheckType(byte[] data) + { + throw new NotImplementedException(this.GetType().ToString() + + "Check type operation is not implemented for this converter"); + } - #region Static Tools + #region Static Tools - /// - /// Converts an int32 value into a byte array - /// - public static byte[] GetBytes(int value) - { - byte[] buf = new byte[4]; - buf[0] = (byte)value; - buf[1] = (byte)(value >> 8); - buf[2] = (byte)(value >> 16); - buf[3] = (byte)(value >> 24); - return buf; - } + /// + /// Converts an int32 value into a byte array + /// + public static byte[] GetBytes(int value) + { + byte[] buf = new byte[4]; + buf[0] = (byte)value; + buf[1] = (byte)(value >> 8); + buf[2] = (byte)(value >> 16); + buf[3] = (byte)(value >> 24); + return buf; + } - /// - /// Returns an int32 from a byte array based on offset - /// - public static int GetInt32(byte[] buf, int offsetIndex) - { - return buf[offsetIndex] | buf[offsetIndex + 1] << 8 | buf[offsetIndex + 2] << 16 | buf[offsetIndex + 3] << 24; - } + /// + /// Returns an int32 from a byte array based on offset + /// + public static int GetInt32(byte[] buf, int offsetIndex) + { + return buf[offsetIndex] | buf[offsetIndex + 1] << 8 | buf[offsetIndex + 2] << 16 | buf[offsetIndex + 3] << 24; + } - /// - /// Returns an uint16 from a byte array based on offset - /// - public static ushort GetWordValue(byte[] buf, int offsetIndex) - { - return (ushort)(buf[offsetIndex] | buf[offsetIndex + 1] << 8); - } + /// + /// Returns an uint16 from a byte array based on offset + /// + public static ushort GetWordValue(byte[] buf, int offsetIndex) + { + return (ushort)(buf[offsetIndex] | buf[offsetIndex + 1] << 8); + } - /// - /// Updates a byte array with a uint16 value based on offset - /// - public static void SetWordValue(byte[] buf, int offsetIndex, ushort value) - { - buf[offsetIndex] = (byte)value; - buf[offsetIndex + 1] = (byte)(value >> 8); - } + /// + /// Updates a byte array with a uint16 value based on offset + /// + public static void SetWordValue(byte[] buf, int offsetIndex, ushort value) + { + buf[offsetIndex] = (byte)value; + buf[offsetIndex + 1] = (byte)(value >> 8); + } - /// - /// Takes a PauseInMilliseconds value and returns the value in T-States - /// - public static int TranslatePause(int pauseInMS) - { - // t-states per millisecond - var tspms = (69888 * 50) / 1000; - // get value - int res = pauseInMS * tspms; + /// + /// Takes a PauseInMilliseconds value and returns the value in T-States + /// + public static int TranslatePause(int pauseInMS) + { + // t-states per millisecond + var tspms = (69888 * 50) / 1000; + // get value + int res = pauseInMS * tspms; - return res; - } + return res; + } - /// - /// Decompresses a byte array that is Z-RLE compressed - /// - public static void DecompressZRLE(byte[] sourceBuffer, ref byte[] destBuffer) - { - MemoryStream stream = new MemoryStream(); - stream.Write(sourceBuffer, 0, sourceBuffer.Length); - stream.Position = 0; - stream.ReadByte(); - stream.ReadByte(); - DeflateStream ds = new DeflateStream(stream, CompressionMode.Decompress, false); - ds.Read(destBuffer, 0, destBuffer.Length); - } + /// + /// Decompresses a byte array that is Z-RLE compressed + /// + public static void DecompressZRLE(byte[] sourceBuffer, ref byte[] destBuffer) + { + MemoryStream stream = new MemoryStream(); + stream.Write(sourceBuffer, 0, sourceBuffer.Length); + stream.Position = 0; + stream.ReadByte(); + stream.ReadByte(); + DeflateStream ds = new DeflateStream(stream, CompressionMode.Decompress, false); + ds.Read(destBuffer, 0, destBuffer.Length); + } - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/MediaConverterType.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/MediaConverterType.cs index 08f5f73250..218a11a72a 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/MediaConverterType.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/MediaConverterType.cs @@ -1,13 +1,13 @@  namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Represents the different types of media serializer avaiable - /// - public enum MediaConverterType - { - NONE, - CDT, - DSK - } + /// + /// Represents the different types of media serializer avaiable + /// + public enum MediaConverterType + { + NONE, + CDT, + DSK + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/CDT/CdtConverter.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/CDT/CdtConverter.cs index f8c5a62b68..a501bd0d07 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/CDT/CdtConverter.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/CDT/CdtConverter.cs @@ -5,112 +5,112 @@ using System.Text; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Reponsible for TZX format serializaton - /// - public class CdtConverter : MediaConverter - { - /// - /// The type of serializer - /// - private MediaConverterType _formatType = MediaConverterType.CDT; - public override MediaConverterType FormatType - { - get - { - return _formatType; - } - } + /// + /// Reponsible for TZX format serializaton + /// + public class CdtConverter : MediaConverter + { + /// + /// The type of serializer + /// + private MediaConverterType _formatType = MediaConverterType.CDT; + public override MediaConverterType FormatType + { + get + { + return _formatType; + } + } - /// - /// Signs whether this class can be used to read the data format - /// - public override bool IsReader { get { return true; } } + /// + /// Signs whether this class can be used to read the data format + /// + public override bool IsReader { get { return true; } } - /// - /// Signs whether this class can be used to write the data format - /// - public override bool IsWriter { get { return false; } } + /// + /// Signs whether this class can be used to write the data format + /// + public override bool IsWriter { get { return false; } } - /// - /// Working list of generated tape data blocks - /// - private List _blocks = new List(); + /// + /// Working list of generated tape data blocks + /// + private List _blocks = new List(); - /// - /// Position counter - /// - private int _position = 0; + /// + /// Position counter + /// + private int _position = 0; - /// - /// Object to keep track of loops - this assumes there is only one loop at a time - /// - private List> _loopCounter = new List>(); + /// + /// Object to keep track of loops - this assumes there is only one loop at a time + /// + private List> _loopCounter = new List>(); - #region Construction + #region Construction - private DatacorderDevice _datacorder; + private DatacorderDevice _datacorder; - public CdtConverter(DatacorderDevice _tapeDevice) - { - _datacorder = _tapeDevice; - } + public CdtConverter(DatacorderDevice _tapeDevice) + { + _datacorder = _tapeDevice; + } - #endregion + #endregion - /// - /// CDT format is essentially exactly the same as the TZX format - /// However all timings are based on spectrum timings (3.5Mhz) - /// so need to be adjusted for the CPC (4Mhz) - /// - private TapeDataBlock ConvertClock(TapeDataBlock db) - { - TapeDataBlock tb = new TapeDataBlock(); - tb.BlockDescription = db.BlockDescription; - tb.BlockID = db.BlockID; - tb.Command = db.Command; - tb.DataPeriods = new List(); - tb.InitialPulseLevel = db.InitialPulseLevel; - tb.MetaData = db.MetaData; - tb.PauseInMS = db.PauseInMS; + /// + /// CDT format is essentially exactly the same as the TZX format + /// However all timings are based on spectrum timings (3.5Mhz) + /// so need to be adjusted for the CPC (4Mhz) + /// + private TapeDataBlock ConvertClock(TapeDataBlock db) + { + TapeDataBlock tb = new TapeDataBlock(); + tb.BlockDescription = db.BlockDescription; + tb.BlockID = db.BlockID; + tb.Command = db.Command; + tb.DataPeriods = new List(); + tb.InitialPulseLevel = db.InitialPulseLevel; + tb.MetaData = db.MetaData; + tb.PauseInMS = db.PauseInMS; - double multiplier = (double)4 / (double)3.5; - //double cycleScale = ((40 << 16) / 35); - double origPeriods = db.DataPeriods.Count(); + double multiplier = (double)4 / (double)3.5; + //double cycleScale = ((40 << 16) / 35); + double origPeriods = db.DataPeriods.Count(); - for (int i = 0; i < origPeriods; i++) - { - int orig = db.DataPeriods[i]; - int np = (int)((double)orig * multiplier); - int nnp = ClockAdjust(orig); - tb.DataPeriods.Add(np); - } + for (int i = 0; i < origPeriods; i++) + { + int orig = db.DataPeriods[i]; + int np = (int)((double)orig * multiplier); + int nnp = ClockAdjust(orig); + tb.DataPeriods.Add(np); + } - return tb; - } + return tb; + } - private int ClockAdjust(int val) - { - int cycleScale = ((40 << 16) / 35); - int res = (val * cycleScale) >> 16; - return res; - } + private int ClockAdjust(int val) + { + int cycleScale = ((40 << 16) / 35); + int res = (val * cycleScale) >> 16; + return res; + } - private int Scale => ((40 << 16) / 35); + private int Scale => ((40 << 16) / 35); - private int Adjust(int val) - { - return (int)((val * CLOCK_MULTIPLIER)); - } + private int Adjust(int val) + { + return (int)((val * CLOCK_MULTIPLIER)); + } - private const double CLOCK_MULTIPLIER = 1.142857; + private const double CLOCK_MULTIPLIER = 1.142857; - /// - /// Returns TRUE if tzx header is detected - /// - public override bool CheckType(byte[] data) - { - /* + /// + /// Returns TRUE if tzx header is detected + /// + public override bool CheckType(byte[] data) + { + /* // TZX Header length: 10 bytes Offset Value Type Description @@ -120,74 +120,74 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC 0x09 20 BYTE TZX minor revision number */ - // check whether this is a valid tzx format file by looking at the identifier in the header - // (first 7 bytes of the file) - string ident = Encoding.ASCII.GetString(data, 0, 7); - // and 'end of text' marker - byte eotm = data[7]; + // check whether this is a valid tzx format file by looking at the identifier in the header + // (first 7 bytes of the file) + string ident = Encoding.ASCII.GetString(data, 0, 7); + // and 'end of text' marker + byte eotm = data[7]; - // version info - int majorVer = data[8]; - int minorVer = data[9]; + // version info + int majorVer = data[8]; + int minorVer = data[9]; - if (ident != "ZXTape!" || eotm != 0x1A) - { - // this is not a valid TZX format file - return false; - } - else - { - return true; - } - } + if (ident != "ZXTape!" || eotm != 0x1A) + { + // this is not a valid TZX format file + return false; + } + else + { + return true; + } + } - /// - /// DeSerialization method - /// - public override void Read(byte[] data) - { - // clear existing tape blocks - _datacorder.DataBlocks.Clear(); + /// + /// DeSerialization method + /// + public override void Read(byte[] data) + { + // clear existing tape blocks + _datacorder.DataBlocks.Clear(); -/* - // TZX Header - length: 10 bytes - Offset Value Type Description - 0x00 "ZXTape!" ASCII[7] TZX signature - 0x07 0x1A BYTE End of text file marker - 0x08 1 BYTE TZX major revision number - 0x09 20 BYTE TZX minor revision number -*/ + /* + // TZX Header + length: 10 bytes + Offset Value Type Description + 0x00 "ZXTape!" ASCII[7] TZX signature + 0x07 0x1A BYTE End of text file marker + 0x08 1 BYTE TZX major revision number + 0x09 20 BYTE TZX minor revision number + */ - // check whether this is a valid tzx format file by looking at the identifier in the header - // (first 7 bytes of the file) - string ident = Encoding.ASCII.GetString(data, 0, 7); - // and 'end of text' marker - byte eotm = data[7]; + // check whether this is a valid tzx format file by looking at the identifier in the header + // (first 7 bytes of the file) + string ident = Encoding.ASCII.GetString(data, 0, 7); + // and 'end of text' marker + byte eotm = data[7]; - // version info - int majorVer = data[8]; - int minorVer = data[9]; + // version info + int majorVer = data[8]; + int minorVer = data[9]; - if (ident != "ZXTape!" || eotm != 0x1A) - { - // this is not a valid TZX format file - throw new Exception(this.GetType().ToString() + - "This is not a valid TZX format file"); - } + if (ident != "ZXTape!" || eotm != 0x1A) + { + // this is not a valid TZX format file + throw new Exception(this.GetType().ToString() + + "This is not a valid TZX format file"); + } - // iterate through each block - _position = 10; - while (_position < data.Length) - { - // block ID is the first byte in a new block - int ID = data[_position++]; + // iterate through each block + _position = 10; + while (_position < data.Length) + { + // block ID is the first byte in a new block + int ID = data[_position++]; - // process the data - ProcessBlock(data, ID); - } + // process the data + ProcessBlock(data, ID); + } - /* + /* // convert for Amstrad CPC List newBlocks = new List(); for (int i = 0; i < _datacorder.DataBlocks.Count(); i++) @@ -198,1432 +198,1432 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC _datacorder.DataBlocks.Clear(); _datacorder.DataBlocks.AddRange(newBlocks); */ - } - - /// - /// Processes a TZX block - /// - private void ProcessBlock(byte[] data, int id) - { - // process based on detected block ID - switch (id) - { - // ID 10 - Standard Speed Data Block - case 0x10: - ProcessBlockID10(data); - break; - // ID 11 - Turbo Speed Data Block - case 0x11: - ProcessBlockID11(data); - break; - // ID 12 - Pure Tone - case 0x12: - ProcessBlockID12(data); - break; - // ID 13 - Pulse sequence - case 0x13: - ProcessBlockID13(data); - break; - // ID 14 - Pure Data Block - case 0x14: - ProcessBlockID14(data); - break; - // ID 15 - Direct Recording - case 0x15: - ProcessBlockID15(data); - break; - // ID 18 - CSW Recording - case 0x18: - ProcessBlockID18(data); - break; - // ID 19 - Generalized Data Block - case 0x19: - ProcessBlockID19(data); - break; - // ID 20 - Pause (silence) or 'Stop the Tape' command - case 0x20: - ProcessBlockID20(data); - break; - // ID 21 - Group start - case 0x21: - ProcessBlockID21(data); - break; - // ID 22 - Group end - case 0x22: - ProcessBlockID22(data); - break; - // ID 23 - Jump to block - case 0x23: - ProcessBlockID23(data); - break; - // ID 24 - Loop start - case 0x24: - ProcessBlockID24(data); - break; - // ID 25 - Loop end - case 0x25: - ProcessBlockID25(data); - break; - // ID 26 - Call sequence - case 0x26: - ProcessBlockID26(data); - break; - // ID 27 - Return from sequence - case 0x27: - ProcessBlockID27(data); - break; - // ID 28 - Select block - case 0x28: - ProcessBlockID28(data); - break; - // ID 2A - Stop the tape if in 48K mode - case 0x2A: - ProcessBlockID2A(data); - break; - // ID 2B - Set signal level - case 0x2B: - ProcessBlockID2B(data); - break; - // ID 30 - Text description - case 0x30: - ProcessBlockID30(data); - break; - // ID 31 - Message block - case 0x31: - ProcessBlockID31(data); - break; - // ID 32 - Archive info - case 0x32: - ProcessBlockID32(data); - break; - // ID 33 - Hardware type - case 0x33: - ProcessBlockID33(data); - break; - // ID 35 - Custom info block - case 0x35: - ProcessBlockID35(data); - break; - // ID 5A - "Glue" block - case 0x5A: - ProcessBlockID5A(data); - break; - - #region Depreciated Blocks - - // ID 16 - C64 ROM Type Data Block - case 0x16: - ProcessBlockID16(data); - break; - // ID 17 - C64 Turbo Tape Data Block - case 0x17: - ProcessBlockID17(data); - break; - // ID 34 - Emulation info - case 0x34: - ProcessBlockID34(data); - break; - // ID 40 - Snapshot block - case 0x40: - ProcessBlockID40(data); - break; - - #endregion - - default: - ProcessUnidentifiedBlock(data); - break; - } - } - - #region TZX Block Processors - - #region ID 10 - Standard Speed Data Block -/* length: [02,03]+04 - Offset Value Type Description - 0x00 - WORD Pause after this block (ms.) {1000} - 0x02 N WORD Length of data that follow - 0x04 - BYTE[N] Data as in .TAP files - - This block must be replayed with the standard Spectrum ROM timing values - see the values in - curly brackets in block ID 11. The pilot tone consists in 8063 pulses if the first data byte - (flag byte) is < 128, 3223 otherwise. This block can be used for the ROM loading routines AND - for custom loading routines that use the same timings as ROM ones do. */ - private void ProcessBlockID10(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x10; - t.BlockDescription = BlockType.Standard_Speed_Data_Block; - t.DataPeriods = new List(); - - int pauseLen = GetWordValue(data, _position); - if (pauseLen == 0) - pauseLen = 1000; - - t.PauseInMS = pauseLen; - - int blockLen = GetWordValue(data, _position + 2); - - _position += 4; - - byte[] tmp = new byte[blockLen]; - tmp = data.Skip(_position).Take(blockLen).ToArray(); - - var t2 = DecodeDataBlock(t, tmp, DataBlockType.Standard, pauseLen); - - // add the block - _datacorder.DataBlocks.Add(t2); - - // advance the position to the next block - _position += blockLen; - - // generate PAUSE block - CreatePauseBlock(_datacorder.DataBlocks.Last()); - } - #endregion - - #region ID 11 - Turbo Speed Data Block -/* length: [0F,10,11]+12 - Offset Value Type Description - 0x00 - WORD Length of PILOT pulse {2168} - 0x02 - WORD Length of SYNC first pulse {667} - 0x04 - WORD Length of SYNC second pulse {735} - 0x06 - WORD Length of ZERO bit pulse {855} - 0x08 - WORD Length of ONE bit pulse {1710} - 0x0A - WORD Length of PILOT tone (number of pulses) {8063 header (flag<128), 3223 data (flag>=128)} - 0x0C - BYTE Used bits in the last byte (other bits should be 0) {8} - (e.g. if this is 6, then the bits used (x) in the last byte are: xxxxxx00, - where MSb is the leftmost bit, LSb is the rightmost bit) - 0x0D - WORD Pause after this block (ms.) {1000} - 0x0F N BYTE[3] Length of data that follow - 0x12 - BYTE[N] Data as in .TAP files - - This block is very similar to the normal TAP block but with some additional info on the timings and other important - differences. The same tape encoding is used as for the standard speed data block. If a block should use some non-standard - sync or pilot tones (i.e. all sorts of protection schemes) then use the next three blocks to describe it.*/ - private void ProcessBlockID11(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x11; - t.BlockDescription = BlockType.Turbo_Speed_Data_Block; - t.DataPeriods = new List(); - - int pilotPL = GetWordValue(data, _position); - int sync1P = GetWordValue(data, _position + 2); - int sync2P = GetWordValue(data, _position + 4); - int bit0P = GetWordValue(data, _position + 6); - int bit1P = GetWordValue(data, _position + 8); - int pilotTL = GetWordValue(data, _position + 10); - int bitinbyte = data[_position + 12]; - int pause = GetWordValue(data, _position + 13); - - - int blockLen = 0xFFFFFF & GetInt32(data, _position + 0x0F); - - byte[] bLenArr = data.Skip(_position + 0x0F).Take(3).ToArray(); - - _position += 0x12; - - byte[] tmp = new byte[blockLen]; - tmp = data.Skip(_position).Take(blockLen).ToArray(); - - var t2 = DecodeDataBlock(t, tmp, DataBlockType.Turbo, pause, pilotTL, pilotPL, sync1P, sync2P, bit0P, bit1P, bitinbyte); - - t.PauseInMS = pause; - - // add the block - _datacorder.DataBlocks.Add(t2); - - // advance the position to the next block - _position += blockLen; - - // generate PAUSE block - CreatePauseBlock(_datacorder.DataBlocks.Last()); - } - #endregion - - #region ID 12 - Pure Tone -/* length: 04 - Offset Value Type Description - 0x00 - WORD Length of one pulse in T-states - 0x02 - WORD Number of pulses - - This will produce a tone which is basically the same as the pilot tone in the ID 10, ID 11 blocks. You can define how - long the pulse is and how many pulses are in the tone. */ - private void ProcessBlockID12(byte[] data) - { - int blockLen = 4; - - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x12; - t.BlockDescription = BlockType.Pure_Tone; - t.DataPeriods = new List(); - t.PauseInMS = 0; - - // get values - int pulseLength = GetWordValue(data, _position); - int pulseCount = GetWordValue(data, _position + 2); - - t.AddMetaData(BlockDescriptorTitle.Pulse_Length, pulseLength.ToString() + " T-States"); - t.AddMetaData(BlockDescriptorTitle.Pulse_Count, pulseCount.ToString()); - - // build period information - for (int p = 0; p < pulseCount; p++) - { - t.DataPeriods.Add(pulseLength); - } - - // add the block - _datacorder.DataBlocks.Add(t); - - // advance the position to the next block - _position += blockLen; - } - #endregion - - #region ID 13 - Pulse sequence -/* length: [00]*02+01 - Offset Value Type Description - 0x00 N BYTE Number of pulses - 0x01 - WORD[N] Pulses' lengths - - This will produce N pulses, each having its own timing. Up to 255 pulses can be stored in this block; this is useful for non-standard - sync tones used by some protection schemes. */ - private void ProcessBlockID13(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x13; - t.BlockDescription = BlockType.Pulse_Sequence; - t.DataPeriods = new List(); - - t.PauseInMS = 0; - - // get pulse count - int pulseCount = data[_position]; - t.AddMetaData(BlockDescriptorTitle.Pulse_Count, pulseCount.ToString()); - _position++; - - // build period information - for (int p = 0; p < pulseCount; p++, _position += 2) - { - // get pulse length - int pulseLength = GetWordValue(data, _position); - t.AddMetaData(BlockDescriptorTitle.Needs_Parsing, "Pulse " + p + " Length\t" + pulseLength.ToString() + " T-States"); - t.DataPeriods.Add(pulseLength); - } - - // add the block - _datacorder.DataBlocks.Add(t); - } - #endregion - - #region ID 14 - Pure Data Block -/* length: [07,08,09]+0A - Offset Value Type Description - 0x00 - WORD Length of ZERO bit pulse - 0x02 - WORD Length of ONE bit pulse - 0x04 - BYTE Used bits in last byte (other bits should be 0) - (e.g. if this is 6, then the bits used (x) in the last byte are: xxxxxx00, - where MSb is the leftmost bit, LSb is the rightmost bit) - 0x05 - WORD Pause after this block (ms.) - 0x07 N BYTE[3] Length of data that follow - 0x0A - BYTE[N] Data as in .TAP files - - This is the same as in the turbo loading data block, except that it has no pilot or sync pulses. */ - private void ProcessBlockID14(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x14; - t.BlockDescription = BlockType.Pure_Data_Block; - t.DataPeriods = new List(); - - int pilotPL = 0; - int sync1P = 0; - int sync2P = 0; - int bit0P = GetWordValue(data, _position + 0); - int bit1P = GetWordValue(data, _position + 2); - int pilotTL = 0; - int bitinbyte = data[_position + 4]; - int pause = GetWordValue(data, _position + 5); - - int blockLen = 0xFFFFFF & GetInt32(data, _position + 0x07); - - _position += 0x0A; - - byte[] tmp = new byte[blockLen]; - tmp = data.Skip(_position).Take(blockLen).ToArray(); - - var t2 = DecodeDataBlock(t, tmp, DataBlockType.Pure, pause, pilotTL, pilotPL, sync1P, sync2P, bit0P, bit1P, bitinbyte); - - t.PauseInMS = pause; - - // add the block - _datacorder.DataBlocks.Add(t2); - - // advance the position to the next block - _position += blockLen; - - // generate PAUSE block - CreatePauseBlock(_datacorder.DataBlocks.Last()); - } - #endregion - - #region ID 15 - Direct Recording -/* length: [05,06,07]+08 - Offset Value Type Description - 0x00 - WORD Number of T-states per sample (bit of data) - 0x02 - WORD Pause after this block in milliseconds (ms.) - 0x04 - BYTE Used bits (samples) in last byte of data (1-8) - (e.g. if this is 2, only first two samples of the last byte will be played) - 0x05 N BYTE[3] Length of samples' data - 0x08 - BYTE[N] Samples data. Each bit represents a state on the EAR port (i.e. one sample). - MSb is played first. - - This block is used for tapes which have some parts in a format such that the turbo loader block cannot be used. - This is not like a VOC file, since the information is much more compact. Each sample value is represented by one bit only - (0 for low, 1 for high) which means that the block will be at most 1/8 the size of the equivalent VOC. - The preferred sampling frequencies are 22050 or 44100 Hz (158 or 79 T-states/sample). - Please, if you can, don't use other sampling frequencies. - Please use this block only if you cannot use any other block. */ - private void ProcessBlockID15(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x15; - t.BlockDescription = BlockType.Direct_Recording; - t.DataPeriods = new List(); - - // get values - int samLen = GetInt32(data, _position + 5); - int samSize = 0xFFFFFF & samLen; - - int tStatesPerSample = GetWordValue(data, _position); - int pauseAfterBlock = GetWordValue(data, _position + 2); - int usedBitsInLastByte = data[_position + 4]; - - // skip to samples data - _position += 8; - - int pulseLength = 0; - int pulseCount = 0; - - // ascertain the pulse count - for (int i = 0; i < samSize; i++) - { - for (int p = 0x80; p != 0; p >>= 1) - { - if (((data[_position + i] ^ pulseLength) & p) != 0) - { - pulseCount++; - pulseLength ^= -1; - } - } - } - - // get the pulses - t.DataPeriods = new List(pulseCount + 2); - int tStateCount = 0; - pulseLength = 0; - for (int i = 1; i < samSize; i++) - { - for (int p = 0x80; p != 0; p >>= 1) - { - tStateCount += tStatesPerSample; - if (((data[_position] ^ pulseLength) & p) != 0) - { - t.DataPeriods.Add(tStateCount); - pulseLength ^= -1; - tStateCount = 0; - } - } - - // incrememt position - _position++; - } - - // get the pulses in the last byte of data - for (int p = 0x80; p != (byte)(0x80 >> usedBitsInLastByte); p >>= 1) - { - tStateCount += tStatesPerSample; - if (((data[_position] ^ pulseLength) & p) != 0) - { - t.DataPeriods.Add(tStateCount); - pulseLength ^= -1; - tStateCount = 0; - } - } - - // add final pulse - t.DataPeriods.Add(tStateCount); - - // add end of block pause - if (pauseAfterBlock > 0) - { - //t.DataPeriods.Add(3500 * pauseAfterBlock); - } - - t.PauseInMS = pauseAfterBlock; - - // increment position - _position++; - - // add the block - _datacorder.DataBlocks.Add(t); - - // generate PAUSE block - CreatePauseBlock(_datacorder.DataBlocks.Last()); - } - #endregion - - #region ID 18 - CSW Recording -/* length: [00,01,02,03]+04 - Offset Value Type Description - 0x00 10+N DWORD Block length (without these four bytes) - 0x04 - WORD Pause after this block (in ms). - 0x06 - BYTE[3] Sampling rate - 0x09 - BYTE Compression type - 0x01: RLE - 0x02: Z-RLE - 0x0A - DWORD Number of stored pulses (after decompression, for validation purposes) - 0x0E - BYTE[N] CSW data, encoded according to the CSW file format specification. - - This block contains a sequence of raw pulses encoded in CSW format v2 (Compressed Square Wave). */ - private void ProcessBlockID18(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x18; - t.BlockDescription = BlockType.CSW_Recording; - t.DataPeriods = new List(); - - int blockLen = GetInt32(data, _position); - _position += 4; - - t.PauseInMS = GetWordValue(data, _position); - - _position += 2; - - int sampleRate = data[_position++] << 16 | data[_position++] << 8 | data[_position++]; - byte compType = data[_position++]; - int pulses = GetInt32(data, _position); - _position += 4; - - int dataLen = blockLen - 10; - - // build source array - byte[] src = new byte[dataLen]; - // build destination array - byte[] dest = new byte[pulses + 1]; - - // process the CSW data - BizHawk.Emulation.Cores.Computers.SinclairSpectrum.CswConverter.ProcessCSWV2(src, ref dest, compType, pulses); - - // create the periods - var rate = (69888 * 50) / sampleRate; - - for (int i = 0; i < dest.Length;) - { - int length = dest[i++] * rate; - if (length == 0) - { - length = GetInt32(dest, i) / rate; - i += 4; - } - - t.DataPeriods.Add(length); - } - - // add closing period - t.DataPeriods.Add((69888 * 50) / 10); - - _position += dataLen; - //_position += blockLen; - - // add the block - _datacorder.DataBlocks.Add(t); - - // generate PAUSE block - CreatePauseBlock(_datacorder.DataBlocks.Last()); - } - #endregion - - #region ID 19 - Generalized Data Block -/* length: [00,01,02,03]+04 - Offset Value Type Description - 0x00 - DWORD Block length (without these four bytes) - 0x04 - WORD Pause after this block (ms) - 0x06 TOTP DWORD Total number of symbols in pilot/sync block (can be 0) - 0x0A NPP BYTE Maximum number of pulses per pilot/sync symbol - 0x0B ASP BYTE Number of pilot/sync symbols in the alphabet table (0=256) - 0x0C TOTD DWORD Total number of symbols in data stream (can be 0) - 0x10 NPD BYTE Maximum number of pulses per data symbol - 0x11 ASD BYTE Number of data symbols in the alphabet table (0=256) - 0x12 - SYMDEF[ASP] Pilot and sync symbols definition table - This field is present only if TOTP>0 - 0x12+ - (2*NPP+1)*ASP - PRLE[TOTP] Pilot and sync data stream - This field is present only if TOTP>0 - 0x12+ - (TOTP>0)*((2*NPP+1)*ASP)+ - TOTP*3 - SYMDEF[ASD] Data symbols definition table - This field is present only if TOTD>0 - 0x12+ - (TOTP>0)*((2*NPP+1)*ASP)+ - TOTP*3+ - (2*NPD+1)*ASD - BYTE[DS] Data stream - This field is present only if TOTD>0 - - This block has been specifically developed to represent an extremely wide range of data encoding techniques. - The basic idea is that each loading component (pilot tone, sync pulses, data) is associated to a specific sequence - of pulses, where each sequence (wave) can contain a different number of pulses from the others. - In this way we can have a situation where bit 0 is represented with 4 pulses and bit 1 with 8 pulses. - - ---- - SYMDEF structure format - Offset Value Type Description - 0x00 - BYTE Symbol flags - b0-b1: starting symbol polarity - 00: opposite to the current level (make an edge, as usual) - default - 01: same as the current level (no edge - prolongs the previous pulse) - 10: force low level - 11: force high level - 0x01 - WORD[MAXP] Array of pulse lengths. - - The alphabet is stored using a table where each symbol is a row of pulses. The number of columns (i.e. pulses) of the table is the - length of the longest sequence amongst all (MAXP=NPP or NPD, for pilot/sync or data blocks respectively); shorter waves are terminated by a - zero-length pulse in the sequence. - Any number of data symbols is allowed, so we can have more than two distinct waves; for example, imagine a loader which writes two bits at a - time by encoding them with four distinct pulse lengths: this loader would have an alphabet of four symbols, each associated to a specific - sequence of pulses (wave). - ---- - ---- - PRLE structure format - Offset Value Type Description - 0x00 - BYTE Symbol to be represented - 0x01 - WORD Number of repetitions - - Most commonly, pilot and sync are repetitions of the same pulse, thus they are represented using a very simple RLE encoding structure which stores - the symbol and the number of times it must be repeated. - Each symbol in the data stream is represented by a string of NB bits of the block data, where NB = ceiling(Log2(ASD)). - Thus the length of the whole data stream in bits is NB*TOTD, or in bytes DS=ceil(NB*TOTD/8). - ---- */ - private void ProcessBlockID19(byte[] data) - { - // not currently implemented properly - - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x19; - t.BlockDescription = BlockType.Generalized_Data_Block; - t.DataPeriods = new List(); - - int blockLen = GetInt32(data, _position); - _position += 4; - - int pause = GetWordValue(data, _position); - _position += 2; - - int totp = GetInt32(data, _position); - _position += 4; - - int npp = data[_position++]; - - int asp = data[_position++]; - - int totd = GetInt32(data, _position); - _position += 4; - - int npd = data[_position++]; - - int asd = data[_position++]; - - // add the block - _datacorder.DataBlocks.Add(t); - - // advance the position to the next block - _position += blockLen; - } - #endregion - - #region ID 20 - Pause (silence) or 'Stop the Tape' command -/* length: 02 - Offset Value Type Description - 0x00 - WORD Pause duration (ms.) - - This will make a silence (low amplitude level (0)) for a given time in milliseconds. If the value is 0 then the - emulator or utility should (in effect) STOP THE TAPE, i.e. should not continue loading until the user or emulator requests it. */ - private void ProcessBlockID20(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x20; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Pause_or_Stop_the_Tape; - - int pauseDuration = GetWordValue(data, _position); - if (pauseDuration != 0) - { - //t.BlockDescription = "Pause: " + pauseDuration + " ms"; - } - else - { - //t.BlockDescription = "[STOP THE TAPE]"; - } - - t.PauseInMS = pauseDuration; - - if (pauseDuration == 0) - { - // issue stop the tape command - t.Command = TapeCommand.STOP_THE_TAPE; - // add 1ms period - //t.DataPeriods.Add(3500); - //pauseDuration = -1; - - } - else - { - // this is actually just a pause - //pauseDuration = 3500 * pauseDuration; - //t.DataPeriods.Add(pauseDuration); - } - - // add end of block pause - //t.DataPeriods.Add(pauseDuration); - - // add to tape - _datacorder.DataBlocks.Add(t); - - // advanced position to next block - _position += 2; - - // generate PAUSE block - CreatePauseBlock(_datacorder.DataBlocks.Last()); - - } - #endregion - - #region ID 21 - Group start -/* length: [00]+01 - Offset Value Type Description - 0x00 L BYTE Length of the group name string - 0x01 - CHAR[L] Group name in ASCII format (please keep it under 30 characters long) - - This block marks the start of a group of blocks which are to be treated as one single (composite) block. - This is very handy for tapes that use lots of subblocks like Bleepload (which may well have over 160 custom loading blocks). - You can also give the group a name (example 'Bleepload Block 1'). - For each group start block, there must be a group end block. Nesting of groups is not allowed. */ - private void ProcessBlockID21(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x21; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Group_Start; - - int nameLength = data[_position]; - _position++; - - string name = Encoding.ASCII.GetString(data, _position, nameLength); - //t.BlockDescription = "[GROUP: " + name + "]"; - t.Command = TapeCommand.BEGIN_GROUP; - - t.PauseInMS = 0; - - // add to tape - _datacorder.DataBlocks.Add(t); - - // advance to next block - _position += nameLength; - } - #endregion - - #region ID 22 - Group end -/* length: 00 - - This indicates the end of a group. This block has no body. */ - private void ProcessBlockID22(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x22; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Group_End; - t.Command = TapeCommand.END_GROUP; - - t.PauseInMS = 0; - - // add to tape - _datacorder.DataBlocks.Add(t); - } - #endregion - - #region ID 23 - Jump to block -/* length: 02 - Offset Value Type Description - 0x00 - WORD Relative jump value - - This block will enable you to jump from one block to another within the file. The value is a signed short word - (usually 'signed short' in C); Some examples: - Jump 0 = 'Loop Forever' - this should never happen - Jump 1 = 'Go to the next block' - it is like NOP in assembler ;) - Jump 2 = 'Skip one block' - Jump -1 = 'Go to the previous block' - All blocks are included in the block count!. */ - private void ProcessBlockID23(byte[] data) - { - // not implemented properly - - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x23; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Jump_to_Block; - - int relativeJumpValue = GetWordValue(data, _position); - string result = string.Empty; - - switch(relativeJumpValue) - { - case 0: - result = "Loop Forever"; - break; - case 1: - result = "To Next Block"; - break; - case 2: - result = "Skip One Block"; - break; - case -1: - result = "Go to Previous Block"; - break; - } - - //t.BlockDescription = "[JUMP BLOCK - " + result +"]"; - - t.PauseInMS = 0; - - // add to tape - _datacorder.DataBlocks.Add(t); - - // advance to next block - _position += 2; - } - #endregion - - #region ID 24 - Loop start -/* length: 02 - Offset Value Type Description - 0x00 - WORD Number of repetitions (greater than 1) - - If you have a sequence of identical blocks, or of identical groups of blocks, you can use this block to tell how many times they should - be repeated. This block is the same as the FOR statement in BASIC. - For simplicity reasons don't nest loop blocks! */ - private void ProcessBlockID24(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x24; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Loop_Start; - - // loop should start from the next block - int loopStart = _datacorder.DataBlocks.Count() + 1; - - int numberOfRepetitions = GetWordValue(data, _position); - - // update loop counter - _loopCounter.Add( - new KeyValuePair( - loopStart, - numberOfRepetitions)); - - // update description - //t.BlockDescription = "[LOOP START - " + numberOfRepetitions + " times]"; - - t.PauseInMS = 0; - - // add to tape - _datacorder.DataBlocks.Add(t); - - // advance to next block - _position += 2; - } - #endregion - - #region ID 25 - Loop end -/* length: 00 - - This is the same as BASIC's NEXT statement. It means that the utility should jump back to the start of the loop if it hasn't - been run for the specified number of times. - This block has no body. */ - private void ProcessBlockID25(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x25; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Loop_End; - - // get the most recent loop info - var loop = _loopCounter.LastOrDefault(); - - int loopStart = loop.Key; - int numberOfRepetitions = loop.Value; - - if (numberOfRepetitions == 0) - { - return; - } - - // get the number of blocks to loop - int blockCnt = _datacorder.DataBlocks.Count() - loopStart; - - // loop through each group to repeat - for (int b = 0; b < numberOfRepetitions; b++) - { - TapeDataBlock repeater = new TapeDataBlock(); - //repeater.BlockDescription = "[LOOP REPEAT - " + (b + 1) + "]"; - repeater.DataPeriods = new List(); - - // add the repeat block - _datacorder.DataBlocks.Add(repeater); - - // now iterate through and add the blocks to be repeated - for (int i = 0; i < blockCnt; i++) - { - var block = _datacorder.DataBlocks[loopStart + i]; - _datacorder.DataBlocks.Add(block); - } - } - } - #endregion - - #region ID 26 - Call sequence -/* length: [00,01]*02+02 - Offset Value Type Description - 0x00 N WORD Number of calls to be made - 0x02 - WORD[N] Array of call block numbers (relative-signed offsets) - - This block is an analogue of the CALL Subroutine statement. It basically executes a sequence of blocks that are somewhere else and - then goes back to the next block. Because more than one call can be normally used you can include a list of sequences to be called. - The 'nesting' of call blocks is also not allowed for the simplicity reasons. You can, of course, use the CALL blocks in the LOOP - sequences and vice versa. The value is relative for the obvious reasons - so that you can add some blocks in the beginning of the - file without disturbing the call values. Please take a look at 'Jump To Block' for reference on the values. */ - private void ProcessBlockID26(byte[] data) - { - // block processing not implemented for this - just gets added for informational purposes only - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x26; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Call_Sequence; - - int blockSize = 2 + 2 * GetWordValue(data, _position); - t.PauseInMS = 0; - - - // add to tape - _datacorder.DataBlocks.Add(t); - - // advance to next block - _position += blockSize; - } - #endregion - - #region ID 27 - Return from sequence -/* length: 00 - - This block indicates the end of the Called Sequence. The next block played will be the block after the last CALL block (or the next Call, - if the Call block had multiple calls). - Again, this block has no body. */ - private void ProcessBlockID27(byte[] data) - { - // block processing not implemented for this - just gets added for informational purposes only - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x27; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Return_From_Sequence; - t.PauseInMS = 0; - - - // add to tape - _datacorder.DataBlocks.Add(t); - } - #endregion - - #region ID 28 - Select block -/* length: [00,01]+02 - Offset Value Type Description - 0x00 - WORD Length of the whole block (without these two bytes) - 0x02 N BYTE Number of selections - 0x03 - SELECT[N] List of selections - - ---- - SELECT structure format - Offset Value Type Description - 0x00 - WORD Relative Offset - 0x02 L BYTE Length of description text - 0x03 - CHAR[L] Description text (please use single line and max. 30 chars) - ---- - - This block is useful when the tape consists of two or more separately-loadable parts. With this block, you are able to select - one of the parts and the utility/emulator will start loading from that block. For example you can use it when the game has a - separate Trainer or when it is a multiload. Of course, to make some use of it the emulator/utility has to show a menu with the - selections when it encounters such a block. All offsets are relative signed words. */ - private void ProcessBlockID28(byte[] data) - { - // block processing not implemented for this - just gets added for informational purposes only - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x28; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Select_Block; - - int blockSize = 2 + GetWordValue(data, _position); - - t.PauseInMS = 0; - - // add to tape - _datacorder.DataBlocks.Add(t); - - // advance to next block - _position += blockSize; - } - #endregion - - #region ID 2A - Stop the tape if in 48K mode -/* length: 04 - Offset Value Type Description - 0x00 0 DWORD Length of the block without these four bytes (0) - - When this block is encountered, the tape will stop ONLY if the machine is an 48K Spectrum. This block is to be used for - multiloading games that load one level at a time in 48K mode, but load the entire tape at once if in 128K mode. - This block has no body of its own, but follows the extension rule. */ - private void ProcessBlockID2A(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x2A; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Stop_the_Tape_48K; - t.Command = TapeCommand.STOP_THE_TAPE_48K; - - int blockSize = 4 + GetWordValue(data, _position); - - t.PauseInMS = 0; - - // add to tape - _datacorder.DataBlocks.Add(t); - - // advance to next block - _position += blockSize; - } - #endregion - - #region ID 2B - Set signal level -/* length: 05 - Offset Value Type Description - 0x00 1 DWORD Block length (without these four bytes) - 0x04 - BYTE Signal level (0=low, 1=high) - - This block sets the current signal level to the specified value (high or low). It should be used whenever it is necessary to avoid any - ambiguities, e.g. with custom loaders which are level-sensitive. */ - private void ProcessBlockID2B(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x2B; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Set_Signal_Level; - - t.PauseInMS = 0; - - // add to tape - _datacorder.DataBlocks.Add(t); - - // advance to next block - _position += 5; - } - #endregion - - #region ID 30 - Text description -/* length: [00]+01 - Offset Value Type Description - 0x00 N BYTE Length of the text description - 0x01 - CHAR[N] Text description in ASCII format - - This is meant to identify parts of the tape, so you know where level 1 starts, where to rewind to when the game ends, etc. - This description is not guaranteed to be shown while the tape is playing, but can be read while browsing the tape or changing - the tape pointer. - The description can be up to 255 characters long but please keep it down to about 30 so the programs can show it in one line - (where this is appropriate). - Please use 'Archive Info' block for title, authors, publisher, etc. */ - private void ProcessBlockID30(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x30; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Text_Description; - - int textLen = data[_position]; - _position++; - - string desc = Encoding.ASCII.GetString(data, _position, textLen); - - t.PauseInMS = 0; - - //t.BlockDescription = "[" + desc + "]"; - - // add to tape - _datacorder.DataBlocks.Add(t); - - // advance to next block - _position += textLen; - } - #endregion - - #region ID 31 - Message block -/* length: [01]+02 - Offset Value Type Description - 0x00 - BYTE Time (in seconds) for which the message should be displayed - 0x01 N BYTE Length of the text message - 0x02 - CHAR[N] Message that should be displayed in ASCII format - - This will enable the emulators to display a message for a given time. This should not stop the tape and it should not make silence. - If the time is 0 then the emulator should wait for the user to press a key. - The text message should: - stick to a maximum of 30 chars per line; - use single 0x0D (13 decimal) to separate lines; - stick to a maximum of 8 lines. - If you do not obey these rules, emulators may display your message in any way they like. */ - private void ProcessBlockID31(byte[] data) - { - // currently not implemented properly in ZXHawk - - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x31; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Message_Block; - - _position++; - - int msgLen = data[_position]; - _position++; - - string desc = Encoding.ASCII.GetString(data, _position, msgLen); - - t.Command = TapeCommand.SHOW_MESSAGE; - - //t.BlockDescription = "[MESSAGE: " + desc + "]"; - - t.PauseInMS = 0; - - // add to tape - _datacorder.DataBlocks.Add(t); - - // advance to next block - _position += msgLen; - } - #endregion - - #region ID 32 - Archive info -/* length: [00,01]+02 - Offset Value Type Description - 0x00 - WORD Length of the whole block (without these two bytes) - 0x02 N BYTE Number of text strings - 0x03 - TEXT[N] List of text strings - - ---- - TEXT structure format - Offset Value Type Description - 0x00 - BYTE Text identification byte: - 00 - Full title - 01 - Software house/publisher - 02 - Author(s) - 03 - Year of publication - 04 - Language - 05 - Game/utility type - 06 - Price - 07 - Protection scheme/loader - 08 - Origin - FF - Comment(s) - 0x01 L BYTE Length of text string - 0x02 - CHAR[L] Text string in ASCII format - ---- - - Use this block at the beginning of the tape to identify the title of the game, author, publisher, year of publication, price (including - the currency), type of software (arcade adventure, puzzle, word processor, ...), protection scheme it uses (Speedlock 1, Alkatraz, ...) - and its origin (Original, Budget re-release, ...), etc. This block is built in a way that allows easy future expansion. - The block consists of a series of text strings. Each text has its identification number (which tells us what the text means) and then - the ASCII text. To make it possible to skip this block, if needed, the length of the whole block is at the beginning of it. - If all texts on the tape are in English language then you don't have to supply the 'Language' field - The information about what hardware the tape uses is in the 'Hardware Type' block, so no need for it here. */ - private void ProcessBlockID32(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x32; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Archive_Info; - - int blockLen = GetWordValue(data, _position); - _position += 2; - int stringCount = data[_position++]; - - // iterate through each string - for (int s = 0; s < stringCount; s++) - { - // identify the type of text - int type = data[_position++]; - - // get text length - int strLen = data[_position++]; + } + + /// + /// Processes a TZX block + /// + private void ProcessBlock(byte[] data, int id) + { + // process based on detected block ID + switch (id) + { + // ID 10 - Standard Speed Data Block + case 0x10: + ProcessBlockID10(data); + break; + // ID 11 - Turbo Speed Data Block + case 0x11: + ProcessBlockID11(data); + break; + // ID 12 - Pure Tone + case 0x12: + ProcessBlockID12(data); + break; + // ID 13 - Pulse sequence + case 0x13: + ProcessBlockID13(data); + break; + // ID 14 - Pure Data Block + case 0x14: + ProcessBlockID14(data); + break; + // ID 15 - Direct Recording + case 0x15: + ProcessBlockID15(data); + break; + // ID 18 - CSW Recording + case 0x18: + ProcessBlockID18(data); + break; + // ID 19 - Generalized Data Block + case 0x19: + ProcessBlockID19(data); + break; + // ID 20 - Pause (silence) or 'Stop the Tape' command + case 0x20: + ProcessBlockID20(data); + break; + // ID 21 - Group start + case 0x21: + ProcessBlockID21(data); + break; + // ID 22 - Group end + case 0x22: + ProcessBlockID22(data); + break; + // ID 23 - Jump to block + case 0x23: + ProcessBlockID23(data); + break; + // ID 24 - Loop start + case 0x24: + ProcessBlockID24(data); + break; + // ID 25 - Loop end + case 0x25: + ProcessBlockID25(data); + break; + // ID 26 - Call sequence + case 0x26: + ProcessBlockID26(data); + break; + // ID 27 - Return from sequence + case 0x27: + ProcessBlockID27(data); + break; + // ID 28 - Select block + case 0x28: + ProcessBlockID28(data); + break; + // ID 2A - Stop the tape if in 48K mode + case 0x2A: + ProcessBlockID2A(data); + break; + // ID 2B - Set signal level + case 0x2B: + ProcessBlockID2B(data); + break; + // ID 30 - Text description + case 0x30: + ProcessBlockID30(data); + break; + // ID 31 - Message block + case 0x31: + ProcessBlockID31(data); + break; + // ID 32 - Archive info + case 0x32: + ProcessBlockID32(data); + break; + // ID 33 - Hardware type + case 0x33: + ProcessBlockID33(data); + break; + // ID 35 - Custom info block + case 0x35: + ProcessBlockID35(data); + break; + // ID 5A - "Glue" block + case 0x5A: + ProcessBlockID5A(data); + break; + + #region Depreciated Blocks + + // ID 16 - C64 ROM Type Data Block + case 0x16: + ProcessBlockID16(data); + break; + // ID 17 - C64 Turbo Tape Data Block + case 0x17: + ProcessBlockID17(data); + break; + // ID 34 - Emulation info + case 0x34: + ProcessBlockID34(data); + break; + // ID 40 - Snapshot block + case 0x40: + ProcessBlockID40(data); + break; + + #endregion + + default: + ProcessUnidentifiedBlock(data); + break; + } + } + + #region TZX Block Processors + + #region ID 10 - Standard Speed Data Block + /* length: [02,03]+04 + Offset Value Type Description + 0x00 - WORD Pause after this block (ms.) {1000} + 0x02 N WORD Length of data that follow + 0x04 - BYTE[N] Data as in .TAP files + + This block must be replayed with the standard Spectrum ROM timing values - see the values in + curly brackets in block ID 11. The pilot tone consists in 8063 pulses if the first data byte + (flag byte) is < 128, 3223 otherwise. This block can be used for the ROM loading routines AND + for custom loading routines that use the same timings as ROM ones do. */ + private void ProcessBlockID10(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x10; + t.BlockDescription = BlockType.Standard_Speed_Data_Block; + t.DataPeriods = new List(); + + int pauseLen = GetWordValue(data, _position); + if (pauseLen == 0) + pauseLen = 1000; + + t.PauseInMS = pauseLen; + + int blockLen = GetWordValue(data, _position + 2); + + _position += 4; + + byte[] tmp = new byte[blockLen]; + tmp = data.Skip(_position).Take(blockLen).ToArray(); + + var t2 = DecodeDataBlock(t, tmp, DataBlockType.Standard, pauseLen); + + // add the block + _datacorder.DataBlocks.Add(t2); + + // advance the position to the next block + _position += blockLen; + + // generate PAUSE block + CreatePauseBlock(_datacorder.DataBlocks.Last()); + } + #endregion + + #region ID 11 - Turbo Speed Data Block + /* length: [0F,10,11]+12 + Offset Value Type Description + 0x00 - WORD Length of PILOT pulse {2168} + 0x02 - WORD Length of SYNC first pulse {667} + 0x04 - WORD Length of SYNC second pulse {735} + 0x06 - WORD Length of ZERO bit pulse {855} + 0x08 - WORD Length of ONE bit pulse {1710} + 0x0A - WORD Length of PILOT tone (number of pulses) {8063 header (flag<128), 3223 data (flag>=128)} + 0x0C - BYTE Used bits in the last byte (other bits should be 0) {8} + (e.g. if this is 6, then the bits used (x) in the last byte are: xxxxxx00, + where MSb is the leftmost bit, LSb is the rightmost bit) + 0x0D - WORD Pause after this block (ms.) {1000} + 0x0F N BYTE[3] Length of data that follow + 0x12 - BYTE[N] Data as in .TAP files + + This block is very similar to the normal TAP block but with some additional info on the timings and other important + differences. The same tape encoding is used as for the standard speed data block. If a block should use some non-standard + sync or pilot tones (i.e. all sorts of protection schemes) then use the next three blocks to describe it.*/ + private void ProcessBlockID11(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x11; + t.BlockDescription = BlockType.Turbo_Speed_Data_Block; + t.DataPeriods = new List(); + + int pilotPL = GetWordValue(data, _position); + int sync1P = GetWordValue(data, _position + 2); + int sync2P = GetWordValue(data, _position + 4); + int bit0P = GetWordValue(data, _position + 6); + int bit1P = GetWordValue(data, _position + 8); + int pilotTL = GetWordValue(data, _position + 10); + int bitinbyte = data[_position + 12]; + int pause = GetWordValue(data, _position + 13); + + + int blockLen = 0xFFFFFF & GetInt32(data, _position + 0x0F); + + byte[] bLenArr = data.Skip(_position + 0x0F).Take(3).ToArray(); + + _position += 0x12; + + byte[] tmp = new byte[blockLen]; + tmp = data.Skip(_position).Take(blockLen).ToArray(); + + var t2 = DecodeDataBlock(t, tmp, DataBlockType.Turbo, pause, pilotTL, pilotPL, sync1P, sync2P, bit0P, bit1P, bitinbyte); + + t.PauseInMS = pause; + + // add the block + _datacorder.DataBlocks.Add(t2); + + // advance the position to the next block + _position += blockLen; + + // generate PAUSE block + CreatePauseBlock(_datacorder.DataBlocks.Last()); + } + #endregion + + #region ID 12 - Pure Tone + /* length: 04 + Offset Value Type Description + 0x00 - WORD Length of one pulse in T-states + 0x02 - WORD Number of pulses + + This will produce a tone which is basically the same as the pilot tone in the ID 10, ID 11 blocks. You can define how + long the pulse is and how many pulses are in the tone. */ + private void ProcessBlockID12(byte[] data) + { + int blockLen = 4; + + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x12; + t.BlockDescription = BlockType.Pure_Tone; + t.DataPeriods = new List(); + t.PauseInMS = 0; + + // get values + int pulseLength = GetWordValue(data, _position); + int pulseCount = GetWordValue(data, _position + 2); + + t.AddMetaData(BlockDescriptorTitle.Pulse_Length, pulseLength.ToString() + " T-States"); + t.AddMetaData(BlockDescriptorTitle.Pulse_Count, pulseCount.ToString()); + + // build period information + for (int p = 0; p < pulseCount; p++) + { + t.DataPeriods.Add(pulseLength); + } + + // add the block + _datacorder.DataBlocks.Add(t); + + // advance the position to the next block + _position += blockLen; + } + #endregion + + #region ID 13 - Pulse sequence + /* length: [00]*02+01 + Offset Value Type Description + 0x00 N BYTE Number of pulses + 0x01 - WORD[N] Pulses' lengths + + This will produce N pulses, each having its own timing. Up to 255 pulses can be stored in this block; this is useful for non-standard + sync tones used by some protection schemes. */ + private void ProcessBlockID13(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x13; + t.BlockDescription = BlockType.Pulse_Sequence; + t.DataPeriods = new List(); + + t.PauseInMS = 0; + + // get pulse count + int pulseCount = data[_position]; + t.AddMetaData(BlockDescriptorTitle.Pulse_Count, pulseCount.ToString()); + _position++; + + // build period information + for (int p = 0; p < pulseCount; p++, _position += 2) + { + // get pulse length + int pulseLength = GetWordValue(data, _position); + t.AddMetaData(BlockDescriptorTitle.Needs_Parsing, "Pulse " + p + " Length\t" + pulseLength.ToString() + " T-States"); + t.DataPeriods.Add(pulseLength); + } + + // add the block + _datacorder.DataBlocks.Add(t); + } + #endregion + + #region ID 14 - Pure Data Block + /* length: [07,08,09]+0A + Offset Value Type Description + 0x00 - WORD Length of ZERO bit pulse + 0x02 - WORD Length of ONE bit pulse + 0x04 - BYTE Used bits in last byte (other bits should be 0) + (e.g. if this is 6, then the bits used (x) in the last byte are: xxxxxx00, + where MSb is the leftmost bit, LSb is the rightmost bit) + 0x05 - WORD Pause after this block (ms.) + 0x07 N BYTE[3] Length of data that follow + 0x0A - BYTE[N] Data as in .TAP files + + This is the same as in the turbo loading data block, except that it has no pilot or sync pulses. */ + private void ProcessBlockID14(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x14; + t.BlockDescription = BlockType.Pure_Data_Block; + t.DataPeriods = new List(); + + int pilotPL = 0; + int sync1P = 0; + int sync2P = 0; + int bit0P = GetWordValue(data, _position + 0); + int bit1P = GetWordValue(data, _position + 2); + int pilotTL = 0; + int bitinbyte = data[_position + 4]; + int pause = GetWordValue(data, _position + 5); + + int blockLen = 0xFFFFFF & GetInt32(data, _position + 0x07); + + _position += 0x0A; + + byte[] tmp = new byte[blockLen]; + tmp = data.Skip(_position).Take(blockLen).ToArray(); + + var t2 = DecodeDataBlock(t, tmp, DataBlockType.Pure, pause, pilotTL, pilotPL, sync1P, sync2P, bit0P, bit1P, bitinbyte); + + t.PauseInMS = pause; + + // add the block + _datacorder.DataBlocks.Add(t2); + + // advance the position to the next block + _position += blockLen; + + // generate PAUSE block + CreatePauseBlock(_datacorder.DataBlocks.Last()); + } + #endregion + + #region ID 15 - Direct Recording + /* length: [05,06,07]+08 + Offset Value Type Description + 0x00 - WORD Number of T-states per sample (bit of data) + 0x02 - WORD Pause after this block in milliseconds (ms.) + 0x04 - BYTE Used bits (samples) in last byte of data (1-8) + (e.g. if this is 2, only first two samples of the last byte will be played) + 0x05 N BYTE[3] Length of samples' data + 0x08 - BYTE[N] Samples data. Each bit represents a state on the EAR port (i.e. one sample). + MSb is played first. + + This block is used for tapes which have some parts in a format such that the turbo loader block cannot be used. + This is not like a VOC file, since the information is much more compact. Each sample value is represented by one bit only + (0 for low, 1 for high) which means that the block will be at most 1/8 the size of the equivalent VOC. + The preferred sampling frequencies are 22050 or 44100 Hz (158 or 79 T-states/sample). + Please, if you can, don't use other sampling frequencies. + Please use this block only if you cannot use any other block. */ + private void ProcessBlockID15(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x15; + t.BlockDescription = BlockType.Direct_Recording; + t.DataPeriods = new List(); + + // get values + int samLen = GetInt32(data, _position + 5); + int samSize = 0xFFFFFF & samLen; + + int tStatesPerSample = GetWordValue(data, _position); + int pauseAfterBlock = GetWordValue(data, _position + 2); + int usedBitsInLastByte = data[_position + 4]; + + // skip to samples data + _position += 8; + + int pulseLength = 0; + int pulseCount = 0; + + // ascertain the pulse count + for (int i = 0; i < samSize; i++) + { + for (int p = 0x80; p != 0; p >>= 1) + { + if (((data[_position + i] ^ pulseLength) & p) != 0) + { + pulseCount++; + pulseLength ^= -1; + } + } + } + + // get the pulses + t.DataPeriods = new List(pulseCount + 2); + int tStateCount = 0; + pulseLength = 0; + for (int i = 1; i < samSize; i++) + { + for (int p = 0x80; p != 0; p >>= 1) + { + tStateCount += tStatesPerSample; + if (((data[_position] ^ pulseLength) & p) != 0) + { + t.DataPeriods.Add(tStateCount); + pulseLength ^= -1; + tStateCount = 0; + } + } + + // incrememt position + _position++; + } + + // get the pulses in the last byte of data + for (int p = 0x80; p != (byte)(0x80 >> usedBitsInLastByte); p >>= 1) + { + tStateCount += tStatesPerSample; + if (((data[_position] ^ pulseLength) & p) != 0) + { + t.DataPeriods.Add(tStateCount); + pulseLength ^= -1; + tStateCount = 0; + } + } + + // add final pulse + t.DataPeriods.Add(tStateCount); + + // add end of block pause + if (pauseAfterBlock > 0) + { + //t.DataPeriods.Add(3500 * pauseAfterBlock); + } + + t.PauseInMS = pauseAfterBlock; + + // increment position + _position++; + + // add the block + _datacorder.DataBlocks.Add(t); + + // generate PAUSE block + CreatePauseBlock(_datacorder.DataBlocks.Last()); + } + #endregion + + #region ID 18 - CSW Recording + /* length: [00,01,02,03]+04 + Offset Value Type Description + 0x00 10+N DWORD Block length (without these four bytes) + 0x04 - WORD Pause after this block (in ms). + 0x06 - BYTE[3] Sampling rate + 0x09 - BYTE Compression type + 0x01: RLE + 0x02: Z-RLE + 0x0A - DWORD Number of stored pulses (after decompression, for validation purposes) + 0x0E - BYTE[N] CSW data, encoded according to the CSW file format specification. + + This block contains a sequence of raw pulses encoded in CSW format v2 (Compressed Square Wave). */ + private void ProcessBlockID18(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x18; + t.BlockDescription = BlockType.CSW_Recording; + t.DataPeriods = new List(); + + int blockLen = GetInt32(data, _position); + _position += 4; + + t.PauseInMS = GetWordValue(data, _position); + + _position += 2; + + int sampleRate = data[_position++] << 16 | data[_position++] << 8 | data[_position++]; + byte compType = data[_position++]; + int pulses = GetInt32(data, _position); + _position += 4; + + int dataLen = blockLen - 10; + + // build source array + byte[] src = new byte[dataLen]; + // build destination array + byte[] dest = new byte[pulses + 1]; + + // process the CSW data + BizHawk.Emulation.Cores.Computers.SinclairSpectrum.CswConverter.ProcessCSWV2(src, ref dest, compType, pulses); + + // create the periods + var rate = (69888 * 50) / sampleRate; + + for (int i = 0; i < dest.Length;) + { + int length = dest[i++] * rate; + if (length == 0) + { + length = GetInt32(dest, i) / rate; + i += 4; + } + + t.DataPeriods.Add(length); + } + + // add closing period + t.DataPeriods.Add((69888 * 50) / 10); + + _position += dataLen; + //_position += blockLen; + + // add the block + _datacorder.DataBlocks.Add(t); + + // generate PAUSE block + CreatePauseBlock(_datacorder.DataBlocks.Last()); + } + #endregion + + #region ID 19 - Generalized Data Block + /* length: [00,01,02,03]+04 + Offset Value Type Description + 0x00 - DWORD Block length (without these four bytes) + 0x04 - WORD Pause after this block (ms) + 0x06 TOTP DWORD Total number of symbols in pilot/sync block (can be 0) + 0x0A NPP BYTE Maximum number of pulses per pilot/sync symbol + 0x0B ASP BYTE Number of pilot/sync symbols in the alphabet table (0=256) + 0x0C TOTD DWORD Total number of symbols in data stream (can be 0) + 0x10 NPD BYTE Maximum number of pulses per data symbol + 0x11 ASD BYTE Number of data symbols in the alphabet table (0=256) + 0x12 - SYMDEF[ASP] Pilot and sync symbols definition table + This field is present only if TOTP>0 + 0x12+ + (2*NPP+1)*ASP - PRLE[TOTP] Pilot and sync data stream + This field is present only if TOTP>0 + 0x12+ + (TOTP>0)*((2*NPP+1)*ASP)+ + TOTP*3 - SYMDEF[ASD] Data symbols definition table + This field is present only if TOTD>0 + 0x12+ + (TOTP>0)*((2*NPP+1)*ASP)+ + TOTP*3+ + (2*NPD+1)*ASD - BYTE[DS] Data stream + This field is present only if TOTD>0 + + This block has been specifically developed to represent an extremely wide range of data encoding techniques. + The basic idea is that each loading component (pilot tone, sync pulses, data) is associated to a specific sequence + of pulses, where each sequence (wave) can contain a different number of pulses from the others. + In this way we can have a situation where bit 0 is represented with 4 pulses and bit 1 with 8 pulses. + + ---- + SYMDEF structure format + Offset Value Type Description + 0x00 - BYTE Symbol flags + b0-b1: starting symbol polarity + 00: opposite to the current level (make an edge, as usual) - default + 01: same as the current level (no edge - prolongs the previous pulse) + 10: force low level + 11: force high level + 0x01 - WORD[MAXP] Array of pulse lengths. + + The alphabet is stored using a table where each symbol is a row of pulses. The number of columns (i.e. pulses) of the table is the + length of the longest sequence amongst all (MAXP=NPP or NPD, for pilot/sync or data blocks respectively); shorter waves are terminated by a + zero-length pulse in the sequence. + Any number of data symbols is allowed, so we can have more than two distinct waves; for example, imagine a loader which writes two bits at a + time by encoding them with four distinct pulse lengths: this loader would have an alphabet of four symbols, each associated to a specific + sequence of pulses (wave). + ---- + ---- + PRLE structure format + Offset Value Type Description + 0x00 - BYTE Symbol to be represented + 0x01 - WORD Number of repetitions + + Most commonly, pilot and sync are repetitions of the same pulse, thus they are represented using a very simple RLE encoding structure which stores + the symbol and the number of times it must be repeated. + Each symbol in the data stream is represented by a string of NB bits of the block data, where NB = ceiling(Log2(ASD)). + Thus the length of the whole data stream in bits is NB*TOTD, or in bytes DS=ceil(NB*TOTD/8). + ---- */ + private void ProcessBlockID19(byte[] data) + { + // not currently implemented properly + + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x19; + t.BlockDescription = BlockType.Generalized_Data_Block; + t.DataPeriods = new List(); + + int blockLen = GetInt32(data, _position); + _position += 4; + + int pause = GetWordValue(data, _position); + _position += 2; + + int totp = GetInt32(data, _position); + _position += 4; + + int npp = data[_position++]; + + int asp = data[_position++]; + + int totd = GetInt32(data, _position); + _position += 4; + + int npd = data[_position++]; + + int asd = data[_position++]; + + // add the block + _datacorder.DataBlocks.Add(t); + + // advance the position to the next block + _position += blockLen; + } + #endregion + + #region ID 20 - Pause (silence) or 'Stop the Tape' command + /* length: 02 + Offset Value Type Description + 0x00 - WORD Pause duration (ms.) + + This will make a silence (low amplitude level (0)) for a given time in milliseconds. If the value is 0 then the + emulator or utility should (in effect) STOP THE TAPE, i.e. should not continue loading until the user or emulator requests it. */ + private void ProcessBlockID20(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x20; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Pause_or_Stop_the_Tape; + + int pauseDuration = GetWordValue(data, _position); + if (pauseDuration != 0) + { + //t.BlockDescription = "Pause: " + pauseDuration + " ms"; + } + else + { + //t.BlockDescription = "[STOP THE TAPE]"; + } + + t.PauseInMS = pauseDuration; + + if (pauseDuration == 0) + { + // issue stop the tape command + t.Command = TapeCommand.STOP_THE_TAPE; + // add 1ms period + //t.DataPeriods.Add(3500); + //pauseDuration = -1; + + } + else + { + // this is actually just a pause + //pauseDuration = 3500 * pauseDuration; + //t.DataPeriods.Add(pauseDuration); + } + + // add end of block pause + //t.DataPeriods.Add(pauseDuration); + + // add to tape + _datacorder.DataBlocks.Add(t); + + // advanced position to next block + _position += 2; + + // generate PAUSE block + CreatePauseBlock(_datacorder.DataBlocks.Last()); + + } + #endregion + + #region ID 21 - Group start + /* length: [00]+01 + Offset Value Type Description + 0x00 L BYTE Length of the group name string + 0x01 - CHAR[L] Group name in ASCII format (please keep it under 30 characters long) + + This block marks the start of a group of blocks which are to be treated as one single (composite) block. + This is very handy for tapes that use lots of subblocks like Bleepload (which may well have over 160 custom loading blocks). + You can also give the group a name (example 'Bleepload Block 1'). + For each group start block, there must be a group end block. Nesting of groups is not allowed. */ + private void ProcessBlockID21(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x21; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Group_Start; + + int nameLength = data[_position]; + _position++; + + string name = Encoding.ASCII.GetString(data, _position, nameLength); + //t.BlockDescription = "[GROUP: " + name + "]"; + t.Command = TapeCommand.BEGIN_GROUP; + + t.PauseInMS = 0; + + // add to tape + _datacorder.DataBlocks.Add(t); + + // advance to next block + _position += nameLength; + } + #endregion + + #region ID 22 - Group end + /* length: 00 + + This indicates the end of a group. This block has no body. */ + private void ProcessBlockID22(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x22; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Group_End; + t.Command = TapeCommand.END_GROUP; + + t.PauseInMS = 0; + + // add to tape + _datacorder.DataBlocks.Add(t); + } + #endregion + + #region ID 23 - Jump to block + /* length: 02 + Offset Value Type Description + 0x00 - WORD Relative jump value + + This block will enable you to jump from one block to another within the file. The value is a signed short word + (usually 'signed short' in C); Some examples: + Jump 0 = 'Loop Forever' - this should never happen + Jump 1 = 'Go to the next block' - it is like NOP in assembler ;) + Jump 2 = 'Skip one block' + Jump -1 = 'Go to the previous block' + All blocks are included in the block count!. */ + private void ProcessBlockID23(byte[] data) + { + // not implemented properly + + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x23; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Jump_to_Block; + + int relativeJumpValue = GetWordValue(data, _position); + string result = string.Empty; + + switch (relativeJumpValue) + { + case 0: + result = "Loop Forever"; + break; + case 1: + result = "To Next Block"; + break; + case 2: + result = "Skip One Block"; + break; + case -1: + result = "Go to Previous Block"; + break; + } + + //t.BlockDescription = "[JUMP BLOCK - " + result +"]"; + + t.PauseInMS = 0; + + // add to tape + _datacorder.DataBlocks.Add(t); + + // advance to next block + _position += 2; + } + #endregion + + #region ID 24 - Loop start + /* length: 02 + Offset Value Type Description + 0x00 - WORD Number of repetitions (greater than 1) + + If you have a sequence of identical blocks, or of identical groups of blocks, you can use this block to tell how many times they should + be repeated. This block is the same as the FOR statement in BASIC. + For simplicity reasons don't nest loop blocks! */ + private void ProcessBlockID24(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x24; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Loop_Start; + + // loop should start from the next block + int loopStart = _datacorder.DataBlocks.Count() + 1; + + int numberOfRepetitions = GetWordValue(data, _position); + + // update loop counter + _loopCounter.Add( + new KeyValuePair( + loopStart, + numberOfRepetitions)); + + // update description + //t.BlockDescription = "[LOOP START - " + numberOfRepetitions + " times]"; + + t.PauseInMS = 0; + + // add to tape + _datacorder.DataBlocks.Add(t); + + // advance to next block + _position += 2; + } + #endregion + + #region ID 25 - Loop end + /* length: 00 + + This is the same as BASIC's NEXT statement. It means that the utility should jump back to the start of the loop if it hasn't + been run for the specified number of times. + This block has no body. */ + private void ProcessBlockID25(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x25; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Loop_End; + + // get the most recent loop info + var loop = _loopCounter.LastOrDefault(); + + int loopStart = loop.Key; + int numberOfRepetitions = loop.Value; + + if (numberOfRepetitions == 0) + { + return; + } + + // get the number of blocks to loop + int blockCnt = _datacorder.DataBlocks.Count() - loopStart; + + // loop through each group to repeat + for (int b = 0; b < numberOfRepetitions; b++) + { + TapeDataBlock repeater = new TapeDataBlock(); + //repeater.BlockDescription = "[LOOP REPEAT - " + (b + 1) + "]"; + repeater.DataPeriods = new List(); + + // add the repeat block + _datacorder.DataBlocks.Add(repeater); + + // now iterate through and add the blocks to be repeated + for (int i = 0; i < blockCnt; i++) + { + var block = _datacorder.DataBlocks[loopStart + i]; + _datacorder.DataBlocks.Add(block); + } + } + } + #endregion + + #region ID 26 - Call sequence + /* length: [00,01]*02+02 + Offset Value Type Description + 0x00 N WORD Number of calls to be made + 0x02 - WORD[N] Array of call block numbers (relative-signed offsets) + + This block is an analogue of the CALL Subroutine statement. It basically executes a sequence of blocks that are somewhere else and + then goes back to the next block. Because more than one call can be normally used you can include a list of sequences to be called. + The 'nesting' of call blocks is also not allowed for the simplicity reasons. You can, of course, use the CALL blocks in the LOOP + sequences and vice versa. The value is relative for the obvious reasons - so that you can add some blocks in the beginning of the + file without disturbing the call values. Please take a look at 'Jump To Block' for reference on the values. */ + private void ProcessBlockID26(byte[] data) + { + // block processing not implemented for this - just gets added for informational purposes only + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x26; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Call_Sequence; + + int blockSize = 2 + 2 * GetWordValue(data, _position); + t.PauseInMS = 0; + + + // add to tape + _datacorder.DataBlocks.Add(t); + + // advance to next block + _position += blockSize; + } + #endregion + + #region ID 27 - Return from sequence + /* length: 00 + + This block indicates the end of the Called Sequence. The next block played will be the block after the last CALL block (or the next Call, + if the Call block had multiple calls). + Again, this block has no body. */ + private void ProcessBlockID27(byte[] data) + { + // block processing not implemented for this - just gets added for informational purposes only + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x27; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Return_From_Sequence; + t.PauseInMS = 0; + + + // add to tape + _datacorder.DataBlocks.Add(t); + } + #endregion + + #region ID 28 - Select block + /* length: [00,01]+02 + Offset Value Type Description + 0x00 - WORD Length of the whole block (without these two bytes) + 0x02 N BYTE Number of selections + 0x03 - SELECT[N] List of selections + + ---- + SELECT structure format + Offset Value Type Description + 0x00 - WORD Relative Offset + 0x02 L BYTE Length of description text + 0x03 - CHAR[L] Description text (please use single line and max. 30 chars) + ---- + + This block is useful when the tape consists of two or more separately-loadable parts. With this block, you are able to select + one of the parts and the utility/emulator will start loading from that block. For example you can use it when the game has a + separate Trainer or when it is a multiload. Of course, to make some use of it the emulator/utility has to show a menu with the + selections when it encounters such a block. All offsets are relative signed words. */ + private void ProcessBlockID28(byte[] data) + { + // block processing not implemented for this - just gets added for informational purposes only + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x28; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Select_Block; + + int blockSize = 2 + GetWordValue(data, _position); + + t.PauseInMS = 0; + + // add to tape + _datacorder.DataBlocks.Add(t); + + // advance to next block + _position += blockSize; + } + #endregion + + #region ID 2A - Stop the tape if in 48K mode + /* length: 04 + Offset Value Type Description + 0x00 0 DWORD Length of the block without these four bytes (0) + + When this block is encountered, the tape will stop ONLY if the machine is an 48K Spectrum. This block is to be used for + multiloading games that load one level at a time in 48K mode, but load the entire tape at once if in 128K mode. + This block has no body of its own, but follows the extension rule. */ + private void ProcessBlockID2A(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x2A; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Stop_the_Tape_48K; + t.Command = TapeCommand.STOP_THE_TAPE_48K; + + int blockSize = 4 + GetWordValue(data, _position); + + t.PauseInMS = 0; + + // add to tape + _datacorder.DataBlocks.Add(t); + + // advance to next block + _position += blockSize; + } + #endregion + + #region ID 2B - Set signal level + /* length: 05 + Offset Value Type Description + 0x00 1 DWORD Block length (without these four bytes) + 0x04 - BYTE Signal level (0=low, 1=high) + + This block sets the current signal level to the specified value (high or low). It should be used whenever it is necessary to avoid any + ambiguities, e.g. with custom loaders which are level-sensitive. */ + private void ProcessBlockID2B(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x2B; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Set_Signal_Level; + + t.PauseInMS = 0; + + // add to tape + _datacorder.DataBlocks.Add(t); + + // advance to next block + _position += 5; + } + #endregion + + #region ID 30 - Text description + /* length: [00]+01 + Offset Value Type Description + 0x00 N BYTE Length of the text description + 0x01 - CHAR[N] Text description in ASCII format + + This is meant to identify parts of the tape, so you know where level 1 starts, where to rewind to when the game ends, etc. + This description is not guaranteed to be shown while the tape is playing, but can be read while browsing the tape or changing + the tape pointer. + The description can be up to 255 characters long but please keep it down to about 30 so the programs can show it in one line + (where this is appropriate). + Please use 'Archive Info' block for title, authors, publisher, etc. */ + private void ProcessBlockID30(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x30; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Text_Description; + + int textLen = data[_position]; + _position++; + + string desc = Encoding.ASCII.GetString(data, _position, textLen); + + t.PauseInMS = 0; + + //t.BlockDescription = "[" + desc + "]"; + + // add to tape + _datacorder.DataBlocks.Add(t); + + // advance to next block + _position += textLen; + } + #endregion + + #region ID 31 - Message block + /* length: [01]+02 + Offset Value Type Description + 0x00 - BYTE Time (in seconds) for which the message should be displayed + 0x01 N BYTE Length of the text message + 0x02 - CHAR[N] Message that should be displayed in ASCII format + + This will enable the emulators to display a message for a given time. This should not stop the tape and it should not make silence. + If the time is 0 then the emulator should wait for the user to press a key. + The text message should: + stick to a maximum of 30 chars per line; + use single 0x0D (13 decimal) to separate lines; + stick to a maximum of 8 lines. + If you do not obey these rules, emulators may display your message in any way they like. */ + private void ProcessBlockID31(byte[] data) + { + // currently not implemented properly in ZXHawk + + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x31; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Message_Block; + + _position++; + + int msgLen = data[_position]; + _position++; + + string desc = Encoding.ASCII.GetString(data, _position, msgLen); + + t.Command = TapeCommand.SHOW_MESSAGE; + + //t.BlockDescription = "[MESSAGE: " + desc + "]"; + + t.PauseInMS = 0; + + // add to tape + _datacorder.DataBlocks.Add(t); + + // advance to next block + _position += msgLen; + } + #endregion + + #region ID 32 - Archive info + /* length: [00,01]+02 + Offset Value Type Description + 0x00 - WORD Length of the whole block (without these two bytes) + 0x02 N BYTE Number of text strings + 0x03 - TEXT[N] List of text strings + + ---- + TEXT structure format + Offset Value Type Description + 0x00 - BYTE Text identification byte: + 00 - Full title + 01 - Software house/publisher + 02 - Author(s) + 03 - Year of publication + 04 - Language + 05 - Game/utility type + 06 - Price + 07 - Protection scheme/loader + 08 - Origin + FF - Comment(s) + 0x01 L BYTE Length of text string + 0x02 - CHAR[L] Text string in ASCII format + ---- + + Use this block at the beginning of the tape to identify the title of the game, author, publisher, year of publication, price (including + the currency), type of software (arcade adventure, puzzle, word processor, ...), protection scheme it uses (Speedlock 1, Alkatraz, ...) + and its origin (Original, Budget re-release, ...), etc. This block is built in a way that allows easy future expansion. + The block consists of a series of text strings. Each text has its identification number (which tells us what the text means) and then + the ASCII text. To make it possible to skip this block, if needed, the length of the whole block is at the beginning of it. + If all texts on the tape are in English language then you don't have to supply the 'Language' field + The information about what hardware the tape uses is in the 'Hardware Type' block, so no need for it here. */ + private void ProcessBlockID32(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x32; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Archive_Info; + + int blockLen = GetWordValue(data, _position); + _position += 2; + int stringCount = data[_position++]; + + // iterate through each string + for (int s = 0; s < stringCount; s++) + { + // identify the type of text + int type = data[_position++]; + + // get text length + int strLen = data[_position++]; string title = string.Empty; title = "Info: "; - switch (type) - { - case 0x00: - title = "Full Title: "; - break; - case 0x01: - title = "Software House/Publisher: "; - break; - case 0x02: - title = "Author(s): "; - break; - case 0x03: - title = "Year of Publication: "; - break; - case 0x04: - title = "Language: "; - break; - case 0x05: - title = "Game/Utility Type: "; - break; - case 0x06: - title = "Price: "; - break; - case 0x07: - title = "Protection Scheme/Loader: "; - break; - case 0x08: - title = "Origin: "; - break; - case 0xFF: - title = "Comment(s): "; - break; - default: - break; - } + switch (type) + { + case 0x00: + title = "Full Title: "; + break; + case 0x01: + title = "Software House/Publisher: "; + break; + case 0x02: + title = "Author(s): "; + break; + case 0x03: + title = "Year of Publication: "; + break; + case 0x04: + title = "Language: "; + break; + case 0x05: + title = "Game/Utility Type: "; + break; + case 0x06: + title = "Price: "; + break; + case 0x07: + title = "Protection Scheme/Loader: "; + break; + case 0x08: + title = "Origin: "; + break; + case 0xFF: + title = "Comment(s): "; + break; + default: + break; + } - // add title to description - //t.BlockDescription += title; + // add title to description + //t.BlockDescription += title; - // get string data - string val = Encoding.ASCII.GetString(data, _position, strLen); - //t.BlockDescription += val + " \n"; + // get string data + string val = Encoding.ASCII.GetString(data, _position, strLen); + //t.BlockDescription += val + " \n"; - t.PauseInMS = 0; + t.PauseInMS = 0; - // advance to next string block - _position += strLen; - } + // advance to next string block + _position += strLen; + } - // add to tape - _datacorder.DataBlocks.Add(t); - } - #endregion + // add to tape + _datacorder.DataBlocks.Add(t); + } + #endregion - #region ID 33 - Hardware type -/* length: [00]*03+01 - Offset Value Type Description - 0x00 N BYTE Number of machines and hardware types for which info is supplied - 0x01 - HWINFO[N] List of machines and hardware + #region ID 33 - Hardware type + /* length: [00]*03+01 + Offset Value Type Description + 0x00 N BYTE Number of machines and hardware types for which info is supplied + 0x01 - HWINFO[N] List of machines and hardware - ---- - HWINFO structure format - Offset Value Type Description - 0x00 - BYTE Hardware type - 0x01 - BYTE Hardware ID - 0x02 - BYTE Hardware information: - 00 - The tape RUNS on this machine or with this hardware, - but may or may not use the hardware or special features of the machine. - 01 - The tape USES the hardware or special features of the machine, - such as extra memory or a sound chip. - 02 - The tape RUNS but it DOESN'T use the hardware - or special features of the machine. - 03 - The tape DOESN'T RUN on this machine or with this hardware. - ---- + ---- + HWINFO structure format + Offset Value Type Description + 0x00 - BYTE Hardware type + 0x01 - BYTE Hardware ID + 0x02 - BYTE Hardware information: + 00 - The tape RUNS on this machine or with this hardware, + but may or may not use the hardware or special features of the machine. + 01 - The tape USES the hardware or special features of the machine, + such as extra memory or a sound chip. + 02 - The tape RUNS but it DOESN'T use the hardware + or special features of the machine. + 03 - The tape DOESN'T RUN on this machine or with this hardware. + ---- - This blocks contains information about the hardware that the programs on this tape use. Please include only machines and hardware for - which you are 100% sure that it either runs (or doesn't run) on or with, or you know it uses (or doesn't use) the hardware or special - features of that machine. - If the tape runs only on the ZX81 (and TS1000, etc.) then it clearly won't work on any Spectrum or Spectrum variant, so there's no - need to list this information. - If you are not sure or you haven't tested a tape on some particular machine/hardware combination then do not include it in the list. - The list of hardware types and IDs is somewhat large, and may be found at the end of the format description. */ - private void ProcessBlockID33(byte[] data) - { - // currently not implemented properly in ZXHawk + This blocks contains information about the hardware that the programs on this tape use. Please include only machines and hardware for + which you are 100% sure that it either runs (or doesn't run) on or with, or you know it uses (or doesn't use) the hardware or special + features of that machine. + If the tape runs only on the ZX81 (and TS1000, etc.) then it clearly won't work on any Spectrum or Spectrum variant, so there's no + need to list this information. + If you are not sure or you haven't tested a tape on some particular machine/hardware combination then do not include it in the list. + The list of hardware types and IDs is somewhat large, and may be found at the end of the format description. */ + private void ProcessBlockID33(byte[] data) + { + // currently not implemented properly in ZXHawk - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x33; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Hardware_Type; + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x33; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Hardware_Type; - t.PauseInMS = 0; + t.PauseInMS = 0; - // first byte contains number of HWINFOs - int infos = data[_position]; + // first byte contains number of HWINFOs + int infos = data[_position]; - _position += 1; + _position += 1; - // now starts the HW infos (each block 3 bytes) - for (int i = 0; i < infos; i++) - { - _position += 3; - } + // now starts the HW infos (each block 3 bytes) + for (int i = 0; i < infos; i++) + { + _position += 3; + } - // add to tape - _datacorder.DataBlocks.Add(t); - } - #endregion + // add to tape + _datacorder.DataBlocks.Add(t); + } + #endregion - #region ID 35 - Custom info block -/* length: [10,11,12,13]+14 - Offset Value Type Description - 0x00 - CHAR[10] Identification string (in ASCII) - 0x10 L DWORD Length of the custom info - 0x14 - BYTE[L] Custom info + #region ID 35 - Custom info block + /* length: [10,11,12,13]+14 + Offset Value Type Description + 0x00 - CHAR[10] Identification string (in ASCII) + 0x10 L DWORD Length of the custom info + 0x14 - BYTE[L] Custom info - This block can be used to save any information you want. For example, it might contain some information written by a utility, - extra settings required by a particular emulator, or even poke data. */ - private void ProcessBlockID35(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x35; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Custom_Info_Block; + This block can be used to save any information you want. For example, it might contain some information written by a utility, + extra settings required by a particular emulator, or even poke data. */ + private void ProcessBlockID35(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x35; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Custom_Info_Block; - t.PauseInMS = 0; + t.PauseInMS = 0; - string info = Encoding.ASCII.GetString(data, _position, 0x10); - //t.BlockDescription = "[CUSTOM INFO: " + info + "]"; - _position += 0x10; + string info = Encoding.ASCII.GetString(data, _position, 0x10); + //t.BlockDescription = "[CUSTOM INFO: " + info + "]"; + _position += 0x10; - int blockLen = BitConverter.ToInt32(data, _position); - _position += 4; + int blockLen = BitConverter.ToInt32(data, _position); + _position += 4; - // add to tape - _datacorder.DataBlocks.Add(t); + // add to tape + _datacorder.DataBlocks.Add(t); - // advance to next block - _position += blockLen; - } - #endregion + // advance to next block + _position += blockLen; + } + #endregion - #region ID 5A - "Glue" block -/* length: 09 - Offset Value Type Description - 0x00 - BYTE[9] Value: { "XTape!",0x1A,MajR,MinR } - Just skip these 9 bytes and you will end up on the next ID. + #region ID 5A - "Glue" block + /* length: 09 + Offset Value Type Description + 0x00 - BYTE[9] Value: { "XTape!",0x1A,MajR,MinR } + Just skip these 9 bytes and you will end up on the next ID. - This block is generated when you merge two ZX Tape files together. It is here so that you can easily copy the files together and use - them. Of course, this means that resulting file would be 10 bytes longer than if this block was not used. All you have to do - if you encounter this block ID is to skip next 9 bytes. - If you can avoid using this block for this purpose, then do so; it is preferable to use a utility to join the two files and - ensure that they are both of the higher version number. */ - private void ProcessBlockID5A(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x5A; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Glue_Block; + This block is generated when you merge two ZX Tape files together. It is here so that you can easily copy the files together and use + them. Of course, this means that resulting file would be 10 bytes longer than if this block was not used. All you have to do + if you encounter this block ID is to skip next 9 bytes. + If you can avoid using this block for this purpose, then do so; it is preferable to use a utility to join the two files and + ensure that they are both of the higher version number. */ + private void ProcessBlockID5A(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x5A; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Glue_Block; - t.PauseInMS = 0; + t.PauseInMS = 0; - // add to tape - _datacorder.DataBlocks.Add(t); + // add to tape + _datacorder.DataBlocks.Add(t); - // advance to next block - _position += 9; - } - #endregion + // advance to next block + _position += 9; + } + #endregion - #region UnDetected Blocks + #region UnDetected Blocks - private void ProcessUnidentifiedBlock(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = -2; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Unsupported; - //t.BlockDescription = "[UNSUPPORTED - 0x" + data[_position - 1] + "]"; + private void ProcessUnidentifiedBlock(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = -2; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Unsupported; + //t.BlockDescription = "[UNSUPPORTED - 0x" + data[_position - 1] + "]"; - _position += GetInt32(data, _position) & 0xFFFFFF; + _position += GetInt32(data, _position) & 0xFFFFFF; - // add to tape - _datacorder.DataBlocks.Add(t); + // add to tape + _datacorder.DataBlocks.Add(t); - // advance to next block - _position += 4; - } + // advance to next block + _position += 4; + } - #endregion + #endregion - #region Depreciated Blocks + #region Depreciated Blocks - // These mostly should be ignored by ZXHawk - here for completeness + // These mostly should be ignored by ZXHawk - here for completeness - #region ID 16 - C64 ROM Type Data Block - private void ProcessBlockID16(byte[] data) - { - // zxhawk will not implement this block. it will however handle it so subsequent blocks can be parsed - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x16; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.C64_ROM_Type_Data_Block; + #region ID 16 - C64 ROM Type Data Block + private void ProcessBlockID16(byte[] data) + { + // zxhawk will not implement this block. it will however handle it so subsequent blocks can be parsed + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x16; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.C64_ROM_Type_Data_Block; - t.PauseInMS = 0; + t.PauseInMS = 0; - // add to tape - _datacorder.DataBlocks.Add(t); + // add to tape + _datacorder.DataBlocks.Add(t); - // advance to next block - int blockLen = GetInt32(data, _position); - _position += blockLen; - } - #endregion + // advance to next block + int blockLen = GetInt32(data, _position); + _position += blockLen; + } + #endregion - #region ID 17 - C64 Turbo Tape Data Block - private void ProcessBlockID17(byte[] data) - { - // zxhawk will not implement this block. it will however handle it so subsequent blocks can be parsed - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x17; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.C64_Turbo_Tape_Data_Block; + #region ID 17 - C64 Turbo Tape Data Block + private void ProcessBlockID17(byte[] data) + { + // zxhawk will not implement this block. it will however handle it so subsequent blocks can be parsed + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x17; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.C64_Turbo_Tape_Data_Block; - t.PauseInMS = 0; + t.PauseInMS = 0; - // add to tape - _datacorder.DataBlocks.Add(t); + // add to tape + _datacorder.DataBlocks.Add(t); - // advance to next block - int blockLen = GetInt32(data, _position); - _position += blockLen; - } - #endregion + // advance to next block + int blockLen = GetInt32(data, _position); + _position += blockLen; + } + #endregion - #region ID 34 - Emulation info - private void ProcessBlockID34(byte[] data) - { - // currently not implemented properly in ZXHawk + #region ID 34 - Emulation info + private void ProcessBlockID34(byte[] data) + { + // currently not implemented properly in ZXHawk - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x34; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Emulation_Info; + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x34; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Emulation_Info; - // add to tape - _datacorder.DataBlocks.Add(t); + // add to tape + _datacorder.DataBlocks.Add(t); - // advance to next block - _position += 8; - } - #endregion + // advance to next block + _position += 8; + } + #endregion - #region ID 40 - Snapshot block - /* length: [01,02,03]+04 + #region ID 40 - Snapshot block + /* length: [01,02,03]+04 Offset Value Type Description 0x00 - BYTE Snapshot type: 00: .Z80 format @@ -1635,121 +1635,121 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC Only .Z80 and .SNA snapshots are supported for compatibility reasons! The emulator should take care of that the snapshot is not taken while the actual Tape loading is taking place (which doesn't do much sense). And when an emulator encounters the snapshot block it should load it and then continue with the next block. */ - private void ProcessBlockID40(byte[] data) - { - // currently not implemented properly in ZXHawk + private void ProcessBlockID40(byte[] data) + { + // currently not implemented properly in ZXHawk - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x40; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Snapshot_Block; + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x40; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Snapshot_Block; - _position++; + _position++; - int blockLen = data[_position] | - data[_position + 1] << 8 | - data[_position + 2] << 16; - _position += 3; + int blockLen = data[_position] | + data[_position + 1] << 8 | + data[_position + 2] << 16; + _position += 3; - // add to tape - _datacorder.DataBlocks.Add(t); + // add to tape + _datacorder.DataBlocks.Add(t); - // advance to next block - _position += blockLen; - } - #endregion + // advance to next block + _position += blockLen; + } + #endregion - #endregion + #endregion - #endregion + #endregion - #region DataBlockDecoder + #region DataBlockDecoder - /// - /// Used to process either a standard or turbo data block - /// - private TapeDataBlock DecodeDataBlock - ( - TapeDataBlock block, - byte[] blockdata, - DataBlockType dataBlockType, - int pauseAfterBlock, - int pilotCount, + /// + /// Used to process either a standard or turbo data block + /// + private TapeDataBlock DecodeDataBlock + ( + TapeDataBlock block, + byte[] blockdata, + DataBlockType dataBlockType, + int pauseAfterBlock, + int pilotCount, - int pilotToneLength = 2168, - int sync1PulseLength = 667, - int sync2PulseLength = 735, - int bit0PulseLength = 855, - int bit1PulseLength = 1710, - int bitsInLastByte = 8 - ) - { + int pilotToneLength = 2168, + int sync1PulseLength = 667, + int sync2PulseLength = 735, + int bit0PulseLength = 855, + int bit1PulseLength = 1710, + int bitsInLastByte = 8 + ) + { - // first get the block description - string description = string.Empty; + // first get the block description + string description = string.Empty; - // process the type byte - /* (The type is 0,1,2 or 3 for a Program, Number array, Character array or Code file. + // process the type byte + /* (The type is 0,1,2 or 3 for a Program, Number array, Character array or Code file. A SCREEN$ file is regarded as a Code file with start address 16384 and length 6912 decimal. If the file is a Program file, parameter 1 holds the autostart line number (or a number >=32768 if no LINE parameter was given) and parameter 2 holds the start of the variable area relative to the start of the program. If it's a Code file, parameter 1 holds the start of the code block when saved, and parameter 2 holds 32768. For data files finally, the byte at position 14 decimal holds the variable name.) */ - int blockSize = blockdata.Length; + int blockSize = blockdata.Length; - // dont get description info for Pure Data Blocks - if (dataBlockType != DataBlockType.Pure) - { - if (blockdata[0] == 0x00 && blockSize == 19) - { - string fileName = Encoding.ASCII.GetString(blockdata.Skip(2).Take(10).ToArray()).Trim(); - string type = "Unknown Type"; - StringBuilder sb = new StringBuilder(); + // dont get description info for Pure Data Blocks + if (dataBlockType != DataBlockType.Pure) + { + if (blockdata[0] == 0x00 && blockSize == 19) + { + string fileName = Encoding.ASCII.GetString(blockdata.Skip(2).Take(10).ToArray()).Trim(); + string type = "Unknown Type"; + StringBuilder sb = new StringBuilder(); - var param1 = GetWordValue(blockdata, 12); - var param2 = GetWordValue(blockdata, 14); + var param1 = GetWordValue(blockdata, 12); + var param2 = GetWordValue(blockdata, 14); - // header block - examine first byte of header - if (blockdata[1] == 0) - { - type = "Program"; - sb.Append(type + ": "); - sb.Append(fileName + " "); - } - else if (blockdata[1] == 1) - { - type = "NumArray"; - sb.Append(type + ": "); - sb.Append(fileName + " "); - } - else if (blockdata[1] == 2) - { - type = "CharArray"; - sb.Append(type + ": "); - sb.Append(fileName + " "); - } - else if (blockdata[1] == 3) - { - type = "Code"; - sb.Append(type + ": "); - sb.Append(fileName + " "); - } - } - else if (blockdata[0] == 0xff) - { - // data block - description = "Data Block " + (blockSize - 2) + "bytes"; - block.AddMetaData(BlockDescriptorTitle.Data_Bytes, (blockSize - 2).ToString() + " Bytes"); - } - else - { - // some other type (turbo data etc..) - description = $"#{blockdata[0].ToString("X2")} block, {blockSize} bytes"; - //description += (crc != 0) ? $", crc bad (#{crcFile:X2}!=#{crcValue:X2})" : ", crc ok"; - block.AddMetaData(BlockDescriptorTitle.Undefined, description); - } - /* + // header block - examine first byte of header + if (blockdata[1] == 0) + { + type = "Program"; + sb.Append(type + ": "); + sb.Append(fileName + " "); + } + else if (blockdata[1] == 1) + { + type = "NumArray"; + sb.Append(type + ": "); + sb.Append(fileName + " "); + } + else if (blockdata[1] == 2) + { + type = "CharArray"; + sb.Append(type + ": "); + sb.Append(fileName + " "); + } + else if (blockdata[1] == 3) + { + type = "Code"; + sb.Append(type + ": "); + sb.Append(fileName + " "); + } + } + else if (blockdata[0] == 0xff) + { + // data block + description = "Data Block " + (blockSize - 2) + "bytes"; + block.AddMetaData(BlockDescriptorTitle.Data_Bytes, (blockSize - 2).ToString() + " Bytes"); + } + else + { + // some other type (turbo data etc..) + description = $"#{blockdata[0].ToString("X2")} block, {blockSize} bytes"; + //description += (crc != 0) ? $", crc bad (#{crcFile:X2}!=#{crcValue:X2})" : ", crc ok"; + block.AddMetaData(BlockDescriptorTitle.Undefined, description); + } + /* if (blockdata[0] == 0x00 && blockSize == 19 && (blockdata[1] == 0x00) || (blockdata[1] == 3 && blockdata.Length > 3)) { if (dataBlockType != DataBlockType.Turbo) @@ -1792,124 +1792,124 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC //description += (crc != 0) ? $", crc bad (#{crcFile:X2}!=#{crcValue:X2})" : ", crc ok"; block.AddMetaData(BlockDescriptorTitle.Undefined, description); } - */ - } + */ + } - // update metadata - switch (dataBlockType) - { - case DataBlockType.Standard: - case DataBlockType.Turbo: + // update metadata + switch (dataBlockType) + { + case DataBlockType.Standard: + case DataBlockType.Turbo: - if (dataBlockType == DataBlockType.Standard) - block.BlockDescription = BlockType.Standard_Speed_Data_Block; - if (dataBlockType == DataBlockType.Turbo) - block.BlockDescription = BlockType.Turbo_Speed_Data_Block; + if (dataBlockType == DataBlockType.Standard) + block.BlockDescription = BlockType.Standard_Speed_Data_Block; + if (dataBlockType == DataBlockType.Turbo) + block.BlockDescription = BlockType.Turbo_Speed_Data_Block; - block.AddMetaData(BlockDescriptorTitle.Pilot_Pulse_Length, pilotToneLength.ToString() + " T-States"); - block.AddMetaData(BlockDescriptorTitle.Pilot_Pulse_Count, pilotCount.ToString() + " Pulses"); - block.AddMetaData(BlockDescriptorTitle.First_Sync_Length, sync1PulseLength.ToString() + " T-States"); - block.AddMetaData(BlockDescriptorTitle.Second_Sync_Length, sync2PulseLength.ToString() + " T-States"); - break; + block.AddMetaData(BlockDescriptorTitle.Pilot_Pulse_Length, pilotToneLength.ToString() + " T-States"); + block.AddMetaData(BlockDescriptorTitle.Pilot_Pulse_Count, pilotCount.ToString() + " Pulses"); + block.AddMetaData(BlockDescriptorTitle.First_Sync_Length, sync1PulseLength.ToString() + " T-States"); + block.AddMetaData(BlockDescriptorTitle.Second_Sync_Length, sync2PulseLength.ToString() + " T-States"); + break; - case DataBlockType.Pure: - block.BlockDescription = BlockType.Pure_Data_Block; - break; - } + case DataBlockType.Pure: + block.BlockDescription = BlockType.Pure_Data_Block; + break; + } - block.AddMetaData(BlockDescriptorTitle.Zero_Bit_Length, bit0PulseLength.ToString() + " T-States"); - block.AddMetaData(BlockDescriptorTitle.One_Bit_Length, bit1PulseLength.ToString() + " T-States"); - block.AddMetaData(BlockDescriptorTitle.Data_Length, blockSize.ToString() + " Bytes"); - block.AddMetaData(BlockDescriptorTitle.Bits_In_Last_Byte, bitsInLastByte.ToString() + " Bits"); - block.AddMetaData(BlockDescriptorTitle.Pause_After_Data, pauseAfterBlock.ToString() + " ms"); + block.AddMetaData(BlockDescriptorTitle.Zero_Bit_Length, bit0PulseLength.ToString() + " T-States"); + block.AddMetaData(BlockDescriptorTitle.One_Bit_Length, bit1PulseLength.ToString() + " T-States"); + block.AddMetaData(BlockDescriptorTitle.Data_Length, blockSize.ToString() + " Bytes"); + block.AddMetaData(BlockDescriptorTitle.Bits_In_Last_Byte, bitsInLastByte.ToString() + " Bits"); + block.AddMetaData(BlockDescriptorTitle.Pause_After_Data, pauseAfterBlock.ToString() + " ms"); - // calculate period information - List dataPeriods = new List(); + // calculate period information + List dataPeriods = new List(); - // generate pilot pulses + // generate pilot pulses - if (pilotCount > 0) - { - for (int i = 0; i < pilotCount; i++) - { - dataPeriods.Add(pilotToneLength); - } + if (pilotCount > 0) + { + for (int i = 0; i < pilotCount; i++) + { + dataPeriods.Add(pilotToneLength); + } - // add syncro pulses - dataPeriods.Add(sync1PulseLength); - dataPeriods.Add(sync2PulseLength); - } + // add syncro pulses + dataPeriods.Add(sync1PulseLength); + dataPeriods.Add(sync2PulseLength); + } - int pos = 0; + int pos = 0; - // add bit0 and bit1 periods - for (int i = 0; i < blockSize - 1; i++, pos++) - { - for (byte b = 0x80; b != 0; b >>= 1) - { - if ((blockdata[i] & b) != 0) - dataPeriods.Add(bit1PulseLength); - else - dataPeriods.Add(bit0PulseLength); - if ((blockdata[i] & b) != 0) - dataPeriods.Add(bit1PulseLength); - else - dataPeriods.Add(bit0PulseLength); - } - } + // add bit0 and bit1 periods + for (int i = 0; i < blockSize - 1; i++, pos++) + { + for (byte b = 0x80; b != 0; b >>= 1) + { + if ((blockdata[i] & b) != 0) + dataPeriods.Add(bit1PulseLength); + else + dataPeriods.Add(bit0PulseLength); + if ((blockdata[i] & b) != 0) + dataPeriods.Add(bit1PulseLength); + else + dataPeriods.Add(bit0PulseLength); + } + } - // add the last byte - for (byte c = 0x80; c != (byte)(0x80 >> bitsInLastByte); c >>= 1) - { - if ((blockdata[pos] & c) != 0) - dataPeriods.Add(bit1PulseLength); - else - dataPeriods.Add(bit0PulseLength); - if ((blockdata[pos] & c) != 0) - dataPeriods.Add(bit1PulseLength); - else - dataPeriods.Add(bit0PulseLength); - } + // add the last byte + for (byte c = 0x80; c != (byte)(0x80 >> bitsInLastByte); c >>= 1) + { + if ((blockdata[pos] & c) != 0) + dataPeriods.Add(bit1PulseLength); + else + dataPeriods.Add(bit0PulseLength); + if ((blockdata[pos] & c) != 0) + dataPeriods.Add(bit1PulseLength); + else + dataPeriods.Add(bit0PulseLength); + } - // add block pause if pause is not 0 - if (pauseAfterBlock != 0) - { - block.PauseInMS = pauseAfterBlock; - //int actualPause = pauseAfterBlock * 3500; - //dataPeriods.Add(actualPause); - } + // add block pause if pause is not 0 + if (pauseAfterBlock != 0) + { + block.PauseInMS = pauseAfterBlock; + //int actualPause = pauseAfterBlock * 3500; + //dataPeriods.Add(actualPause); + } - // add to the tapedatablock object - block.DataPeriods = dataPeriods; + // add to the tapedatablock object + block.DataPeriods = dataPeriods; - // add the raw data - block.BlockData = blockdata; + // add the raw data + block.BlockData = blockdata; - return block; - } + return block; + } - /// - /// Used to process either a standard or turbo data block - /// - private TapeDataBlock DecodeDataBlock - ( - TapeDataBlock block, - byte[] blockData, - DataBlockType dataBlockType, - int pauseAfterBlock, + /// + /// Used to process either a standard or turbo data block + /// + private TapeDataBlock DecodeDataBlock + ( + TapeDataBlock block, + byte[] blockData, + DataBlockType dataBlockType, + int pauseAfterBlock, - int pilotToneLength = 2168, - int sync1PulseLength = 667, - int sync2PulseLength = 735, - int bit0PulseLength = 855, - int bit1PulseLength = 1710, - int bitsInLastByte = 8 - ) - { + int pilotToneLength = 2168, + int sync1PulseLength = 667, + int sync2PulseLength = 735, + int bit0PulseLength = 855, + int bit1PulseLength = 1710, + int bitsInLastByte = 8 + ) + { - - int pilotCount = 3220; - /* + + int pilotCount = 3220; + /* // pilot count needs to be ascertained from flag byte int pilotCount; if (blockData[0] < 128) @@ -1918,70 +1918,70 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC pilotCount = 3223; */ - // now we can decode - var nBlock = DecodeDataBlock - ( - block, - blockData, - dataBlockType, - pauseAfterBlock, - pilotCount, - pilotToneLength, - sync1PulseLength, - sync2PulseLength, - bit0PulseLength, - bit1PulseLength, - bitsInLastByte - ); + // now we can decode + var nBlock = DecodeDataBlock + ( + block, + blockData, + dataBlockType, + pauseAfterBlock, + pilotCount, + pilotToneLength, + sync1PulseLength, + sync2PulseLength, + bit0PulseLength, + bit1PulseLength, + bitsInLastByte + ); - return nBlock; - } + return nBlock; + } - #endregion + #endregion - #region Pause Block Creator + #region Pause Block Creator - /// - /// If neccessary a seperate PAUSE block will be created - /// - private void CreatePauseBlock(TapeDataBlock original) - { - if (original.PauseInMS > 0) - { - TapeDataBlock pBlock = new TapeDataBlock(); - pBlock.DataPeriods = new List(); - pBlock.BlockDescription = BlockType.PAUSE_BLOCK; - pBlock.PauseInMS = 0; - var pauseInTStates = TranslatePause(original.PauseInMS); + /// + /// If neccessary a seperate PAUSE block will be created + /// + private void CreatePauseBlock(TapeDataBlock original) + { + if (original.PauseInMS > 0) + { + TapeDataBlock pBlock = new TapeDataBlock(); + pBlock.DataPeriods = new List(); + pBlock.BlockDescription = BlockType.PAUSE_BLOCK; + pBlock.PauseInMS = 0; + var pauseInTStates = TranslatePause(original.PauseInMS); - pBlock.AddMetaData(BlockDescriptorTitle.Block_ID, pauseInTStates.ToString() + " cycles"); + pBlock.AddMetaData(BlockDescriptorTitle.Block_ID, pauseInTStates.ToString() + " cycles"); - int by1000 = pauseInTStates / 70000; - int rem1000 = pauseInTStates % 70000; + int by1000 = pauseInTStates / 70000; + int rem1000 = pauseInTStates % 70000; - if (by1000 > 1) - { - pBlock.DataPeriods.Add(35000); - pBlock.DataPeriods.Add(pauseInTStates - 35000); - } - else - { - pBlock.DataPeriods.Add(pauseInTStates); - pBlock.DataPeriods.Add(0); - } + if (by1000 > 1) + { + pBlock.DataPeriods.Add(35000); + pBlock.DataPeriods.Add(pauseInTStates - 35000); + } + else + { + pBlock.DataPeriods.Add(pauseInTStates); + pBlock.DataPeriods.Add(0); + } - _datacorder.DataBlocks.Add(pBlock); - } - } + _datacorder.DataBlocks.Add(pBlock); + } + } - #endregion - } + #endregion + } - public enum DataBlockType - { - Standard, - Turbo, - Pure - } + public enum DataBlockType + { + Standard, + Turbo, + Pure + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/TapeCommand.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/TapeCommand.cs index 58aa8cdbee..5af5c32109 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/TapeCommand.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/TapeCommand.cs @@ -1,16 +1,16 @@  namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Represents the possible commands that can be raised from each tape block - /// - public enum TapeCommand - { - NONE, - STOP_THE_TAPE, - STOP_THE_TAPE_48K, - BEGIN_GROUP, - END_GROUP, - SHOW_MESSAGE, - } + /// + /// Represents the possible commands that can be raised from each tape block + /// + public enum TapeCommand + { + NONE, + STOP_THE_TAPE, + STOP_THE_TAPE_48K, + BEGIN_GROUP, + END_GROUP, + SHOW_MESSAGE, + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/TapeDataBlock.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/TapeDataBlock.cs index 64c31d87c4..0cd5627d5e 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/TapeDataBlock.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/TapeDataBlock.cs @@ -5,51 +5,53 @@ using System.Text; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Represents a tape block - /// - public class TapeDataBlock - { - /// - /// Either the TZX block ID, or -1 in the case of non-tzx blocks - /// - private int _blockID = -1; - public int BlockID - { - get { return _blockID; } - set { - _blockID = value; + /// + /// Represents a tape block + /// + public class TapeDataBlock + { + /// + /// Either the TZX block ID, or -1 in the case of non-tzx blocks + /// + private int _blockID = -1; + public int BlockID + { + get { return _blockID; } + set + { + _blockID = value; - if (MetaData == null) - MetaData = new Dictionary(); + if (MetaData == null) + MetaData = new Dictionary(); - AddMetaData(BlockDescriptorTitle.Block_ID, value.ToString()); - } - } + AddMetaData(BlockDescriptorTitle.Block_ID, value.ToString()); + } + } - /// - /// The block type - /// - private BlockType _blockType; - public BlockType BlockDescription - { - get { return _blockType; } - set { - _blockType = value; - if (MetaData == null) - MetaData = new Dictionary(); - } - } + /// + /// The block type + /// + private BlockType _blockType; + public BlockType BlockDescription + { + get { return _blockType; } + set + { + _blockType = value; + if (MetaData == null) + MetaData = new Dictionary(); + } + } - /// - /// Byte array containing the raw block data - /// - private byte[] _blockData; - public byte[] BlockData - { - get { return _blockData; } - set { _blockData = value; } - } + /// + /// Byte array containing the raw block data + /// + private byte[] _blockData; + public byte[] BlockData + { + get { return _blockData; } + set { _blockData = value; } + } /* /// @@ -78,203 +80,203 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC */ - #region Block Meta Data + #region Block Meta Data - /// - /// Dictionary of block related data - /// - public Dictionary MetaData { get; set; } + /// + /// Dictionary of block related data + /// + public Dictionary MetaData { get; set; } - /// - /// Adds a single metadata item to the Dictionary - /// - public void AddMetaData(BlockDescriptorTitle descriptor, string data) - { - // check whether entry already exists - bool check = MetaData.ContainsKey(descriptor); - if (check) - { - // already exists - update - MetaData[descriptor] = data; - } - else - { - // create new - MetaData.Add(descriptor, data); - } - } + /// + /// Adds a single metadata item to the Dictionary + /// + public void AddMetaData(BlockDescriptorTitle descriptor, string data) + { + // check whether entry already exists + bool check = MetaData.ContainsKey(descriptor); + if (check) + { + // already exists - update + MetaData[descriptor] = data; + } + else + { + // create new + MetaData.Add(descriptor, data); + } + } - #endregion + #endregion - /// - /// List containing the pulse timing values - /// - public List DataPeriods = new List(); + /// + /// List containing the pulse timing values + /// + public List DataPeriods = new List(); - public bool InitialPulseLevel; + public bool InitialPulseLevel; - /// - /// Command that is raised by this data block - /// (that may or may not need to be acted on) - /// - private TapeCommand _command = TapeCommand.NONE; - public TapeCommand Command - { - get { return _command; } - set { _command = value; } - } + /// + /// Command that is raised by this data block + /// (that may or may not need to be acted on) + /// + private TapeCommand _command = TapeCommand.NONE; + public TapeCommand Command + { + get { return _command; } + set { _command = value; } + } - /// - /// The defined post-block pause - /// - private int _pauseInMS; - public int PauseInMS - { - get { return _pauseInMS; } - set { _pauseInMS = value; } - } + /// + /// The defined post-block pause + /// + private int _pauseInMS; + public int PauseInMS + { + get { return _pauseInMS; } + set { _pauseInMS = value; } + } - /// - /// Returns the data periods as an array - /// (primarily to aid in bizhawk state serialization) - /// - public int[] GetDataPeriodsArray() - { - return DataPeriods.ToArray(); - } + /// + /// Returns the data periods as an array + /// (primarily to aid in bizhawk state serialization) + /// + public int[] GetDataPeriodsArray() + { + return DataPeriods.ToArray(); + } - /// - /// Accepts an array of data periods and updates the DataPeriods list accordingly - /// (primarily to aid in bizhawk state serialization) - /// - public void SetDataPeriodsArray(int[] periodArray) - { - DataPeriods = periodArray?.ToList() ?? new List(); - } + /// + /// Accepts an array of data periods and updates the DataPeriods list accordingly + /// (primarily to aid in bizhawk state serialization) + /// + public void SetDataPeriodsArray(int[] periodArray) + { + DataPeriods = periodArray?.ToList() ?? new List(); + } - /// - /// Bizhawk state serialization - /// - public void SyncState(Serializer ser, int blockPosition) - { - ser.BeginSection("DataBlock" + blockPosition); + /// + /// Bizhawk state serialization + /// + public void SyncState(Serializer ser, int blockPosition) + { + ser.BeginSection("DataBlock" + blockPosition); - ser.Sync(nameof(_blockID), ref _blockID); - //ser.SyncFixedString(nameof(_blockDescription), ref _blockDescription, 200); - ser.SyncEnum(nameof(_blockType), ref _blockType); - ser.Sync(nameof(_blockData), ref _blockData, true); - ser.SyncEnum(nameof(_command), ref _command); + ser.Sync(nameof(_blockID), ref _blockID); + //ser.SyncFixedString(nameof(_blockDescription), ref _blockDescription, 200); + ser.SyncEnum(nameof(_blockType), ref _blockType); + ser.Sync(nameof(_blockData), ref _blockData, true); + ser.SyncEnum(nameof(_command), ref _command); - int[] tempArray = null; + int[] tempArray = null; - if (ser.IsWriter) - { - tempArray = GetDataPeriodsArray(); - ser.Sync("_periods", ref tempArray, true); - } - else - { - ser.Sync("_periods", ref tempArray, true); - SetDataPeriodsArray(tempArray); - } + if (ser.IsWriter) + { + tempArray = GetDataPeriodsArray(); + ser.Sync("_periods", ref tempArray, true); + } + else + { + ser.Sync("_periods", ref tempArray, true); + SetDataPeriodsArray(tempArray); + } - ser.EndSection(); - } - } + ser.EndSection(); + } + } - /// - /// The types of TZX blocks - /// - public enum BlockType - { - Standard_Speed_Data_Block = 0x10, - Turbo_Speed_Data_Block = 0x11, - Pure_Tone = 0x12, - Pulse_Sequence = 0x13, - Pure_Data_Block = 0x14, - Direct_Recording = 0x15, - CSW_Recording = 0x18, - Generalized_Data_Block = 0x19, - Pause_or_Stop_the_Tape = 0x20, - Group_Start = 0x21, - Group_End = 0x22, - Jump_to_Block = 0x23, - Loop_Start = 0x24, - Loop_End = 0x25, - Call_Sequence = 0x26, - Return_From_Sequence = 0x27, - Select_Block = 0x28, - Stop_the_Tape_48K = 0x2A, - Set_Signal_Level = 0x2B, - Text_Description = 0x30, - Message_Block = 0x31, - Archive_Info = 0x32, - Hardware_Type = 0x33, - Custom_Info_Block = 0x35, - Glue_Block = 0x5A, + /// + /// The types of TZX blocks + /// + public enum BlockType + { + Standard_Speed_Data_Block = 0x10, + Turbo_Speed_Data_Block = 0x11, + Pure_Tone = 0x12, + Pulse_Sequence = 0x13, + Pure_Data_Block = 0x14, + Direct_Recording = 0x15, + CSW_Recording = 0x18, + Generalized_Data_Block = 0x19, + Pause_or_Stop_the_Tape = 0x20, + Group_Start = 0x21, + Group_End = 0x22, + Jump_to_Block = 0x23, + Loop_Start = 0x24, + Loop_End = 0x25, + Call_Sequence = 0x26, + Return_From_Sequence = 0x27, + Select_Block = 0x28, + Stop_the_Tape_48K = 0x2A, + Set_Signal_Level = 0x2B, + Text_Description = 0x30, + Message_Block = 0x31, + Archive_Info = 0x32, + Hardware_Type = 0x33, + Custom_Info_Block = 0x35, + Glue_Block = 0x5A, - // depreciated blocks - C64_ROM_Type_Data_Block = 0x16, - C64_Turbo_Tape_Data_Block = 0x17, - Emulation_Info = 0x34, - Snapshot_Block = 0x40, + // depreciated blocks + C64_ROM_Type_Data_Block = 0x16, + C64_Turbo_Tape_Data_Block = 0x17, + Emulation_Info = 0x34, + Snapshot_Block = 0x40, - // unsupported / undetected - Unsupported, + // unsupported / undetected + Unsupported, - // PZX blocks - PZXT, - PULS, - DATA, - BRWS, - PAUS, + // PZX blocks + PZXT, + PULS, + DATA, + BRWS, + PAUS, - // zxhawk proprietry - PAUSE_BLOCK, + // zxhawk proprietry + PAUSE_BLOCK, - WAV_Recording - } - + WAV_Recording + } - /// - /// Different title possibilities - /// - public enum BlockDescriptorTitle - { - Undefined, - Block_ID, - Program, - Data_Bytes, - Bytes, - Pilot_Pulse_Length, - Pilot_Pulse_Count, - First_Sync_Length, - Second_Sync_Length, - Zero_Bit_Length, - One_Bit_Length, - Data_Length, - Bits_In_Last_Byte, - Pause_After_Data, + /// + /// Different title possibilities + /// + public enum BlockDescriptorTitle + { + Undefined, + Block_ID, + Program, + Data_Bytes, + Bytes, - Pulse_Length, - Pulse_Count, + Pilot_Pulse_Length, + Pilot_Pulse_Count, + First_Sync_Length, + Second_Sync_Length, + Zero_Bit_Length, + One_Bit_Length, + Data_Length, + Bits_In_Last_Byte, + Pause_After_Data, - Text_Description, - Title, - Publisher, - Author, - Year, - Language, - Type, - Price, - Protection, - Origin, - Comments, + Pulse_Length, + Pulse_Count, - Needs_Parsing - } + Text_Description, + Title, + Publisher, + Author, + Year, + Language, + Type, + Price, + Protection, + Origin, + Comments, + + Needs_Parsing + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/ROM/RomData.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/ROM/RomData.cs index 9520f50323..2e67a20491 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/ROM/RomData.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/ROM/RomData.cs @@ -1,64 +1,64 @@  namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// Information about Amstrad ROM - /// - public class RomData - { - /// - /// ROM Contents - /// - public byte[] RomBytes - { - get { return _romBytes; } - set { _romBytes = value; } - } - private byte[] _romBytes; + /// + /// Information about Amstrad ROM + /// + public class RomData + { + /// + /// ROM Contents + /// + public byte[] RomBytes + { + get { return _romBytes; } + set { _romBytes = value; } + } + private byte[] _romBytes; - public enum ROMChipType - { - Lower, - Upper - } + public enum ROMChipType + { + Lower, + Upper + } - /// - /// Whether this is an Upper or Lower ROM - /// - public ROMChipType ROMType; + /// + /// Whether this is an Upper or Lower ROM + /// + public ROMChipType ROMType; - /// - /// The designated ROM position for this ROM - /// - public int ROMPosition; + /// + /// The designated ROM position for this ROM + /// + public int ROMPosition; - /// - /// Initialise a RomData object - /// - public static RomData InitROM(MachineType machineType, byte[] rom, ROMChipType type, int romPosition = 0) - { - RomData RD = new RomData(); - RD.RomBytes = new byte[rom.Length]; - RD.RomBytes = rom; - RD.ROMType = type; + /// + /// Initialise a RomData object + /// + public static RomData InitROM(MachineType machineType, byte[] rom, ROMChipType type, int romPosition = 0) + { + RomData RD = new RomData(); + RD.RomBytes = new byte[rom.Length]; + RD.RomBytes = rom; + RD.ROMType = type; - if (type == ROMChipType.Upper) - { - RD.ROMPosition = romPosition; - } + if (type == ROMChipType.Upper) + { + RD.ROMPosition = romPosition; + } - for (int i = 0; i < rom.Length; i++) - RD.RomBytes[i] = rom[i]; + for (int i = 0; i < rom.Length; i++) + RD.RomBytes[i] = rom[i]; - switch (machineType) - { - case MachineType.CPC464: - break; - case MachineType.CPC6128: - break; - } + switch (machineType) + { + case MachineType.CPC464: + break; + case MachineType.CPC6128: + break; + } - return RD; - } - } + return RD; + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/SoundProviderMixer.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/SoundProviderMixer.cs index 77e30f5fca..14ecef4e39 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/SoundProviderMixer.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/SoundProviderMixer.cs @@ -5,213 +5,213 @@ using System.Linq; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { - /// - /// My attempt at mixing multiple ISoundProvider sources together and outputting another ISoundProvider - /// Currently only supports SyncSoundMode.Sync - /// Attached ISoundProvider sources must already be stereo 44.1khz and ideally sound buffers should be the same length (882) - /// (if not, only 882 samples of their buffer will be used) - /// - internal sealed class SoundProviderMixer : ISoundProvider - { - private class Provider - { - public ISoundProvider SoundProvider { get; set; } - public string ProviderDescription { get; set; } - public int MaxVolume { get; set; } - public short[] Buffer { get; set; } - public int NSamp { get; set; } - } + /// + /// My attempt at mixing multiple ISoundProvider sources together and outputting another ISoundProvider + /// Currently only supports SyncSoundMode.Sync + /// Attached ISoundProvider sources must already be stereo 44.1khz and ideally sound buffers should be the same length (882) + /// (if not, only 882 samples of their buffer will be used) + /// + internal sealed class SoundProviderMixer : ISoundProvider + { + private class Provider + { + public ISoundProvider SoundProvider { get; set; } + public string ProviderDescription { get; set; } + public int MaxVolume { get; set; } + public short[] Buffer { get; set; } + public int NSamp { get; set; } + } - private bool _stereo = true; - public bool Stereo - { - get { return _stereo; } - set { _stereo = value; } - } + private bool _stereo = true; + public bool Stereo + { + get { return _stereo; } + set { _stereo = value; } + } - private readonly List SoundProviders; - - public SoundProviderMixer(params ISoundProvider[] soundProviders) - { - SoundProviders = new List(); + private readonly List SoundProviders; - foreach (var s in soundProviders) - { - SoundProviders.Add(new Provider - { - SoundProvider = s, - MaxVolume = short.MaxValue, - }); - } + public SoundProviderMixer(params ISoundProvider[] soundProviders) + { + SoundProviders = new List(); - EqualizeVolumes(); - } + foreach (var s in soundProviders) + { + SoundProviders.Add(new Provider + { + SoundProvider = s, + MaxVolume = short.MaxValue, + }); + } - public SoundProviderMixer(short maxVolume, string description, params ISoundProvider[] soundProviders) - { - SoundProviders = new List(); + EqualizeVolumes(); + } - foreach (var s in soundProviders) - { - SoundProviders.Add(new Provider - { - SoundProvider = s, - MaxVolume = maxVolume, - ProviderDescription = description - }); - } + public SoundProviderMixer(short maxVolume, string description, params ISoundProvider[] soundProviders) + { + SoundProviders = new List(); - EqualizeVolumes(); - } + foreach (var s in soundProviders) + { + SoundProviders.Add(new Provider + { + SoundProvider = s, + MaxVolume = maxVolume, + ProviderDescription = description + }); + } - public void AddSource(ISoundProvider source, string description) - { - SoundProviders.Add(new Provider - { - SoundProvider = source, - MaxVolume = short.MaxValue, - ProviderDescription = description - }); + EqualizeVolumes(); + } - EqualizeVolumes(); - } + public void AddSource(ISoundProvider source, string description) + { + SoundProviders.Add(new Provider + { + SoundProvider = source, + MaxVolume = short.MaxValue, + ProviderDescription = description + }); - public void AddSource(ISoundProvider source, short maxVolume, string description) - { - SoundProviders.Add(new Provider - { - SoundProvider = source, - MaxVolume = maxVolume, - ProviderDescription = description - }); + EqualizeVolumes(); + } - EqualizeVolumes(); - } + public void AddSource(ISoundProvider source, short maxVolume, string description) + { + SoundProviders.Add(new Provider + { + SoundProvider = source, + MaxVolume = maxVolume, + ProviderDescription = description + }); - public void DisableSource(ISoundProvider source) - { - var sp = SoundProviders.Where(a => a.SoundProvider == source); - if (sp.Count() == 1) - SoundProviders.Remove(sp.First()); - else if (sp.Count() > 1) - foreach (var s in sp) - SoundProviders.Remove(s); + EqualizeVolumes(); + } - EqualizeVolumes(); - } + public void DisableSource(ISoundProvider source) + { + var sp = SoundProviders.Where(a => a.SoundProvider == source); + if (sp.Count() == 1) + SoundProviders.Remove(sp.First()); + else if (sp.Count() > 1) + foreach (var s in sp) + SoundProviders.Remove(s); - public void EqualizeVolumes() - { - if (SoundProviders.Count < 1) - return; + EqualizeVolumes(); + } - int eachVolume = short.MaxValue / SoundProviders.Count; - foreach (var source in SoundProviders) - { - source.MaxVolume = eachVolume; - } - } + public void EqualizeVolumes() + { + if (SoundProviders.Count < 1) + return; - #region ISoundProvider + int eachVolume = short.MaxValue / SoundProviders.Count; + foreach (var source in SoundProviders) + { + source.MaxVolume = eachVolume; + } + } - public bool CanProvideAsync => false; - public SyncSoundMode SyncMode => SyncSoundMode.Sync; + #region ISoundProvider - public void SetSyncMode(SyncSoundMode mode) - { - if (mode != SyncSoundMode.Sync) - throw new InvalidOperationException("Only Sync mode is supported."); - } + public bool CanProvideAsync => false; + public SyncSoundMode SyncMode => SyncSoundMode.Sync; - public void GetSamplesAsync(short[] samples) - { - throw new NotSupportedException("Async is not available"); - } + public void SetSyncMode(SyncSoundMode mode) + { + if (mode != SyncSoundMode.Sync) + throw new InvalidOperationException("Only Sync mode is supported."); + } - public void DiscardSamples() - { - foreach (var soundSource in SoundProviders) - { - soundSource.SoundProvider.DiscardSamples(); - } - } + public void GetSamplesAsync(short[] samples) + { + throw new NotSupportedException("Async is not available"); + } - public void GetSamplesSync(out short[] samples, out int nsamp) - { - samples = null; - nsamp = 0; + public void DiscardSamples() + { + foreach (var soundSource in SoundProviders) + { + soundSource.SoundProvider.DiscardSamples(); + } + } - // get samples from all the providers - foreach (var sp in SoundProviders) - { - int sampCount; - short[] samp; - sp.SoundProvider.GetSamplesSync(out samp, out sampCount); - sp.NSamp = sampCount; - sp.Buffer = samp; - } + public void GetSamplesSync(out short[] samples, out int nsamp) + { + samples = null; + nsamp = 0; - // are all the sample lengths the same? - var firstEntry = SoundProviders.First(); - bool sameCount = SoundProviders.All(s => s.NSamp == firstEntry.NSamp); + // get samples from all the providers + foreach (var sp in SoundProviders) + { + int sampCount; + short[] samp; + sp.SoundProvider.GetSamplesSync(out samp, out sampCount); + sp.NSamp = sampCount; + sp.Buffer = samp; + } - if (!sameCount) - { - // this is a bit hacky, really all ISoundProviders should be supplying 44100 with 882 samples per frame. - // we will make sure this happens (no matter how it sounds) - if (SoundProviders.Count > 1) - { - for (int i = 0; i < SoundProviders.Count; i++) - { - int ns = SoundProviders[i].NSamp; - short[] buff = new short[882 * 2]; + // are all the sample lengths the same? + var firstEntry = SoundProviders.First(); + bool sameCount = SoundProviders.All(s => s.NSamp == firstEntry.NSamp); - for (int b = 0; b < 882 * 2; b++) - { - if (b == SoundProviders[i].Buffer.Length - 1) - { - // end of source buffer - break; - } + if (!sameCount) + { + // this is a bit hacky, really all ISoundProviders should be supplying 44100 with 882 samples per frame. + // we will make sure this happens (no matter how it sounds) + if (SoundProviders.Count > 1) + { + for (int i = 0; i < SoundProviders.Count; i++) + { + int ns = SoundProviders[i].NSamp; + short[] buff = new short[882 * 2]; - buff[b] = SoundProviders[i].Buffer[b]; - } + for (int b = 0; b < 882 * 2; b++) + { + if (b == SoundProviders[i].Buffer.Length - 1) + { + // end of source buffer + break; + } - // save back to the soundprovider - SoundProviders[i].NSamp = 882; - SoundProviders[i].Buffer = buff; - } - } - else - { - // just process what we have as-is - } - } + buff[b] = SoundProviders[i].Buffer[b]; + } - // mix the soundproviders together - nsamp = 882; - samples = new short[nsamp * 2]; + // save back to the soundprovider + SoundProviders[i].NSamp = 882; + SoundProviders[i].Buffer = buff; + } + } + else + { + // just process what we have as-is + } + } - for (int i = 0; i < samples.Length; i++) - { - short sectorVal = 0; - foreach (var sp in SoundProviders) - { - if (i < sp.Buffer.Length) - { - if (sp.Buffer[i] > sp.MaxVolume) - sectorVal += (short)sp.MaxVolume; - else - sectorVal += sp.Buffer[i]; - } - - } + // mix the soundproviders together + nsamp = 882; + samples = new short[nsamp * 2]; - samples[i] = sectorVal; - } - } + for (int i = 0; i < samples.Length; i++) + { + short sectorVal = 0; + foreach (var sp in SoundProviders) + { + if (i < sp.Buffer.Length) + { + if (sp.Buffer[i] > sp.MaxVolume) + sectorVal += (short)sp.MaxVolume; + else + sectorVal += sp.Buffer[i]; + } - #endregion + } - } + samples[i] = sectorVal; + } + } + + #endregion + + } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IStatable.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IStatable.cs index d8c3e9840f..33d7787322 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IStatable.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IStatable.cs @@ -31,13 +31,11 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 public byte[] SaveStateBinary() { - using (var ms = new MemoryStream()) - { - var bw = new BinaryWriter(ms); - SaveStateBinary(bw); - bw.Flush(); - return ms.ToArray(); - } + using var ms = new MemoryStream(); + using var bw = new BinaryWriter(ms); + SaveStateBinary(bw); + bw.Flush(); + return ms.ToArray(); } private void SyncState(Serializer ser) diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IBeeperDevice.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IBeeperDevice.cs index 3b8ec3b0a6..8d40ce166c 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IBeeperDevice.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IBeeperDevice.cs @@ -2,24 +2,24 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Represents a beeper/buzzer device - /// - public interface IBeeperDevice - { - /// - /// Initialisation - /// - void Init(int sampleRate, int tStatesPerFrame); + /// + /// Represents a beeper/buzzer device + /// + public interface IBeeperDevice + { + /// + /// Initialisation + /// + void Init(int sampleRate, int tStatesPerFrame); - /// - /// Processes an incoming pulse value and adds it to the blipbuffer - /// - void ProcessPulseValue(bool pulse); + /// + /// Processes an incoming pulse value and adds it to the blipbuffer + /// + void ProcessPulseValue(bool pulse); - /// - /// State serialization - /// - void SyncState(Serializer ser); - } + /// + /// State serialization + /// + void SyncState(Serializer ser); + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IFDDHost.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IFDDHost.cs index 3bbc0c81d8..2586d05d61 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IFDDHost.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IFDDHost.cs @@ -1,29 +1,29 @@  namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Defines an object that can load a floppy disk image - /// - public interface IFDDHost - { - /// - /// The currently inserted diskimage - /// - FloppyDisk Disk { get; set; } + /// + /// Defines an object that can load a floppy disk image + /// + public interface IFDDHost + { + /// + /// The currently inserted diskimage + /// + FloppyDisk Disk { get; set; } - /// - /// Parses a new disk image and loads it into this floppy drive - /// - void FDD_LoadDisk(byte[] diskData); + /// + /// Parses a new disk image and loads it into this floppy drive + /// + void FDD_LoadDisk(byte[] diskData); - /// - /// Ejects the current disk - /// - void FDD_EjectDisk(); + /// + /// Ejects the current disk + /// + void FDD_EjectDisk(); - /// - /// Signs whether the current active drive has a disk inserted - /// - bool FDD_IsDiskLoaded { get; } - } + /// + /// Signs whether the current active drive has a disk inserted + /// + bool FDD_IsDiskLoaded { get; } + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IJoystick.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IJoystick.cs index 6e29e02012..6ea7acd897 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IJoystick.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IJoystick.cs @@ -1,34 +1,34 @@  namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Represents a spectrum joystick - /// - public interface IJoystick - { - /// - /// The type of joystick - /// - JoystickType JoyType { get; } + /// + /// Represents a spectrum joystick + /// + public interface IJoystick + { + /// + /// The type of joystick + /// + JoystickType JoyType { get; } - /// - /// Array of all the possibly button press names - /// - string[] ButtonCollection { get; set; } + /// + /// Array of all the possibly button press names + /// + string[] ButtonCollection { get; set; } - /// - /// The player number that this controller is currently assigned to - /// - int PlayerNumber { get; set; } + /// + /// The player number that this controller is currently assigned to + /// + int PlayerNumber { get; set; } - /// - /// Sets the joystick line based on key pressed - /// - void SetJoyInput(string key, bool isPressed); + /// + /// Sets the joystick line based on key pressed + /// + void SetJoyInput(string key, bool isPressed); - /// - /// Gets the state of a particular joystick binding - /// - bool GetJoyInput(string key); - } + /// + /// Gets the state of a particular joystick binding + /// + bool GetJoyInput(string key); + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IKeyboard.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IKeyboard.cs index 085792d874..ad1cc4acc2 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IKeyboard.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IKeyboard.cs @@ -2,69 +2,69 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Represents a spectrum keyboard - /// - public interface IKeyboard : IPortIODevice - { - /// - /// The calling spectrumbase class - /// - SpectrumBase _machine { get; } + /// + /// Represents a spectrum keyboard + /// + public interface IKeyboard : IPortIODevice + { + /// + /// The calling spectrumbase class + /// + SpectrumBase _machine { get; } - /// - /// The keyboard matrix for a particular spectrum model - /// - string[] KeyboardMatrix { get; set; } + /// + /// The keyboard matrix for a particular spectrum model + /// + string[] KeyboardMatrix { get; set; } - /// - /// Other keyboard keys that are not in the matrix - /// (usually keys derived from key combos) - /// - string[] NonMatrixKeys { get; set; } + /// + /// Other keyboard keys that are not in the matrix + /// (usually keys derived from key combos) + /// + string[] NonMatrixKeys { get; set; } - /// - /// Represents the spectrum key state - /// - int[] KeyLine { get; set; } + /// + /// Represents the spectrum key state + /// + int[] KeyLine { get; set; } - /// - /// Resets the line status - /// - void ResetLineStatus(); + /// + /// Resets the line status + /// + void ResetLineStatus(); - /// - /// There are some slight differences in how PortIN and PortOUT functions - /// between Issue2 and Issue3 keyboards (16k/48k spectrum only) - /// It is possible that some very old games require Issue2 emulation - /// - bool IsIssue2Keyboard { get; set; } + /// + /// There are some slight differences in how PortIN and PortOUT functions + /// between Issue2 and Issue3 keyboards (16k/48k spectrum only) + /// It is possible that some very old games require Issue2 emulation + /// + bool IsIssue2Keyboard { get; set; } - /// - /// Sets the spectrum key status - /// - void SetKeyStatus(string key, bool isPressed); + /// + /// Sets the spectrum key status + /// + void SetKeyStatus(string key, bool isPressed); - /// - /// Gets the status of a spectrum key - /// - bool GetKeyStatus(string key); + /// + /// Gets the status of a spectrum key + /// + bool GetKeyStatus(string key); - /// - /// Returns the query byte - /// - byte GetLineStatus(byte lines); + /// + /// Returns the query byte + /// + byte GetLineStatus(byte lines); - /// - /// Reads a keyboard byte - /// - byte ReadKeyboardByte(ushort addr); + /// + /// Reads a keyboard byte + /// + byte ReadKeyboardByte(ushort addr); - /// - /// Looks up a key in the keyboard matrix and returns the relevent byte value - /// - byte GetByteFromKeyMatrix(string key); + /// + /// Looks up a key in the keyboard matrix and returns the relevent byte value + /// + byte GetByteFromKeyMatrix(string key); - void SyncState(Serializer ser); - } + void SyncState(Serializer ser); + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IPSG.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IPSG.cs index 4f1523e70e..cd50120130 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IPSG.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IPSG.cs @@ -3,62 +3,62 @@ using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Represents a PSG device (in this case an AY-3-891x) - /// - public interface IPSG : ISoundProvider, IPortIODevice - { - /// - /// Initlization routine - /// - void Init(int sampleRate, int tStatesPerFrame); + /// + /// Represents a PSG device (in this case an AY-3-891x) + /// + public interface IPSG : ISoundProvider, IPortIODevice + { + /// + /// Initlization routine + /// + void Init(int sampleRate, int tStatesPerFrame); - /// - /// Activates a register - /// - int SelectedRegister { get; set; } + /// + /// Activates a register + /// + int SelectedRegister { get; set; } - int[] ExportRegisters(); - - /// - /// Writes to the PSG - /// - void PortWrite(int value); + int[] ExportRegisters(); - /// - /// Reads from the PSG - /// - int PortRead(); - + /// + /// Writes to the PSG + /// + void PortWrite(int value); - /// - /// Resets the PSG - /// - void Reset(); + /// + /// Reads from the PSG + /// + int PortRead(); - /// - /// The volume of the AY chip - /// - int Volume { get; set; } - /// - /// Called at the start of a frame - /// - void StartFrame(); + /// + /// Resets the PSG + /// + void Reset(); - /// - /// called at the end of a frame - /// - void EndFrame(); + /// + /// The volume of the AY chip + /// + int Volume { get; set; } - /// - /// Updates the sound based on number of frame cycles - /// - void UpdateSound(int frameCycle); + /// + /// Called at the start of a frame + /// + void StartFrame(); - /// - /// IStatable serialization - /// - void SyncState(Serializer ser); - } + /// + /// called at the end of a frame + /// + void EndFrame(); + + /// + /// Updates the sound based on number of frame cycles + /// + void UpdateSound(int frameCycle); + + /// + /// IStatable serialization + /// + void SyncState(Serializer ser); + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IPortIODevice.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IPortIODevice.cs index 2ca7909fbd..7a24c2d1ba 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IPortIODevice.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IPortIODevice.cs @@ -1,19 +1,19 @@  namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Represents a device that utilizes port IN & OUT - /// - public interface IPortIODevice - { - /// - /// Device responds to an IN instruction - /// - bool ReadPort(ushort port, ref int result); + /// + /// Represents a device that utilizes port IN & OUT + /// + public interface IPortIODevice + { + /// + /// Device responds to an IN instruction + /// + bool ReadPort(ushort port, ref int result); - /// - /// Device responds to an OUT instruction - /// - bool WritePort(ushort port, int result); - } + /// + /// Device responds to an OUT instruction + /// + bool WritePort(ushort port, int result); + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs index 7b33813ba9..ec27e4e624 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs @@ -8,986 +8,986 @@ using BizHawk.Emulation.Cores.Sound; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Represents the tape device (or build-in datacorder as it was called +2 and above) - /// - public class DatacorderDevice : IPortIODevice - { - #region Construction + /// + /// Represents the tape device (or build-in datacorder as it was called +2 and above) + /// + public class DatacorderDevice : IPortIODevice + { + #region Construction - private SpectrumBase _machine { get; set; } - private Z80A _cpu { get; set; } - private OneBitBeeper _buzzer { get; set; } + private SpectrumBase _machine { get; set; } + private Z80A _cpu { get; set; } + private OneBitBeeper _buzzer { get; set; } - /// - /// Default constructor - /// - public DatacorderDevice(bool autoplay) - { - _autoPlay = autoplay; - } + /// + /// Default constructor + /// + public DatacorderDevice(bool autoplay) + { + _autoPlay = autoplay; + } - /// - /// Initializes the datacorder device - /// - public void Init(SpectrumBase machine) - { - _machine = machine; - _cpu = _machine.CPU; - _buzzer = machine.TapeBuzzer; - } + /// + /// Initializes the datacorder device + /// + public void Init(SpectrumBase machine) + { + _machine = machine; + _cpu = _machine.CPU; + _buzzer = machine.TapeBuzzer; + } - #endregion + #endregion - #region State Information + #region State Information - /// - /// Internal counter used to trigger tape buzzer output - /// - private int counter = 0; + /// + /// Internal counter used to trigger tape buzzer output + /// + private int counter = 0; - /// - /// The index of the current tape data block that is loaded - /// - private int _currentDataBlockIndex = 0; - public int CurrentDataBlockIndex - { - get - { - if (_dataBlocks.Count() > 0) { return _currentDataBlockIndex; } - else { return -1; } - } - set - { - if (value == _currentDataBlockIndex) { return; } - if (value < _dataBlocks.Count() && value >= 0) - { - _currentDataBlockIndex = value; - _position = 0; - } - } - } + /// + /// The index of the current tape data block that is loaded + /// + private int _currentDataBlockIndex = 0; + public int CurrentDataBlockIndex + { + get + { + if (_dataBlocks.Count() > 0) { return _currentDataBlockIndex; } + else { return -1; } + } + set + { + if (value == _currentDataBlockIndex) { return; } + if (value < _dataBlocks.Count() && value >= 0) + { + _currentDataBlockIndex = value; + _position = 0; + } + } + } - /// - /// The current position within the current data block - /// - private int _position = 0; - public int Position - { - get - { - if (_position >= _dataBlocks[_currentDataBlockIndex].DataPeriods.Count) { return 0; } - else { return _position; } - } - } + /// + /// The current position within the current data block + /// + private int _position = 0; + public int Position + { + get + { + if (_position >= _dataBlocks[_currentDataBlockIndex].DataPeriods.Count) { return 0; } + else { return _position; } + } + } - /// - /// Signs whether the tape is currently playing or not - /// - private bool _tapeIsPlaying = false; - public bool TapeIsPlaying - { - get { return _tapeIsPlaying; } - } + /// + /// Signs whether the tape is currently playing or not + /// + private bool _tapeIsPlaying = false; + public bool TapeIsPlaying + { + get { return _tapeIsPlaying; } + } - /// - /// A list of the currently loaded data blocks - /// - private List _dataBlocks = new List(); - public List DataBlocks - { - get { return _dataBlocks; } - set { _dataBlocks = value; } - } + /// + /// A list of the currently loaded data blocks + /// + private List _dataBlocks = new List(); + public List DataBlocks + { + get { return _dataBlocks; } + set { _dataBlocks = value; } + } - /// - /// Stores the last CPU t-state value - /// - private long _lastCycle = 0; + /// + /// Stores the last CPU t-state value + /// + private long _lastCycle = 0; - /// - /// Edge - /// - private int _waitEdge = 0; + /// + /// Edge + /// + private int _waitEdge = 0; - /// - /// Current tapebit state - /// - private bool currentState = false; + /// + /// Current tapebit state + /// + private bool currentState = false; - #endregion + #endregion - #region Datacorder Device Settings + #region Datacorder Device Settings - /// - /// Signs whether the device should autodetect when the Z80 has entered into - /// 'load' mode and auto-play the tape if neccesary - /// - private bool _autoPlay; + /// + /// Signs whether the device should autodetect when the Z80 has entered into + /// 'load' mode and auto-play the tape if neccesary + /// + private bool _autoPlay; - #endregion + #endregion - #region Emulator + #region Emulator - /// - /// Should be fired at the end of every frame - /// Primary purpose is to detect tape traps and manage auto play - /// - public void EndFrame() - { - MonitorFrame(); - } + /// + /// Should be fired at the end of every frame + /// Primary purpose is to detect tape traps and manage auto play + /// + public void EndFrame() + { + MonitorFrame(); + } /// /// No longer in use /// - public void StartFrame() - { - //_buzzer.ProcessPulseValue(currentState); - } + public void StartFrame() + { + //_buzzer.ProcessPulseValue(currentState); + } - #endregion + #endregion - #region Tape Controls + #region Tape Controls - /// - /// Starts the tape playing from the beginning of the current block - /// - public void Play() - { - if (_tapeIsPlaying) - return; + /// + /// Starts the tape playing from the beginning of the current block + /// + public void Play() + { + if (_tapeIsPlaying) + return; - _machine.Spectrum.OSD_TapePlaying(); + _machine.Spectrum.OSD_TapePlaying(); - // update the lastCycle - _lastCycle = _cpu.TotalExecutedCycles; + // update the lastCycle + _lastCycle = _cpu.TotalExecutedCycles; - // reset waitEdge and position - _waitEdge = 0; - _position = 0; + // reset waitEdge and position + _waitEdge = 0; + _position = 0; - if ( - _dataBlocks.Count > 0 && // data blocks are present && - _currentDataBlockIndex >= 0 // the current data block index is 1 or greater - ) - { - while (_position >= _dataBlocks[_currentDataBlockIndex].DataPeriods.Count) - { - // we are at the end of a data block - move to the next - _position = 0; - _currentDataBlockIndex++; + if ( + _dataBlocks.Count > 0 && // data blocks are present && + _currentDataBlockIndex >= 0 // the current data block index is 1 or greater + ) + { + while (_position >= _dataBlocks[_currentDataBlockIndex].DataPeriods.Count) + { + // we are at the end of a data block - move to the next + _position = 0; + _currentDataBlockIndex++; - // are we at the end of the tape? - if (_currentDataBlockIndex >= _dataBlocks.Count) - { - break; - } - } + // are we at the end of the tape? + if (_currentDataBlockIndex >= _dataBlocks.Count) + { + break; + } + } - // check for end of tape - if (_currentDataBlockIndex >= _dataBlocks.Count) - { - // end of tape reached. Rewind to beginning - AutoStopTape(); - RTZ(); - return; - } + // check for end of tape + if (_currentDataBlockIndex >= _dataBlocks.Count) + { + // end of tape reached. Rewind to beginning + AutoStopTape(); + RTZ(); + return; + } - // update waitEdge with the current position in the current block - _waitEdge = _dataBlocks[_currentDataBlockIndex].DataPeriods[_position]; + // update waitEdge with the current position in the current block + _waitEdge = _dataBlocks[_currentDataBlockIndex].DataPeriods[_position]; - // sign that the tape is now playing - _tapeIsPlaying = true; - } - } + // sign that the tape is now playing + _tapeIsPlaying = true; + } + } - /// - /// Stops the tape - /// (should move to the beginning of the next block) - /// - public void Stop() - { - if (!_tapeIsPlaying) - return; + /// + /// Stops the tape + /// (should move to the beginning of the next block) + /// + public void Stop() + { + if (!_tapeIsPlaying) + return; - _machine.Spectrum.OSD_TapeStopped(); + _machine.Spectrum.OSD_TapeStopped(); - // sign that the tape is no longer playing - _tapeIsPlaying = false; + // sign that the tape is no longer playing + _tapeIsPlaying = false; - if ( - _currentDataBlockIndex >= 0 && // we are at datablock 1 or above - _position >= _dataBlocks[_currentDataBlockIndex].DataPeriods.Count - 1 // the block is still playing back - ) - { - // move to the next block - _currentDataBlockIndex++; + if ( + _currentDataBlockIndex >= 0 && // we are at datablock 1 or above + _position >= _dataBlocks[_currentDataBlockIndex].DataPeriods.Count - 1 // the block is still playing back + ) + { + // move to the next block + _currentDataBlockIndex++; - if (_currentDataBlockIndex >= _dataBlocks.Count()) - { - _currentDataBlockIndex = -1; - } + if (_currentDataBlockIndex >= _dataBlocks.Count()) + { + _currentDataBlockIndex = -1; + } - // reset waitEdge and position - _waitEdge = 0; - _position = 0; + // reset waitEdge and position + _waitEdge = 0; + _position = 0; - if ( - _currentDataBlockIndex < 0 && // block index is -1 - _dataBlocks.Count() > 0 // number of blocks is greater than 0 - ) - { - // move the index on to 0 - _currentDataBlockIndex = 0; - } - } + if ( + _currentDataBlockIndex < 0 && // block index is -1 + _dataBlocks.Count() > 0 // number of blocks is greater than 0 + ) + { + // move the index on to 0 + _currentDataBlockIndex = 0; + } + } - // update the lastCycle - _lastCycle = _cpu.TotalExecutedCycles; - } + // update the lastCycle + _lastCycle = _cpu.TotalExecutedCycles; + } - /// - /// Rewinds the tape to it's beginning (return to zero) - /// - public void RTZ() - { - Stop(); - _machine.Spectrum.OSD_TapeRTZ(); - _currentDataBlockIndex = 0; - } + /// + /// Rewinds the tape to it's beginning (return to zero) + /// + public void RTZ() + { + Stop(); + _machine.Spectrum.OSD_TapeRTZ(); + _currentDataBlockIndex = 0; + } - /// - /// Performs a block skip operation on the current tape - /// TRUE: skip forward - /// FALSE: skip backward - /// - public void SkipBlock(bool skipForward) - { - int blockCount = _dataBlocks.Count; - int targetBlockId = _currentDataBlockIndex; + /// + /// Performs a block skip operation on the current tape + /// TRUE: skip forward + /// FALSE: skip backward + /// + public void SkipBlock(bool skipForward) + { + int blockCount = _dataBlocks.Count; + int targetBlockId = _currentDataBlockIndex; - if (skipForward) - { - if (_currentDataBlockIndex == blockCount - 1) - { - // last block, go back to beginning - targetBlockId = 0; - } - else - { - targetBlockId++; - } - } - else - { - if (_currentDataBlockIndex == 0) - { - // already first block, goto last block - targetBlockId = blockCount - 1; - } - else - { - targetBlockId--; - } - } + if (skipForward) + { + if (_currentDataBlockIndex == blockCount - 1) + { + // last block, go back to beginning + targetBlockId = 0; + } + else + { + targetBlockId++; + } + } + else + { + if (_currentDataBlockIndex == 0) + { + // already first block, goto last block + targetBlockId = blockCount - 1; + } + else + { + targetBlockId--; + } + } - var bl = _dataBlocks[targetBlockId]; + var bl = _dataBlocks[targetBlockId]; - StringBuilder sbd = new StringBuilder(); - sbd.Append("("); - sbd.Append((targetBlockId + 1) + " of " + _dataBlocks.Count()); - sbd.Append(") : "); - sbd.Append(bl.BlockDescription); - if (bl.MetaData.Count > 0) - { - sbd.Append(" - "); - sbd.Append(bl.MetaData.First().Key + ": " + bl.MetaData.First().Value); - } + StringBuilder sbd = new StringBuilder(); + sbd.Append("("); + sbd.Append((targetBlockId + 1) + " of " + _dataBlocks.Count()); + sbd.Append(") : "); + sbd.Append(bl.BlockDescription); + if (bl.MetaData.Count > 0) + { + sbd.Append(" - "); + sbd.Append(bl.MetaData.First().Key + ": " + bl.MetaData.First().Value); + } - if (skipForward) - _machine.Spectrum.OSD_TapeNextBlock(sbd.ToString()); - else - _machine.Spectrum.OSD_TapePrevBlock(sbd.ToString()); + if (skipForward) + _machine.Spectrum.OSD_TapeNextBlock(sbd.ToString()); + else + _machine.Spectrum.OSD_TapePrevBlock(sbd.ToString()); - CurrentDataBlockIndex = targetBlockId; - } + CurrentDataBlockIndex = targetBlockId; + } - /// - /// Inserts a new tape and sets up the tape device accordingly - /// - public void LoadTape(byte[] tapeData) - { - // instantiate converters - TzxConverter tzxSer = new TzxConverter(this); - TapConverter tapSer = new TapConverter(this); - PzxConverter pzxSer = new PzxConverter(this); - CswConverter cswSer = new CswConverter(this); - WavConverter wavSer = new WavConverter(this); + /// + /// Inserts a new tape and sets up the tape device accordingly + /// + public void LoadTape(byte[] tapeData) + { + // instantiate converters + TzxConverter tzxSer = new TzxConverter(this); + TapConverter tapSer = new TapConverter(this); + PzxConverter pzxSer = new PzxConverter(this); + CswConverter cswSer = new CswConverter(this); + WavConverter wavSer = new WavConverter(this); - // TZX - if (tzxSer.CheckType(tapeData)) - { - // this file has a tzx header - attempt serialization - try - { - tzxSer.Read(tapeData); - // reset block index - CurrentDataBlockIndex = 0; - return; - } - catch (Exception ex) - { - // exception during operation - var e = ex; - throw new Exception(this.GetType().ToString() + - "\n\nTape image file has a valid TZX header, but threw an exception whilst data was being parsed.\n\n" + e.ToString()); - } - } + // TZX + if (tzxSer.CheckType(tapeData)) + { + // this file has a tzx header - attempt serialization + try + { + tzxSer.Read(tapeData); + // reset block index + CurrentDataBlockIndex = 0; + return; + } + catch (Exception ex) + { + // exception during operation + var e = ex; + throw new Exception(this.GetType().ToString() + + "\n\nTape image file has a valid TZX header, but threw an exception whilst data was being parsed.\n\n" + e.ToString()); + } + } - // PZX - else if (pzxSer.CheckType(tapeData)) - { - // this file has a pzx header - attempt serialization - try - { - pzxSer.Read(tapeData); - // reset block index - CurrentDataBlockIndex = 0; - return; - } - catch (Exception ex) - { - // exception during operation - var e = ex; - throw new Exception(this.GetType().ToString() + - "\n\nTape image file has a valid PZX header, but threw an exception whilst data was being parsed.\n\n" + e.ToString()); - } - } + // PZX + else if (pzxSer.CheckType(tapeData)) + { + // this file has a pzx header - attempt serialization + try + { + pzxSer.Read(tapeData); + // reset block index + CurrentDataBlockIndex = 0; + return; + } + catch (Exception ex) + { + // exception during operation + var e = ex; + throw new Exception(this.GetType().ToString() + + "\n\nTape image file has a valid PZX header, but threw an exception whilst data was being parsed.\n\n" + e.ToString()); + } + } - // CSW - else if (cswSer.CheckType(tapeData)) - { - // this file has a csw header - attempt serialization - try - { - cswSer.Read(tapeData); - // reset block index - CurrentDataBlockIndex = 0; - return; - } - catch (Exception ex) - { - // exception during operation - var e = ex; - throw new Exception(this.GetType().ToString() + - "\n\nTape image file has a valid CSW header, but threw an exception whilst data was being parsed.\n\n" + e.ToString()); - } - } + // CSW + else if (cswSer.CheckType(tapeData)) + { + // this file has a csw header - attempt serialization + try + { + cswSer.Read(tapeData); + // reset block index + CurrentDataBlockIndex = 0; + return; + } + catch (Exception ex) + { + // exception during operation + var e = ex; + throw new Exception(this.GetType().ToString() + + "\n\nTape image file has a valid CSW header, but threw an exception whilst data was being parsed.\n\n" + e.ToString()); + } + } - // WAV - else if (wavSer.CheckType(tapeData)) - { - // this file has a csw header - attempt serialization - try - { - wavSer.Read(tapeData); - // reset block index - CurrentDataBlockIndex = 0; - return; - } - catch (Exception ex) - { - // exception during operation - var e = ex; - throw new Exception(this.GetType().ToString() + - "\n\nTape image file has a valid WAV header, but threw an exception whilst data was being parsed.\n\n" + e.ToString()); - } - } + // WAV + else if (wavSer.CheckType(tapeData)) + { + // this file has a csw header - attempt serialization + try + { + wavSer.Read(tapeData); + // reset block index + CurrentDataBlockIndex = 0; + return; + } + catch (Exception ex) + { + // exception during operation + var e = ex; + throw new Exception(this.GetType().ToString() + + "\n\nTape image file has a valid WAV header, but threw an exception whilst data was being parsed.\n\n" + e.ToString()); + } + } - // Assume TAP - else - { - try - { - tapSer.Read(tapeData); - // reset block index - CurrentDataBlockIndex = 0; - return; - } - catch (Exception ex) - { - // exception during operation - var e = ex; - throw new Exception(this.GetType().ToString() + - "\n\nAn exception was thrown whilst data from this tape image was being parsed as TAP.\n\n" + e.ToString()); - } - } - } + // Assume TAP + else + { + try + { + tapSer.Read(tapeData); + // reset block index + CurrentDataBlockIndex = 0; + return; + } + catch (Exception ex) + { + // exception during operation + var e = ex; + throw new Exception(this.GetType().ToString() + + "\n\nAn exception was thrown whilst data from this tape image was being parsed as TAP.\n\n" + e.ToString()); + } + } + } - /// - /// Resets the tape - /// - public void Reset() - { - RTZ(); - } + /// + /// Resets the tape + /// + public void Reset() + { + RTZ(); + } - #endregion + #endregion - #region Tape Device Methods + #region Tape Device Methods - /// - /// Is called every cpu cycle but runs every 50 t-states - /// This enables the tape devices to play out even if the spectrum itself is not - /// requesting tape data - /// - public void TapeCycle() - { - if (TapeIsPlaying) - { - counter++; + /// + /// Is called every cpu cycle but runs every 50 t-states + /// This enables the tape devices to play out even if the spectrum itself is not + /// requesting tape data + /// + public void TapeCycle() + { + if (TapeIsPlaying) + { + counter++; - if (counter > 20) - { - counter = 0; - bool state = GetEarBit(_machine.CPU.TotalExecutedCycles); - _buzzer.ProcessPulseValue(state); - } - } - } - - /// - /// Simulates the spectrum 'EAR' input reading data from the tape - /// - public bool GetEarBit(long cpuCycle) - { - // decide how many cycles worth of data we are capturing - long cycles = cpuCycle - _lastCycle; + if (counter > 20) + { + counter = 0; + bool state = GetEarBit(_machine.CPU.TotalExecutedCycles); + _buzzer.ProcessPulseValue(state); + } + } + } - bool is48k = _machine.IsIn48kMode(); + /// + /// Simulates the spectrum 'EAR' input reading data from the tape + /// + public bool GetEarBit(long cpuCycle) + { + // decide how many cycles worth of data we are capturing + long cycles = cpuCycle - _lastCycle; - // check whether tape is actually playing - if (_tapeIsPlaying == false) - { - // it's not playing. Update lastCycle and return - _lastCycle = cpuCycle; - return false; - } + bool is48k = _machine.IsIn48kMode(); - // check for end of tape - if (_currentDataBlockIndex < 0) - { - // end of tape reached - RTZ (and stop) - RTZ(); - return currentState; - } + // check whether tape is actually playing + if (_tapeIsPlaying == false) + { + // it's not playing. Update lastCycle and return + _lastCycle = cpuCycle; + return false; + } - // process the cycles based on the waitEdge - while (cycles >= _waitEdge) - { - // decrement cycles - cycles -= _waitEdge; + // check for end of tape + if (_currentDataBlockIndex < 0) + { + // end of tape reached - RTZ (and stop) + RTZ(); + return currentState; + } - if (_position == 0 && _tapeIsPlaying) - { - // start of block - take care of initial pulse level for PZX - switch (_dataBlocks[_currentDataBlockIndex].BlockDescription) - { - case BlockType.PULS: - // initial pulse level is always low - if (currentState) - FlipTapeState(); - break; - case BlockType.DATA: - // initial pulse level is stored in block - if (currentState != _dataBlocks[_currentDataBlockIndex].InitialPulseLevel) - FlipTapeState(); - break; - case BlockType.PAUS: - // initial pulse level is stored in block - if (currentState != _dataBlocks[_currentDataBlockIndex].InitialPulseLevel) - FlipTapeState(); - break; - } + // process the cycles based on the waitEdge + while (cycles >= _waitEdge) + { + // decrement cycles + cycles -= _waitEdge; - // notify about the current block - var bl = _dataBlocks[_currentDataBlockIndex]; + if (_position == 0 && _tapeIsPlaying) + { + // start of block - take care of initial pulse level for PZX + switch (_dataBlocks[_currentDataBlockIndex].BlockDescription) + { + case BlockType.PULS: + // initial pulse level is always low + if (currentState) + FlipTapeState(); + break; + case BlockType.DATA: + // initial pulse level is stored in block + if (currentState != _dataBlocks[_currentDataBlockIndex].InitialPulseLevel) + FlipTapeState(); + break; + case BlockType.PAUS: + // initial pulse level is stored in block + if (currentState != _dataBlocks[_currentDataBlockIndex].InitialPulseLevel) + FlipTapeState(); + break; + } - StringBuilder sbd = new StringBuilder(); - sbd.Append("("); - sbd.Append((_currentDataBlockIndex + 1) + " of " + _dataBlocks.Count()); - sbd.Append(") : "); - sbd.Append(bl.BlockDescription); - if (bl.MetaData.Count > 0) - { - sbd.Append(" - "); - sbd.Append(bl.MetaData.First().Key + ": " + bl.MetaData.First().Value); - } - _machine.Spectrum.OSD_TapePlayingBlockInfo(sbd.ToString()); - } + // notify about the current block + var bl = _dataBlocks[_currentDataBlockIndex]; - // increment the current period position - _position++; - - if (_position >= _dataBlocks[_currentDataBlockIndex].DataPeriods.Count()) - { - // we have reached the end of the current block - if (_dataBlocks[_currentDataBlockIndex].DataPeriods.Count() == 0) - { - // notify about the current block (we are skipping it because its empty) - var bl = _dataBlocks[_currentDataBlockIndex]; - StringBuilder sbd = new StringBuilder(); - sbd.Append("("); - sbd.Append((_currentDataBlockIndex + 1) + " of " + _dataBlocks.Count()); - sbd.Append(") : "); - sbd.Append(bl.BlockDescription); - if (bl.MetaData.Count > 0) + StringBuilder sbd = new StringBuilder(); + sbd.Append("("); + sbd.Append((_currentDataBlockIndex + 1) + " of " + _dataBlocks.Count()); + sbd.Append(") : "); + sbd.Append(bl.BlockDescription); + if (bl.MetaData.Count > 0) + { + sbd.Append(" - "); + sbd.Append(bl.MetaData.First().Key + ": " + bl.MetaData.First().Value); + } + _machine.Spectrum.OSD_TapePlayingBlockInfo(sbd.ToString()); + } + + // increment the current period position + _position++; + + if (_position >= _dataBlocks[_currentDataBlockIndex].DataPeriods.Count()) + { + // we have reached the end of the current block + if (_dataBlocks[_currentDataBlockIndex].DataPeriods.Count() == 0) + { + // notify about the current block (we are skipping it because its empty) + var bl = _dataBlocks[_currentDataBlockIndex]; + StringBuilder sbd = new StringBuilder(); + sbd.Append("("); + sbd.Append((_currentDataBlockIndex + 1) + " of " + _dataBlocks.Count()); + sbd.Append(") : "); + sbd.Append(bl.BlockDescription); + if (bl.MetaData.Count > 0) { sbd.Append(" - "); sbd.Append(bl.MetaData.First().Key + ": " + bl.MetaData.First().Value); } - _machine.Spectrum.OSD_TapePlayingSkipBlockInfo(sbd.ToString()); + _machine.Spectrum.OSD_TapePlayingSkipBlockInfo(sbd.ToString()); - } + } - // skip any empty blocks (and process any command blocks) - while (_position >= _dataBlocks[_currentDataBlockIndex].DataPeriods.Count()) - { - // check for any commands - var command = _dataBlocks[_currentDataBlockIndex].Command; - var block = _dataBlocks[_currentDataBlockIndex]; - bool shouldStop = false; - switch (command) - { - // Stop the tape command found - if this is the end of the tape RTZ - // otherwise just STOP and move to the next block - case TapeCommand.STOP_THE_TAPE: + // skip any empty blocks (and process any command blocks) + while (_position >= _dataBlocks[_currentDataBlockIndex].DataPeriods.Count()) + { + // check for any commands + var command = _dataBlocks[_currentDataBlockIndex].Command; + var block = _dataBlocks[_currentDataBlockIndex]; + bool shouldStop = false; + switch (command) + { + // Stop the tape command found - if this is the end of the tape RTZ + // otherwise just STOP and move to the next block + case TapeCommand.STOP_THE_TAPE: - _machine.Spectrum.OSD_TapeStoppedAuto(); - shouldStop = true; + _machine.Spectrum.OSD_TapeStoppedAuto(); + shouldStop = true; - if (_currentDataBlockIndex >= _dataBlocks.Count()) - RTZ(); - else - { - Stop(); - } + if (_currentDataBlockIndex >= _dataBlocks.Count()) + RTZ(); + else + { + Stop(); + } - _monitorTimeOut = 2000; - break; - case TapeCommand.STOP_THE_TAPE_48K: - if (is48k) - { - _machine.Spectrum.OSD_TapeStoppedAuto(); - shouldStop = true; + _monitorTimeOut = 2000; + break; + case TapeCommand.STOP_THE_TAPE_48K: + if (is48k) + { + _machine.Spectrum.OSD_TapeStoppedAuto(); + shouldStop = true; - if (_currentDataBlockIndex >= _dataBlocks.Count()) - RTZ(); - else - { - Stop(); - } + if (_currentDataBlockIndex >= _dataBlocks.Count()) + RTZ(); + else + { + Stop(); + } - _monitorTimeOut = 2000; - } - break; - } + _monitorTimeOut = 2000; + } + break; + } - if (shouldStop) - break; + if (shouldStop) + break; - _position = 0; - _currentDataBlockIndex++; + _position = 0; + _currentDataBlockIndex++; - if (_currentDataBlockIndex >= _dataBlocks.Count()) - { - break; - } - } + if (_currentDataBlockIndex >= _dataBlocks.Count()) + { + break; + } + } - // check for end of tape - if (_currentDataBlockIndex >= _dataBlocks.Count()) - { - _currentDataBlockIndex = -1; - RTZ(); - return currentState; - } - } + // check for end of tape + if (_currentDataBlockIndex >= _dataBlocks.Count()) + { + _currentDataBlockIndex = -1; + RTZ(); + return currentState; + } + } // update waitEdge with current position within the current block _waitEdge = _dataBlocks[_currentDataBlockIndex].DataPeriods.Count() > 0 ? _dataBlocks[_currentDataBlockIndex].DataPeriods[_position] : 0; - // flip the current state - FlipTapeState(); - } + // flip the current state + FlipTapeState(); + } - // update lastCycle and return currentstate - _lastCycle = cpuCycle - (long)cycles; + // update lastCycle and return currentstate + _lastCycle = cpuCycle - (long)cycles; - return currentState; - } + return currentState; + } - private void FlipTapeState() - { - currentState = !currentState; - } + private void FlipTapeState() + { + currentState = !currentState; + } - /// - /// Flash loading implementation - /// (Deterministic Emulation must be FALSE) + /// + /// Flash loading implementation + /// (Deterministic Emulation must be FALSE) /// CURRENTLY NOT ENABLED/WORKING - /// - private bool FlashLoad() - { - // deterministic emulation must = false - //if (_machine.Spectrum.SyncSettings.DeterministicEmulation) - //return; + /// + private bool FlashLoad() + { + // deterministic emulation must = false + //if (_machine.Spectrum.SyncSettings.DeterministicEmulation) + //return; - var util = _machine.Spectrum; + var util = _machine.Spectrum; - if (_currentDataBlockIndex < 0) - _currentDataBlockIndex = 0; + if (_currentDataBlockIndex < 0) + _currentDataBlockIndex = 0; - if (_currentDataBlockIndex >= DataBlocks.Count) - return false; + if (_currentDataBlockIndex >= DataBlocks.Count) + return false; - //var val = GetEarBit(_cpu.TotalExecutedCycles); - //_buzzer.ProcessPulseValue(true, val); + //var val = GetEarBit(_cpu.TotalExecutedCycles); + //_buzzer.ProcessPulseValue(true, val); - ushort addr = _cpu.RegPC; + ushort addr = _cpu.RegPC; - if (_machine.Spectrum.SyncSettings.DeterministicEmulation) - { + if (_machine.Spectrum.SyncSettings.DeterministicEmulation) + { - } + } - var tb = DataBlocks[_currentDataBlockIndex]; - var tData = tb.BlockData; + var tb = DataBlocks[_currentDataBlockIndex]; + var tData = tb.BlockData; - if (tData == null || tData.Length < 2) - { - // skip this - return false; - } + if (tData == null || tData.Length < 2) + { + // skip this + return false; + } - var toRead = tData.Length - 1; + var toRead = tData.Length - 1; - if (toRead < _cpu.Regs[_cpu.E] + (_cpu.Regs[_cpu.D] << 8)) - { + if (toRead < _cpu.Regs[_cpu.E] + (_cpu.Regs[_cpu.D] << 8)) + { - } - else - { - toRead = _cpu.Regs[_cpu.E] + (_cpu.Regs[_cpu.D] << 8); - } + } + else + { + toRead = _cpu.Regs[_cpu.E] + (_cpu.Regs[_cpu.D] << 8); + } - if (toRead <= 0) - return false; + if (toRead <= 0) + return false; - var parity = tData[0]; + var parity = tData[0]; - if (parity != _cpu.Regs[_cpu.F_s] + (_cpu.Regs[_cpu.A_s] << 8) >> 8) - return false; + if (parity != _cpu.Regs[_cpu.F_s] + (_cpu.Regs[_cpu.A_s] << 8) >> 8) + return false; - util.SetCpuRegister("Shadow AF", 0x0145); + util.SetCpuRegister("Shadow AF", 0x0145); - for (var i = 0; i < toRead; i++) - { - var v = tData[i + 1]; - _cpu.Regs[_cpu.L] = v; - parity ^= v; - var d = (ushort)(_cpu.Regs[_cpu.Ixl] + (_cpu.Regs[_cpu.Ixh] << 8) + 1); - _machine.WriteBus(d, v); - } - var pc = (ushort)0x05DF; + for (var i = 0; i < toRead; i++) + { + var v = tData[i + 1]; + _cpu.Regs[_cpu.L] = v; + parity ^= v; + var d = (ushort)(_cpu.Regs[_cpu.Ixl] + (_cpu.Regs[_cpu.Ixh] << 8) + 1); + _machine.WriteBus(d, v); + } + var pc = (ushort)0x05DF; - if (_cpu.Regs[_cpu.E] + (_cpu.Regs[_cpu.D] << 8) == toRead && - toRead + 1 < tData.Length) - { - var v = tData[toRead + 1]; - _cpu.Regs[_cpu.L] = v; - parity ^= v; - _cpu.Regs[_cpu.B] = 0xB0; - } - else - { - _cpu.Regs[_cpu.L] = 1; - _cpu.Regs[_cpu.B] = 0; - _cpu.Regs[_cpu.F] = 0x50; - _cpu.Regs[_cpu.A] = parity; - pc = 0x05EE; - } + if (_cpu.Regs[_cpu.E] + (_cpu.Regs[_cpu.D] << 8) == toRead && + toRead + 1 < tData.Length) + { + var v = tData[toRead + 1]; + _cpu.Regs[_cpu.L] = v; + parity ^= v; + _cpu.Regs[_cpu.B] = 0xB0; + } + else + { + _cpu.Regs[_cpu.L] = 1; + _cpu.Regs[_cpu.B] = 0; + _cpu.Regs[_cpu.F] = 0x50; + _cpu.Regs[_cpu.A] = parity; + pc = 0x05EE; + } - _cpu.Regs[_cpu.H] = parity; - var de = _cpu.Regs[_cpu.E] + (_cpu.Regs[_cpu.D] << 8); - util.SetCpuRegister("DE", de - toRead); - var ix = _cpu.Regs[_cpu.Ixl] + (_cpu.Regs[_cpu.Ixh] << 8); - util.SetCpuRegister("IX", ix + toRead); + _cpu.Regs[_cpu.H] = parity; + var de = _cpu.Regs[_cpu.E] + (_cpu.Regs[_cpu.D] << 8); + util.SetCpuRegister("DE", de - toRead); + var ix = _cpu.Regs[_cpu.Ixl] + (_cpu.Regs[_cpu.Ixh] << 8); + util.SetCpuRegister("IX", ix + toRead); - util.SetCpuRegister("PC", pc); + util.SetCpuRegister("PC", pc); - _currentDataBlockIndex++; + _currentDataBlockIndex++; - return true; - - } + return true; - #endregion + } - #region TapeMonitor + #endregion - private long _lastINCycle = 0; - private int _monitorCount; - private int _monitorTimeOut; - private ushort _monitorLastPC; - private ushort[] _monitorLastRegs = new ushort[7]; + #region TapeMonitor - /// - /// Resets the TapeMonitor - /// - private void MonitorReset() - { - _lastINCycle = 0; - _monitorCount = 0; - _monitorLastPC = 0; - _monitorLastRegs = null; - } + private long _lastINCycle = 0; + private int _monitorCount; + private int _monitorTimeOut; + private ushort _monitorLastPC; + private ushort[] _monitorLastRegs = new ushort[7]; - /// - /// An iteration of the monitor process - /// - public void MonitorRead() - { - long cpuCycle = _cpu.TotalExecutedCycles; - int delta = (int)(cpuCycle - _lastINCycle); - _lastINCycle = cpuCycle; + /// + /// Resets the TapeMonitor + /// + private void MonitorReset() + { + _lastINCycle = 0; + _monitorCount = 0; + _monitorLastPC = 0; + _monitorLastRegs = null; + } - var nRegs = new ushort[] - { - _cpu.Regs[_cpu.A], - _cpu.Regs[_cpu.B], - _cpu.Regs[_cpu.C], - _cpu.Regs[_cpu.D], - _cpu.Regs[_cpu.E], - _cpu.Regs[_cpu.H], - _cpu.Regs[_cpu.L] - }; + /// + /// An iteration of the monitor process + /// + public void MonitorRead() + { + long cpuCycle = _cpu.TotalExecutedCycles; + int delta = (int)(cpuCycle - _lastINCycle); + _lastINCycle = cpuCycle; - if (delta > 0 && - delta < 96 && - _cpu.RegPC == _monitorLastPC && - _monitorLastRegs != null) - { - int dCnt = 0; - int dVal = 0; + var nRegs = new ushort[] + { + _cpu.Regs[_cpu.A], + _cpu.Regs[_cpu.B], + _cpu.Regs[_cpu.C], + _cpu.Regs[_cpu.D], + _cpu.Regs[_cpu.E], + _cpu.Regs[_cpu.H], + _cpu.Regs[_cpu.L] + }; - for (int i = 0; i < nRegs.Length; i++) - { - if (_monitorLastRegs[i] != nRegs[i]) - { - dVal = _monitorLastRegs[i] - nRegs[i]; - dCnt++; - } - } + if (delta > 0 && + delta < 96 && + _cpu.RegPC == _monitorLastPC && + _monitorLastRegs != null) + { + int dCnt = 0; + int dVal = 0; - if (dCnt == 1 && - (dVal == 1 || dVal == -1)) - { - _monitorCount++; + for (int i = 0; i < nRegs.Length; i++) + { + if (_monitorLastRegs[i] != nRegs[i]) + { + dVal = _monitorLastRegs[i] - nRegs[i]; + dCnt++; + } + } - if (_monitorCount >= 16 && _autoPlay) - { - if (!_tapeIsPlaying) - { - Play(); - _machine.Spectrum.OSD_TapePlayingAuto(); - } + if (dCnt == 1 && + (dVal == 1 || dVal == -1)) + { + _monitorCount++; - _monitorTimeOut = 50; - } - } - else - { - _monitorCount = 0; - } - } + if (_monitorCount >= 16 && _autoPlay) + { + if (!_tapeIsPlaying) + { + Play(); + _machine.Spectrum.OSD_TapePlayingAuto(); + } - _monitorLastRegs = nRegs; - _monitorLastPC = _cpu.RegPC; - } + _monitorTimeOut = 50; + } + } + else + { + _monitorCount = 0; + } + } - public void AutoStopTape() - { - if (!_tapeIsPlaying) - return; + _monitorLastRegs = nRegs; + _monitorLastPC = _cpu.RegPC; + } - if (!_autoPlay) - return; + public void AutoStopTape() + { + if (!_tapeIsPlaying) + return; - Stop(); - _machine.Spectrum.OSD_TapeStoppedAuto(); - } + if (!_autoPlay) + return; - public void AutoStartTape() - { - if (_tapeIsPlaying) - return; + Stop(); + _machine.Spectrum.OSD_TapeStoppedAuto(); + } - if (!_autoPlay) - return; + public void AutoStartTape() + { + if (_tapeIsPlaying) + return; - Play(); - _machine.Spectrum.OSD_TapePlayingAuto(); - } + if (!_autoPlay) + return; - public int MaskableInterruptCount = 0; + Play(); + _machine.Spectrum.OSD_TapePlayingAuto(); + } - private void MonitorFrame() - { - if (_tapeIsPlaying && _autoPlay) - { - if (DataBlocks.Count > 1 || - (_dataBlocks[_currentDataBlockIndex].BlockDescription != BlockType.CSW_Recording && - _dataBlocks[_currentDataBlockIndex].BlockDescription != BlockType.WAV_Recording)) - { - // we should only stop the tape when there are multiple blocks - // if we just have one big block (maybe a CSW or WAV) then auto stopping will cock things up - _monitorTimeOut--; - } + public int MaskableInterruptCount = 0; - if (_monitorTimeOut < 0) - { - if (_dataBlocks[_currentDataBlockIndex].BlockDescription != BlockType.PAUSE_BLOCK && - _dataBlocks[_currentDataBlockIndex].BlockDescription != BlockType.PAUS) - { - AutoStopTape(); - } - - return; - } + private void MonitorFrame() + { + if (_tapeIsPlaying && _autoPlay) + { + if (DataBlocks.Count > 1 || + (_dataBlocks[_currentDataBlockIndex].BlockDescription != BlockType.CSW_Recording && + _dataBlocks[_currentDataBlockIndex].BlockDescription != BlockType.WAV_Recording)) + { + // we should only stop the tape when there are multiple blocks + // if we just have one big block (maybe a CSW or WAV) then auto stopping will cock things up + _monitorTimeOut--; + } - // fallback in case usual monitor detection methods do not work + if (_monitorTimeOut < 0) + { + if (_dataBlocks[_currentDataBlockIndex].BlockDescription != BlockType.PAUSE_BLOCK && + _dataBlocks[_currentDataBlockIndex].BlockDescription != BlockType.PAUS) + { + AutoStopTape(); + } - // number of t-states since last IN operation - long diff = _machine.CPU.TotalExecutedCycles - _lastINCycle; + return; + } - // get current datablock - var block = DataBlocks[_currentDataBlockIndex]; + // fallback in case usual monitor detection methods do not work - // is this a pause block? - if (block.BlockDescription == BlockType.PAUS || block.BlockDescription == BlockType.PAUSE_BLOCK) - { - // dont autostop the tape here - return; - } + // number of t-states since last IN operation + long diff = _machine.CPU.TotalExecutedCycles - _lastINCycle; - // pause in ms at the end of the current block - int blockPause = block.PauseInMS; + // get current datablock + var block = DataBlocks[_currentDataBlockIndex]; - // timeout in t-states (equiv. to blockpause) - int timeout = ((_machine.ULADevice.FrameLength * 50) / 1000) * blockPause; + // is this a pause block? + if (block.BlockDescription == BlockType.PAUS || block.BlockDescription == BlockType.PAUSE_BLOCK) + { + // dont autostop the tape here + return; + } - // dont use autostop detection if block has no pause at the end - if (timeout == 0) - return; + // pause in ms at the end of the current block + int blockPause = block.PauseInMS; - // dont autostop if there is only 1 block - if (DataBlocks.Count == 1 || _dataBlocks[_currentDataBlockIndex].BlockDescription == BlockType.CSW_Recording || - _dataBlocks[_currentDataBlockIndex].BlockDescription == BlockType.WAV_Recording - ) - { - return; - } + // timeout in t-states (equiv. to blockpause) + int timeout = ((_machine.ULADevice.FrameLength * 50) / 1000) * blockPause; - if (diff >= timeout * 2) - { - // There have been no attempted tape reads by the CPU within the double timeout period - // Autostop the tape - AutoStopTape(); - _lastCycle = _cpu.TotalExecutedCycles; - } - } - } + // dont use autostop detection if block has no pause at the end + if (timeout == 0) + return; - #endregion + // dont autostop if there is only 1 block + if (DataBlocks.Count == 1 || _dataBlocks[_currentDataBlockIndex].BlockDescription == BlockType.CSW_Recording || + _dataBlocks[_currentDataBlockIndex].BlockDescription == BlockType.WAV_Recording + ) + { + return; + } - #region IPortIODevice + if (diff >= timeout * 2) + { + // There have been no attempted tape reads by the CPU within the double timeout period + // Autostop the tape + AutoStopTape(); + _lastCycle = _cpu.TotalExecutedCycles; + } + } + } - /// - /// Mask constants - /// - private const int TAPE_BIT = 0x40; - private const int EAR_BIT = 0x10; - private const int MIC_BIT = 0x08; + #endregion - /// - /// Device responds to an IN instruction - /// - public bool ReadPort(ushort port, ref int result) - { - if (TapeIsPlaying) - { - GetEarBit(_cpu.TotalExecutedCycles); - } - if (currentState) - { - result |= TAPE_BIT; - } - else - { - result &= ~TAPE_BIT; - } + #region IPortIODevice - if (!TapeIsPlaying) - { - if (_machine.UPDDiskDevice == null || !_machine.UPDDiskDevice.FDD_IsDiskLoaded) - MonitorRead(); - } - if (_machine.UPDDiskDevice == null || !_machine.UPDDiskDevice.FDD_IsDiskLoaded) - MonitorRead(); + /// + /// Mask constants + /// + private const int TAPE_BIT = 0x40; + private const int EAR_BIT = 0x10; + private const int MIC_BIT = 0x08; - return true; - } + /// + /// Device responds to an IN instruction + /// + public bool ReadPort(ushort port, ref int result) + { + if (TapeIsPlaying) + { + GetEarBit(_cpu.TotalExecutedCycles); + } + if (currentState) + { + result |= TAPE_BIT; + } + else + { + result &= ~TAPE_BIT; + } - /// - /// Device responds to an OUT instruction - /// - public bool WritePort(ushort port, int result) - { - if (!TapeIsPlaying) - { - currentState = ((byte)result & 0x10) != 0; - } + if (!TapeIsPlaying) + { + if (_machine.UPDDiskDevice == null || !_machine.UPDDiskDevice.FDD_IsDiskLoaded) + MonitorRead(); + } + if (_machine.UPDDiskDevice == null || !_machine.UPDDiskDevice.FDD_IsDiskLoaded) + MonitorRead(); - return true; - } + return true; + } - #endregion + /// + /// Device responds to an OUT instruction + /// + public bool WritePort(ushort port, int result) + { + if (!TapeIsPlaying) + { + currentState = ((byte)result & 0x10) != 0; + } - #region State Serialization + return true; + } - /// - /// Bizhawk state serialization - /// - public void SyncState(Serializer ser) - { - ser.BeginSection(nameof(DatacorderDevice)); - ser.Sync(nameof(counter), ref counter); - ser.Sync(nameof(_currentDataBlockIndex), ref _currentDataBlockIndex); - ser.Sync(nameof(_position), ref _position); - ser.Sync(nameof(_tapeIsPlaying), ref _tapeIsPlaying); - ser.Sync(nameof(_lastCycle), ref _lastCycle); - ser.Sync(nameof(_waitEdge), ref _waitEdge); - ser.Sync(nameof(currentState), ref currentState); - ser.Sync(nameof(_lastINCycle), ref _lastINCycle); - ser.Sync(nameof(_monitorCount), ref _monitorCount); - ser.Sync(nameof(_monitorTimeOut), ref _monitorTimeOut); - ser.Sync(nameof(_monitorLastPC), ref _monitorLastPC); - ser.Sync(nameof(_monitorLastRegs), ref _monitorLastRegs, false); - ser.EndSection(); - } + #endregion - #endregion - } + #region State Serialization + + /// + /// Bizhawk state serialization + /// + public void SyncState(Serializer ser) + { + ser.BeginSection(nameof(DatacorderDevice)); + ser.Sync(nameof(counter), ref counter); + ser.Sync(nameof(_currentDataBlockIndex), ref _currentDataBlockIndex); + ser.Sync(nameof(_position), ref _position); + ser.Sync(nameof(_tapeIsPlaying), ref _tapeIsPlaying); + ser.Sync(nameof(_lastCycle), ref _lastCycle); + ser.Sync(nameof(_waitEdge), ref _waitEdge); + ser.Sync(nameof(currentState), ref currentState); + ser.Sync(nameof(_lastINCycle), ref _lastINCycle); + ser.Sync(nameof(_monitorCount), ref _monitorCount); + ser.Sync(nameof(_monitorTimeOut), ref _monitorTimeOut); + ser.Sync(nameof(_monitorLastPC), ref _monitorLastPC); + ser.Sync(nameof(_monitorLastRegs), ref _monitorLastRegs, false); + ser.EndSection(); + } + + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/CHRN.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/CHRN.cs index d9f5c9822e..2595f59974 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/CHRN.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/CHRN.cs @@ -1,180 +1,180 @@  namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Used for the sector CHRN structure - /// - public class CHRN - { - /// - /// Track - /// - public byte C { get; set; } + /// + /// Used for the sector CHRN structure + /// + public class CHRN + { + /// + /// Track + /// + public byte C { get; set; } - /// - /// Side - /// - public byte H { get; set; } + /// + /// Side + /// + public byte H { get; set; } - /// - /// Sector ID - /// - public byte R { get; set; } + /// + /// Sector ID + /// + public byte R { get; set; } - /// - /// Sector Size - /// - public byte N { get; set; } + /// + /// Sector Size + /// + public byte N { get; set; } - /// - /// Status register 1 - /// - private byte _flag1; - public byte Flag1 - { - get { return _flag1; } - set { _flag1 = value; } - } + /// + /// Status register 1 + /// + private byte _flag1; + public byte Flag1 + { + get { return _flag1; } + set { _flag1 = value; } + } - /// - /// Status register 2 - /// - private byte _flag2; - public byte Flag2 - { - get { return _flag2; } - set { _flag2 = value; } - } + /// + /// Status register 2 + /// + private byte _flag2; + public byte Flag2 + { + get { return _flag2; } + set { _flag2 = value; } + } - /// - /// Used to store the last transmitted/received data bytes - /// - public byte[] DataBytes { get; set; } + /// + /// Used to store the last transmitted/received data bytes + /// + public byte[] DataBytes { get; set; } - /// - /// ID for the read/write data command - /// - public int DataID { get; set; } + /// + /// ID for the read/write data command + /// + public int DataID { get; set; } - #region Helper Methods + #region Helper Methods - /// - /// Missing Address Mark (Sector_ID or DAM not found) - /// - public bool ST1MA - { - get { return NECUPD765.GetBit(0, _flag1); } - set - { - if (value) { NECUPD765.SetBit(0, ref _flag1); } - else { NECUPD765.UnSetBit(0, ref _flag1); } - } - } + /// + /// Missing Address Mark (Sector_ID or DAM not found) + /// + public bool ST1MA + { + get { return NECUPD765.GetBit(0, _flag1); } + set + { + if (value) { NECUPD765.SetBit(0, ref _flag1); } + else { NECUPD765.UnSetBit(0, ref _flag1); } + } + } - /// - /// No Data (Sector_ID not found, CRC fail in ID_field) - /// - public bool ST1ND - { - get { return NECUPD765.GetBit(2, _flag1); } - set - { - if (value) { NECUPD765.SetBit(2, ref _flag1); } - else { NECUPD765.UnSetBit(2, ref _flag1); } - } - } + /// + /// No Data (Sector_ID not found, CRC fail in ID_field) + /// + public bool ST1ND + { + get { return NECUPD765.GetBit(2, _flag1); } + set + { + if (value) { NECUPD765.SetBit(2, ref _flag1); } + else { NECUPD765.UnSetBit(2, ref _flag1); } + } + } - /// - /// Data Error (CRC-fail in ID- or Data-Field) - /// - public bool ST1DE - { - get { return NECUPD765.GetBit(5, _flag1); } - set - { - if (value) { NECUPD765.SetBit(5, ref _flag1); } - else { NECUPD765.UnSetBit(5, ref _flag1); } - } - } + /// + /// Data Error (CRC-fail in ID- or Data-Field) + /// + public bool ST1DE + { + get { return NECUPD765.GetBit(5, _flag1); } + set + { + if (value) { NECUPD765.SetBit(5, ref _flag1); } + else { NECUPD765.UnSetBit(5, ref _flag1); } + } + } - /// - /// End of Track (set past most read/write commands) (see IC) - /// - public bool ST1EN - { - get { return NECUPD765.GetBit(7, _flag1); } - set - { - if (value) { NECUPD765.SetBit(7, ref _flag1); } - else { NECUPD765.UnSetBit(7, ref _flag1); } - } - } + /// + /// End of Track (set past most read/write commands) (see IC) + /// + public bool ST1EN + { + get { return NECUPD765.GetBit(7, _flag1); } + set + { + if (value) { NECUPD765.SetBit(7, ref _flag1); } + else { NECUPD765.UnSetBit(7, ref _flag1); } + } + } - /// - /// Missing Address Mark in Data Field (DAM not found) - /// - public bool ST2MD - { - get { return NECUPD765.GetBit(0, _flag2); } - set - { - if (value) { NECUPD765.SetBit(0, ref _flag2); } - else { NECUPD765.UnSetBit(0, ref _flag2); } - } - } + /// + /// Missing Address Mark in Data Field (DAM not found) + /// + public bool ST2MD + { + get { return NECUPD765.GetBit(0, _flag2); } + set + { + if (value) { NECUPD765.SetBit(0, ref _flag2); } + else { NECUPD765.UnSetBit(0, ref _flag2); } + } + } - /// - /// Bad Cylinder (read/programmed track-ID different and read-ID = FF) - /// - public bool ST2BC - { - get { return NECUPD765.GetBit(1, _flag2); } - set - { - if (value) { NECUPD765.SetBit(1, ref _flag2); } - else { NECUPD765.UnSetBit(1, ref _flag2); } - } - } + /// + /// Bad Cylinder (read/programmed track-ID different and read-ID = FF) + /// + public bool ST2BC + { + get { return NECUPD765.GetBit(1, _flag2); } + set + { + if (value) { NECUPD765.SetBit(1, ref _flag2); } + else { NECUPD765.UnSetBit(1, ref _flag2); } + } + } - /// - /// Wrong Cylinder (read/programmed track-ID different) (see b1) - /// - public bool ST2WC - { - get { return NECUPD765.GetBit(4, _flag2); } - set - { - if (value) { NECUPD765.SetBit(4, ref _flag2); } - else { NECUPD765.UnSetBit(4, ref _flag2); } - } - } + /// + /// Wrong Cylinder (read/programmed track-ID different) (see b1) + /// + public bool ST2WC + { + get { return NECUPD765.GetBit(4, _flag2); } + set + { + if (value) { NECUPD765.SetBit(4, ref _flag2); } + else { NECUPD765.UnSetBit(4, ref _flag2); } + } + } - /// - /// Data Error in Data Field (CRC-fail in data-field) - /// - public bool ST2DD - { - get { return NECUPD765.GetBit(5, _flag2); } - set - { - if (value) { NECUPD765.SetBit(5, ref _flag2); } - else { NECUPD765.UnSetBit(5, ref _flag2); } - } - } + /// + /// Data Error in Data Field (CRC-fail in data-field) + /// + public bool ST2DD + { + get { return NECUPD765.GetBit(5, _flag2); } + set + { + if (value) { NECUPD765.SetBit(5, ref _flag2); } + else { NECUPD765.UnSetBit(5, ref _flag2); } + } + } - /// - /// Control Mark (read/scan command found sector with deleted DAM) - /// - public bool ST2CM - { - get { return NECUPD765.GetBit(6, _flag2); } - set - { - if (value) { NECUPD765.SetBit(6, ref _flag2); } - else { NECUPD765.UnSetBit(6, ref _flag2); } - } - } + /// + /// Control Mark (read/scan command found sector with deleted DAM) + /// + public bool ST2CM + { + get { return NECUPD765.GetBit(6, _flag2); } + set + { + if (value) { NECUPD765.SetBit(6, ref _flag2); } + else { NECUPD765.UnSetBit(6, ref _flag2); } + } + } - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.cs index c4b8d755a4..5b49dbaf97 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.cs @@ -3,243 +3,243 @@ using System.Collections.Generic; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// The NEC floppy disk controller (and floppy drive) found in the +3 - /// - #region Attribution - /* + /// + /// The NEC floppy disk controller (and floppy drive) found in the +3 + /// + #region Attribution + /* Implementation based on the information contained here: http://www.cpcwiki.eu/index.php/765_FDC and here: http://www.cpcwiki.eu/imgs/f/f3/UPD765_Datasheet_OCRed.pdf */ - #endregion - public partial class NECUPD765 - { - #region Devices + #endregion + public partial class NECUPD765 + { + #region Devices - /// - /// The emulated spectrum machine - /// - private SpectrumBase _machine; + /// + /// The emulated spectrum machine + /// + private SpectrumBase _machine; - #endregion + #endregion - #region Construction & Initialization + #region Construction & Initialization - /// - /// Main constructor - /// - public NECUPD765() - { - InitCommandList(); - } + /// + /// Main constructor + /// + public NECUPD765() + { + InitCommandList(); + } - /// - /// Initialization routine - /// - public void Init(SpectrumBase machine) - { - _machine = machine; - FDD_Init(); - TimingInit(); - Reset(); - } - - /// - /// Resets the FDC - /// - public void Reset() - { - // setup main status - StatusMain = 0; + /// + /// Initialization routine + /// + public void Init(SpectrumBase machine) + { + _machine = machine; + FDD_Init(); + TimingInit(); + Reset(); + } - Status0 = 0; - Status1 = 0; - Status2 = 0; - Status3 = 0; + /// + /// Resets the FDC + /// + public void Reset() + { + // setup main status + StatusMain = 0; - SetBit(MSR_RQM, ref StatusMain); + Status0 = 0; + Status1 = 0; + Status2 = 0; + Status3 = 0; - SetPhase_Idle(); + SetBit(MSR_RQM, ref StatusMain); - //FDC_FLAG_RQM = true; - //ActiveDirection = CommandDirection.IN; - SRT = 6; - HUT = 16; - HLT = 2; - HLT_Counter = 0; - HUT_Counter = 0; - IndexPulseCounter = 0; - CMD_FLAG_MF = false; + SetPhase_Idle(); - foreach (var d in DriveStates) - { - //d.SeekingTrack = d.CurrentTrack; - ////d.SeekCounter = 0; - //d.FLAG_SEEK_INTERRUPT = false; - //d.IntStatus = 0; - //d.SeekState = SeekSubState.Idle; - //d.SeekIntState = SeekIntStatus.Normal; + //FDC_FLAG_RQM = true; + //ActiveDirection = CommandDirection.IN; + SRT = 6; + HUT = 16; + HLT = 2; + HLT_Counter = 0; + HUT_Counter = 0; + IndexPulseCounter = 0; + CMD_FLAG_MF = false; - } - - } + foreach (var d in DriveStates) + { + //d.SeekingTrack = d.CurrentTrack; + ////d.SeekCounter = 0; + //d.FLAG_SEEK_INTERRUPT = false; + //d.IntStatus = 0; + //d.SeekState = SeekSubState.Idle; + //d.SeekIntState = SeekIntStatus.Normal; - /// - /// Setup the command structure - /// Each command represents one of the internal UPD765 commands - /// - private void InitCommandList() - { - CommandList = new List - { + } + + } + + /// + /// Setup the command structure + /// Each command represents one of the internal UPD765 commands + /// + private void InitCommandList() + { + CommandList = new List + { // read data new Command { CommandDelegate = UPD_ReadData, CommandCode = 0x06, MT = true, MF = true, SK = true, IsRead = true, - Direction = CommandDirection.OUT, ParameterByteCount = 8, ResultByteCount = 7 }, + Direction = CommandDirection.OUT, ParameterByteCount = 8, ResultByteCount = 7 }, // read id new Command { CommandDelegate = UPD_ReadID, CommandCode = 0x0a, MF = true, IsRead = true, - Direction = CommandDirection.OUT, ParameterByteCount = 1, ResultByteCount = 7 }, + Direction = CommandDirection.OUT, ParameterByteCount = 1, ResultByteCount = 7 }, // specify new Command { CommandDelegate = UPD_Specify, CommandCode = 0x03, - Direction = CommandDirection.OUT, ParameterByteCount = 2, ResultByteCount = 0 }, + Direction = CommandDirection.OUT, ParameterByteCount = 2, ResultByteCount = 0 }, // read diagnostic new Command { CommandDelegate = UPD_ReadDiagnostic, CommandCode = 0x02, MF = true, SK = true, IsRead = true, - Direction = CommandDirection.OUT, ParameterByteCount = 8, ResultByteCount = 7 }, + Direction = CommandDirection.OUT, ParameterByteCount = 8, ResultByteCount = 7 }, // scan equal new Command { CommandDelegate = UPD_ScanEqual, CommandCode = 0x11, MT = true, MF = true, SK = true, IsRead = true, - Direction = CommandDirection.IN, ParameterByteCount = 8, ResultByteCount = 7 }, + Direction = CommandDirection.IN, ParameterByteCount = 8, ResultByteCount = 7 }, // scan high or equal new Command { CommandDelegate = UPD_ScanHighOrEqual, CommandCode = 0x1d, MT = true, MF = true, SK = true, IsRead = true, - Direction = CommandDirection.IN, ParameterByteCount = 8, ResultByteCount = 7 }, + Direction = CommandDirection.IN, ParameterByteCount = 8, ResultByteCount = 7 }, // scan low or equal new Command { CommandDelegate = UPD_ScanLowOrEqual, CommandCode = 0x19, MT = true, MF = true, SK = true, IsRead = true, - Direction = CommandDirection.IN, ParameterByteCount = 8, ResultByteCount = 7 }, + Direction = CommandDirection.IN, ParameterByteCount = 8, ResultByteCount = 7 }, // read deleted data new Command { CommandDelegate = UPD_ReadDeletedData, CommandCode = 0x0c, MT = true, MF = true, SK = true, IsRead = true, - Direction = CommandDirection.OUT, ParameterByteCount = 8, ResultByteCount = 7 }, + Direction = CommandDirection.OUT, ParameterByteCount = 8, ResultByteCount = 7 }, // write data new Command { CommandDelegate = UPD_WriteData, CommandCode = 0x05, MT = true, MF = true, IsWrite = true, - Direction = CommandDirection.IN, ParameterByteCount = 8, ResultByteCount = 7 }, + Direction = CommandDirection.IN, ParameterByteCount = 8, ResultByteCount = 7 }, // write id new Command { CommandDelegate = UPD_WriteID, CommandCode = 0x0d, MF = true, IsWrite = true, - Direction = CommandDirection.IN, ParameterByteCount = 5, ResultByteCount = 7 }, + Direction = CommandDirection.IN, ParameterByteCount = 5, ResultByteCount = 7 }, // write deleted data new Command { CommandDelegate = UPD_WriteDeletedData, CommandCode = 0x09, MT = true, MF = true, IsWrite = true, - Direction = CommandDirection.IN, ParameterByteCount = 8, ResultByteCount = 7 }, + Direction = CommandDirection.IN, ParameterByteCount = 8, ResultByteCount = 7 }, // seek new Command { CommandDelegate = UPD_Seek, CommandCode = 0x0f, - Direction = CommandDirection.OUT, ParameterByteCount = 2, ResultByteCount = 0 }, + Direction = CommandDirection.OUT, ParameterByteCount = 2, ResultByteCount = 0 }, // recalibrate (seek track00) new Command { CommandDelegate = UPD_Recalibrate, CommandCode = 0x07, - Direction = CommandDirection.OUT, ParameterByteCount = 1, ResultByteCount = 0 }, + Direction = CommandDirection.OUT, ParameterByteCount = 1, ResultByteCount = 0 }, // sense interrupt status new Command { CommandDelegate = UPD_SenseInterruptStatus, CommandCode = 0x08, - Direction = CommandDirection.OUT, ParameterByteCount = 0, ResultByteCount = 2 }, + Direction = CommandDirection.OUT, ParameterByteCount = 0, ResultByteCount = 2 }, // sense drive status new Command { CommandDelegate = UPD_SenseDriveStatus, CommandCode = 0x04, - Direction = CommandDirection.OUT, ParameterByteCount = 1, ResultByteCount = 1 }, + Direction = CommandDirection.OUT, ParameterByteCount = 1, ResultByteCount = 1 }, // version new Command { CommandDelegate = UPD_Version, CommandCode = 0x10, - Direction = CommandDirection.OUT, ParameterByteCount = 0, ResultByteCount = 1 }, + Direction = CommandDirection.OUT, ParameterByteCount = 0, ResultByteCount = 1 }, // invalid new Command { CommandDelegate = UPD_Invalid, CommandCode = 0x00, - Direction = CommandDirection.OUT, ParameterByteCount = 0, ResultByteCount = 1 }, - }; - } + Direction = CommandDirection.OUT, ParameterByteCount = 0, ResultByteCount = 1 }, + }; + } - #endregion + #endregion - #region State Serialization + #region State Serialization - public void SyncState(Serializer ser) - { - ser.BeginSection("NEC-UPD765"); + public void SyncState(Serializer ser) + { + ser.BeginSection("NEC-UPD765"); - #region FDD - - ser.Sync(nameof(FDD_FLAG_MOTOR), ref FDD_FLAG_MOTOR); + #region FDD - for (int i = 0; i < 4; i++) - { - ser.BeginSection("HITDrive_" + i); - DriveStates[i].SyncState(ser); - ser.EndSection(); - } + ser.Sync(nameof(FDD_FLAG_MOTOR), ref FDD_FLAG_MOTOR); - ser.Sync(nameof(DiskDriveIndex), ref _diskDriveIndex); - // set active drive - DiskDriveIndex = _diskDriveIndex; + for (int i = 0; i < 4; i++) + { + ser.BeginSection("HITDrive_" + i); + DriveStates[i].SyncState(ser); + ser.EndSection(); + } - #endregion + ser.Sync(nameof(DiskDriveIndex), ref _diskDriveIndex); + // set active drive + DiskDriveIndex = _diskDriveIndex; - #region Registers + #endregion - ser.Sync("_RegMain", ref StatusMain); - ser.Sync("_Reg0", ref Status0); - ser.Sync("_Reg1", ref Status1); - ser.Sync("_Reg2", ref Status2); - ser.Sync("_Reg3", ref Status3); + #region Registers - #endregion + ser.Sync("_RegMain", ref StatusMain); + ser.Sync("_Reg0", ref Status0); + ser.Sync("_Reg1", ref Status1); + ser.Sync("_Reg2", ref Status2); + ser.Sync("_Reg3", ref Status3); - #region Controller state + #endregion - ser.Sync(nameof(DriveLight), ref DriveLight); - ser.SyncEnum(nameof(ActivePhase), ref ActivePhase); - //ser.SyncEnum(nameof(ActiveDirection), ref ActiveDirection); - ser.SyncEnum(nameof(ActiveInterrupt), ref ActiveInterrupt); - ser.Sync(nameof(CommBuffer), ref CommBuffer, false); - ser.Sync(nameof(CommCounter), ref CommCounter); - ser.Sync(nameof(ResBuffer), ref ResBuffer, false); - ser.Sync(nameof(ExecBuffer), ref ExecBuffer, false); - ser.Sync(nameof(ExecCounter), ref ExecCounter); - ser.Sync(nameof(ExecLength), ref ExecLength); - ser.Sync(nameof(InterruptResultBuffer), ref InterruptResultBuffer, false); - ser.Sync(nameof(ResCounter), ref ResCounter); - ser.Sync(nameof(ResLength), ref ResLength); - ser.Sync(nameof(LastSectorDataWriteByte), ref LastSectorDataWriteByte); - ser.Sync(nameof(LastSectorDataReadByte), ref LastSectorDataReadByte); - ser.Sync(nameof(LastByteReceived), ref LastByteReceived); - - ser.Sync(nameof(_cmdIndex), ref _cmdIndex); - // resync the ActiveCommand - CMDIndex = _cmdIndex; + #region Controller state - ActiveCommandParams.SyncState(ser); - - ser.Sync(nameof(IndexPulseCounter), ref IndexPulseCounter); - //ser.SyncEnum(nameof(_activeStatus), ref _activeStatus); - //ser.SyncEnum(nameof(_statusRaised), ref _statusRaised); + ser.Sync(nameof(DriveLight), ref DriveLight); + ser.SyncEnum(nameof(ActivePhase), ref ActivePhase); + //ser.SyncEnum(nameof(ActiveDirection), ref ActiveDirection); + ser.SyncEnum(nameof(ActiveInterrupt), ref ActiveInterrupt); + ser.Sync(nameof(CommBuffer), ref CommBuffer, false); + ser.Sync(nameof(CommCounter), ref CommCounter); + ser.Sync(nameof(ResBuffer), ref ResBuffer, false); + ser.Sync(nameof(ExecBuffer), ref ExecBuffer, false); + ser.Sync(nameof(ExecCounter), ref ExecCounter); + ser.Sync(nameof(ExecLength), ref ExecLength); + ser.Sync(nameof(InterruptResultBuffer), ref InterruptResultBuffer, false); + ser.Sync(nameof(ResCounter), ref ResCounter); + ser.Sync(nameof(ResLength), ref ResLength); + ser.Sync(nameof(LastSectorDataWriteByte), ref LastSectorDataWriteByte); + ser.Sync(nameof(LastSectorDataReadByte), ref LastSectorDataReadByte); + ser.Sync(nameof(LastByteReceived), ref LastByteReceived); - ser.Sync(nameof(CMD_FLAG_MT), ref CMD_FLAG_MT); - ser.Sync(nameof(CMD_FLAG_MF), ref CMD_FLAG_MF); - ser.Sync(nameof(CMD_FLAG_SK), ref CMD_FLAG_SK); - ser.Sync(nameof(SRT), ref SRT); - ser.Sync(nameof(HUT), ref HUT); - ser.Sync(nameof(HLT), ref HLT); - ser.Sync(nameof(ND), ref ND); - ser.Sync(nameof(SRT_Counter), ref SRT_Counter); - ser.Sync(nameof(HUT_Counter), ref HUT_Counter); - ser.Sync(nameof(HLT_Counter), ref HLT_Counter); + ser.Sync(nameof(_cmdIndex), ref _cmdIndex); + // resync the ActiveCommand + CMDIndex = _cmdIndex; - ser.Sync(nameof(SectorDelayCounter), ref SectorDelayCounter); - ser.Sync(nameof(SectorID), ref SectorID); + ActiveCommandParams.SyncState(ser); - #endregion + ser.Sync(nameof(IndexPulseCounter), ref IndexPulseCounter); + //ser.SyncEnum(nameof(_activeStatus), ref _activeStatus); + //ser.SyncEnum(nameof(_statusRaised), ref _statusRaised); - #region Timing + ser.Sync(nameof(CMD_FLAG_MT), ref CMD_FLAG_MT); + ser.Sync(nameof(CMD_FLAG_MF), ref CMD_FLAG_MF); + ser.Sync(nameof(CMD_FLAG_SK), ref CMD_FLAG_SK); + ser.Sync(nameof(SRT), ref SRT); + ser.Sync(nameof(HUT), ref HUT); + ser.Sync(nameof(HLT), ref HLT); + ser.Sync(nameof(ND), ref ND); + ser.Sync(nameof(SRT_Counter), ref SRT_Counter); + ser.Sync(nameof(HUT_Counter), ref HUT_Counter); + ser.Sync(nameof(HLT_Counter), ref HLT_Counter); - ser.Sync(nameof(LastCPUCycle), ref LastCPUCycle); - ser.Sync(nameof(StatusDelay), ref StatusDelay); - ser.Sync(nameof(TickCounter), ref TickCounter); - ser.Sync(nameof(DriveCycleCounter), ref DriveCycleCounter); + ser.Sync(nameof(SectorDelayCounter), ref SectorDelayCounter); + ser.Sync(nameof(SectorID), ref SectorID); - #endregion + #endregion - ser.EndSection(); - } + #region Timing - #endregion - } + ser.Sync(nameof(LastCPUCycle), ref LastCPUCycle); + ser.Sync(nameof(StatusDelay), ref StatusDelay); + ser.Sync(nameof(TickCounter), ref TickCounter); + ser.Sync(nameof(DriveCycleCounter), ref DriveCycleCounter); + + #endregion + + ser.EndSection(); + } + + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/CursorJoystick.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/CursorJoystick.cs index 45e19d65e0..a648f88bad 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/CursorJoystick.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/CursorJoystick.cs @@ -3,104 +3,104 @@ using System.Collections.Generic; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Cursor joystick - /// Maps to a combination of 0xf7fe and 0xeffe - /// - public class CursorJoystick : IJoystick - { - //private int _joyLine; - private SpectrumBase _machine; + /// + /// Cursor joystick + /// Maps to a combination of 0xf7fe and 0xeffe + /// + public class CursorJoystick : IJoystick + { + //private int _joyLine; + private SpectrumBase _machine; - #region Construction + #region Construction - public CursorJoystick(SpectrumBase machine, int playerNumber) - { - _machine = machine; - //_joyLine = 0; - _playerNumber = playerNumber; + public CursorJoystick(SpectrumBase machine, int playerNumber) + { + _machine = machine; + //_joyLine = 0; + _playerNumber = playerNumber; - ButtonCollection = new List - { - "P" + _playerNumber + " Left", - "P" + _playerNumber + " Right", - "P" + _playerNumber + " Down", - "P" + _playerNumber + " Up", - "P" + _playerNumber + " Button", - }.ToArray(); - } + ButtonCollection = new List + { + "P" + _playerNumber + " Left", + "P" + _playerNumber + " Right", + "P" + _playerNumber + " Down", + "P" + _playerNumber + " Up", + "P" + _playerNumber + " Button", + }.ToArray(); + } - private List btnLookups = new List - { - "Key 5", // left + private List btnLookups = new List + { + "Key 5", // left "Key 8", // right "Key 6", // down "Key 7", // up "Key 0", // fire }; - #endregion + #endregion - #region IJoystick + #region IJoystick - public JoystickType JoyType => JoystickType.Cursor; + public JoystickType JoyType => JoystickType.Cursor; - public string[] ButtonCollection { get; set; } + public string[] ButtonCollection { get; set; } - private int _playerNumber; - public int PlayerNumber - { - get { return _playerNumber; } - set { _playerNumber = value; } - } + private int _playerNumber; + public int PlayerNumber + { + get { return _playerNumber; } + set { _playerNumber = value; } + } - /// - /// Sets the joystick line based on key pressed - /// - public void SetJoyInput(string key, bool isPressed) - { - var pos = GetBitPos(key); + /// + /// Sets the joystick line based on key pressed + /// + public void SetJoyInput(string key, bool isPressed) + { + var pos = GetBitPos(key); - if (isPressed) - { - _machine.KeyboardDevice.SetKeyStatus(btnLookups[pos], true); - } - else - { - if (_machine.KeyboardDevice.GetKeyStatus(btnLookups[pos])) - { - // key is already pressed elswhere - leave it as is - } - else - { - // key is safe to unpress - _machine.KeyboardDevice.SetKeyStatus(btnLookups[pos], false); - } - } - } + if (isPressed) + { + _machine.KeyboardDevice.SetKeyStatus(btnLookups[pos], true); + } + else + { + if (_machine.KeyboardDevice.GetKeyStatus(btnLookups[pos])) + { + // key is already pressed elswhere - leave it as is + } + else + { + // key is safe to unpress + _machine.KeyboardDevice.SetKeyStatus(btnLookups[pos], false); + } + } + } - /// - /// Gets the state of a particular joystick binding - /// - public bool GetJoyInput(string key) - { - var pos = GetBitPos(key); - if (_machine == null) - return false; + /// + /// Gets the state of a particular joystick binding + /// + public bool GetJoyInput(string key) + { + var pos = GetBitPos(key); + if (_machine == null) + return false; - var l = _machine.KeyboardDevice.GetKeyStatus(btnLookups[pos]); - return l; - } - - #endregion + var l = _machine.KeyboardDevice.GetKeyStatus(btnLookups[pos]); + return l; + } - /// - /// Gets the bit position of a particular joystick binding from the matrix - /// - public int GetBitPos(string key) - { - int index = Array.IndexOf(ButtonCollection, key); - return index; - } - } + #endregion + + /// + /// Gets the bit position of a particular joystick binding from the matrix + /// + public int GetBitPos(string key) + { + int index = Array.IndexOf(ButtonCollection, key); + return index; + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/KempstonJoystick.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/KempstonJoystick.cs index 733d33e6b1..b3f4ac04c5 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/KempstonJoystick.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/KempstonJoystick.cs @@ -3,88 +3,88 @@ using System.Collections.Generic; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - public class KempstonJoystick : IJoystick - { - private int _joyLine; - private SpectrumBase _machine; + public class KempstonJoystick : IJoystick + { + private int _joyLine; + private SpectrumBase _machine; - #region Construction + #region Construction - public KempstonJoystick(SpectrumBase machine, int playerNumber) - { - _machine = machine; - _joyLine = 0; - _playerNumber = playerNumber; + public KempstonJoystick(SpectrumBase machine, int playerNumber) + { + _machine = machine; + _joyLine = 0; + _playerNumber = playerNumber; - ButtonCollection = new List - { - "P" + _playerNumber + " Right", - "P" + _playerNumber + " Left", - "P" + _playerNumber + " Down", - "P" + _playerNumber + " Up", - "P" + _playerNumber + " Button", - }.ToArray(); - } + ButtonCollection = new List + { + "P" + _playerNumber + " Right", + "P" + _playerNumber + " Left", + "P" + _playerNumber + " Down", + "P" + _playerNumber + " Up", + "P" + _playerNumber + " Button", + }.ToArray(); + } - #endregion + #endregion - #region IJoystick + #region IJoystick - public JoystickType JoyType => JoystickType.Kempston; + public JoystickType JoyType => JoystickType.Kempston; - public string[] ButtonCollection { get; set; } + public string[] ButtonCollection { get; set; } - private int _playerNumber; - public int PlayerNumber - { - get { return _playerNumber; } - set { _playerNumber = value; } - } + private int _playerNumber; + public int PlayerNumber + { + get { return _playerNumber; } + set { _playerNumber = value; } + } - /// - /// Sets the joystick line based on key pressed - /// - public void SetJoyInput(string key, bool isPressed) - { - var pos = GetBitPos(key); - if (isPressed) - _joyLine |= (1 << pos); - else - _joyLine &= ~(1 << pos); - } + /// + /// Sets the joystick line based on key pressed + /// + public void SetJoyInput(string key, bool isPressed) + { + var pos = GetBitPos(key); + if (isPressed) + _joyLine |= (1 << pos); + else + _joyLine &= ~(1 << pos); + } - /// - /// Gets the state of a particular joystick binding - /// - public bool GetJoyInput(string key) - { - var pos = GetBitPos(key); - return (_joyLine & (1 << pos)) != 0; - } - - #endregion + /// + /// Gets the state of a particular joystick binding + /// + public bool GetJoyInput(string key) + { + var pos = GetBitPos(key); + return (_joyLine & (1 << pos)) != 0; + } - /// - /// Active bits high - /// 0 0 0 F U D L R - /// - public int JoyLine - { - get { return _joyLine; } - set { _joyLine = value; } - } + #endregion - /// - /// Gets the bit position of a particular joystick binding from the matrix - /// - public int GetBitPos(string key) - { - int index = Array.IndexOf(ButtonCollection, key); - return index; - } + /// + /// Active bits high + /// 0 0 0 F U D L R + /// + public int JoyLine + { + get { return _joyLine; } + set { _joyLine = value; } + } + + /// + /// Gets the bit position of a particular joystick binding from the matrix + /// + public int GetBitPos(string key) + { + int index = Array.IndexOf(ButtonCollection, key); + return index; + } - /* + /* public readonly string[] _bitPos = new string[] { "P1 Right", @@ -94,5 +94,5 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum "P1 Button" }; */ - } + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/NullJoystick.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/NullJoystick.cs index ac4fd96c55..2383632927 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/NullJoystick.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/NullJoystick.cs @@ -3,87 +3,87 @@ using System.Collections.Generic; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// A null joystick object - /// - public class NullJoystick : IJoystick - { - private int _joyLine; - private SpectrumBase _machine; + /// + /// A null joystick object + /// + public class NullJoystick : IJoystick + { + private int _joyLine; + private SpectrumBase _machine; - #region Construction + #region Construction - public NullJoystick(SpectrumBase machine, int playerNumber) - { - _machine = machine; - _joyLine = 0; - _playerNumber = playerNumber; + public NullJoystick(SpectrumBase machine, int playerNumber) + { + _machine = machine; + _joyLine = 0; + _playerNumber = playerNumber; - ButtonCollection = new List - { + ButtonCollection = new List + { - }.ToArray(); - } + }.ToArray(); + } - #endregion + #endregion - #region IJoystick + #region IJoystick - public JoystickType JoyType => JoystickType.NULL; + public JoystickType JoyType => JoystickType.NULL; - public string[] ButtonCollection { get; set; } + public string[] ButtonCollection { get; set; } - private int _playerNumber; - public int PlayerNumber - { - get { return _playerNumber; } - set { _playerNumber = value; } - } + private int _playerNumber; + public int PlayerNumber + { + get { return _playerNumber; } + set { _playerNumber = value; } + } - /// - /// Sets the joystick line based on key pressed - /// - public void SetJoyInput(string key, bool isPressed) - { - var pos = GetBitPos(key); - if (isPressed) - _joyLine |= (1 << pos); - else - _joyLine &= ~(1 << pos); - } + /// + /// Sets the joystick line based on key pressed + /// + public void SetJoyInput(string key, bool isPressed) + { + var pos = GetBitPos(key); + if (isPressed) + _joyLine |= (1 << pos); + else + _joyLine &= ~(1 << pos); + } - /// - /// Gets the state of a particular joystick binding - /// - public bool GetJoyInput(string key) - { - var pos = GetBitPos(key); - return (_joyLine & (1 << pos)) != 0; - } - - #endregion + /// + /// Gets the state of a particular joystick binding + /// + public bool GetJoyInput(string key) + { + var pos = GetBitPos(key); + return (_joyLine & (1 << pos)) != 0; + } - /// - /// Active bits high - /// 0 0 0 F U D L R - /// - public int JoyLine - { - get { return _joyLine; } - set { _joyLine = value; } - } + #endregion - /// - /// Gets the bit position of a particular joystick binding from the matrix - /// - public int GetBitPos(string key) - { - int index = Array.IndexOf(ButtonCollection, key); - return index; - } + /// + /// Active bits high + /// 0 0 0 F U D L R + /// + public int JoyLine + { + get { return _joyLine; } + set { _joyLine = value; } + } + + /// + /// Gets the bit position of a particular joystick binding from the matrix + /// + public int GetBitPos(string key) + { + int index = Array.IndexOf(ButtonCollection, key); + return index; + } - /* + /* public readonly string[] _bitPos = new string[] { "P1 Right", @@ -93,5 +93,5 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum "P1 Button" }; */ - } + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick1.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick1.cs index f96c125153..f1d4e6ea3f 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick1.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick1.cs @@ -3,103 +3,103 @@ using System.Collections.Generic; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Sinclair Joystick LEFT - /// Just maps to the standard keyboard and is read the same (from port 0xf7fe) - /// - public class SinclairJoystick1 : IJoystick - { - //private int _joyLine; - private SpectrumBase _machine; + /// + /// Sinclair Joystick LEFT + /// Just maps to the standard keyboard and is read the same (from port 0xf7fe) + /// + public class SinclairJoystick1 : IJoystick + { + //private int _joyLine; + private SpectrumBase _machine; - #region Construction + #region Construction - public SinclairJoystick1(SpectrumBase machine, int playerNumber) - { - _machine = machine; - //_joyLine = 0; - _playerNumber = playerNumber; + public SinclairJoystick1(SpectrumBase machine, int playerNumber) + { + _machine = machine; + //_joyLine = 0; + _playerNumber = playerNumber; - ButtonCollection = new List - { - "P" + _playerNumber + " Left", - "P" + _playerNumber + " Right", - "P" + _playerNumber + " Down", - "P" + _playerNumber + " Up", - "P" + _playerNumber + " Button", - }.ToArray(); - } + ButtonCollection = new List + { + "P" + _playerNumber + " Left", + "P" + _playerNumber + " Right", + "P" + _playerNumber + " Down", + "P" + _playerNumber + " Up", + "P" + _playerNumber + " Button", + }.ToArray(); + } - private List btnLookups = new List - { - "Key 1", // left + private List btnLookups = new List + { + "Key 1", // left "Key 2", // right "Key 3", // down "Key 4", // up "Key 5", // fire }; - #endregion + #endregion - #region IJoystick + #region IJoystick - public JoystickType JoyType => JoystickType.SinclairLEFT; + public JoystickType JoyType => JoystickType.SinclairLEFT; - public string[] ButtonCollection { get; set; } + public string[] ButtonCollection { get; set; } - private int _playerNumber; - public int PlayerNumber - { - get { return _playerNumber; } - set { _playerNumber = value; } - } + private int _playerNumber; + public int PlayerNumber + { + get { return _playerNumber; } + set { _playerNumber = value; } + } - /// - /// Sets the joystick line based on key pressed - /// - public void SetJoyInput(string key, bool isPressed) - { - var pos = GetBitPos(key); + /// + /// Sets the joystick line based on key pressed + /// + public void SetJoyInput(string key, bool isPressed) + { + var pos = GetBitPos(key); - if (isPressed) - { - _machine.KeyboardDevice.SetKeyStatus(btnLookups[pos], true); - } - else - { - if (_machine.KeyboardDevice.GetKeyStatus(btnLookups[pos])) - { - // key is already pressed elswhere - leave it as is - } - else - { - // key is safe to unpress - _machine.KeyboardDevice.SetKeyStatus(btnLookups[pos], false); - } - } - } + if (isPressed) + { + _machine.KeyboardDevice.SetKeyStatus(btnLookups[pos], true); + } + else + { + if (_machine.KeyboardDevice.GetKeyStatus(btnLookups[pos])) + { + // key is already pressed elswhere - leave it as is + } + else + { + // key is safe to unpress + _machine.KeyboardDevice.SetKeyStatus(btnLookups[pos], false); + } + } + } - /// - /// Gets the state of a particular joystick binding - /// - public bool GetJoyInput(string key) - { - var pos = GetBitPos(key); - if (_machine == null) - return false; + /// + /// Gets the state of a particular joystick binding + /// + public bool GetJoyInput(string key) + { + var pos = GetBitPos(key); + if (_machine == null) + return false; - return _machine.KeyboardDevice.GetKeyStatus(btnLookups[pos]); - } - - #endregion + return _machine.KeyboardDevice.GetKeyStatus(btnLookups[pos]); + } - /// - /// Gets the bit position of a particular joystick binding from the matrix - /// - public int GetBitPos(string key) - { - int index = Array.IndexOf(ButtonCollection, key); - return index; - } - } + #endregion + + /// + /// Gets the bit position of a particular joystick binding from the matrix + /// + public int GetBitPos(string key) + { + int index = Array.IndexOf(ButtonCollection, key); + return index; + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick2.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick2.cs index 59c1922372..e623fac8e5 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick2.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick2.cs @@ -3,103 +3,103 @@ using System.Collections.Generic; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Sinclair Joystick RIGHT - /// Just maps to the standard keyboard and is read the same (from port 0xeffe) - /// - public class SinclairJoystick2 : IJoystick - { - //private int _joyLine; - private SpectrumBase _machine; + /// + /// Sinclair Joystick RIGHT + /// Just maps to the standard keyboard and is read the same (from port 0xeffe) + /// + public class SinclairJoystick2 : IJoystick + { + //private int _joyLine; + private SpectrumBase _machine; - #region Construction + #region Construction - public SinclairJoystick2(SpectrumBase machine, int playerNumber) - { - _machine = machine; - //_joyLine = 0; - _playerNumber = playerNumber; + public SinclairJoystick2(SpectrumBase machine, int playerNumber) + { + _machine = machine; + //_joyLine = 0; + _playerNumber = playerNumber; - ButtonCollection = new List - { - "P" + _playerNumber + " Left", - "P" + _playerNumber + " Right", - "P" + _playerNumber + " Down", - "P" + _playerNumber + " Up", - "P" + _playerNumber + " Button", - }.ToArray(); - } + ButtonCollection = new List + { + "P" + _playerNumber + " Left", + "P" + _playerNumber + " Right", + "P" + _playerNumber + " Down", + "P" + _playerNumber + " Up", + "P" + _playerNumber + " Button", + }.ToArray(); + } - private List btnLookups = new List - { - "Key 6", // left + private List btnLookups = new List + { + "Key 6", // left "Key 7", // right "Key 8", // down "Key 9", // up "Key 0", // fire }; - #endregion + #endregion - #region IJoystick + #region IJoystick - public JoystickType JoyType => JoystickType.SinclairRIGHT; + public JoystickType JoyType => JoystickType.SinclairRIGHT; - public string[] ButtonCollection { get; set; } + public string[] ButtonCollection { get; set; } - private int _playerNumber; - public int PlayerNumber - { - get { return _playerNumber; } - set { _playerNumber = value; } - } + private int _playerNumber; + public int PlayerNumber + { + get { return _playerNumber; } + set { _playerNumber = value; } + } - /// - /// Sets the joystick line based on key pressed - /// - public void SetJoyInput(string key, bool isPressed) - { - var pos = GetBitPos(key); + /// + /// Sets the joystick line based on key pressed + /// + public void SetJoyInput(string key, bool isPressed) + { + var pos = GetBitPos(key); - if (isPressed) - { - _machine.KeyboardDevice.SetKeyStatus(btnLookups[pos], true); - } - else - { - if (_machine.KeyboardDevice.GetKeyStatus(btnLookups[pos])) - { - // key is already pressed elswhere - leave it as is - } - else - { - // key is safe to unpress - _machine.KeyboardDevice.SetKeyStatus(btnLookups[pos], false); - } - } - } + if (isPressed) + { + _machine.KeyboardDevice.SetKeyStatus(btnLookups[pos], true); + } + else + { + if (_machine.KeyboardDevice.GetKeyStatus(btnLookups[pos])) + { + // key is already pressed elswhere - leave it as is + } + else + { + // key is safe to unpress + _machine.KeyboardDevice.SetKeyStatus(btnLookups[pos], false); + } + } + } - /// - /// Gets the state of a particular joystick binding - /// - public bool GetJoyInput(string key) - { - var pos = GetBitPos(key); - if (_machine == null) - return false; + /// + /// Gets the state of a particular joystick binding + /// + public bool GetJoyInput(string key) + { + var pos = GetBitPos(key); + if (_machine == null) + return false; - return _machine.KeyboardDevice.GetKeyStatus(btnLookups[pos]); - } - - #endregion + return _machine.KeyboardDevice.GetKeyStatus(btnLookups[pos]); + } - /// - /// Gets the bit position of a particular joystick binding from the matrix - /// - public int GetBitPos(string key) - { - int index = Array.IndexOf(ButtonCollection, key); - return index; - } - } + #endregion + + /// + /// Gets the bit position of a particular joystick binding from the matrix + /// + public int GetBitPos(string key) + { + int index = Array.IndexOf(ButtonCollection, key); + return index; + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/StandardKeyboard.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/StandardKeyboard.cs index 012b4207a4..9cba7b9030 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/StandardKeyboard.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/StandardKeyboard.cs @@ -5,48 +5,48 @@ using System.Linq; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// The 48k keyboard device - /// - public class StandardKeyboard : IKeyboard - { - public SpectrumBase _machine { get; set; } - private byte[] LineStatus; - private string[] _keyboardMatrix; - private int[] _keyLine; - private bool _isIssue2Keyboard; - private string[] _nonMatrixKeys; + /// + /// The 48k keyboard device + /// + public class StandardKeyboard : IKeyboard + { + public SpectrumBase _machine { get; set; } + private byte[] LineStatus; + private string[] _keyboardMatrix; + private int[] _keyLine; + private bool _isIssue2Keyboard; + private string[] _nonMatrixKeys; - public bool IsIssue2Keyboard - { - get { return _isIssue2Keyboard; } - set { _isIssue2Keyboard = value; } - } + public bool IsIssue2Keyboard + { + get { return _isIssue2Keyboard; } + set { _isIssue2Keyboard = value; } + } - public int[] KeyLine - { - get { return _keyLine; } - set { _keyLine = value; } - } + public int[] KeyLine + { + get { return _keyLine; } + set { _keyLine = value; } + } - public string[] KeyboardMatrix - { - get { return _keyboardMatrix; } - set { _keyboardMatrix = value; } - } + public string[] KeyboardMatrix + { + get { return _keyboardMatrix; } + set { _keyboardMatrix = value; } + } - public string[] NonMatrixKeys - { - get { return _nonMatrixKeys; } - set { _nonMatrixKeys = value; } - } + public string[] NonMatrixKeys + { + get { return _nonMatrixKeys; } + set { _nonMatrixKeys = value; } + } - public StandardKeyboard(SpectrumBase machine) - { - _machine = machine; + public StandardKeyboard(SpectrumBase machine) + { + _machine = machine; - KeyboardMatrix = new string[] - { + KeyboardMatrix = new string[] + { // 0xfefe - 0 - 4 "Key Caps Shift", "Key Z", "Key X", "Key C", "Key V", // 0xfdfe - 5 - 9 @@ -63,134 +63,134 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum "Key Return", "Key L", "Key K", "Key J", "Key H", // 0x7ffe - 35 - 39 "Key Space", "Key Symbol Shift", "Key M", "Key N", "Key B" - }; + }; - var nonMatrix = new List(); - - foreach (var key in _machine.Spectrum.ZXSpectrumControllerDefinition.BoolButtons) - { - if (!KeyboardMatrix.Any(s => s == key)) - nonMatrix.Add(key); - } - - NonMatrixKeys = nonMatrix.ToArray(); + var nonMatrix = new List(); - LineStatus = new byte[8]; - _keyLine = new int[] { 255, 255, 255, 255, 255, 255, 255, 255 }; - IsIssue2Keyboard = true; - } + foreach (var key in _machine.Spectrum.ZXSpectrumControllerDefinition.BoolButtons) + { + if (!KeyboardMatrix.Any(s => s == key)) + nonMatrix.Add(key); + } - public void SetKeyStatus(string key, bool isPressed) - { - int k = GetByteFromKeyMatrix(key); - - if (k != 255) - { - var lineIndex = k / 5; - var lineMask = 1 << k % 5; + NonMatrixKeys = nonMatrix.ToArray(); - _keyLine[lineIndex] = isPressed - ? (byte)(_keyLine[lineIndex] & ~lineMask) - : (byte)(_keyLine[lineIndex] | lineMask); - } + LineStatus = new byte[8]; + _keyLine = new int[] { 255, 255, 255, 255, 255, 255, 255, 255 }; + IsIssue2Keyboard = true; + } - // Combination keys that are not in the keyboard matrix - // but are available on the Spectrum+, 128k +2 & +3 - // (GetByteFromKeyMatrix() should return 255) - // Processed after the matrix keys - only presses handled (unpressed get done above) - if (k == 255) - { - if (isPressed) - { - switch (key) - { - // Delete key (simulates Caps Shift + 0) - case "Key Delete": - _keyLine[0] = _keyLine[0] & ~(0x1); - _keyLine[4] = _keyLine[4] & ~(0x1); - break; - // Cursor left (simulates Caps Shift + 5) - case "Key Left Cursor": - _keyLine[0] = _keyLine[0] & ~(0x1); - _keyLine[3] = _keyLine[3] & ~(0x10); - break; - // Cursor right (simulates Caps Shift + 8) - case "Key Right Cursor": - _keyLine[0] = _keyLine[0] & ~(0x1); - _keyLine[4] = _keyLine[4] & ~(0x04); - break; - // Cursor up (simulates Caps Shift + 7) - case "Key Up Cursor": - _keyLine[0] = _keyLine[0] & ~(0x1); - _keyLine[4] = _keyLine[4] & ~(0x08); - break; - // Cursor down (simulates Caps Shift + 6) - case "Key Down Cursor": - _keyLine[0] = _keyLine[0] & ~(0x1); - _keyLine[4] = _keyLine[4] & ~(0x10); - break; - } - } - } - } + public void SetKeyStatus(string key, bool isPressed) + { + int k = GetByteFromKeyMatrix(key); - public bool GetKeyStatus(string key) - { - byte keyByte = GetByteFromKeyMatrix(key); - var lineIndex = keyByte / 5; - var lineMask = 1 << keyByte % 5; + if (k != 255) + { + var lineIndex = k / 5; + var lineMask = 1 << k % 5; - return (_keyLine[lineIndex] & lineMask) == 0; - } + _keyLine[lineIndex] = isPressed + ? (byte)(_keyLine[lineIndex] & ~lineMask) + : (byte)(_keyLine[lineIndex] | lineMask); + } - public void ResetLineStatus() - { - lock (this) - { - for (int i = 0; i < KeyLine.Length; i++) - KeyLine[i] = 255; - } - } + // Combination keys that are not in the keyboard matrix + // but are available on the Spectrum+, 128k +2 & +3 + // (GetByteFromKeyMatrix() should return 255) + // Processed after the matrix keys - only presses handled (unpressed get done above) + if (k == 255) + { + if (isPressed) + { + switch (key) + { + // Delete key (simulates Caps Shift + 0) + case "Key Delete": + _keyLine[0] = _keyLine[0] & ~(0x1); + _keyLine[4] = _keyLine[4] & ~(0x1); + break; + // Cursor left (simulates Caps Shift + 5) + case "Key Left Cursor": + _keyLine[0] = _keyLine[0] & ~(0x1); + _keyLine[3] = _keyLine[3] & ~(0x10); + break; + // Cursor right (simulates Caps Shift + 8) + case "Key Right Cursor": + _keyLine[0] = _keyLine[0] & ~(0x1); + _keyLine[4] = _keyLine[4] & ~(0x04); + break; + // Cursor up (simulates Caps Shift + 7) + case "Key Up Cursor": + _keyLine[0] = _keyLine[0] & ~(0x1); + _keyLine[4] = _keyLine[4] & ~(0x08); + break; + // Cursor down (simulates Caps Shift + 6) + case "Key Down Cursor": + _keyLine[0] = _keyLine[0] & ~(0x1); + _keyLine[4] = _keyLine[4] & ~(0x10); + break; + } + } + } + } - public byte GetLineStatus(byte lines) - { - lock(this) - { - byte status = 0; - lines = (byte)~lines; - var lineIndex = 0; - while (lines > 0) - { - if ((lines & 0x01) != 0) - status |= (byte)_keyLine[lineIndex]; - lineIndex++; - lines >>= 1; - } - var result = (byte)status; + public bool GetKeyStatus(string key) + { + byte keyByte = GetByteFromKeyMatrix(key); + var lineIndex = keyByte / 5; + var lineMask = 1 << keyByte % 5; - return result; - } - } + return (_keyLine[lineIndex] & lineMask) == 0; + } - public byte ReadKeyboardByte(ushort addr) - { - return GetLineStatus((byte)(addr >> 8)); - } + public void ResetLineStatus() + { + lock (this) + { + for (int i = 0; i < KeyLine.Length; i++) + KeyLine[i] = 255; + } + } - public byte GetByteFromKeyMatrix(string key) - { - int index = Array.IndexOf(KeyboardMatrix, key); - return (byte)index; - } + public byte GetLineStatus(byte lines) + { + lock (this) + { + byte status = 0; + lines = (byte)~lines; + var lineIndex = 0; + while (lines > 0) + { + if ((lines & 0x01) != 0) + status |= (byte)_keyLine[lineIndex]; + lineIndex++; + lines >>= 1; + } + var result = (byte)status; - #region IPortIODevice + return result; + } + } - /// - /// Device responds to an IN instruction - /// - public bool ReadPort(ushort port, ref int result) - { - /* + public byte ReadKeyboardByte(ushort addr) + { + return GetLineStatus((byte)(addr >> 8)); + } + + public byte GetByteFromKeyMatrix(string key) + { + int index = Array.IndexOf(KeyboardMatrix, key); + return (byte)index; + } + + #region IPortIODevice + + /// + /// Device responds to an IN instruction + /// + public bool ReadPort(ushort port, ref int result) + { + /* The high byte indicates which half-row of keys is being polled A zero on one of these lines selects a particular half-row of five keys: @@ -206,75 +206,75 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum (for instance by XOR A/IN A,(FE)) is one, no key is pressed */ - if ((port & 0x0001) != 0) - return false; + if ((port & 0x0001) != 0) + return false; - if ((port & 0x8000) == 0) - { - result &= KeyLine[7]; - } + if ((port & 0x8000) == 0) + { + result &= KeyLine[7]; + } - if ((port & 0x4000) == 0) - { - result &= KeyLine[6]; - } + if ((port & 0x4000) == 0) + { + result &= KeyLine[6]; + } - if ((port & 0x2000) == 0) - { - result &= KeyLine[5]; - } + if ((port & 0x2000) == 0) + { + result &= KeyLine[5]; + } - if ((port & 0x1000) == 0) - { - result &= KeyLine[4]; - } + if ((port & 0x1000) == 0) + { + result &= KeyLine[4]; + } - if ((port & 0x800) == 0) - { - result &= KeyLine[3]; - } + if ((port & 0x800) == 0) + { + result &= KeyLine[3]; + } - if ((port & 0x400) == 0) - { - result &= KeyLine[2]; - } + if ((port & 0x400) == 0) + { + result &= KeyLine[2]; + } - if ((port & 0x200) == 0) - { - result &= KeyLine[1]; - } + if ((port & 0x200) == 0) + { + result &= KeyLine[1]; + } - if ((port & 0x100) == 0) - { - result &= KeyLine[0]; - } + if ((port & 0x100) == 0) + { + result &= KeyLine[0]; + } - // mask out lower 4 bits - result = result & 0x1f; + // mask out lower 4 bits + result = result & 0x1f; - // set bit 5 & 7 to 1 - result = result | 0xa0; + // set bit 5 & 7 to 1 + result = result | 0xa0; - return true; - } + return true; + } - /// - /// Device responds to an OUT instruction - /// - public bool WritePort(ushort port, int result) - { - // not implemented - return false; - } + /// + /// Device responds to an OUT instruction + /// + public bool WritePort(ushort port, int result) + { + // not implemented + return false; + } - #endregion + #endregion - public void SyncState(Serializer ser) - { - ser.BeginSection("Keyboard"); - ser.Sync(nameof(LineStatus), ref LineStatus, false); - ser.Sync(nameof(_keyLine), ref _keyLine, false); - ser.EndSection(); - } - } + public void SyncState(Serializer ser) + { + ser.BeginSection("Keyboard"); + ser.Sync(nameof(LineStatus), ref LineStatus, false); + ser.Sync(nameof(_keyLine), ref _keyLine, false); + ser.EndSection(); + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Rom/RomData.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Rom/RomData.cs index 972f7030aa..b9484377cd 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Rom/RomData.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Rom/RomData.cs @@ -1,83 +1,83 @@  namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Information about spectrum ROM - /// - public class RomData - { - /// - /// ROM Contents - /// - public byte[] RomBytes - { - get { return _romBytes; } - set { _romBytes = value; } - } + /// + /// Information about spectrum ROM + /// + public class RomData + { + /// + /// ROM Contents + /// + public byte[] RomBytes + { + get { return _romBytes; } + set { _romBytes = value; } + } - /// - /// Useful ROM addresses that are needed during tape operations - /// - public ushort SaveBytesRoutineAddress - { - get { return _saveBytesRoutineAddress; } - set { _saveBytesRoutineAddress = value; } - } - public ushort LoadBytesRoutineAddress - { - get { return _loadBytesRoutineAddress; } - set { _loadBytesRoutineAddress = value; } - } - public ushort SaveBytesResumeAddress - { - get { return _saveBytesResumeAddress; } - set { _saveBytesResumeAddress = value; } - } - public ushort LoadBytesResumeAddress - { - get { return _loadBytesResumeAddress; } - set { _loadBytesResumeAddress = value; } - } - public ushort LoadBytesInvalidHeaderAddress - { - get { return _loadBytesInvalidHeaderAddress; } - set { _loadBytesInvalidHeaderAddress = value; } - } + /// + /// Useful ROM addresses that are needed during tape operations + /// + public ushort SaveBytesRoutineAddress + { + get { return _saveBytesRoutineAddress; } + set { _saveBytesRoutineAddress = value; } + } + public ushort LoadBytesRoutineAddress + { + get { return _loadBytesRoutineAddress; } + set { _loadBytesRoutineAddress = value; } + } + public ushort SaveBytesResumeAddress + { + get { return _saveBytesResumeAddress; } + set { _saveBytesResumeAddress = value; } + } + public ushort LoadBytesResumeAddress + { + get { return _loadBytesResumeAddress; } + set { _loadBytesResumeAddress = value; } + } + public ushort LoadBytesInvalidHeaderAddress + { + get { return _loadBytesInvalidHeaderAddress; } + set { _loadBytesInvalidHeaderAddress = value; } + } - private byte[] _romBytes; - private ushort _saveBytesRoutineAddress; - private ushort _loadBytesRoutineAddress; - private ushort _saveBytesResumeAddress; - private ushort _loadBytesResumeAddress; - private ushort _loadBytesInvalidHeaderAddress; + private byte[] _romBytes; + private ushort _saveBytesRoutineAddress; + private ushort _loadBytesRoutineAddress; + private ushort _saveBytesResumeAddress; + private ushort _loadBytesResumeAddress; + private ushort _loadBytesInvalidHeaderAddress; - public static RomData InitROM(MachineType machineType, byte[] rom) - { - RomData RD = new RomData(); - RD.RomBytes = new byte[rom.Length]; - RD.RomBytes = rom; + public static RomData InitROM(MachineType machineType, byte[] rom) + { + RomData RD = new RomData(); + RD.RomBytes = new byte[rom.Length]; + RD.RomBytes = rom; - switch (machineType) - { - case MachineType.ZXSpectrum48: - RD.SaveBytesRoutineAddress = 0x04C2; - RD.SaveBytesResumeAddress = 0x0000; - RD.LoadBytesRoutineAddress = 0x0808; //0x0556; //0x056C; - RD.LoadBytesResumeAddress = 0x05E2; - RD.LoadBytesInvalidHeaderAddress = 0x05B6; - break; + switch (machineType) + { + case MachineType.ZXSpectrum48: + RD.SaveBytesRoutineAddress = 0x04C2; + RD.SaveBytesResumeAddress = 0x0000; + RD.LoadBytesRoutineAddress = 0x0808; //0x0556; //0x056C; + RD.LoadBytesResumeAddress = 0x05E2; + RD.LoadBytesInvalidHeaderAddress = 0x05B6; + break; - case MachineType.ZXSpectrum128: - RD.SaveBytesRoutineAddress = 0x04C2; - RD.SaveBytesResumeAddress = 0x0000; - RD.LoadBytesRoutineAddress = 0x0808; //0x0556; //0x056C; - RD.LoadBytesResumeAddress = 0x05E2; - RD.LoadBytesInvalidHeaderAddress = 0x05B6; - break; - } + case MachineType.ZXSpectrum128: + RD.SaveBytesRoutineAddress = 0x04C2; + RD.SaveBytesResumeAddress = 0x0000; + RD.LoadBytesRoutineAddress = 0x0808; //0x0556; //0x056C; + RD.LoadBytesResumeAddress = 0x05E2; + RD.LoadBytesInvalidHeaderAddress = 0x05B6; + break; + } - return RD; - } - } + return RD; + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/AY38912.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/AY38912.cs index 5f3e12d0ae..c15be8d2a3 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/AY38912.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/AY38912.cs @@ -5,194 +5,194 @@ using System.Collections.Generic; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// AY-3-8912 Emulated Device - /// - /// Based heavily on the YM-2149F / AY-3-8910 emulator used in Unreal Speccy - /// (Originally created under Public Domain license by SMT jan.2006) - /// - /// https://github.com/mkoloberdin/unrealspeccy/blob/master/sndrender/sndchip.cpp - /// https://github.com/mkoloberdin/unrealspeccy/blob/master/sndrender/sndchip.h - /// - public class AY38912 : IPSG - { - #region Device Fields + /// + /// AY-3-8912 Emulated Device + /// + /// Based heavily on the YM-2149F / AY-3-8910 emulator used in Unreal Speccy + /// (Originally created under Public Domain license by SMT jan.2006) + /// + /// https://github.com/mkoloberdin/unrealspeccy/blob/master/sndrender/sndchip.cpp + /// https://github.com/mkoloberdin/unrealspeccy/blob/master/sndrender/sndchip.h + /// + public class AY38912 : IPSG + { + #region Device Fields - /// - /// The emulated machine (passed in via constructor) - /// - private SpectrumBase _machine; + /// + /// The emulated machine (passed in via constructor) + /// + private SpectrumBase _machine; - private int _tStatesPerFrame; - private int _sampleRate; - private int _samplesPerFrame; - private int _tStatesPerSample; - private short[] _audioBuffer; - private int _audioBufferIndex; - private int _lastStateRendered; + private int _tStatesPerFrame; + private int _sampleRate; + private int _samplesPerFrame; + private int _tStatesPerSample; + private short[] _audioBuffer; + private int _audioBufferIndex; + private int _lastStateRendered; - #endregion + #endregion - #region Construction & Initialization + #region Construction & Initialization - /// - /// Main constructor - /// - public AY38912(SpectrumBase machine) - { - _machine = machine; - } + /// + /// Main constructor + /// + public AY38912(SpectrumBase machine) + { + _machine = machine; + } - /// - /// Initialises the AY chip - /// - public void Init(int sampleRate, int tStatesPerFrame) - { - InitTiming(sampleRate, tStatesPerFrame); - UpdateVolume(); - Reset(); - } + /// + /// Initialises the AY chip + /// + public void Init(int sampleRate, int tStatesPerFrame) + { + InitTiming(sampleRate, tStatesPerFrame); + UpdateVolume(); + Reset(); + } - #endregion + #endregion - #region IPortIODevice + #region IPortIODevice - public bool ReadPort(ushort port, ref int value) - { - if (port != 0xfffd) - { - // port read is not addressing this device - return false; - } + public bool ReadPort(ushort port, ref int value) + { + if (port != 0xfffd) + { + // port read is not addressing this device + return false; + } - value = PortRead(); + value = PortRead(); - return true; - } + return true; + } - public bool WritePort(ushort port, int value) - { - if (port == 0xfffd) - { - // register select - SelectedRegister = value & 0x0f; - return true; - } - else if (port == 0xbffd) - { - // Update the audiobuffer based on the current CPU cycle - // (this process the previous data BEFORE writing to the currently selected register) - int d = (int)(_machine.CurrentFrameCycle); - BufferUpdate(d); + public bool WritePort(ushort port, int value) + { + if (port == 0xfffd) + { + // register select + SelectedRegister = value & 0x0f; + return true; + } + else if (port == 0xbffd) + { + // Update the audiobuffer based on the current CPU cycle + // (this process the previous data BEFORE writing to the currently selected register) + int d = (int)(_machine.CurrentFrameCycle); + BufferUpdate(d); - // write to register - PortWrite(value); - return true; - } - return false; - } + // write to register + PortWrite(value); + return true; + } + return false; + } - #endregion + #endregion - #region AY Implementation + #region AY Implementation - #region Public Properties + #region Public Properties - /// - /// AY mixer panning configuration - /// - [Flags] - public enum AYPanConfig - { - MONO = 0, - ABC = 1, - ACB = 2, - BAC = 3, - BCA = 4, - CAB = 5, - CBA = 6, - } + /// + /// AY mixer panning configuration + /// + [Flags] + public enum AYPanConfig + { + MONO = 0, + ABC = 1, + ACB = 2, + BAC = 3, + BCA = 4, + CAB = 5, + CBA = 6, + } - /// - /// The AY panning configuration - /// - public AYPanConfig PanningConfiguration - { - get - { - return _currentPanTab; - } - set - { - if (value != _currentPanTab) - { - _currentPanTab = value; - UpdateVolume(); - } - } - } + /// + /// The AY panning configuration + /// + public AYPanConfig PanningConfiguration + { + get + { + return _currentPanTab; + } + set + { + if (value != _currentPanTab) + { + _currentPanTab = value; + UpdateVolume(); + } + } + } - /// - /// The AY chip output volume - /// (0 - 100) - /// - public int Volume - { - get - { - return _volume; - } - set - { - //value = Math.Max(0, value); - //value = Math.Max(100, value); - if (_volume == value) - { - return; - } - _volume = value; - UpdateVolume(); - } - } + /// + /// The AY chip output volume + /// (0 - 100) + /// + public int Volume + { + get + { + return _volume; + } + set + { + //value = Math.Max(0, value); + //value = Math.Max(100, value); + if (_volume == value) + { + return; + } + _volume = value; + UpdateVolume(); + } + } - /// - /// The currently selected register - /// - public int SelectedRegister - { - get { return _activeRegister; } - set - { - _activeRegister = (byte)value; - } - } + /// + /// The currently selected register + /// + public int SelectedRegister + { + get { return _activeRegister; } + set + { + _activeRegister = (byte)value; + } + } - /// - /// Used for snapshot generation - /// - public int[] ExportRegisters() - { - return _registers; - } + /// + /// Used for snapshot generation + /// + public int[] ExportRegisters() + { + return _registers; + } - #endregion + #endregion - #region Public Methods + #region Public Methods - /// - /// Resets the PSG - /// - public void Reset() - { - for (int i = 0; i < 16; i++) - { - if (i == 6) - _registers[i] = 0xff; - else - _registers[i] = 0; - } + /// + /// Resets the PSG + /// + public void Reset() + { + for (int i = 0; i < 16; i++) + { + if (i == 6) + _registers[i] = 0xff; + else + _registers[i] = 0; + } - /* + /* _noiseVal = 0x0FFFF; _outABC = 0; _outNoiseABC = 0; @@ -217,166 +217,166 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum // update the audio buffer BufferUpdate(fr); */ - } + } - /// - /// Reads the value from the currently selected register - /// - public int PortRead() - { - return _registers[_activeRegister]; - } + /// + /// Reads the value from the currently selected register + /// + public int PortRead() + { + return _registers[_activeRegister]; + } - /// - /// Writes to the currently selected register - /// - public void PortWrite(int value) - { - if (_activeRegister >= 0x10) - return; + /// + /// Writes to the currently selected register + /// + public void PortWrite(int value) + { + if (_activeRegister >= 0x10) + return; - byte val = (byte)value; + byte val = (byte)value; - if (((1 << _activeRegister) & ((1 << 1) | (1 << 3) | (1 << 5) | (1 << 13))) != 0) - val &= 0x0F; + if (((1 << _activeRegister) & ((1 << 1) | (1 << 3) | (1 << 5) | (1 << 13))) != 0) + val &= 0x0F; - if (((1 << _activeRegister) & ((1 << 6) | (1 << 8) | (1 << 9) | (1 << 10))) != 0) - val &= 0x1F; + if (((1 << _activeRegister) & ((1 << 6) | (1 << 8) | (1 << 9) | (1 << 10))) != 0) + val &= 0x1F; - if (_activeRegister != 13 && _registers[_activeRegister] == val) - return; + if (_activeRegister != 13 && _registers[_activeRegister] == val) + return; - _registers[_activeRegister] = val; + _registers[_activeRegister] = val; - switch (_activeRegister) - { - // Channel A (Combined Pitch) - // (not written to directly) - case 0: - case 1: - _dividerA = _registers[AY_A_FINE] | (_registers[AY_A_COARSE] << 8); - break; - // Channel B (Combined Pitch) - // (not written to directly) - case 2: - case 3: - _dividerB = _registers[AY_B_FINE] | (_registers[AY_B_COARSE] << 8); - break; - // Channel C (Combined Pitch) - // (not written to directly) - case 4: - case 5: - _dividerC = _registers[AY_C_FINE] | (_registers[AY_C_COARSE] << 8); - break; - // Noise Pitch - case 6: - _dividerN = val * 2; - break; - // Mixer - case 7: - _bit0 = 0 - ((val >> 0) & 1); - _bit1 = 0 - ((val >> 1) & 1); - _bit2 = 0 - ((val >> 2) & 1); - _bit3 = 0 - ((val >> 3) & 1); - _bit4 = 0 - ((val >> 4) & 1); - _bit5 = 0 - ((val >> 5) & 1); - break; - // Channel Volumes - case 8: - _eMaskA = (val & 0x10) != 0 ? -1 : 0; - _vA = ((val & 0x0F) * 2 + 1) & ~_eMaskA; - break; - case 9: - _eMaskB = (val & 0x10) != 0 ? -1 : 0; - _vB = ((val & 0x0F) * 2 + 1) & ~_eMaskB; - break; - case 10: - _eMaskC = (val & 0x10) != 0 ? -1 : 0; - _vC = ((val & 0x0F) * 2 + 1) & ~_eMaskC; - break; - // Envelope (Combined Duration) - // (not written to directly) - case 11: - case 12: - _dividerE = _registers[AY_E_FINE] | (_registers[AY_E_COARSE] << 8); - break; - // Envelope Shape - case 13: - // reset the envelope counter - _countE = 0; + switch (_activeRegister) + { + // Channel A (Combined Pitch) + // (not written to directly) + case 0: + case 1: + _dividerA = _registers[AY_A_FINE] | (_registers[AY_A_COARSE] << 8); + break; + // Channel B (Combined Pitch) + // (not written to directly) + case 2: + case 3: + _dividerB = _registers[AY_B_FINE] | (_registers[AY_B_COARSE] << 8); + break; + // Channel C (Combined Pitch) + // (not written to directly) + case 4: + case 5: + _dividerC = _registers[AY_C_FINE] | (_registers[AY_C_COARSE] << 8); + break; + // Noise Pitch + case 6: + _dividerN = val * 2; + break; + // Mixer + case 7: + _bit0 = 0 - ((val >> 0) & 1); + _bit1 = 0 - ((val >> 1) & 1); + _bit2 = 0 - ((val >> 2) & 1); + _bit3 = 0 - ((val >> 3) & 1); + _bit4 = 0 - ((val >> 4) & 1); + _bit5 = 0 - ((val >> 5) & 1); + break; + // Channel Volumes + case 8: + _eMaskA = (val & 0x10) != 0 ? -1 : 0; + _vA = ((val & 0x0F) * 2 + 1) & ~_eMaskA; + break; + case 9: + _eMaskB = (val & 0x10) != 0 ? -1 : 0; + _vB = ((val & 0x0F) * 2 + 1) & ~_eMaskB; + break; + case 10: + _eMaskC = (val & 0x10) != 0 ? -1 : 0; + _vC = ((val & 0x0F) * 2 + 1) & ~_eMaskC; + break; + // Envelope (Combined Duration) + // (not written to directly) + case 11: + case 12: + _dividerE = _registers[AY_E_FINE] | (_registers[AY_E_COARSE] << 8); + break; + // Envelope Shape + case 13: + // reset the envelope counter + _countE = 0; - if ((_registers[AY_E_SHAPE] & 4) != 0) - { - // attack - _eState = 0; - _eDirection = 1; - } - else - { - // decay - _eState = 31; - _eDirection = -1; - } - break; - case 14: - // IO Port - not implemented - break; - } - } + if ((_registers[AY_E_SHAPE] & 4) != 0) + { + // attack + _eState = 0; + _eDirection = 1; + } + else + { + // decay + _eState = 31; + _eDirection = -1; + } + break; + case 14: + // IO Port - not implemented + break; + } + } - /// - /// Start of frame - /// - public void StartFrame() - { - _audioBufferIndex = 0; - BufferUpdate(0); - } + /// + /// Start of frame + /// + public void StartFrame() + { + _audioBufferIndex = 0; + BufferUpdate(0); + } - /// - /// End of frame - /// - public void EndFrame() - { - BufferUpdate(_tStatesPerFrame); - } + /// + /// End of frame + /// + public void EndFrame() + { + BufferUpdate(_tStatesPerFrame); + } - /// - /// Updates the audiobuffer based on the current frame t-state - /// - public void UpdateSound(int frameCycle) - { - BufferUpdate(frameCycle); - } + /// + /// Updates the audiobuffer based on the current frame t-state + /// + public void UpdateSound(int frameCycle) + { + BufferUpdate(frameCycle); + } - #endregion + #endregion - #region Private Fields + #region Private Fields - /// - /// Register indicies - /// - private const int AY_A_FINE = 0; - private const int AY_A_COARSE = 1; - private const int AY_B_FINE = 2; - private const int AY_B_COARSE = 3; - private const int AY_C_FINE = 4; - private const int AY_C_COARSE = 5; - private const int AY_NOISEPITCH = 6; - private const int AY_MIXER = 7; - private const int AY_A_VOL = 8; - private const int AY_B_VOL = 9; - private const int AY_C_VOL = 10; - private const int AY_E_FINE = 11; - private const int AY_E_COARSE = 12; - private const int AY_E_SHAPE = 13; - private const int AY_PORT_A = 14; - private const int AY_PORT_B = 15; + /// + /// Register indicies + /// + private const int AY_A_FINE = 0; + private const int AY_A_COARSE = 1; + private const int AY_B_FINE = 2; + private const int AY_B_COARSE = 3; + private const int AY_C_FINE = 4; + private const int AY_C_COARSE = 5; + private const int AY_NOISEPITCH = 6; + private const int AY_MIXER = 7; + private const int AY_A_VOL = 8; + private const int AY_B_VOL = 9; + private const int AY_C_VOL = 10; + private const int AY_E_FINE = 11; + private const int AY_E_COARSE = 12; + private const int AY_E_SHAPE = 13; + private const int AY_PORT_A = 14; + private const int AY_PORT_B = 15; - /// - /// The register array - /// - /* + /// + /// The register array + /// + /* The AY-3-8910/8912 contains 16 internal registers as follows: Register Function Range @@ -407,113 +407,113 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum The AY-3-8912 ignores bit 7 of this register. */ - private int[] _registers = new int[16]; + private int[] _registers = new int[16]; - /// - /// The currently selected register - /// - private byte _activeRegister; + /// + /// The currently selected register + /// + private byte _activeRegister; - /// - /// The frequency of the AY chip - /// - private static int _chipFrequency = 1773400; + /// + /// The frequency of the AY chip + /// + private static int _chipFrequency = 1773400; - /// - /// The rendering resolution of the chip - /// - private double _resolution = 50D * 8D / _chipFrequency; + /// + /// The rendering resolution of the chip + /// + private double _resolution = 50D * 8D / _chipFrequency; - /// - /// Channel generator state - /// - private int _bitA; - private int _bitB; - private int _bitC; + /// + /// Channel generator state + /// + private int _bitA; + private int _bitB; + private int _bitC; - /// - /// Envelope state - /// - private int _eState; + /// + /// Envelope state + /// + private int _eState; - /// - /// Envelope direction - /// - private int _eDirection; + /// + /// Envelope direction + /// + private int _eDirection; - /// - /// Noise seed - /// - private int _noiseSeed; + /// + /// Noise seed + /// + private int _noiseSeed; - /// - /// Mixer state - /// - private int _bit0; - private int _bit1; - private int _bit2; - private int _bit3; - private int _bit4; - private int _bit5; + /// + /// Mixer state + /// + private int _bit0; + private int _bit1; + private int _bit2; + private int _bit3; + private int _bit4; + private int _bit5; - /// - /// Noise generator state - /// - private int _bitN; + /// + /// Noise generator state + /// + private int _bitN; - /// - /// Envelope masks - /// - private int _eMaskA; - private int _eMaskB; - private int _eMaskC; + /// + /// Envelope masks + /// + private int _eMaskA; + private int _eMaskB; + private int _eMaskC; - /// - /// Amplitudes - /// - private int _vA; - private int _vB; - private int _vC; + /// + /// Amplitudes + /// + private int _vA; + private int _vB; + private int _vC; - /// - /// Channel gen counters - /// - private int _countA; - private int _countB; - private int _countC; + /// + /// Channel gen counters + /// + private int _countA; + private int _countB; + private int _countC; - /// - /// Envelope gen counter - /// - private int _countE; + /// + /// Envelope gen counter + /// + private int _countE; - /// - /// Noise gen counter - /// - private int _countN; + /// + /// Noise gen counter + /// + private int _countN; - /// - /// Channel gen dividers - /// - private int _dividerA; - private int _dividerB; - private int _dividerC; + /// + /// Channel gen dividers + /// + private int _dividerA; + private int _dividerB; + private int _dividerC; - /// - /// Envelope gen divider - /// - private int _dividerE; + /// + /// Envelope gen divider + /// + private int _dividerE; - /// - /// Noise gen divider - /// - private int _dividerN; + /// + /// Noise gen divider + /// + private int _dividerN; - /// - /// Panning table list - /// - private static List PanTabs = new List - { + /// + /// Panning table list + /// + private static List PanTabs = new List + { // MONO new uint[] { 50,50, 50,50, 50,50 }, // ABC @@ -528,290 +528,290 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum new uint[] { 66,66, 10,100, 100,10 }, // CBA new uint[] { 10,100, 66,66, 100,10 } - }; + }; - /// - /// The currently selected panning configuration - /// - private AYPanConfig _currentPanTab = AYPanConfig.ABC; + /// + /// The currently selected panning configuration + /// + private AYPanConfig _currentPanTab = AYPanConfig.ABC; - /// - /// The current volume - /// - private int _volume = 75; + /// + /// The current volume + /// + private int _volume = 75; - /// - /// Volume tables state - /// - private uint[][] _volumeTables; + /// + /// Volume tables state + /// + private uint[][] _volumeTables; - /// - /// Volume table to be used - /// - private static uint[] AYVolumes = new uint[] - { - 0x0000,0x0000,0x0340,0x0340,0x04C0,0x04C0,0x06F2,0x06F2, - 0x0A44,0x0A44,0x0F13,0x0F13,0x1510,0x1510,0x227E,0x227E, - 0x289F,0x289F,0x414E,0x414E,0x5B21,0x5B21,0x7258,0x7258, - 0x905E,0x905E,0xB550,0xB550,0xD7A0,0xD7A0,0xFFFF,0xFFFF, - }; + /// + /// Volume table to be used + /// + private static uint[] AYVolumes = new uint[] + { + 0x0000,0x0000,0x0340,0x0340,0x04C0,0x04C0,0x06F2,0x06F2, + 0x0A44,0x0A44,0x0F13,0x0F13,0x1510,0x1510,0x227E,0x227E, + 0x289F,0x289F,0x414E,0x414E,0x5B21,0x5B21,0x7258,0x7258, + 0x905E,0x905E,0xB550,0xB550,0xD7A0,0xD7A0,0xFFFF,0xFFFF, + }; - #endregion + #endregion - #region Private Methods + #region Private Methods - /// - /// Forces an update of the volume tables - /// - private void UpdateVolume() - { - int upperFloor = 40000; - var inc = (0xFFFF - upperFloor) / 100; + /// + /// Forces an update of the volume tables + /// + private void UpdateVolume() + { + int upperFloor = 40000; + var inc = (0xFFFF - upperFloor) / 100; - var vol = inc * _volume; // ((ulong)0xFFFF * (ulong)_volume / 100UL) - 20000 ; - _volumeTables = new uint[6][]; + var vol = inc * _volume; // ((ulong)0xFFFF * (ulong)_volume / 100UL) - 20000 ; + _volumeTables = new uint[6][]; - // parent array - for (int j = 0; j < _volumeTables.Length; j++) - { - _volumeTables[j] = new uint[32]; + // parent array + for (int j = 0; j < _volumeTables.Length; j++) + { + _volumeTables[j] = new uint[32]; - // child array - for (int i = 0; i < _volumeTables[j].Length; i++) - { - _volumeTables[j][i] = (uint)( - (PanTabs[(int)_currentPanTab][j] * AYVolumes[i] * vol) / - (3 * 65535 * 100)); - } - } - } + // child array + for (int i = 0; i < _volumeTables[j].Length; i++) + { + _volumeTables[j][i] = (uint)( + (PanTabs[(int)_currentPanTab][j] * AYVolumes[i] * vol) / + (3 * 65535 * 100)); + } + } + } - private int mult_const; + private int mult_const; - /// - /// Initializes timing information for the frame - /// - private void InitTiming(int sampleRate, int frameTactCount) - { - _sampleRate = sampleRate; - _tStatesPerFrame = frameTactCount; - _samplesPerFrame = 882; + /// + /// Initializes timing information for the frame + /// + private void InitTiming(int sampleRate, int frameTactCount) + { + _sampleRate = sampleRate; + _tStatesPerFrame = frameTactCount; + _samplesPerFrame = 882; - _tStatesPerSample = 79; //(int)Math.Round(((double)_tStatesPerFrame * 50D) / - //(16D * (double)_sampleRate), - //MidpointRounding.AwayFromZero); + _tStatesPerSample = 79; //(int)Math.Round(((double)_tStatesPerFrame * 50D) / + //(16D * (double)_sampleRate), + //MidpointRounding.AwayFromZero); - //_samplesPerFrame = _tStatesPerFrame / _tStatesPerSample; - _audioBuffer = new short[_samplesPerFrame * 2]; //[_sampleRate / 50]; - _audioBufferIndex = 0; + //_samplesPerFrame = _tStatesPerFrame / _tStatesPerSample; + _audioBuffer = new short[_samplesPerFrame * 2]; //[_sampleRate / 50]; + _audioBufferIndex = 0; - mult_const = ((_chipFrequency / 8) << 14) / _machine.ULADevice.ClockSpeed; + mult_const = ((_chipFrequency / 8) << 14) / _machine.ULADevice.ClockSpeed; - var aytickspercputick = (double)_machine.ULADevice.ClockSpeed / (double)_chipFrequency; - int ayCyclesPerSample = (int)((double)_tStatesPerSample * (double)aytickspercputick); - } + var aytickspercputick = (double)_machine.ULADevice.ClockSpeed / (double)_chipFrequency; + int ayCyclesPerSample = (int)((double)_tStatesPerSample * (double)aytickspercputick); + } - /// - /// Updates the audiobuffer based on the current frame t-state - /// - private void BufferUpdate(int cycle) - { - if (cycle > _tStatesPerFrame) - { - // we are outside of the frame - just process the last value - cycle = _tStatesPerFrame; - } + /// + /// Updates the audiobuffer based on the current frame t-state + /// + private void BufferUpdate(int cycle) + { + if (cycle > _tStatesPerFrame) + { + // we are outside of the frame - just process the last value + cycle = _tStatesPerFrame; + } - // get the current length of the audiobuffer - int bufferLength = _samplesPerFrame; // _audioBuffer.Length; + // get the current length of the audiobuffer + int bufferLength = _samplesPerFrame; // _audioBuffer.Length; - int toEnd = ((bufferLength * cycle) / _tStatesPerFrame); + int toEnd = ((bufferLength * cycle) / _tStatesPerFrame); - // loop through the number of samples we need to render - while (_audioBufferIndex < toEnd) - { - // run the AY chip processing at the correct resolution - for (int i = 0; i < _tStatesPerSample / 14; i++) - { - if (++_countA >= _dividerA) - { - _countA = 0; - _bitA ^= -1; - } + // loop through the number of samples we need to render + while (_audioBufferIndex < toEnd) + { + // run the AY chip processing at the correct resolution + for (int i = 0; i < _tStatesPerSample / 14; i++) + { + if (++_countA >= _dividerA) + { + _countA = 0; + _bitA ^= -1; + } - if (++_countB >= _dividerB) - { - _countB = 0; - _bitB ^= -1; - } + if (++_countB >= _dividerB) + { + _countB = 0; + _bitB ^= -1; + } - if (++_countC >= _dividerC) - { - _countC = 0; - _bitC ^= -1; - } + if (++_countC >= _dividerC) + { + _countC = 0; + _bitC ^= -1; + } - if (++_countN >= _dividerN) - { - _countN = 0; - _noiseSeed = (_noiseSeed * 2 + 1) ^ (((_noiseSeed >> 16) ^ (_noiseSeed >> 13)) & 1); - _bitN = 0 - ((_noiseSeed >> 16) & 1); - } + if (++_countN >= _dividerN) + { + _countN = 0; + _noiseSeed = (_noiseSeed * 2 + 1) ^ (((_noiseSeed >> 16) ^ (_noiseSeed >> 13)) & 1); + _bitN = 0 - ((_noiseSeed >> 16) & 1); + } - if (++_countE >= _dividerE) - { - _countE = 0; - _eState += +_eDirection; + if (++_countE >= _dividerE) + { + _countE = 0; + _eState += +_eDirection; - if ((_eState & ~31) != 0) - { - var mask = (1 << _registers[AY_E_SHAPE]); + if ((_eState & ~31) != 0) + { + var mask = (1 << _registers[AY_E_SHAPE]); - if ((mask & ((1 << 0) | (1 << 1) | (1 << 2) | - (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | - (1 << 7) | (1 << 9) | (1 << 15))) != 0) - { - _eState = _eDirection = 0; - } - else if ((mask & ((1 << 8) | (1 << 12))) != 0) - { - _eState &= 31; - } - else if ((mask & ((1 << 10) | (1 << 14))) != 0) - { - _eDirection = -_eDirection; - _eState += _eDirection; - } - else - { - // 11,13 - _eState = 31; - _eDirection = 0; - } - } - } - } + if ((mask & ((1 << 0) | (1 << 1) | (1 << 2) | + (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | + (1 << 7) | (1 << 9) | (1 << 15))) != 0) + { + _eState = _eDirection = 0; + } + else if ((mask & ((1 << 8) | (1 << 12))) != 0) + { + _eState &= 31; + } + else if ((mask & ((1 << 10) | (1 << 14))) != 0) + { + _eDirection = -_eDirection; + _eState += _eDirection; + } + else + { + // 11,13 + _eState = 31; + _eDirection = 0; + } + } + } + } - // mix the sample - var mixA = ((_eMaskA & _eState) | _vA) & ((_bitA | _bit0) & (_bitN | _bit3)); - var mixB = ((_eMaskB & _eState) | _vB) & ((_bitB | _bit1) & (_bitN | _bit4)); - var mixC = ((_eMaskC & _eState) | _vC) & ((_bitC | _bit2) & (_bitN | _bit5)); + // mix the sample + var mixA = ((_eMaskA & _eState) | _vA) & ((_bitA | _bit0) & (_bitN | _bit3)); + var mixB = ((_eMaskB & _eState) | _vB) & ((_bitB | _bit1) & (_bitN | _bit4)); + var mixC = ((_eMaskC & _eState) | _vC) & ((_bitC | _bit2) & (_bitN | _bit5)); - var l = _volumeTables[0][mixA]; - var r = _volumeTables[1][mixA]; + var l = _volumeTables[0][mixA]; + var r = _volumeTables[1][mixA]; - l += _volumeTables[2][mixB]; - r += _volumeTables[3][mixB]; - l += _volumeTables[4][mixC]; - r += _volumeTables[5][mixC]; + l += _volumeTables[2][mixB]; + r += _volumeTables[3][mixB]; + l += _volumeTables[4][mixC]; + r += _volumeTables[5][mixC]; - _audioBuffer[_audioBufferIndex * 2] = (short)l; - _audioBuffer[(_audioBufferIndex * 2) + 1] = (short)r; + _audioBuffer[_audioBufferIndex * 2] = (short)l; + _audioBuffer[(_audioBufferIndex * 2) + 1] = (short)r; - _audioBufferIndex++; - } + _audioBufferIndex++; + } - _lastStateRendered = cycle; - } + _lastStateRendered = cycle; + } - #endregion + #endregion - #endregion + #endregion - #region ISoundProvider + #region ISoundProvider - public bool CanProvideAsync => false; + public bool CanProvideAsync => false; - public SyncSoundMode SyncMode => SyncSoundMode.Sync; + public SyncSoundMode SyncMode => SyncSoundMode.Sync; - public void SetSyncMode(SyncSoundMode mode) - { - if (mode != SyncSoundMode.Sync) - throw new InvalidOperationException("Only Sync mode is supported."); - } + public void SetSyncMode(SyncSoundMode mode) + { + if (mode != SyncSoundMode.Sync) + throw new InvalidOperationException("Only Sync mode is supported."); + } - public void GetSamplesAsync(short[] samples) - { - throw new NotSupportedException("Async is not available"); - } + public void GetSamplesAsync(short[] samples) + { + throw new NotSupportedException("Async is not available"); + } - public void DiscardSamples() - { - _audioBuffer = new short[_samplesPerFrame * 2]; - } + public void DiscardSamples() + { + _audioBuffer = new short[_samplesPerFrame * 2]; + } - public void GetSamplesSync(out short[] samples, out int nsamp) - { - nsamp = _samplesPerFrame; - samples = _audioBuffer; - DiscardSamples(); - } + public void GetSamplesSync(out short[] samples, out int nsamp) + { + nsamp = _samplesPerFrame; + samples = _audioBuffer; + DiscardSamples(); + } - #endregion + #endregion - #region State Serialization + #region State Serialization - public int nullDump = 0; + public int nullDump = 0; - /// - /// State serialization - /// - public void SyncState(Serializer ser) - { - ser.BeginSection("PSG-AY"); + /// + /// State serialization + /// + public void SyncState(Serializer ser) + { + ser.BeginSection("PSG-AY"); - ser.Sync(nameof(_tStatesPerFrame), ref _tStatesPerFrame); - ser.Sync(nameof(_sampleRate), ref _sampleRate); - ser.Sync(nameof(_samplesPerFrame), ref _samplesPerFrame); - ser.Sync(nameof(_tStatesPerSample), ref _tStatesPerSample); - ser.Sync(nameof(_audioBufferIndex), ref _audioBufferIndex); - ser.Sync(nameof(_audioBuffer), ref _audioBuffer, false); + ser.Sync(nameof(_tStatesPerFrame), ref _tStatesPerFrame); + ser.Sync(nameof(_sampleRate), ref _sampleRate); + ser.Sync(nameof(_samplesPerFrame), ref _samplesPerFrame); + ser.Sync(nameof(_tStatesPerSample), ref _tStatesPerSample); + ser.Sync(nameof(_audioBufferIndex), ref _audioBufferIndex); + ser.Sync(nameof(_audioBuffer), ref _audioBuffer, false); - ser.Sync(nameof(_registers), ref _registers, false); - ser.Sync(nameof(_activeRegister), ref _activeRegister); - ser.Sync(nameof(_bitA), ref _bitA); - ser.Sync(nameof(_bitB), ref _bitB); - ser.Sync(nameof(_bitC), ref _bitC); - ser.Sync(nameof(_eState), ref _eState); - ser.Sync(nameof(_eDirection), ref _eDirection); - ser.Sync(nameof(_noiseSeed), ref _noiseSeed); - ser.Sync(nameof(_bit0), ref _bit0); - ser.Sync(nameof(_bit1), ref _bit1); - ser.Sync(nameof(_bit2), ref _bit2); - ser.Sync(nameof(_bit3), ref _bit3); - ser.Sync(nameof(_bit4), ref _bit4); - ser.Sync(nameof(_bit5), ref _bit5); - ser.Sync(nameof(_bitN), ref _bitN); - ser.Sync(nameof(_eMaskA), ref _eMaskA); - ser.Sync(nameof(_eMaskB), ref _eMaskB); - ser.Sync(nameof(_eMaskC), ref _eMaskC); - ser.Sync(nameof(_vA), ref _vA); - ser.Sync(nameof(_vB), ref _vB); - ser.Sync(nameof(_vC), ref _vC); - ser.Sync(nameof(_countA), ref _countA); - ser.Sync(nameof(_countB), ref _countB); - ser.Sync(nameof(_countC), ref _countC); - ser.Sync(nameof(_countE), ref _countE); - ser.Sync(nameof(_countN), ref _countN); - ser.Sync(nameof(_dividerA), ref _dividerA); - ser.Sync(nameof(_dividerB), ref _dividerB); - ser.Sync(nameof(_dividerC), ref _dividerC); - ser.Sync(nameof(_dividerE), ref _dividerE); - ser.Sync(nameof(_dividerN), ref _dividerN); - ser.SyncEnum(nameof(_currentPanTab), ref _currentPanTab); - ser.Sync(nameof(_volume), ref nullDump); + ser.Sync(nameof(_registers), ref _registers, false); + ser.Sync(nameof(_activeRegister), ref _activeRegister); + ser.Sync(nameof(_bitA), ref _bitA); + ser.Sync(nameof(_bitB), ref _bitB); + ser.Sync(nameof(_bitC), ref _bitC); + ser.Sync(nameof(_eState), ref _eState); + ser.Sync(nameof(_eDirection), ref _eDirection); + ser.Sync(nameof(_noiseSeed), ref _noiseSeed); + ser.Sync(nameof(_bit0), ref _bit0); + ser.Sync(nameof(_bit1), ref _bit1); + ser.Sync(nameof(_bit2), ref _bit2); + ser.Sync(nameof(_bit3), ref _bit3); + ser.Sync(nameof(_bit4), ref _bit4); + ser.Sync(nameof(_bit5), ref _bit5); + ser.Sync(nameof(_bitN), ref _bitN); + ser.Sync(nameof(_eMaskA), ref _eMaskA); + ser.Sync(nameof(_eMaskB), ref _eMaskB); + ser.Sync(nameof(_eMaskC), ref _eMaskC); + ser.Sync(nameof(_vA), ref _vA); + ser.Sync(nameof(_vB), ref _vB); + ser.Sync(nameof(_vC), ref _vC); + ser.Sync(nameof(_countA), ref _countA); + ser.Sync(nameof(_countB), ref _countB); + ser.Sync(nameof(_countC), ref _countC); + ser.Sync(nameof(_countE), ref _countE); + ser.Sync(nameof(_countN), ref _countN); + ser.Sync(nameof(_dividerA), ref _dividerA); + ser.Sync(nameof(_dividerB), ref _dividerB); + ser.Sync(nameof(_dividerC), ref _dividerC); + ser.Sync(nameof(_dividerE), ref _dividerE); + ser.Sync(nameof(_dividerN), ref _dividerN); + ser.SyncEnum(nameof(_currentPanTab), ref _currentPanTab); + ser.Sync(nameof(_volume), ref nullDump); - for (int i = 0; i < 6; i++) - { - ser.Sync("volTable" + i, ref _volumeTables[i], false); - } + for (int i = 0; i < 6; i++) + { + ser.Sync("volTable" + i, ref _volumeTables[i], false); + } - if (ser.IsReader) - _volume = _machine.Spectrum.Settings.AYVolume; + if (ser.IsReader) + _volume = _machine.Spectrum.Settings.AYVolume; - ser.EndSection(); - } + ser.EndSection(); + } - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/CPUMonitor.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/CPUMonitor.cs index 922bea1d84..c06b5cd8b3 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/CPUMonitor.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/CPUMonitor.cs @@ -3,402 +3,402 @@ using BizHawk.Emulation.Cores.Components.Z80A; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// An intermediary class that manages cycling the ULA and CPU - /// along with inherent Port and Memory contention - /// - public class CPUMonitor - { - #region Devices + /// + /// An intermediary class that manages cycling the ULA and CPU + /// along with inherent Port and Memory contention + /// + public class CPUMonitor + { + #region Devices - private SpectrumBase _machine; - private Z80A _cpu; - public MachineType machineType = MachineType.ZXSpectrum48; + private SpectrumBase _machine; + private Z80A _cpu; + public MachineType machineType = MachineType.ZXSpectrum48; - #endregion + #endregion - #region Lookups + #region Lookups - /// - /// CPU total executes t-states - /// - public long TotalExecutedCycles => _cpu.TotalExecutedCycles; + /// + /// CPU total executes t-states + /// + public long TotalExecutedCycles => _cpu.TotalExecutedCycles; - /// - /// Current BUSRQ line array - /// - public ushort BUSRQ - { - get - { - switch (machineType) - { - case MachineType.ZXSpectrum128Plus2a: - case MachineType.ZXSpectrum128Plus3: - return _cpu.MEMRQ[_cpu.bus_pntr]; - default: + /// + /// Current BUSRQ line array + /// + public ushort BUSRQ + { + get + { + switch (machineType) + { + case MachineType.ZXSpectrum128Plus2a: + case MachineType.ZXSpectrum128Plus3: + return _cpu.MEMRQ[_cpu.bus_pntr]; + default: return _cpu.BUSRQ[_cpu.mem_pntr]; - } - } - } + } + } + } - #endregion + #endregion - #region Construction + #region Construction - public CPUMonitor(SpectrumBase machine) - { - _machine = machine; - _cpu = _machine.CPU; - } + public CPUMonitor(SpectrumBase machine) + { + _machine = machine; + _cpu = _machine.CPU; + } - #endregion + #endregion - #region State + #region State - /// - /// The last 16-bit port address that was detected - /// - public ushort lastPortAddr; + /// + /// The last 16-bit port address that was detected + /// + public ushort lastPortAddr; - /// - /// If true, the next read memory operation has been contended - /// - public bool NextMemReadContended; + /// + /// If true, the next read memory operation has been contended + /// + public bool NextMemReadContended; - #endregion + #endregion - #region Methods + #region Methods - /// - /// Handles the ULA and CPU cycle clocks, along with any memory and port contention - /// - public void ExecuteCycle() - { - // simulate the ULA clock cycle before the CPU cycle - _machine.ULADevice.CycleClock(TotalExecutedCycles); + /// + /// Handles the ULA and CPU cycle clocks, along with any memory and port contention + /// + public void ExecuteCycle() + { + // simulate the ULA clock cycle before the CPU cycle + _machine.ULADevice.CycleClock(TotalExecutedCycles); - // is the next CPU cycle causing a BUSRQ or IORQ? - if (BUSRQ > 0) - { - // check for IORQ - if (!CheckIO()) - { - // is the memory address of the BUSRQ potentially contended? - if (_machine.IsContended(AscertainBUSRQAddress())) - { - var cont = _machine.ULADevice.GetContentionValue((int)_machine.CurrentFrameCycle); - if (cont > 0) - { - _cpu.TotalExecutedCycles += cont; - NextMemReadContended = true; - } - } - } - } + // is the next CPU cycle causing a BUSRQ or IORQ? + if (BUSRQ > 0) + { + // check for IORQ + if (!CheckIO()) + { + // is the memory address of the BUSRQ potentially contended? + if (_machine.IsContended(AscertainBUSRQAddress())) + { + var cont = _machine.ULADevice.GetContentionValue((int)_machine.CurrentFrameCycle); + if (cont > 0) + { + _cpu.TotalExecutedCycles += cont; + NextMemReadContended = true; + } + } + } + } _cpu.ExecuteOne(); - } + } - /// - /// Looks up the current BUSRQ address that is about to be signalled on the upcoming cycle - /// - private ushort AscertainBUSRQAddress() - { - ushort addr = 0; - switch (BUSRQ) - { - // PCh - case 1: - addr = (ushort)(_cpu.Regs[_cpu.PCl] | _cpu.Regs[_cpu.PCh] << 8); - break; - // SPh - case 3: - addr = (ushort)(_cpu.Regs[_cpu.SPl] | _cpu.Regs[_cpu.SPh] << 8); - break; - // A - case 4: - addr = (ushort)(_cpu.Regs[_cpu.F] | _cpu.Regs[_cpu.A] << 8); - break; - // B - case 6: - addr = (ushort)(_cpu.Regs[_cpu.C] | _cpu.Regs[_cpu.B] << 8); - break; - // D - case 8: - addr = (ushort)(_cpu.Regs[_cpu.E] | _cpu.Regs[_cpu.D] << 8); - break; - // H - case 10: - addr = (ushort)(_cpu.Regs[_cpu.L] | _cpu.Regs[_cpu.H] << 8); - break; - // W - case 12: - addr = (ushort)(_cpu.Regs[_cpu.Z] | _cpu.Regs[_cpu.W] << 8); - break; - // Ixh - case 16: - addr = (ushort)(_cpu.Regs[_cpu.Ixl] | _cpu.Regs[_cpu.Ixh] << 8); - break; - // Iyh - case 18: - addr = (ushort)(_cpu.Regs[_cpu.Iyl] | _cpu.Regs[_cpu.Iyh] << 8); - break; - // I - case 21: - addr = (ushort)(_cpu.Regs[_cpu.R] | _cpu.Regs[_cpu.I] << 8); - break; - // BC - case Z80A.BIO1: - case Z80A.BIO2: - case Z80A.BIO3: - case Z80A.BIO4: - addr = (ushort)(_cpu.Regs[_cpu.C] | _cpu.Regs[_cpu.B] << 8); - break; - // WZ - case Z80A.WIO1: - case Z80A.WIO2: - case Z80A.WIO3: - case Z80A.WIO4: - addr = (ushort)(_cpu.Regs[_cpu.Z] | _cpu.Regs[_cpu.W] << 8); - break; - } + /// + /// Looks up the current BUSRQ address that is about to be signalled on the upcoming cycle + /// + private ushort AscertainBUSRQAddress() + { + ushort addr = 0; + switch (BUSRQ) + { + // PCh + case 1: + addr = (ushort)(_cpu.Regs[_cpu.PCl] | _cpu.Regs[_cpu.PCh] << 8); + break; + // SPh + case 3: + addr = (ushort)(_cpu.Regs[_cpu.SPl] | _cpu.Regs[_cpu.SPh] << 8); + break; + // A + case 4: + addr = (ushort)(_cpu.Regs[_cpu.F] | _cpu.Regs[_cpu.A] << 8); + break; + // B + case 6: + addr = (ushort)(_cpu.Regs[_cpu.C] | _cpu.Regs[_cpu.B] << 8); + break; + // D + case 8: + addr = (ushort)(_cpu.Regs[_cpu.E] | _cpu.Regs[_cpu.D] << 8); + break; + // H + case 10: + addr = (ushort)(_cpu.Regs[_cpu.L] | _cpu.Regs[_cpu.H] << 8); + break; + // W + case 12: + addr = (ushort)(_cpu.Regs[_cpu.Z] | _cpu.Regs[_cpu.W] << 8); + break; + // Ixh + case 16: + addr = (ushort)(_cpu.Regs[_cpu.Ixl] | _cpu.Regs[_cpu.Ixh] << 8); + break; + // Iyh + case 18: + addr = (ushort)(_cpu.Regs[_cpu.Iyl] | _cpu.Regs[_cpu.Iyh] << 8); + break; + // I + case 21: + addr = (ushort)(_cpu.Regs[_cpu.R] | _cpu.Regs[_cpu.I] << 8); + break; + // BC + case Z80A.BIO1: + case Z80A.BIO2: + case Z80A.BIO3: + case Z80A.BIO4: + addr = (ushort)(_cpu.Regs[_cpu.C] | _cpu.Regs[_cpu.B] << 8); + break; + // WZ + case Z80A.WIO1: + case Z80A.WIO2: + case Z80A.WIO3: + case Z80A.WIO4: + addr = (ushort)(_cpu.Regs[_cpu.Z] | _cpu.Regs[_cpu.W] << 8); + break; + } - return addr; - } + return addr; + } - /// - /// Running every cycle, this determines whether the upcoming BUSRQ is for an IO operation - /// Also processes any contention - /// - private bool CheckIO() - { - bool isIO = false; + /// + /// Running every cycle, this determines whether the upcoming BUSRQ is for an IO operation + /// Also processes any contention + /// + private bool CheckIO() + { + bool isIO = false; - switch (BUSRQ) - { - // BC: T1 - case Z80A.BIO1: - lastPortAddr = AscertainBUSRQAddress(); - isIO = true; - if (IsIOCycleContended(1)) - _cpu.TotalExecutedCycles += _machine.ULADevice.GetPortContentionValue((int)_machine.CurrentFrameCycle); - break; - // BC: T2 - case Z80A.BIO2: - lastPortAddr = AscertainBUSRQAddress(); - isIO = true; - if (IsIOCycleContended(2)) - _cpu.TotalExecutedCycles += _machine.ULADevice.GetPortContentionValue((int)_machine.CurrentFrameCycle); - break; - // BC: T3 - case Z80A.BIO3: - lastPortAddr = AscertainBUSRQAddress(); - isIO = true; - if (IsIOCycleContended(3)) - _cpu.TotalExecutedCycles += _machine.ULADevice.GetPortContentionValue((int)_machine.CurrentFrameCycle); - break; - // BC: T4 - case Z80A.BIO4: - lastPortAddr = AscertainBUSRQAddress(); - isIO = true; - if (IsIOCycleContended(4)) - _cpu.TotalExecutedCycles += _machine.ULADevice.GetPortContentionValue((int)_machine.CurrentFrameCycle); - break; + switch (BUSRQ) + { + // BC: T1 + case Z80A.BIO1: + lastPortAddr = AscertainBUSRQAddress(); + isIO = true; + if (IsIOCycleContended(1)) + _cpu.TotalExecutedCycles += _machine.ULADevice.GetPortContentionValue((int)_machine.CurrentFrameCycle); + break; + // BC: T2 + case Z80A.BIO2: + lastPortAddr = AscertainBUSRQAddress(); + isIO = true; + if (IsIOCycleContended(2)) + _cpu.TotalExecutedCycles += _machine.ULADevice.GetPortContentionValue((int)_machine.CurrentFrameCycle); + break; + // BC: T3 + case Z80A.BIO3: + lastPortAddr = AscertainBUSRQAddress(); + isIO = true; + if (IsIOCycleContended(3)) + _cpu.TotalExecutedCycles += _machine.ULADevice.GetPortContentionValue((int)_machine.CurrentFrameCycle); + break; + // BC: T4 + case Z80A.BIO4: + lastPortAddr = AscertainBUSRQAddress(); + isIO = true; + if (IsIOCycleContended(4)) + _cpu.TotalExecutedCycles += _machine.ULADevice.GetPortContentionValue((int)_machine.CurrentFrameCycle); + break; - // WZ: T1 - case Z80A.WIO1: - lastPortAddr = AscertainBUSRQAddress(); - isIO = true; - if (IsIOCycleContended(1)) - _cpu.TotalExecutedCycles += _machine.ULADevice.GetPortContentionValue((int)_machine.CurrentFrameCycle); - break; - // WZ: T2 - case Z80A.WIO2: - lastPortAddr = AscertainBUSRQAddress(); - isIO = true; - if (IsIOCycleContended(2)) - _cpu.TotalExecutedCycles += _machine.ULADevice.GetPortContentionValue((int)_machine.CurrentFrameCycle); - break; - // WZ: T3 - case Z80A.WIO3: - lastPortAddr = AscertainBUSRQAddress(); - isIO = true; - if (IsIOCycleContended(3)) - _cpu.TotalExecutedCycles += _machine.ULADevice.GetPortContentionValue((int)_machine.CurrentFrameCycle); - break; - // WZ: T4 - case Z80A.WIO4: - lastPortAddr = AscertainBUSRQAddress(); - isIO = true; - if (IsIOCycleContended(4)) - _cpu.TotalExecutedCycles += _machine.ULADevice.GetPortContentionValue((int)_machine.CurrentFrameCycle); - break; - } + // WZ: T1 + case Z80A.WIO1: + lastPortAddr = AscertainBUSRQAddress(); + isIO = true; + if (IsIOCycleContended(1)) + _cpu.TotalExecutedCycles += _machine.ULADevice.GetPortContentionValue((int)_machine.CurrentFrameCycle); + break; + // WZ: T2 + case Z80A.WIO2: + lastPortAddr = AscertainBUSRQAddress(); + isIO = true; + if (IsIOCycleContended(2)) + _cpu.TotalExecutedCycles += _machine.ULADevice.GetPortContentionValue((int)_machine.CurrentFrameCycle); + break; + // WZ: T3 + case Z80A.WIO3: + lastPortAddr = AscertainBUSRQAddress(); + isIO = true; + if (IsIOCycleContended(3)) + _cpu.TotalExecutedCycles += _machine.ULADevice.GetPortContentionValue((int)_machine.CurrentFrameCycle); + break; + // WZ: T4 + case Z80A.WIO4: + lastPortAddr = AscertainBUSRQAddress(); + isIO = true; + if (IsIOCycleContended(4)) + _cpu.TotalExecutedCycles += _machine.ULADevice.GetPortContentionValue((int)_machine.CurrentFrameCycle); + break; + } - return isIO; - } + return isIO; + } - /// - /// Returns TRUE if the supplied T-cycle within an IO operation has the possibility of being contended - /// This can be different based on the emulated ZX Spectrum model - /// - private bool IsIOCycleContended(int T) - { - bool lowBitSet = (lastPortAddr & 0x0001) != 0; - bool highByte407f = false; + /// + /// Returns TRUE if the supplied T-cycle within an IO operation has the possibility of being contended + /// This can be different based on the emulated ZX Spectrum model + /// + private bool IsIOCycleContended(int T) + { + bool lowBitSet = (lastPortAddr & 0x0001) != 0; + bool highByte407f = false; - switch (machineType) - { - case MachineType.ZXSpectrum16: - case MachineType.ZXSpectrum48: + switch (machineType) + { + case MachineType.ZXSpectrum16: + case MachineType.ZXSpectrum48: - if ((lastPortAddr & 0xc000) == 0x4000) - highByte407f = true; + if ((lastPortAddr & 0xc000) == 0x4000) + highByte407f = true; - if (highByte407f) - { - // high byte 40-7f - if (lowBitSet) - { - // high byte 40-7f - // low bit set - // C:1, C:1, C:1, C:1 - switch (T) - { - case 1: - case 2: - case 3: - case 4: - return true; - } - } - else - { - // high byte 40-7f - // low bit reset - // C:1, C:3 - switch (T) - { - case 1: - case 2: - return true; - } - } - } - else - { - // high byte not 40-7f - if (lowBitSet) - { - // high byte not 40-7f - // low bit set - // N:4 - } - else - { - // high byte not 40-7f - // low bit reset - // N:1, C:3 - switch (T) - { - case 2: - return true; - } - } - } - break; + if (highByte407f) + { + // high byte 40-7f + if (lowBitSet) + { + // high byte 40-7f + // low bit set + // C:1, C:1, C:1, C:1 + switch (T) + { + case 1: + case 2: + case 3: + case 4: + return true; + } + } + else + { + // high byte 40-7f + // low bit reset + // C:1, C:3 + switch (T) + { + case 1: + case 2: + return true; + } + } + } + else + { + // high byte not 40-7f + if (lowBitSet) + { + // high byte not 40-7f + // low bit set + // N:4 + } + else + { + // high byte not 40-7f + // low bit reset + // N:1, C:3 + switch (T) + { + case 2: + return true; + } + } + } + break; - case MachineType.ZXSpectrum128: - case MachineType.ZXSpectrum128Plus2: - if ((lastPortAddr & 0xc000) == 0x4000 || (lastPortAddr & 0xc000) == 0xc000 && _machine.ContendedBankPaged()) - highByte407f = true; + case MachineType.ZXSpectrum128: + case MachineType.ZXSpectrum128Plus2: + if ((lastPortAddr & 0xc000) == 0x4000 || (lastPortAddr & 0xc000) == 0xc000 && _machine.ContendedBankPaged()) + highByte407f = true; - if (highByte407f) - { - // high byte 40-7f - if (lowBitSet) - { - // high byte 40-7f - // low bit set - // C:1, C:1, C:1, C:1 - switch (T) - { - case 1: - case 2: - case 3: - case 4: - return true; - } - } - else - { - // high byte 40-7f - // low bit reset - // C:1, C:3 - switch (T) - { - case 1: - case 2: - return true; - } - } - } - else - { - // high byte not 40-7f - if (lowBitSet) - { - // high byte not 40-7f - // low bit set - // N:4 - } - else - { - // high byte not 40-7f - // low bit reset - // N:1, C:3 - switch (T) - { - case 2: - return true; - } - } - } - break; + if (highByte407f) + { + // high byte 40-7f + if (lowBitSet) + { + // high byte 40-7f + // low bit set + // C:1, C:1, C:1, C:1 + switch (T) + { + case 1: + case 2: + case 3: + case 4: + return true; + } + } + else + { + // high byte 40-7f + // low bit reset + // C:1, C:3 + switch (T) + { + case 1: + case 2: + return true; + } + } + } + else + { + // high byte not 40-7f + if (lowBitSet) + { + // high byte not 40-7f + // low bit set + // N:4 + } + else + { + // high byte not 40-7f + // low bit reset + // N:1, C:3 + switch (T) + { + case 2: + return true; + } + } + } + break; - case MachineType.ZXSpectrum128Plus2a: - case MachineType.ZXSpectrum128Plus3: - // No contention occurs as the ULA only applies contention when the Z80 MREQ line is active - // (which is not during an IO operation) - break; - } + case MachineType.ZXSpectrum128Plus2a: + case MachineType.ZXSpectrum128Plus3: + // No contention occurs as the ULA only applies contention when the Z80 MREQ line is active + // (which is not during an IO operation) + break; + } - return false; - } + return false; + } - /// - /// Called when the first byte of an instruction is fetched - /// - public void OnExecFetch(ushort firstByte) - { - // fetch instruction without incrementing pc - //_cpu.FetchInstruction(_cpu.FetchMemory(firstByte)); - - } + /// + /// Called when the first byte of an instruction is fetched + /// + public void OnExecFetch(ushort firstByte) + { + // fetch instruction without incrementing pc + //_cpu.FetchInstruction(_cpu.FetchMemory(firstByte)); - #endregion + } - #region Serialization + #endregion - public void SyncState(Serializer ser) - { - ser.BeginSection(nameof(CPUMonitor)); - ser.Sync(nameof(lastPortAddr), ref lastPortAddr); - ser.Sync(nameof(NextMemReadContended), ref NextMemReadContended); - ser.EndSection(); - } + #region Serialization - #endregion - } + public void SyncState(Serializer ser) + { + ser.BeginSection(nameof(CPUMonitor)); + ser.Sync(nameof(lastPortAddr), ref lastPortAddr); + ser.Sync(nameof(NextMemReadContended), ref NextMemReadContended); + ser.EndSection(); + } + + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/MachineType.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/MachineType.cs index 0e786823b8..04b85f50b6 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/MachineType.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/MachineType.cs @@ -1,44 +1,44 @@  namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// The various spectrum models ZXHawk emulates - /// - public enum MachineType - { - /// - /// Original Sinclair Spectrum 16K model - /// - ZXSpectrum16, + /// + /// The various spectrum models ZXHawk emulates + /// + public enum MachineType + { + /// + /// Original Sinclair Spectrum 16K model + /// + ZXSpectrum16, - /// - /// Sinclair Spectrum 48K model - /// - ZXSpectrum48, + /// + /// Sinclair Spectrum 48K model + /// + ZXSpectrum48, - /// - /// Sinclair Spectrum 128K model - /// - ZXSpectrum128, + /// + /// Sinclair Spectrum 128K model + /// + ZXSpectrum128, - /// - /// Sinclair Spectrum 128 +2 model - /// - ZXSpectrum128Plus2, + /// + /// Sinclair Spectrum 128 +2 model + /// + ZXSpectrum128Plus2, - /// - /// Sinclair Spectrum 128 +2a model (same as the +3 just without disk drive) - /// - ZXSpectrum128Plus2a, + /// + /// Sinclair Spectrum 128 +2a model (same as the +3 just without disk drive) + /// + ZXSpectrum128Plus2a, - /// - /// Sinclair Spectrum 128 +3 model - /// - ZXSpectrum128Plus3, + /// + /// Sinclair Spectrum 128 +3 model + /// + ZXSpectrum128Plus3, /// /// Russian 128k pentagon clone /// Pentagon128, - } + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.Screen.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.Screen.cs index 9a9b8229ef..da3a95b61d 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.Screen.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.Screen.cs @@ -1,48 +1,48 @@  namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// 128K/+2 ULA - /// - class ScreenPentagon128 : ULA - { - #region Construction + /// + /// 128K/+2 ULA + /// + class ScreenPentagon128 : ULA + { + #region Construction - public ScreenPentagon128(SpectrumBase machine) + public ScreenPentagon128(SpectrumBase machine) : base(machine) - { + { // interrupt InterruptStartTime = 0;// 3; - InterruptLength = 32; - // offsets - RenderTableOffset = 58; - ContentionOffset = 6; - FloatingBusOffset = 1; - // timing - ClockSpeed = 3546900; - FrameCycleLength = 71680; - ScanlineTime = 224; - BorderLeftTime = 24; - BorderRightTime = 24; - FirstPaperLine = 80; - FirstPaperTState = 68; - // screen layout - Border4T = false; - Border4TStage = 1; - ScreenWidth = 256; - ScreenHeight = 192; - BorderTopHeight = 48; // 55; // 48; - BorderBottomHeight = 48; // 56; - BorderLeftWidth = 48; - BorderRightWidth = 48; - ScanLineWidth = BorderLeftWidth + ScreenWidth + BorderRightWidth; + InterruptLength = 32; + // offsets + RenderTableOffset = 58; + ContentionOffset = 6; + FloatingBusOffset = 1; + // timing + ClockSpeed = 3546900; + FrameCycleLength = 71680; + ScanlineTime = 224; + BorderLeftTime = 24; + BorderRightTime = 24; + FirstPaperLine = 80; + FirstPaperTState = 68; + // screen layout + Border4T = false; + Border4TStage = 1; + ScreenWidth = 256; + ScreenHeight = 192; + BorderTopHeight = 48; // 55; // 48; + BorderBottomHeight = 48; // 56; + BorderLeftWidth = 48; + BorderRightWidth = 48; + ScanLineWidth = BorderLeftWidth + ScreenWidth + BorderRightWidth; - RenderingTable = new RenderTable(this, - MachineType.ZXSpectrum128); + RenderingTable = new RenderTable(this, + MachineType.ZXSpectrum128); - SetupScreenSize(); - } + SetupScreenSize(); + } - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.cs index c8f201157e..46e72eff95 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/Pentagon128K/Pentagon128.cs @@ -4,48 +4,48 @@ using BizHawk.Emulation.Cores.Sound; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// 128K Constructor - /// - public partial class Pentagon128 : SpectrumBase - { - #region Construction + /// + /// 128K Constructor + /// + public partial class Pentagon128 : SpectrumBase + { + #region Construction - /// - /// Main constructor - /// - public Pentagon128(ZXSpectrum spectrum, Z80A cpu, ZXSpectrum.BorderType borderType, List files, List joysticks) - { - Spectrum = spectrum; - CPU = cpu; + /// + /// Main constructor + /// + public Pentagon128(ZXSpectrum spectrum, Z80A cpu, ZXSpectrum.BorderType borderType, List files, List joysticks) + { + Spectrum = spectrum; + CPU = cpu; - CPUMon = new CPUMonitor(this); - CPUMon.machineType = MachineType.Pentagon128; + CPUMon = new CPUMonitor(this); + CPUMon.machineType = MachineType.Pentagon128; - ROMPaged = 0; - SHADOWPaged = false; - RAMPaged = 0; - PagingDisabled = false; - - ULADevice = new ScreenPentagon128(this); + ROMPaged = 0; + SHADOWPaged = false; + RAMPaged = 0; + PagingDisabled = false; + + ULADevice = new ScreenPentagon128(this); BuzzerDevice = new OneBitBeeper(44100, ULADevice.FrameLength, 50, "SystemBuzzer"); - TapeBuzzer = new OneBitBeeper(44100, ULADevice.FrameLength, 50, "TapeBuzzer"); + TapeBuzzer = new OneBitBeeper(44100, ULADevice.FrameLength, 50, "TapeBuzzer"); - AYDevice = new AY38912(this); - AYDevice.Init(44100, ULADevice.FrameLength); + AYDevice = new AY38912(this); + AYDevice.Init(44100, ULADevice.FrameLength); - KeyboardDevice = new StandardKeyboard(this); + KeyboardDevice = new StandardKeyboard(this); - InitJoysticks(joysticks); + InitJoysticks(joysticks); - TapeDevice = new DatacorderDevice(spectrum.SyncSettings.AutoLoadTape); - TapeDevice.Init(this); + TapeDevice = new DatacorderDevice(spectrum.SyncSettings.AutoLoadTape); + TapeDevice.Init(this); - InitializeMedia(files); - } + InitializeMedia(files); + } - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.cs index 56db60c5b0..3e71750447 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.cs @@ -4,166 +4,166 @@ using BizHawk.Emulation.Cores.Sound; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// The abstract class that all emulated models will inherit from - /// * Main properties / fields / contruction* - /// - public abstract partial class SpectrumBase - { - #region Devices + /// + /// The abstract class that all emulated models will inherit from + /// * Main properties / fields / contruction* + /// + public abstract partial class SpectrumBase + { + #region Devices - /// - /// The calling ZXSpectrum class (piped in via constructor) - /// - public ZXSpectrum Spectrum { get; set; } + /// + /// The calling ZXSpectrum class (piped in via constructor) + /// + public ZXSpectrum Spectrum { get; set; } - /// - /// Reference to the instantiated Z80 cpu (piped in via constructor) - /// - public Z80A CPU { get; set; } + /// + /// Reference to the instantiated Z80 cpu (piped in via constructor) + /// + public Z80A CPU { get; set; } - /// - /// ROM and extended info - /// - public RomData RomData { get; set; } + /// + /// ROM and extended info + /// + public RomData RomData { get; set; } - /// - /// The emulated ULA device - /// - //public ULABase ULADevice { get; set; } - public ULA ULADevice { get; set; } + /// + /// The emulated ULA device + /// + //public ULABase ULADevice { get; set; } + public ULA ULADevice { get; set; } - /// - /// Monitors CPU cycles - /// - public CPUMonitor CPUMon { get; set; } + /// + /// Monitors CPU cycles + /// + public CPUMonitor CPUMon { get; set; } - /// - /// The spectrum buzzer/beeper - /// - public OneBitBeeper BuzzerDevice { get; set; } + /// + /// The spectrum buzzer/beeper + /// + public OneBitBeeper BuzzerDevice { get; set; } - /// - /// A second beeper for the tape - /// - public OneBitBeeper TapeBuzzer { get; set; } + /// + /// A second beeper for the tape + /// + public OneBitBeeper TapeBuzzer { get; set; } - /// - /// Device representing the AY-3-8912 chip found in the 128k and up spectrums - /// - public IPSG AYDevice { get; set; } + /// + /// Device representing the AY-3-8912 chip found in the 128k and up spectrums + /// + public IPSG AYDevice { get; set; } - /// - /// The spectrum keyboard - /// - public virtual IKeyboard KeyboardDevice { get; set; } + /// + /// The spectrum keyboard + /// + public virtual IKeyboard KeyboardDevice { get; set; } - /// - /// The spectrum datacorder device - /// - public virtual DatacorderDevice TapeDevice { get; set; } + /// + /// The spectrum datacorder device + /// + public virtual DatacorderDevice TapeDevice { get; set; } - /// - /// The +3 built-in disk drive - /// - public virtual NECUPD765 UPDDiskDevice { get; set; } + /// + /// The +3 built-in disk drive + /// + public virtual NECUPD765 UPDDiskDevice { get; set; } - /// - /// Holds the currently selected joysticks - /// - public virtual IJoystick[] JoystickCollection { get; set; } + /// + /// Holds the currently selected joysticks + /// + public virtual IJoystick[] JoystickCollection { get; set; } - /// - /// +3/2a printer port strobe - /// - protected bool PrinterPortStrobe; + /// + /// +3/2a printer port strobe + /// + protected bool PrinterPortStrobe; - #endregion + #endregion - #region Emulator State + #region Emulator State - /// - /// Signs whether the frame has ended - /// - public bool FrameCompleted; + /// + /// Signs whether the frame has ended + /// + public bool FrameCompleted; - /// - /// Overflow from the previous frame (in Z80 cycles) - /// - public int OverFlow; + /// + /// Overflow from the previous frame (in Z80 cycles) + /// + public int OverFlow; - /// - /// The total number of frames rendered - /// - public int FrameCount; + /// + /// The total number of frames rendered + /// + public int FrameCount; - /// - /// The current cycle (T-State) that we are at in the frame - /// - public long _frameCycles; + /// + /// The current cycle (T-State) that we are at in the frame + /// + public long _frameCycles; - /// - /// Stores where we are in the frame after each CPU cycle - /// - public long LastFrameStartCPUTick; + /// + /// Stores where we are in the frame after each CPU cycle + /// + public long LastFrameStartCPUTick; - /// - /// Gets the current frame cycle according to the CPU tick count - /// - public virtual long CurrentFrameCycle => CPU.TotalExecutedCycles - LastFrameStartCPUTick; + /// + /// Gets the current frame cycle according to the CPU tick count + /// + public virtual long CurrentFrameCycle => CPU.TotalExecutedCycles - LastFrameStartCPUTick; - /// - /// Non-Deterministic bools - /// - public bool _render; - public bool _renderSound; + /// + /// Non-Deterministic bools + /// + public bool _render; + public bool _renderSound; - #endregion + #endregion - #region Constants + #region Constants - /// - /// Mask constants & misc - /// - protected const int BORDER_BIT = 0x07; - protected const int EAR_BIT = 0x10; - protected const int MIC_BIT = 0x08; - protected const int TAPE_BIT = 0x40; - protected const int AY_SAMPLE_RATE = 16; + /// + /// Mask constants & misc + /// + protected const int BORDER_BIT = 0x07; + protected const int EAR_BIT = 0x10; + protected const int MIC_BIT = 0x08; + protected const int TAPE_BIT = 0x40; + protected const int AY_SAMPLE_RATE = 16; - #endregion + #endregion - #region Emulation Loop + #region Emulation Loop - /// - /// Executes a single frame - /// - public virtual void ExecuteFrame(bool render, bool renderSound) - { - ULADevice.FrameEnd = false; - ULADevice.ULACycleCounter = CurrentFrameCycle; + /// + /// Executes a single frame + /// + public virtual void ExecuteFrame(bool render, bool renderSound) + { + ULADevice.FrameEnd = false; + ULADevice.ULACycleCounter = CurrentFrameCycle; - InputRead = false; - _render = render; - _renderSound = renderSound; + InputRead = false; + _render = render; + _renderSound = renderSound; - FrameCompleted = false; + FrameCompleted = false; - //if (UPDDiskDevice == null || !UPDDiskDevice.FDD_IsDiskLoaded) - //TapeDevice.StartFrame(); + //if (UPDDiskDevice == null || !UPDDiskDevice.FDD_IsDiskLoaded) + //TapeDevice.StartFrame(); - if (_renderSound) - { - if (AYDevice != null) - AYDevice.StartFrame(); - } + if (_renderSound) + { + if (AYDevice != null) + AYDevice.StartFrame(); + } - PollInput(); + PollInput(); - for (;;) - { - // run the CPU Monitor cycle - CPUMon.ExecuteCycle(); + for (; ; ) + { + // run the CPU Monitor cycle + CPUMon.ExecuteCycle(); // clock the beepers TapeBuzzer.SetClock((int)CurrentFrameCycle); @@ -171,229 +171,229 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum // cycle the tape device if (UPDDiskDevice == null || !UPDDiskDevice.FDD_IsDiskLoaded) - TapeDevice.TapeCycle(); + TapeDevice.TapeCycle(); - // has frame end been reached? - if (ULADevice.FrameEnd) - break; - } + // has frame end been reached? + if (ULADevice.FrameEnd) + break; + } - OverFlow = (int)CurrentFrameCycle - ULADevice.FrameLength; + OverFlow = (int)CurrentFrameCycle - ULADevice.FrameLength; - // we have reached the end of a frame - LastFrameStartCPUTick = CPU.TotalExecutedCycles - OverFlow; + // we have reached the end of a frame + LastFrameStartCPUTick = CPU.TotalExecutedCycles - OverFlow; - ULADevice.LastTState = 0; + ULADevice.LastTState = 0; - if (AYDevice != null) - AYDevice.EndFrame(); + if (AYDevice != null) + AYDevice.EndFrame(); - FrameCount++; - - if (UPDDiskDevice == null || !UPDDiskDevice.FDD_IsDiskLoaded) - TapeDevice.EndFrame(); + FrameCount++; - FrameCompleted = true; + if (UPDDiskDevice == null || !UPDDiskDevice.FDD_IsDiskLoaded) + TapeDevice.EndFrame(); - // is this a lag frame? - Spectrum.IsLagFrame = !InputRead; + FrameCompleted = true; - // FDC debug - if (UPDDiskDevice != null && UPDDiskDevice.writeDebug) - { - // only write UPD log every second - if (FrameCount % 10 == 0) - { - System.IO.File.AppendAllLines(UPDDiskDevice.outputfile, UPDDiskDevice.dLog); - UPDDiskDevice.dLog = new System.Collections.Generic.List(); - //System.IO.File.WriteAllText(UPDDiskDevice.outputfile, UPDDiskDevice.outputString); - } - } - } + // is this a lag frame? + Spectrum.IsLagFrame = !InputRead; - #endregion + // FDC debug + if (UPDDiskDevice != null && UPDDiskDevice.writeDebug) + { + // only write UPD log every second + if (FrameCount % 10 == 0) + { + System.IO.File.AppendAllLines(UPDDiskDevice.outputfile, UPDDiskDevice.dLog); + UPDDiskDevice.dLog = new System.Collections.Generic.List(); + //System.IO.File.WriteAllText(UPDDiskDevice.outputfile, UPDDiskDevice.outputString); + } + } + } - #region Reset Functions + #endregion - /// - /// Hard reset of the emulated machine - /// - public virtual void HardReset() - { - //ULADevice.ResetInterrupt(); - ROMPaged = 0; - SpecialPagingMode = false; - RAMPaged = 0; - CPU.RegPC = 0; + #region Reset Functions - Spectrum.SetCpuRegister("SP", 0xFFFF); - Spectrum.SetCpuRegister("IY", 0xFFFF); - Spectrum.SetCpuRegister("IX", 0xFFFF); - Spectrum.SetCpuRegister("AF", 0xFFFF); - Spectrum.SetCpuRegister("BC", 0xFFFF); - Spectrum.SetCpuRegister("DE", 0xFFFF); - Spectrum.SetCpuRegister("HL", 0xFFFF); - Spectrum.SetCpuRegister("SP", 0xFFFF); - Spectrum.SetCpuRegister("Shadow AF", 0xFFFF); - Spectrum.SetCpuRegister("Shadow BC", 0xFFFF); - Spectrum.SetCpuRegister("Shadow DE", 0xFFFF); - Spectrum.SetCpuRegister("Shadow HL", 0xFFFF); + /// + /// Hard reset of the emulated machine + /// + public virtual void HardReset() + { + //ULADevice.ResetInterrupt(); + ROMPaged = 0; + SpecialPagingMode = false; + RAMPaged = 0; + CPU.RegPC = 0; - CPU.Regs[CPU.I] = 0; - CPU.Regs[CPU.R] = 0; + Spectrum.SetCpuRegister("SP", 0xFFFF); + Spectrum.SetCpuRegister("IY", 0xFFFF); + Spectrum.SetCpuRegister("IX", 0xFFFF); + Spectrum.SetCpuRegister("AF", 0xFFFF); + Spectrum.SetCpuRegister("BC", 0xFFFF); + Spectrum.SetCpuRegister("DE", 0xFFFF); + Spectrum.SetCpuRegister("HL", 0xFFFF); + Spectrum.SetCpuRegister("SP", 0xFFFF); + Spectrum.SetCpuRegister("Shadow AF", 0xFFFF); + Spectrum.SetCpuRegister("Shadow BC", 0xFFFF); + Spectrum.SetCpuRegister("Shadow DE", 0xFFFF); + Spectrum.SetCpuRegister("Shadow HL", 0xFFFF); - TapeDevice.Reset(); - if (AYDevice != null) - AYDevice.Reset(); + CPU.Regs[CPU.I] = 0; + CPU.Regs[CPU.R] = 0; - byte[][] rams = new byte[][] - { - RAM0, - RAM1, - RAM2, - RAM3, - RAM4, - RAM5, - RAM6, - RAM7 - }; + TapeDevice.Reset(); + if (AYDevice != null) + AYDevice.Reset(); - foreach (var r in rams) - { - for (int i = 0; i < r.Length; i++) - { - r[i] = 0x00; - } - } - } + byte[][] rams = new byte[][] + { + RAM0, + RAM1, + RAM2, + RAM3, + RAM4, + RAM5, + RAM6, + RAM7 + }; - /// - /// Soft reset of the emulated machine - /// - public virtual void SoftReset() - { - //ULADevice.ResetInterrupt(); - ROMPaged = 0; - SpecialPagingMode = false; - RAMPaged = 0; - CPU.RegPC = 0; + foreach (var r in rams) + { + for (int i = 0; i < r.Length; i++) + { + r[i] = 0x00; + } + } + } - Spectrum.SetCpuRegister("SP", 0xFFFF); - Spectrum.SetCpuRegister("IY", 0xFFFF); - Spectrum.SetCpuRegister("IX", 0xFFFF); - Spectrum.SetCpuRegister("AF", 0xFFFF); - Spectrum.SetCpuRegister("BC", 0xFFFF); - Spectrum.SetCpuRegister("DE", 0xFFFF); - Spectrum.SetCpuRegister("HL", 0xFFFF); - Spectrum.SetCpuRegister("SP", 0xFFFF); - Spectrum.SetCpuRegister("Shadow AF", 0xFFFF); - Spectrum.SetCpuRegister("Shadow BC", 0xFFFF); - Spectrum.SetCpuRegister("Shadow DE", 0xFFFF); - Spectrum.SetCpuRegister("Shadow HL", 0xFFFF); + /// + /// Soft reset of the emulated machine + /// + public virtual void SoftReset() + { + //ULADevice.ResetInterrupt(); + ROMPaged = 0; + SpecialPagingMode = false; + RAMPaged = 0; + CPU.RegPC = 0; - CPU.Regs[CPU.I] = 0; - CPU.Regs[CPU.R] = 0; + Spectrum.SetCpuRegister("SP", 0xFFFF); + Spectrum.SetCpuRegister("IY", 0xFFFF); + Spectrum.SetCpuRegister("IX", 0xFFFF); + Spectrum.SetCpuRegister("AF", 0xFFFF); + Spectrum.SetCpuRegister("BC", 0xFFFF); + Spectrum.SetCpuRegister("DE", 0xFFFF); + Spectrum.SetCpuRegister("HL", 0xFFFF); + Spectrum.SetCpuRegister("SP", 0xFFFF); + Spectrum.SetCpuRegister("Shadow AF", 0xFFFF); + Spectrum.SetCpuRegister("Shadow BC", 0xFFFF); + Spectrum.SetCpuRegister("Shadow DE", 0xFFFF); + Spectrum.SetCpuRegister("Shadow HL", 0xFFFF); - TapeDevice.Reset(); - if (AYDevice != null) - AYDevice.Reset(); + CPU.Regs[CPU.I] = 0; + CPU.Regs[CPU.R] = 0; - byte[][] rams = new byte[][] - { - RAM0, - RAM1, - RAM2, - RAM3, - RAM4, - RAM5, - RAM6, - RAM7 - }; + TapeDevice.Reset(); + if (AYDevice != null) + AYDevice.Reset(); - foreach (var r in rams) - { - for (int i = 0; i < r.Length; i++) - { - r[i] = 0x00; - } - } - } + byte[][] rams = new byte[][] + { + RAM0, + RAM1, + RAM2, + RAM3, + RAM4, + RAM5, + RAM6, + RAM7 + }; - #endregion + foreach (var r in rams) + { + for (int i = 0; i < r.Length; i++) + { + r[i] = 0x00; + } + } + } - #region IStatable + #endregion - public void SyncState(Serializer ser) - { - ser.BeginSection("ZXMachine"); - ser.Sync(nameof(FrameCompleted), ref FrameCompleted); - ser.Sync(nameof(OverFlow), ref OverFlow); - ser.Sync(nameof(FrameCount), ref FrameCount); - ser.Sync(nameof(_frameCycles), ref _frameCycles); - ser.Sync(nameof(inputRead), ref inputRead); - ser.Sync(nameof(LastFrameStartCPUTick), ref LastFrameStartCPUTick); - ser.Sync(nameof(LastULAOutByte), ref LastULAOutByte); - ser.Sync(nameof(ROM0), ref ROM0, false); - ser.Sync(nameof(ROM1), ref ROM1, false); - ser.Sync(nameof(ROM2), ref ROM2, false); - ser.Sync(nameof(ROM3), ref ROM3, false); - ser.Sync(nameof(RAM0), ref RAM0, false); - ser.Sync(nameof(RAM1), ref RAM1, false); - ser.Sync(nameof(RAM2), ref RAM2, false); - ser.Sync(nameof(RAM3), ref RAM3, false); - ser.Sync(nameof(RAM4), ref RAM4, false); - ser.Sync(nameof(RAM5), ref RAM5, false); - ser.Sync(nameof(RAM6), ref RAM6, false); - ser.Sync(nameof(RAM7), ref RAM7, false); - ser.Sync(nameof(ROMPaged), ref ROMPaged); - ser.Sync(nameof(SHADOWPaged), ref SHADOWPaged); - ser.Sync(nameof(RAMPaged), ref RAMPaged); - ser.Sync(nameof(PagingDisabled), ref PagingDisabled); - ser.Sync(nameof(SpecialPagingMode), ref SpecialPagingMode); - ser.Sync(nameof(PagingConfiguration), ref PagingConfiguration); - ser.Sync(nameof(ROMhigh), ref ROMhigh); - ser.Sync(nameof(ROMlow), ref ROMlow); - ser.Sync(nameof(LastContendedReadByte), ref LastContendedReadByte); + #region IStatable - KeyboardDevice.SyncState(ser); - BuzzerDevice.SyncState(ser); - TapeBuzzer.SyncState(ser); - ULADevice.SyncState(ser); - CPUMon.SyncState(ser); + public void SyncState(Serializer ser) + { + ser.BeginSection("ZXMachine"); + ser.Sync(nameof(FrameCompleted), ref FrameCompleted); + ser.Sync(nameof(OverFlow), ref OverFlow); + ser.Sync(nameof(FrameCount), ref FrameCount); + ser.Sync(nameof(_frameCycles), ref _frameCycles); + ser.Sync(nameof(inputRead), ref inputRead); + ser.Sync(nameof(LastFrameStartCPUTick), ref LastFrameStartCPUTick); + ser.Sync(nameof(LastULAOutByte), ref LastULAOutByte); + ser.Sync(nameof(ROM0), ref ROM0, false); + ser.Sync(nameof(ROM1), ref ROM1, false); + ser.Sync(nameof(ROM2), ref ROM2, false); + ser.Sync(nameof(ROM3), ref ROM3, false); + ser.Sync(nameof(RAM0), ref RAM0, false); + ser.Sync(nameof(RAM1), ref RAM1, false); + ser.Sync(nameof(RAM2), ref RAM2, false); + ser.Sync(nameof(RAM3), ref RAM3, false); + ser.Sync(nameof(RAM4), ref RAM4, false); + ser.Sync(nameof(RAM5), ref RAM5, false); + ser.Sync(nameof(RAM6), ref RAM6, false); + ser.Sync(nameof(RAM7), ref RAM7, false); + ser.Sync(nameof(ROMPaged), ref ROMPaged); + ser.Sync(nameof(SHADOWPaged), ref SHADOWPaged); + ser.Sync(nameof(RAMPaged), ref RAMPaged); + ser.Sync(nameof(PagingDisabled), ref PagingDisabled); + ser.Sync(nameof(SpecialPagingMode), ref SpecialPagingMode); + ser.Sync(nameof(PagingConfiguration), ref PagingConfiguration); + ser.Sync(nameof(ROMhigh), ref ROMhigh); + ser.Sync(nameof(ROMlow), ref ROMlow); + ser.Sync(nameof(LastContendedReadByte), ref LastContendedReadByte); - if (AYDevice != null) - { - AYDevice.SyncState(ser); - ((AY38912)AYDevice as AY38912).PanningConfiguration = Spectrum.Settings.AYPanConfig; - } + KeyboardDevice.SyncState(ser); + BuzzerDevice.SyncState(ser); + TapeBuzzer.SyncState(ser); + ULADevice.SyncState(ser); + CPUMon.SyncState(ser); - ser.Sync(nameof(tapeMediaIndex), ref tapeMediaIndex); - if (ser.IsReader) - { - IsLoadState = true; - TapeMediaIndex = tapeMediaIndex; - IsLoadState = false; - } - + if (AYDevice != null) + { + AYDevice.SyncState(ser); + ((AY38912)AYDevice as AY38912).PanningConfiguration = Spectrum.Settings.AYPanConfig; + } - TapeDevice.SyncState(ser); + ser.Sync(nameof(tapeMediaIndex), ref tapeMediaIndex); + if (ser.IsReader) + { + IsLoadState = true; + TapeMediaIndex = tapeMediaIndex; + IsLoadState = false; + } - ser.Sync(nameof(diskMediaIndex), ref diskMediaIndex); - if (ser.IsReader) - { - IsLoadState = true; - DiskMediaIndex = diskMediaIndex; - IsLoadState = false; - } - if (UPDDiskDevice != null) - { - UPDDiskDevice.SyncState(ser); - } + TapeDevice.SyncState(ser); - ser.EndSection(); - } + ser.Sync(nameof(diskMediaIndex), ref diskMediaIndex); + if (ser.IsReader) + { + IsLoadState = true; + DiskMediaIndex = diskMediaIndex; + IsLoadState = false; + } - #endregion - } + if (UPDDiskDevice != null) + { + UPDDiskDevice.SyncState(ser); + } + + ser.EndSection(); + } + + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ULA.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ULA.cs index d9883a4321..a157f02d85 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ULA.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ULA.cs @@ -5,44 +5,44 @@ using System.Collections.Generic; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Uncommitted logic array implementation (ULA) - /// - public abstract class ULA : IVideoProvider - { - #region Other Devices + /// + /// Uncommitted logic array implementation (ULA) + /// + public abstract class ULA : IVideoProvider + { + #region Other Devices - /// - /// The emulated spectrum - /// - protected SpectrumBase _machine; + /// + /// The emulated spectrum + /// + protected SpectrumBase _machine; - /// - /// The CPU monitor class - /// - protected CPUMonitor CPUMon; + /// + /// The CPU monitor class + /// + protected CPUMonitor CPUMon; - #endregion + #endregion - #region Construction & Initialisation + #region Construction & Initialisation - public ULA (SpectrumBase machine) - { - _machine = machine; - CPUMon = _machine.CPUMon; - borderType = _machine.Spectrum.SyncSettings.BorderType; - } + public ULA(SpectrumBase machine) + { + _machine = machine; + CPUMon = _machine.CPUMon; + borderType = _machine.Spectrum.SyncSettings.BorderType; + } - #endregion + #endregion - #region Palettes + #region Palettes - /// - /// The standard ULA palette - /// - private static readonly int[] ULAPalette = - { - Colors.ARGB(0x00, 0x00, 0x00), // Black + /// + /// The standard ULA palette + /// + private static readonly int[] ULAPalette = + { + Colors.ARGB(0x00, 0x00, 0x00), // Black Colors.ARGB(0x00, 0x00, 0xD7), // Blue Colors.ARGB(0xD7, 0x00, 0x00), // Red Colors.ARGB(0xD7, 0x00, 0xD7), // Magenta @@ -60,998 +60,998 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum Colors.ARGB(0xFF, 0xFF, 0xFF), // Bright White }; - #endregion + #endregion - #region Timing + #region Timing - /// - /// The CPU speed - /// - public int ClockSpeed; + /// + /// The CPU speed + /// + public int ClockSpeed; - /// - /// Length of frame in T-State cycles - /// - public int FrameCycleLength; + /// + /// Length of frame in T-State cycles + /// + public int FrameCycleLength; - /// - /// The T-State at which the interrupt should be raised within the frame - /// - public int InterruptStartTime; + /// + /// The T-State at which the interrupt should be raised within the frame + /// + public int InterruptStartTime; - /// - /// The period for which the interrupt should he held - /// (simulated /INT pin held low) - /// - public int InterruptLength; + /// + /// The period for which the interrupt should he held + /// (simulated /INT pin held low) + /// + public int InterruptLength; - /// - /// Contention offset - /// - public int ContentionOffset; + /// + /// Contention offset + /// + public int ContentionOffset; - /// - /// Arbitrary offset for render table generation - /// - public int RenderTableOffset; + /// + /// Arbitrary offset for render table generation + /// + public int RenderTableOffset; - /// - /// The offset when return floating bus bytes - /// - public int FloatingBusOffset; + /// + /// The offset when return floating bus bytes + /// + public int FloatingBusOffset; - /// - /// The time in T-States for one scanline to complete - /// - public int ScanlineTime; + /// + /// The time in T-States for one scanline to complete + /// + public int ScanlineTime; - /// - /// T-States at the left border - /// - public int BorderLeftTime; + /// + /// T-States at the left border + /// + public int BorderLeftTime; - /// - /// T-States at the right border - /// - public int BorderRightTime; + /// + /// T-States at the right border + /// + public int BorderRightTime; - public int FirstPaperLine; - public int FirstPaperTState; - public bool Border4T; - public int Border4TStage; + public int FirstPaperLine; + public int FirstPaperTState; + public bool Border4T; + public int Border4TStage; - #endregion + #endregion - #region Interrupt Generation + #region Interrupt Generation - /// - /// Signs that an interrupt has been raised in this frame. - /// - protected bool InterruptRaised; + /// + /// Signs that an interrupt has been raised in this frame. + /// + protected bool InterruptRaised; - public long ULACycleCounter; - public long LastULATick; - public bool FrameEnd; + public long ULACycleCounter; + public long LastULATick; + public bool FrameEnd; - /// - /// Cycles the ULA clock - /// Handles interrupt generation - /// - public virtual void CycleClock(long totalCycles) - { - // render the screen - if (_machine._render) - RenderScreen((int)_machine.CurrentFrameCycle); + /// + /// Cycles the ULA clock + /// Handles interrupt generation + /// + public virtual void CycleClock(long totalCycles) + { + // render the screen + if (_machine._render) + RenderScreen((int)_machine.CurrentFrameCycle); - // has more than one cycle past since this last ran - // (this can be true if contention has taken place) - var ticksToProcess = totalCycles - LastULATick; + // has more than one cycle past since this last ran + // (this can be true if contention has taken place) + var ticksToProcess = totalCycles - LastULATick; - // store the current cycle - LastULATick = totalCycles; - - // process the cycles past as well as the upcoming one - for (int i = 0; i < ticksToProcess; i++) - { - ULACycleCounter++; + // store the current cycle + LastULATick = totalCycles; - if (InterruptRaised) - { - // /INT pin is currently being held low - if (ULACycleCounter < InterruptLength + InterruptStartTime) - { - // ULA should still hold the /INT pin low - _machine.CPU.FlagI = true; - } - else - { - // its time (or past time) to stop holding the /INT pin low - _machine.CPU.FlagI = false; - InterruptRaised = false; - } - } - else - { - // interrupt is currently not raised - if (ULACycleCounter == FrameLength + InterruptStartTime) - { - // time to raise the interrupt - InterruptRaised = true; + // process the cycles past as well as the upcoming one + for (int i = 0; i < ticksToProcess; i++) + { + ULACycleCounter++; + + if (InterruptRaised) + { + // /INT pin is currently being held low + if (ULACycleCounter < InterruptLength + InterruptStartTime) + { + // ULA should still hold the /INT pin low _machine.CPU.FlagI = true; - FrameEnd = true; - ULACycleCounter = InterruptStartTime; - CalcFlashCounter(); - } - } - } - } - - /// - /// Flash processing - /// - public void CalcFlashCounter() - { - flashCounter++; - - if (flashCounter > 15) - { - flashOn = !flashOn; - flashCounter = 0; - } - } - - #endregion - - #region Screen Layout - - /// - /// Total pixels in one display row - /// - protected int ScreenWidth; - /// - /// Total pixels in one display column - /// - protected int ScreenHeight; - /// - /// Total pixels in top border - /// - protected int BorderTopHeight; - /// - /// Total pixels in bottom border - /// - protected int BorderBottomHeight; - /// - /// Total pixels in left border width - /// - protected int BorderLeftWidth; - /// - /// Total pixels in right border width - /// - protected int BorderRightWidth; - /// - /// Total pixels in one scanline - /// - protected int ScanLineWidth; - - #endregion - - #region State - - /// - /// The last T-State cycle at which the screen was rendered - /// - public int LastTState; - - /// - /// Flash state - /// - public bool flashOn; - - private int flashCounter; - - protected byte fetchB1; - protected byte fetchA1; - protected byte fetchB2; - protected byte fetchA2; - protected int ink; - protected int paper; - protected int fetchBorder; - protected int bright; - protected int flash; - - public int palPaper; - public int palInk; - - public int BorderColor = 7; - - #endregion - - #region Conversions - - public int FrameLength => FrameCycleLength; - - #endregion - - #region Rendering Configuration - - /// - /// Holds all information regarding rendering the screen based on the current T-State - /// - public RenderTable RenderingTable; - - /// - /// Holds all information regarding rendering the screen based on the current T-State - /// - public class RenderTable - { - /// - /// The ULA device - /// - private ULA _ula; - - /// - /// Array of rendercycle entries - /// Starting from the interrupt - /// - public RenderCycle[] Renderer; - - /// - /// The emulated machine - /// - public MachineType _machineType; - - public int Offset; - - /// - /// Constructor - /// - public RenderTable(ULA ula, MachineType machineType) - { - _ula = ula; - _machineType = machineType; - Renderer = new RenderCycle[_ula.FrameCycleLength]; - InitRenderer(machineType); - } - - /// - /// Initializes the renderer - /// - private void InitRenderer(MachineType machineType) - { - for (var t = 0; t < _ula.FrameCycleLength; t++) - { - var tStateScreen = t + _ula.RenderTableOffset;// + _ula.InterruptStartTime; - - if (tStateScreen < 0) - tStateScreen += _ula.FrameCycleLength; - else if (tStateScreen >= _ula.FrameCycleLength) - tStateScreen -= _ula.FrameCycleLength; - - CalculateRenderItem(t, tStateScreen / _ula.ScanlineTime, tStateScreen % _ula.ScanlineTime); - } - - CreateContention(machineType); - } - - private void CalculateRenderItem(int item, int line, int pix) - { - Renderer[item] = new RenderCycle(); - - Renderer[item].RAction = RenderAction.None; - int pitchWidth = _ula.ScreenWidth + _ula.BorderRightWidth + _ula.BorderLeftWidth; - - int scrPix = pix - _ula.FirstPaperTState; - int scrLin = line - _ula.FirstPaperLine; - - if ((line >= (_ula.FirstPaperLine - _ula.BorderTopHeight)) && (line < (_ula.FirstPaperLine + 192 + _ula.BorderBottomHeight)) && - (pix >= (_ula.FirstPaperTState - _ula.BorderLeftTime)) && (pix < (_ula.FirstPaperTState + 128 + _ula.BorderRightTime))) - { - // visibleArea (vertical) - if ((line >= _ula.FirstPaperLine) && (line < (_ula.FirstPaperLine + 192)) && - (pix >= _ula.FirstPaperTState) && (pix < (_ula.FirstPaperTState + 128))) - { - // pixel area - switch (scrPix & 7) - { - case 0: - Renderer[item].RAction = RenderAction.Shift1AndFetchByte2; // shift 1 + fetch B2 - // +4 = prefetch! - Renderer[item].ByteAddress = CalculateByteAddress(scrPix + 4, scrLin); - break; - case 1: - Renderer[item].RAction = RenderAction.Shift1AndFetchAttribute2; // shift 1 + fetch A2 - // +3 = prefetch! - Renderer[item].AttributeAddress = CalculateAttributeAddress(scrPix + 3, scrLin); - break; - case 2: - Renderer[item].RAction = RenderAction.Shift1; // shift 1 - break; - case 3: - Renderer[item].RAction = RenderAction.Shift1Last; // shift 1 (last) - break; - case 4: - Renderer[item].RAction = RenderAction.Shift2; // shift 2 - break; - case 5: - Renderer[item].RAction = RenderAction.Shift2; // shift 2 - break; - case 6: - if (pix < (_ula.FirstPaperTState + 128 - 2)) - { - Renderer[item].RAction = RenderAction.Shift2AndFetchByte1; // shift 2 + fetch B2 - } - else - { - Renderer[item].RAction = RenderAction.Shift2; // shift 2 - } - - // +2 = prefetch! - Renderer[item].ByteAddress = CalculateByteAddress(scrPix + 2, scrLin); - break; - case 7: - if (pix < (_ula.FirstPaperTState + 128 - 2)) - { - //??? - Renderer[item].RAction = RenderAction.Shift2AndFetchAttribute1; // shift 2 + fetch A2 - } - else - { - Renderer[item].RAction = RenderAction.Shift2; // shift 2 - } - - // +1 = prefetch! - Renderer[item].AttributeAddress = CalculateAttributeAddress(scrPix + 1, scrLin); - break; - } - } - else if ((line >= _ula.FirstPaperLine) && (line < (_ula.FirstPaperLine + 192)) && - (pix == (_ula.FirstPaperTState - 2))) // border & fetch B1 - { - Renderer[item].RAction = RenderAction.BorderAndFetchByte1; // border & fetch B1 - // +2 = prefetch! - Renderer[item].ByteAddress = CalculateByteAddress(scrPix + 2, scrLin); - } - else if ((line >= _ula.FirstPaperLine) && (line < (_ula.FirstPaperLine + 192)) && - (pix == (_ula.FirstPaperTState - 1))) // border & fetch A1 - { - Renderer[item].RAction = RenderAction.BorderAndFetchAttribute1; // border & fetch A1 - // +1 = prefetch! - Renderer[item].AttributeAddress = CalculateAttributeAddress(scrPix + 1, scrLin); - } - else - { - Renderer[item].RAction = RenderAction.Border; // border - } - - int wy = line - (_ula.FirstPaperLine - _ula.BorderTopHeight); - int wx = (pix - (_ula.FirstPaperTState - _ula.BorderLeftTime)) * 2; - Renderer[item].LineOffset = wy * pitchWidth + wx; - } - } - - private void CreateContention(MachineType machineType) - { - int[] conPattern = new int[8]; - - switch (machineType) - { - case MachineType.ZXSpectrum16: - case MachineType.ZXSpectrum48: - case MachineType.ZXSpectrum128: - case MachineType.ZXSpectrum128Plus2: - conPattern = new int[] { 6, 5, 4, 3, 2, 1, 0, 0 }; - break; - - case MachineType.ZXSpectrum128Plus2a: - case MachineType.ZXSpectrum128Plus3: - conPattern = new int[] { 1, 0, 7, 6, 5, 4, 3, 2 }; - break; - } - - // calculate contention values - for (int t = 0; t < _ula.FrameCycleLength; t++) - { - int shifted = t + _ula.RenderTableOffset + _ula.ContentionOffset; // _ula.InterruptStartTime; - if (shifted < 0) - shifted += _ula.FrameCycleLength; - shifted %= _ula.FrameCycleLength; - - Renderer[t].ContentionValue = 0; - - int line = shifted / _ula.ScanlineTime; - int pix = shifted % _ula.ScanlineTime; - if (line < _ula.FirstPaperLine || line >= (_ula.FirstPaperLine + 192)) - { - Renderer[t].ContentionValue = 0; - continue; - } - int scrPix = pix - _ula.FirstPaperTState; - if (scrPix < 0 || scrPix >= 128) - { - Renderer[t].ContentionValue = 0; - continue; - } - int pixByte = scrPix % 8; - - Renderer[t].ContentionValue = conPattern[pixByte]; - } - } - - private ushort CalculateByteAddress(int x, int y) - { - x >>= 2; - var vp = x | (y << 5); - return (ushort)((vp & 0x181F) | ((vp & 0x0700) >> 3) | ((vp & 0x00E0) << 3)); - } - - private ushort CalculateAttributeAddress(int x, int y) - { - x >>= 2; - var ap = x | ((y >> 3) << 5); - return (ushort)(6144 + ap); - } - - /// - /// Render/contention information for a single T-State - /// - public class RenderCycle - { - /// - /// The ULA render action at this T-State - /// - public RenderAction RAction; - /// - /// The contention value at this T-State - /// - public int ContentionValue; - /// - /// The screen byte address at this T-State - /// - public ushort ByteAddress; - /// - /// The screen attribute address at this T-State - /// - public ushort AttributeAddress; - /// - /// The byte address returned by the floating bus at this T-State - /// - public ushort FloatingBusAddress; - /// - /// The offset - /// - public int LineOffset; - } - - public enum RenderAction - { - None, - Border, - BorderAndFetchByte1, - BorderAndFetchAttribute1, - Shift1AndFetchByte2, - Shift1AndFetchAttribute2, - Shift1, - Shift1Last, - Shift2, - Shift2Last, - Shift2AndFetchByte1, - Shift2AndFetchAttribute1 - } - } - - #endregion - - #region Render Methods - - /// - /// Renders to the screen buffer based on the current cycle - /// - public void RenderScreen(int toCycle) - { - // check boundaries - if (toCycle > FrameCycleLength) - toCycle = FrameCycleLength; - - // render the required number of cycles - for (int t = LastTState; t < toCycle; t++) - { - if (!Border4T || (t & 3) == Border4TStage) - { - fetchBorder = BorderColor; - } - else - { - - } - - //fetchBorder = BorderColor; - - // get the table entry - var item = RenderingTable.Renderer[t]; - - switch (item.RAction) - { - case RenderTable.RenderAction.None: - break; - - case RenderTable.RenderAction.Border: - ScreenBuffer[item.LineOffset] = ULAPalette[fetchBorder]; - ScreenBuffer[item.LineOffset + 1] = ULAPalette[fetchBorder]; - break; - - case RenderTable.RenderAction.BorderAndFetchByte1: - ScreenBuffer[item.LineOffset] = ULAPalette[fetchBorder]; - ScreenBuffer[item.LineOffset + 1] = ULAPalette[fetchBorder]; - fetchB1 = _machine.FetchScreenMemory(item.ByteAddress); - break; - - case RenderTable.RenderAction.BorderAndFetchAttribute1: - ScreenBuffer[item.LineOffset] = ULAPalette[fetchBorder]; - ScreenBuffer[item.LineOffset + 1] = ULAPalette[fetchBorder]; - fetchA1 = _machine.FetchScreenMemory(item.AttributeAddress); - ProcessInkPaper(fetchA1); - break; - - case RenderTable.RenderAction.Shift1AndFetchByte2: - ScreenBuffer[item.LineOffset] = ((fetchB1 & 0x80) != 0) ? palInk : palPaper; - ScreenBuffer[item.LineOffset + 1] = ((fetchB1 & 0x40) != 0) ? palInk : palPaper; - fetchB1 <<= 2; - fetchB2 = _machine.FetchScreenMemory(item.ByteAddress); - break; - - case RenderTable.RenderAction.Shift1AndFetchAttribute2: - ScreenBuffer[item.LineOffset] = ((fetchB1 & 0x80) != 0) ? palInk : palPaper; - ScreenBuffer[item.LineOffset + 1] = ((fetchB1 & 0x40) != 0) ? palInk : palPaper; - fetchB1 <<= 2; - fetchA2 = _machine.FetchScreenMemory(item.AttributeAddress); - break; - - case RenderTable.RenderAction.Shift1: - ScreenBuffer[item.LineOffset] = ((fetchB1 & 0x80) != 0) ? palInk : palPaper; - ScreenBuffer[item.LineOffset + 1] = ((fetchB1 & 0x40) != 0) ? palInk : palPaper; - fetchB1 <<= 2; - break; - - case RenderTable.RenderAction.Shift1Last: - ScreenBuffer[item.LineOffset] = ((fetchB1 & 0x80) != 0) ? palInk : palPaper; - ScreenBuffer[item.LineOffset + 1] = ((fetchB1 & 0x40) != 0) ? palInk : palPaper; - fetchB1 <<= 2; - ProcessInkPaper(fetchA2); - break; - - case RenderTable.RenderAction.Shift2: - ScreenBuffer[item.LineOffset] = ((fetchB2 & 0x80) != 0) ? palInk : palPaper; - ScreenBuffer[item.LineOffset + 1] = ((fetchB2 & 0x40) != 0) ? palInk : palPaper; - fetchB2 <<= 2; - break; - - case RenderTable.RenderAction.Shift2AndFetchByte1: - ScreenBuffer[item.LineOffset] = ((fetchB2 & 0x80) != 0) ? palInk : palPaper; - ScreenBuffer[item.LineOffset + 1] = ((fetchB2 & 0x40) != 0) ? palInk : palPaper; - fetchB2 <<= 2; - fetchB1 = _machine.FetchScreenMemory(item.ByteAddress); - break; - - case RenderTable.RenderAction.Shift2AndFetchAttribute1: - ScreenBuffer[item.LineOffset] = ((fetchB2 & 0x80) != 0) ? palInk : palPaper; - ScreenBuffer[item.LineOffset + 1] = ((fetchB2 & 0x40) != 0) ? palInk : palPaper; - fetchB2 <<= 2; - fetchA1 = _machine.FetchScreenMemory(item.AttributeAddress); - ProcessInkPaper(fetchA1); - break; - } - } - - LastTState = toCycle; - } - - private void ProcessInkPaper(byte attrData) - { - bright = (attrData & 0x40) >> 3; - flash = (attrData & 0x80) >> 7; - ink = (attrData & 0x07); - paper = ((attrData >> 3) & 0x7); - - palInk = ULAPalette[ink + bright]; - palPaper = ULAPalette[paper + bright]; - - // swap paper and ink when flash is on - if (flashOn && (flash != 0)) - { - int temp = palInk; - palInk = palPaper; - palPaper = temp; - } - } - - /// - /// Generates the port lookup table for +2a/+3 allowed floating bus ports - /// - public void GenerateP3PortTable() - { - List table = new List(); - for (int i = 0; i < 0x1000; i++) - { - ushort r = (ushort)(1 + (4 * i)); - if (r > 4093) - break; - table.Add(r); - } - - Plus3FBPortTable = table.ToArray(); - } - - private ushort[] Plus3FBPortTable = new ushort[1]; - - /// - /// Returns floating bus value (if available) - /// - public void ReadFloatingBus(int tstate, ref int result, ushort port) - { - tstate += FloatingBusOffset; - if (tstate >= RenderingTable.Renderer.Length) - tstate -= RenderingTable.Renderer.Length; - if (tstate < 0) - tstate += RenderingTable.Renderer.Length; - - var item = RenderingTable.Renderer[tstate]; - - switch (RenderingTable._machineType) - { - case MachineType.ZXSpectrum16: - case MachineType.ZXSpectrum48: - case MachineType.ZXSpectrum128: - case MachineType.ZXSpectrum128Plus2: - - switch (item.RAction) - { - case RenderTable.RenderAction.BorderAndFetchByte1: - case RenderTable.RenderAction.Shift1AndFetchByte2: - case RenderTable.RenderAction.Shift2AndFetchByte1: - result = _machine.FetchScreenMemory(item.ByteAddress); - break; - case RenderTable.RenderAction.BorderAndFetchAttribute1: - case RenderTable.RenderAction.Shift1AndFetchAttribute2: - case RenderTable.RenderAction.Shift2AndFetchAttribute1: - result = _machine.FetchScreenMemory(item.AttributeAddress); - break; - default: - break; - } - break; - - case MachineType.ZXSpectrum128Plus2a: - case MachineType.ZXSpectrum128Plus3: - - // http://sky.relative-path.com/zx/floating_bus.html - if (_machine.PagingDisabled) - { - result = 0xff; - break; - } - - // check whether fb is found on this port - ushort pLook = Array.Find(Plus3FBPortTable, s => s == port); - if (pLook == 0) - { - result = 0xff; - break; - } - - // floating bus on +2a/+3 always returns a byte with Bit0 set - switch (item.RAction) - { - case RenderTable.RenderAction.BorderAndFetchByte1: - case RenderTable.RenderAction.Shift1AndFetchByte2: - case RenderTable.RenderAction.Shift2AndFetchByte1: - result = (byte)(_machine.FetchScreenMemory(item.ByteAddress) | 0x01); - break; - case RenderTable.RenderAction.BorderAndFetchAttribute1: - case RenderTable.RenderAction.Shift1AndFetchAttribute2: - case RenderTable.RenderAction.Shift2AndFetchAttribute1: - result = (byte)(_machine.FetchScreenMemory(item.AttributeAddress) | 0x01); - break; - default: - result = (byte)(_machine.LastContendedReadByte | 0x01); - break; - } - - break; - } - } - - #endregion - - #region Contention - - /// - /// Returns the contention value for the current t-state - /// - public int GetContentionValue() - { - return GetContentionValue((int)_machine.CurrentFrameCycle); - } - - /// - /// Returns the contention value for the supplied t-state - /// - public int GetContentionValue(int tstate) - { - if (tstate >= FrameCycleLength) - tstate -= FrameCycleLength; - - if (tstate < 0) - tstate += FrameCycleLength; - - return RenderingTable.Renderer[tstate].ContentionValue; - } - - /// - /// Returns the contention value for the supplied t-state - /// - public int GetPortContentionValue(int tstate) - { - if (tstate >= FrameCycleLength) - tstate -= FrameCycleLength; - - if (tstate < 0) - tstate += FrameCycleLength; - - return RenderingTable.Renderer[tstate].ContentionValue; - } - - #endregion - - #region IVideoProvider - - /// - /// Video output buffer - /// - public int[] ScreenBuffer; - - private int _virtualWidth; - private int _virtualHeight; - private int _bufferWidth; - private int _bufferHeight; - - public int BackgroundColor - { - get - { - var settings = _machine.Spectrum.GetSettings(); - var color = settings.BackgroundColor; - if (!settings.UseCoreBorderForBackground) - return color; - else - return ULAPalette[fetchBorder]; - } - } - - public int VirtualWidth - { - get { return _virtualWidth; } - set { _virtualWidth = value; } - } - - public int VirtualHeight - { - get { return _virtualHeight; } - set { _virtualHeight = value; } - } - - public int BufferWidth - { - get { return _bufferWidth; } - set { _bufferWidth = value; } - } - - public int BufferHeight - { - get { return _bufferHeight; } - set { _bufferHeight = value; } - } - - public int VsyncNumerator - { - get { return ClockSpeed * 50; }// ClockSpeed; } - set { } - } - - public int VsyncDenominator - { - get { return ClockSpeed; }//FrameLength; } - } - - public int[] GetVideoBuffer() - { - switch (borderType) - { - // Full side borders, no top or bottom border (giving *almost* 16:9 output) - case ZXSpectrum.BorderType.Widescreen: - // we are cropping out the top and bottom borders - var startPixelsToCrop = ScanLineWidth * BorderTopHeight; - var endPixelsToCrop = ScanLineWidth * BorderBottomHeight; - int index = 0; - for (int i = startPixelsToCrop; i < ScreenBuffer.Length - endPixelsToCrop; i++) - { - croppedBuffer[index++] = ScreenBuffer[i]; - } - return croppedBuffer; - - // The full spectrum border - case ZXSpectrum.BorderType.Full: - return ScreenBuffer; - - case ZXSpectrum.BorderType.Medium: - // all border sizes now 24 - var lR = BorderLeftWidth - 24; - var rR = BorderRightWidth - 24; - var tR = BorderTopHeight - 24; - var bR = BorderBottomHeight - 24; - var startP = ScanLineWidth * tR; - var endP = ScanLineWidth * bR; - - int index2 = 0; - // line by line - for (int i = startP; i < ScreenBuffer.Length - endP; i += ScreenWidth + BorderLeftWidth + BorderRightWidth) - { - // each pixel in each line - for (int p = lR; p < ScreenWidth + BorderLeftWidth + BorderRightWidth - rR; p++) - { - if (index2 == croppedBuffer.Length) - break; - croppedBuffer[index2++] = ScreenBuffer[i + p]; - } - } - - return croppedBuffer; - - case ZXSpectrum.BorderType.Small: - // all border sizes now 24 - var lR_ = BorderLeftWidth - 10; - var rR_ = BorderRightWidth - 10; - var tR_ = BorderTopHeight - 10; - var bR_ = BorderBottomHeight - 10; - var startP_ = ScanLineWidth * tR_; - var endP_ = ScanLineWidth * bR_; - - int index2_ = 0; - // line by line - for (int i = startP_; i < ScreenBuffer.Length - endP_; i += ScreenWidth + BorderLeftWidth + BorderRightWidth) - { - // each pixel in each line - for (int p = lR_; p < ScreenWidth + BorderLeftWidth + BorderRightWidth - rR_; p++) - { - if (index2_ == croppedBuffer.Length) - break; - croppedBuffer[index2_++] = ScreenBuffer[i + p]; - } - } - - return croppedBuffer; - - case ZXSpectrum.BorderType.None: - // all border sizes now 0 - var lR__ = BorderLeftWidth; - var rR__ = BorderRightWidth; - var tR__ = BorderTopHeight; - var bR__ = BorderBottomHeight; - var startP__ = ScanLineWidth * tR__; - var endP__ = ScanLineWidth * bR__; - - int index2__ = 0; - // line by line - for (int i = startP__; i < ScreenBuffer.Length - endP__; i += ScreenWidth + BorderLeftWidth + BorderRightWidth) - { - // each pixel in each line - for (int p = lR__; p < ScreenWidth + BorderLeftWidth + BorderRightWidth - rR__; p++) - { - if (index2__ == croppedBuffer.Length) - break; - croppedBuffer[index2__++] = ScreenBuffer[i + p]; - } - } - - return croppedBuffer; - } - - return ScreenBuffer; - } - - protected void SetupScreenSize() - { - BufferWidth = ScreenWidth + BorderLeftWidth + BorderRightWidth; - BufferHeight = ScreenHeight + BorderTopHeight + BorderBottomHeight; - VirtualHeight = BufferHeight; - VirtualWidth = BufferWidth; - ScreenBuffer = new int[BufferWidth * BufferHeight]; - - switch (borderType) - { - case ZXSpectrum.BorderType.Full: - BufferWidth = ScreenWidth + BorderLeftWidth + BorderRightWidth; - BufferHeight = ScreenHeight + BorderTopHeight + BorderBottomHeight; - VirtualHeight = BufferHeight; - VirtualWidth = BufferWidth; - ScreenBuffer = new int[BufferWidth * BufferHeight]; - break; - - case ZXSpectrum.BorderType.Widescreen: - BufferWidth = ScreenWidth + BorderLeftWidth + BorderRightWidth; - BufferHeight = ScreenHeight; - VirtualHeight = BufferHeight; - VirtualWidth = BufferWidth; - croppedBuffer = new int[BufferWidth * BufferHeight]; - break; - - case ZXSpectrum.BorderType.Medium: - BufferWidth = ScreenWidth + (24) + (24); - BufferHeight = ScreenHeight + (24) + (24); - VirtualHeight = BufferHeight; - VirtualWidth = BufferWidth; - croppedBuffer = new int[BufferWidth * BufferHeight]; - break; - - case ZXSpectrum.BorderType.Small: - BufferWidth = ScreenWidth + (10) + (10); - BufferHeight = ScreenHeight + (10) + (10); - VirtualHeight = BufferHeight; - VirtualWidth = BufferWidth; - croppedBuffer = new int[BufferWidth * BufferHeight]; - break; - - case ZXSpectrum.BorderType.None: - BufferWidth = ScreenWidth; - BufferHeight = ScreenHeight; - VirtualHeight = BufferHeight; - VirtualWidth = BufferWidth; - croppedBuffer = new int[BufferWidth * BufferHeight]; - break; - } - } - - protected int[] croppedBuffer; - - private ZXSpectrum.BorderType _borderType; - - public ZXSpectrum.BorderType borderType - { - get { return _borderType; } - set { _borderType = value; } - } - - #endregion - - #region Serialization - - public void SyncState(Serializer ser) - { - ser.BeginSection(nameof(ULA)); - if (ScreenBuffer != null) - ser.Sync(nameof(ScreenBuffer), ref ScreenBuffer, false); - ser.Sync(nameof(BorderColor), ref BorderColor); - ser.Sync(nameof(LastTState), ref LastTState); - ser.Sync(nameof(flashOn), ref flashOn); - ser.Sync(nameof(fetchB1), ref fetchB1); - ser.Sync(nameof(fetchA1), ref fetchA1); - ser.Sync(nameof(fetchB2), ref fetchB2); - ser.Sync(nameof(fetchA2), ref fetchA2); - ser.Sync(nameof(ink), ref ink); - ser.Sync(nameof(paper), ref paper); - ser.Sync(nameof(fetchBorder), ref fetchBorder); - ser.Sync(nameof(bright), ref bright); - ser.Sync(nameof(flash), ref flash); - ser.Sync(nameof(palPaper), ref palPaper); - ser.Sync(nameof(palInk), ref palInk); - - ser.Sync(nameof(LastULATick), ref LastULATick); - ser.Sync(nameof(ULACycleCounter), ref ULACycleCounter); - ser.Sync(nameof(FrameEnd), ref FrameEnd); - - ser.Sync(nameof(InterruptRaised), ref InterruptRaised); - ser.EndSection(); - } - - #endregion - } + } + else + { + // its time (or past time) to stop holding the /INT pin low + _machine.CPU.FlagI = false; + InterruptRaised = false; + } + } + else + { + // interrupt is currently not raised + if (ULACycleCounter == FrameLength + InterruptStartTime) + { + // time to raise the interrupt + InterruptRaised = true; + _machine.CPU.FlagI = true; + FrameEnd = true; + ULACycleCounter = InterruptStartTime; + CalcFlashCounter(); + } + } + } + } + + /// + /// Flash processing + /// + public void CalcFlashCounter() + { + flashCounter++; + + if (flashCounter > 15) + { + flashOn = !flashOn; + flashCounter = 0; + } + } + + #endregion + + #region Screen Layout + + /// + /// Total pixels in one display row + /// + protected int ScreenWidth; + /// + /// Total pixels in one display column + /// + protected int ScreenHeight; + /// + /// Total pixels in top border + /// + protected int BorderTopHeight; + /// + /// Total pixels in bottom border + /// + protected int BorderBottomHeight; + /// + /// Total pixels in left border width + /// + protected int BorderLeftWidth; + /// + /// Total pixels in right border width + /// + protected int BorderRightWidth; + /// + /// Total pixels in one scanline + /// + protected int ScanLineWidth; + + #endregion + + #region State + + /// + /// The last T-State cycle at which the screen was rendered + /// + public int LastTState; + + /// + /// Flash state + /// + public bool flashOn; + + private int flashCounter; + + protected byte fetchB1; + protected byte fetchA1; + protected byte fetchB2; + protected byte fetchA2; + protected int ink; + protected int paper; + protected int fetchBorder; + protected int bright; + protected int flash; + + public int palPaper; + public int palInk; + + public int BorderColor = 7; + + #endregion + + #region Conversions + + public int FrameLength => FrameCycleLength; + + #endregion + + #region Rendering Configuration + + /// + /// Holds all information regarding rendering the screen based on the current T-State + /// + public RenderTable RenderingTable; + + /// + /// Holds all information regarding rendering the screen based on the current T-State + /// + public class RenderTable + { + /// + /// The ULA device + /// + private ULA _ula; + + /// + /// Array of rendercycle entries + /// Starting from the interrupt + /// + public RenderCycle[] Renderer; + + /// + /// The emulated machine + /// + public MachineType _machineType; + + public int Offset; + + /// + /// Constructor + /// + public RenderTable(ULA ula, MachineType machineType) + { + _ula = ula; + _machineType = machineType; + Renderer = new RenderCycle[_ula.FrameCycleLength]; + InitRenderer(machineType); + } + + /// + /// Initializes the renderer + /// + private void InitRenderer(MachineType machineType) + { + for (var t = 0; t < _ula.FrameCycleLength; t++) + { + var tStateScreen = t + _ula.RenderTableOffset;// + _ula.InterruptStartTime; + + if (tStateScreen < 0) + tStateScreen += _ula.FrameCycleLength; + else if (tStateScreen >= _ula.FrameCycleLength) + tStateScreen -= _ula.FrameCycleLength; + + CalculateRenderItem(t, tStateScreen / _ula.ScanlineTime, tStateScreen % _ula.ScanlineTime); + } + + CreateContention(machineType); + } + + private void CalculateRenderItem(int item, int line, int pix) + { + Renderer[item] = new RenderCycle(); + + Renderer[item].RAction = RenderAction.None; + int pitchWidth = _ula.ScreenWidth + _ula.BorderRightWidth + _ula.BorderLeftWidth; + + int scrPix = pix - _ula.FirstPaperTState; + int scrLin = line - _ula.FirstPaperLine; + + if ((line >= (_ula.FirstPaperLine - _ula.BorderTopHeight)) && (line < (_ula.FirstPaperLine + 192 + _ula.BorderBottomHeight)) && + (pix >= (_ula.FirstPaperTState - _ula.BorderLeftTime)) && (pix < (_ula.FirstPaperTState + 128 + _ula.BorderRightTime))) + { + // visibleArea (vertical) + if ((line >= _ula.FirstPaperLine) && (line < (_ula.FirstPaperLine + 192)) && + (pix >= _ula.FirstPaperTState) && (pix < (_ula.FirstPaperTState + 128))) + { + // pixel area + switch (scrPix & 7) + { + case 0: + Renderer[item].RAction = RenderAction.Shift1AndFetchByte2; // shift 1 + fetch B2 + // +4 = prefetch! + Renderer[item].ByteAddress = CalculateByteAddress(scrPix + 4, scrLin); + break; + case 1: + Renderer[item].RAction = RenderAction.Shift1AndFetchAttribute2; // shift 1 + fetch A2 + // +3 = prefetch! + Renderer[item].AttributeAddress = CalculateAttributeAddress(scrPix + 3, scrLin); + break; + case 2: + Renderer[item].RAction = RenderAction.Shift1; // shift 1 + break; + case 3: + Renderer[item].RAction = RenderAction.Shift1Last; // shift 1 (last) + break; + case 4: + Renderer[item].RAction = RenderAction.Shift2; // shift 2 + break; + case 5: + Renderer[item].RAction = RenderAction.Shift2; // shift 2 + break; + case 6: + if (pix < (_ula.FirstPaperTState + 128 - 2)) + { + Renderer[item].RAction = RenderAction.Shift2AndFetchByte1; // shift 2 + fetch B2 + } + else + { + Renderer[item].RAction = RenderAction.Shift2; // shift 2 + } + + // +2 = prefetch! + Renderer[item].ByteAddress = CalculateByteAddress(scrPix + 2, scrLin); + break; + case 7: + if (pix < (_ula.FirstPaperTState + 128 - 2)) + { + //??? + Renderer[item].RAction = RenderAction.Shift2AndFetchAttribute1; // shift 2 + fetch A2 + } + else + { + Renderer[item].RAction = RenderAction.Shift2; // shift 2 + } + + // +1 = prefetch! + Renderer[item].AttributeAddress = CalculateAttributeAddress(scrPix + 1, scrLin); + break; + } + } + else if ((line >= _ula.FirstPaperLine) && (line < (_ula.FirstPaperLine + 192)) && + (pix == (_ula.FirstPaperTState - 2))) // border & fetch B1 + { + Renderer[item].RAction = RenderAction.BorderAndFetchByte1; // border & fetch B1 + // +2 = prefetch! + Renderer[item].ByteAddress = CalculateByteAddress(scrPix + 2, scrLin); + } + else if ((line >= _ula.FirstPaperLine) && (line < (_ula.FirstPaperLine + 192)) && + (pix == (_ula.FirstPaperTState - 1))) // border & fetch A1 + { + Renderer[item].RAction = RenderAction.BorderAndFetchAttribute1; // border & fetch A1 + // +1 = prefetch! + Renderer[item].AttributeAddress = CalculateAttributeAddress(scrPix + 1, scrLin); + } + else + { + Renderer[item].RAction = RenderAction.Border; // border + } + + int wy = line - (_ula.FirstPaperLine - _ula.BorderTopHeight); + int wx = (pix - (_ula.FirstPaperTState - _ula.BorderLeftTime)) * 2; + Renderer[item].LineOffset = wy * pitchWidth + wx; + } + } + + private void CreateContention(MachineType machineType) + { + int[] conPattern = new int[8]; + + switch (machineType) + { + case MachineType.ZXSpectrum16: + case MachineType.ZXSpectrum48: + case MachineType.ZXSpectrum128: + case MachineType.ZXSpectrum128Plus2: + conPattern = new int[] { 6, 5, 4, 3, 2, 1, 0, 0 }; + break; + + case MachineType.ZXSpectrum128Plus2a: + case MachineType.ZXSpectrum128Plus3: + conPattern = new int[] { 1, 0, 7, 6, 5, 4, 3, 2 }; + break; + } + + // calculate contention values + for (int t = 0; t < _ula.FrameCycleLength; t++) + { + int shifted = t + _ula.RenderTableOffset + _ula.ContentionOffset; // _ula.InterruptStartTime; + if (shifted < 0) + shifted += _ula.FrameCycleLength; + shifted %= _ula.FrameCycleLength; + + Renderer[t].ContentionValue = 0; + + int line = shifted / _ula.ScanlineTime; + int pix = shifted % _ula.ScanlineTime; + if (line < _ula.FirstPaperLine || line >= (_ula.FirstPaperLine + 192)) + { + Renderer[t].ContentionValue = 0; + continue; + } + int scrPix = pix - _ula.FirstPaperTState; + if (scrPix < 0 || scrPix >= 128) + { + Renderer[t].ContentionValue = 0; + continue; + } + int pixByte = scrPix % 8; + + Renderer[t].ContentionValue = conPattern[pixByte]; + } + } + + private ushort CalculateByteAddress(int x, int y) + { + x >>= 2; + var vp = x | (y << 5); + return (ushort)((vp & 0x181F) | ((vp & 0x0700) >> 3) | ((vp & 0x00E0) << 3)); + } + + private ushort CalculateAttributeAddress(int x, int y) + { + x >>= 2; + var ap = x | ((y >> 3) << 5); + return (ushort)(6144 + ap); + } + + /// + /// Render/contention information for a single T-State + /// + public class RenderCycle + { + /// + /// The ULA render action at this T-State + /// + public RenderAction RAction; + /// + /// The contention value at this T-State + /// + public int ContentionValue; + /// + /// The screen byte address at this T-State + /// + public ushort ByteAddress; + /// + /// The screen attribute address at this T-State + /// + public ushort AttributeAddress; + /// + /// The byte address returned by the floating bus at this T-State + /// + public ushort FloatingBusAddress; + /// + /// The offset + /// + public int LineOffset; + } + + public enum RenderAction + { + None, + Border, + BorderAndFetchByte1, + BorderAndFetchAttribute1, + Shift1AndFetchByte2, + Shift1AndFetchAttribute2, + Shift1, + Shift1Last, + Shift2, + Shift2Last, + Shift2AndFetchByte1, + Shift2AndFetchAttribute1 + } + } + + #endregion + + #region Render Methods + + /// + /// Renders to the screen buffer based on the current cycle + /// + public void RenderScreen(int toCycle) + { + // check boundaries + if (toCycle > FrameCycleLength) + toCycle = FrameCycleLength; + + // render the required number of cycles + for (int t = LastTState; t < toCycle; t++) + { + if (!Border4T || (t & 3) == Border4TStage) + { + fetchBorder = BorderColor; + } + else + { + + } + + //fetchBorder = BorderColor; + + // get the table entry + var item = RenderingTable.Renderer[t]; + + switch (item.RAction) + { + case RenderTable.RenderAction.None: + break; + + case RenderTable.RenderAction.Border: + ScreenBuffer[item.LineOffset] = ULAPalette[fetchBorder]; + ScreenBuffer[item.LineOffset + 1] = ULAPalette[fetchBorder]; + break; + + case RenderTable.RenderAction.BorderAndFetchByte1: + ScreenBuffer[item.LineOffset] = ULAPalette[fetchBorder]; + ScreenBuffer[item.LineOffset + 1] = ULAPalette[fetchBorder]; + fetchB1 = _machine.FetchScreenMemory(item.ByteAddress); + break; + + case RenderTable.RenderAction.BorderAndFetchAttribute1: + ScreenBuffer[item.LineOffset] = ULAPalette[fetchBorder]; + ScreenBuffer[item.LineOffset + 1] = ULAPalette[fetchBorder]; + fetchA1 = _machine.FetchScreenMemory(item.AttributeAddress); + ProcessInkPaper(fetchA1); + break; + + case RenderTable.RenderAction.Shift1AndFetchByte2: + ScreenBuffer[item.LineOffset] = ((fetchB1 & 0x80) != 0) ? palInk : palPaper; + ScreenBuffer[item.LineOffset + 1] = ((fetchB1 & 0x40) != 0) ? palInk : palPaper; + fetchB1 <<= 2; + fetchB2 = _machine.FetchScreenMemory(item.ByteAddress); + break; + + case RenderTable.RenderAction.Shift1AndFetchAttribute2: + ScreenBuffer[item.LineOffset] = ((fetchB1 & 0x80) != 0) ? palInk : palPaper; + ScreenBuffer[item.LineOffset + 1] = ((fetchB1 & 0x40) != 0) ? palInk : palPaper; + fetchB1 <<= 2; + fetchA2 = _machine.FetchScreenMemory(item.AttributeAddress); + break; + + case RenderTable.RenderAction.Shift1: + ScreenBuffer[item.LineOffset] = ((fetchB1 & 0x80) != 0) ? palInk : palPaper; + ScreenBuffer[item.LineOffset + 1] = ((fetchB1 & 0x40) != 0) ? palInk : palPaper; + fetchB1 <<= 2; + break; + + case RenderTable.RenderAction.Shift1Last: + ScreenBuffer[item.LineOffset] = ((fetchB1 & 0x80) != 0) ? palInk : palPaper; + ScreenBuffer[item.LineOffset + 1] = ((fetchB1 & 0x40) != 0) ? palInk : palPaper; + fetchB1 <<= 2; + ProcessInkPaper(fetchA2); + break; + + case RenderTable.RenderAction.Shift2: + ScreenBuffer[item.LineOffset] = ((fetchB2 & 0x80) != 0) ? palInk : palPaper; + ScreenBuffer[item.LineOffset + 1] = ((fetchB2 & 0x40) != 0) ? palInk : palPaper; + fetchB2 <<= 2; + break; + + case RenderTable.RenderAction.Shift2AndFetchByte1: + ScreenBuffer[item.LineOffset] = ((fetchB2 & 0x80) != 0) ? palInk : palPaper; + ScreenBuffer[item.LineOffset + 1] = ((fetchB2 & 0x40) != 0) ? palInk : palPaper; + fetchB2 <<= 2; + fetchB1 = _machine.FetchScreenMemory(item.ByteAddress); + break; + + case RenderTable.RenderAction.Shift2AndFetchAttribute1: + ScreenBuffer[item.LineOffset] = ((fetchB2 & 0x80) != 0) ? palInk : palPaper; + ScreenBuffer[item.LineOffset + 1] = ((fetchB2 & 0x40) != 0) ? palInk : palPaper; + fetchB2 <<= 2; + fetchA1 = _machine.FetchScreenMemory(item.AttributeAddress); + ProcessInkPaper(fetchA1); + break; + } + } + + LastTState = toCycle; + } + + private void ProcessInkPaper(byte attrData) + { + bright = (attrData & 0x40) >> 3; + flash = (attrData & 0x80) >> 7; + ink = (attrData & 0x07); + paper = ((attrData >> 3) & 0x7); + + palInk = ULAPalette[ink + bright]; + palPaper = ULAPalette[paper + bright]; + + // swap paper and ink when flash is on + if (flashOn && (flash != 0)) + { + int temp = palInk; + palInk = palPaper; + palPaper = temp; + } + } + + /// + /// Generates the port lookup table for +2a/+3 allowed floating bus ports + /// + public void GenerateP3PortTable() + { + List table = new List(); + for (int i = 0; i < 0x1000; i++) + { + ushort r = (ushort)(1 + (4 * i)); + if (r > 4093) + break; + table.Add(r); + } + + Plus3FBPortTable = table.ToArray(); + } + + private ushort[] Plus3FBPortTable = new ushort[1]; + + /// + /// Returns floating bus value (if available) + /// + public void ReadFloatingBus(int tstate, ref int result, ushort port) + { + tstate += FloatingBusOffset; + if (tstate >= RenderingTable.Renderer.Length) + tstate -= RenderingTable.Renderer.Length; + if (tstate < 0) + tstate += RenderingTable.Renderer.Length; + + var item = RenderingTable.Renderer[tstate]; + + switch (RenderingTable._machineType) + { + case MachineType.ZXSpectrum16: + case MachineType.ZXSpectrum48: + case MachineType.ZXSpectrum128: + case MachineType.ZXSpectrum128Plus2: + + switch (item.RAction) + { + case RenderTable.RenderAction.BorderAndFetchByte1: + case RenderTable.RenderAction.Shift1AndFetchByte2: + case RenderTable.RenderAction.Shift2AndFetchByte1: + result = _machine.FetchScreenMemory(item.ByteAddress); + break; + case RenderTable.RenderAction.BorderAndFetchAttribute1: + case RenderTable.RenderAction.Shift1AndFetchAttribute2: + case RenderTable.RenderAction.Shift2AndFetchAttribute1: + result = _machine.FetchScreenMemory(item.AttributeAddress); + break; + default: + break; + } + break; + + case MachineType.ZXSpectrum128Plus2a: + case MachineType.ZXSpectrum128Plus3: + + // http://sky.relative-path.com/zx/floating_bus.html + if (_machine.PagingDisabled) + { + result = 0xff; + break; + } + + // check whether fb is found on this port + ushort pLook = Array.Find(Plus3FBPortTable, s => s == port); + if (pLook == 0) + { + result = 0xff; + break; + } + + // floating bus on +2a/+3 always returns a byte with Bit0 set + switch (item.RAction) + { + case RenderTable.RenderAction.BorderAndFetchByte1: + case RenderTable.RenderAction.Shift1AndFetchByte2: + case RenderTable.RenderAction.Shift2AndFetchByte1: + result = (byte)(_machine.FetchScreenMemory(item.ByteAddress) | 0x01); + break; + case RenderTable.RenderAction.BorderAndFetchAttribute1: + case RenderTable.RenderAction.Shift1AndFetchAttribute2: + case RenderTable.RenderAction.Shift2AndFetchAttribute1: + result = (byte)(_machine.FetchScreenMemory(item.AttributeAddress) | 0x01); + break; + default: + result = (byte)(_machine.LastContendedReadByte | 0x01); + break; + } + + break; + } + } + + #endregion + + #region Contention + + /// + /// Returns the contention value for the current t-state + /// + public int GetContentionValue() + { + return GetContentionValue((int)_machine.CurrentFrameCycle); + } + + /// + /// Returns the contention value for the supplied t-state + /// + public int GetContentionValue(int tstate) + { + if (tstate >= FrameCycleLength) + tstate -= FrameCycleLength; + + if (tstate < 0) + tstate += FrameCycleLength; + + return RenderingTable.Renderer[tstate].ContentionValue; + } + + /// + /// Returns the contention value for the supplied t-state + /// + public int GetPortContentionValue(int tstate) + { + if (tstate >= FrameCycleLength) + tstate -= FrameCycleLength; + + if (tstate < 0) + tstate += FrameCycleLength; + + return RenderingTable.Renderer[tstate].ContentionValue; + } + + #endregion + + #region IVideoProvider + + /// + /// Video output buffer + /// + public int[] ScreenBuffer; + + private int _virtualWidth; + private int _virtualHeight; + private int _bufferWidth; + private int _bufferHeight; + + public int BackgroundColor + { + get + { + var settings = _machine.Spectrum.GetSettings(); + var color = settings.BackgroundColor; + if (!settings.UseCoreBorderForBackground) + return color; + else + return ULAPalette[fetchBorder]; + } + } + + public int VirtualWidth + { + get { return _virtualWidth; } + set { _virtualWidth = value; } + } + + public int VirtualHeight + { + get { return _virtualHeight; } + set { _virtualHeight = value; } + } + + public int BufferWidth + { + get { return _bufferWidth; } + set { _bufferWidth = value; } + } + + public int BufferHeight + { + get { return _bufferHeight; } + set { _bufferHeight = value; } + } + + public int VsyncNumerator + { + get { return ClockSpeed * 50; }// ClockSpeed; } + set { } + } + + public int VsyncDenominator + { + get { return ClockSpeed; }//FrameLength; } + } + + public int[] GetVideoBuffer() + { + switch (borderType) + { + // Full side borders, no top or bottom border (giving *almost* 16:9 output) + case ZXSpectrum.BorderType.Widescreen: + // we are cropping out the top and bottom borders + var startPixelsToCrop = ScanLineWidth * BorderTopHeight; + var endPixelsToCrop = ScanLineWidth * BorderBottomHeight; + int index = 0; + for (int i = startPixelsToCrop; i < ScreenBuffer.Length - endPixelsToCrop; i++) + { + croppedBuffer[index++] = ScreenBuffer[i]; + } + return croppedBuffer; + + // The full spectrum border + case ZXSpectrum.BorderType.Full: + return ScreenBuffer; + + case ZXSpectrum.BorderType.Medium: + // all border sizes now 24 + var lR = BorderLeftWidth - 24; + var rR = BorderRightWidth - 24; + var tR = BorderTopHeight - 24; + var bR = BorderBottomHeight - 24; + var startP = ScanLineWidth * tR; + var endP = ScanLineWidth * bR; + + int index2 = 0; + // line by line + for (int i = startP; i < ScreenBuffer.Length - endP; i += ScreenWidth + BorderLeftWidth + BorderRightWidth) + { + // each pixel in each line + for (int p = lR; p < ScreenWidth + BorderLeftWidth + BorderRightWidth - rR; p++) + { + if (index2 == croppedBuffer.Length) + break; + croppedBuffer[index2++] = ScreenBuffer[i + p]; + } + } + + return croppedBuffer; + + case ZXSpectrum.BorderType.Small: + // all border sizes now 24 + var lR_ = BorderLeftWidth - 10; + var rR_ = BorderRightWidth - 10; + var tR_ = BorderTopHeight - 10; + var bR_ = BorderBottomHeight - 10; + var startP_ = ScanLineWidth * tR_; + var endP_ = ScanLineWidth * bR_; + + int index2_ = 0; + // line by line + for (int i = startP_; i < ScreenBuffer.Length - endP_; i += ScreenWidth + BorderLeftWidth + BorderRightWidth) + { + // each pixel in each line + for (int p = lR_; p < ScreenWidth + BorderLeftWidth + BorderRightWidth - rR_; p++) + { + if (index2_ == croppedBuffer.Length) + break; + croppedBuffer[index2_++] = ScreenBuffer[i + p]; + } + } + + return croppedBuffer; + + case ZXSpectrum.BorderType.None: + // all border sizes now 0 + var lR__ = BorderLeftWidth; + var rR__ = BorderRightWidth; + var tR__ = BorderTopHeight; + var bR__ = BorderBottomHeight; + var startP__ = ScanLineWidth * tR__; + var endP__ = ScanLineWidth * bR__; + + int index2__ = 0; + // line by line + for (int i = startP__; i < ScreenBuffer.Length - endP__; i += ScreenWidth + BorderLeftWidth + BorderRightWidth) + { + // each pixel in each line + for (int p = lR__; p < ScreenWidth + BorderLeftWidth + BorderRightWidth - rR__; p++) + { + if (index2__ == croppedBuffer.Length) + break; + croppedBuffer[index2__++] = ScreenBuffer[i + p]; + } + } + + return croppedBuffer; + } + + return ScreenBuffer; + } + + protected void SetupScreenSize() + { + BufferWidth = ScreenWidth + BorderLeftWidth + BorderRightWidth; + BufferHeight = ScreenHeight + BorderTopHeight + BorderBottomHeight; + VirtualHeight = BufferHeight; + VirtualWidth = BufferWidth; + ScreenBuffer = new int[BufferWidth * BufferHeight]; + + switch (borderType) + { + case ZXSpectrum.BorderType.Full: + BufferWidth = ScreenWidth + BorderLeftWidth + BorderRightWidth; + BufferHeight = ScreenHeight + BorderTopHeight + BorderBottomHeight; + VirtualHeight = BufferHeight; + VirtualWidth = BufferWidth; + ScreenBuffer = new int[BufferWidth * BufferHeight]; + break; + + case ZXSpectrum.BorderType.Widescreen: + BufferWidth = ScreenWidth + BorderLeftWidth + BorderRightWidth; + BufferHeight = ScreenHeight; + VirtualHeight = BufferHeight; + VirtualWidth = BufferWidth; + croppedBuffer = new int[BufferWidth * BufferHeight]; + break; + + case ZXSpectrum.BorderType.Medium: + BufferWidth = ScreenWidth + (24) + (24); + BufferHeight = ScreenHeight + (24) + (24); + VirtualHeight = BufferHeight; + VirtualWidth = BufferWidth; + croppedBuffer = new int[BufferWidth * BufferHeight]; + break; + + case ZXSpectrum.BorderType.Small: + BufferWidth = ScreenWidth + (10) + (10); + BufferHeight = ScreenHeight + (10) + (10); + VirtualHeight = BufferHeight; + VirtualWidth = BufferWidth; + croppedBuffer = new int[BufferWidth * BufferHeight]; + break; + + case ZXSpectrum.BorderType.None: + BufferWidth = ScreenWidth; + BufferHeight = ScreenHeight; + VirtualHeight = BufferHeight; + VirtualWidth = BufferWidth; + croppedBuffer = new int[BufferWidth * BufferHeight]; + break; + } + } + + protected int[] croppedBuffer; + + private ZXSpectrum.BorderType _borderType; + + public ZXSpectrum.BorderType borderType + { + get { return _borderType; } + set { _borderType = value; } + } + + #endregion + + #region Serialization + + public void SyncState(Serializer ser) + { + ser.BeginSection(nameof(ULA)); + if (ScreenBuffer != null) + ser.Sync(nameof(ScreenBuffer), ref ScreenBuffer, false); + ser.Sync(nameof(BorderColor), ref BorderColor); + ser.Sync(nameof(LastTState), ref LastTState); + ser.Sync(nameof(flashOn), ref flashOn); + ser.Sync(nameof(fetchB1), ref fetchB1); + ser.Sync(nameof(fetchA1), ref fetchA1); + ser.Sync(nameof(fetchB2), ref fetchB2); + ser.Sync(nameof(fetchA2), ref fetchA2); + ser.Sync(nameof(ink), ref ink); + ser.Sync(nameof(paper), ref paper); + ser.Sync(nameof(fetchBorder), ref fetchBorder); + ser.Sync(nameof(bright), ref bright); + ser.Sync(nameof(flash), ref flash); + ser.Sync(nameof(palPaper), ref palPaper); + ser.Sync(nameof(palInk), ref palInk); + + ser.Sync(nameof(LastULATick), ref LastULATick); + ser.Sync(nameof(ULACycleCounter), ref ULACycleCounter); + ser.Sync(nameof(FrameEnd), ref FrameEnd); + + ser.Sync(nameof(InterruptRaised), ref InterruptRaised); + ser.EndSection(); + } + + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.Screen.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.Screen.cs index 2c7d1a722b..cbb98eec3f 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.Screen.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.Screen.cs @@ -1,48 +1,48 @@  namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// 128K/+2 ULA - /// - class Screen128 : ULA - { - #region Construction + /// + /// 128K/+2 ULA + /// + class Screen128 : ULA + { + #region Construction - public Screen128(SpectrumBase machine) + public Screen128(SpectrumBase machine) : base(machine) - { - // interrupt - InterruptStartTime = 3; - InterruptLength = 36; - // offsets - RenderTableOffset = 58; - ContentionOffset = 6; - FloatingBusOffset = 1; - // timing - ClockSpeed = 3546900; - FrameCycleLength = 70908; - ScanlineTime = 228; - BorderLeftTime = 24; - BorderRightTime = 24; - FirstPaperLine = 63; - FirstPaperTState = 64; - // screen layout - Border4T = true; - Border4TStage = 2; - ScreenWidth = 256; - ScreenHeight = 192; - BorderTopHeight = 48; // 55; // 48; - BorderBottomHeight = 48; // 56; - BorderLeftWidth = 48; - BorderRightWidth = 48; - ScanLineWidth = BorderLeftWidth + ScreenWidth + BorderRightWidth; + { + // interrupt + InterruptStartTime = 3; + InterruptLength = 36; + // offsets + RenderTableOffset = 58; + ContentionOffset = 6; + FloatingBusOffset = 1; + // timing + ClockSpeed = 3546900; + FrameCycleLength = 70908; + ScanlineTime = 228; + BorderLeftTime = 24; + BorderRightTime = 24; + FirstPaperLine = 63; + FirstPaperTState = 64; + // screen layout + Border4T = true; + Border4TStage = 2; + ScreenWidth = 256; + ScreenHeight = 192; + BorderTopHeight = 48; // 55; // 48; + BorderBottomHeight = 48; // 56; + BorderLeftWidth = 48; + BorderRightWidth = 48; + ScanLineWidth = BorderLeftWidth + ScreenWidth + BorderRightWidth; - RenderingTable = new RenderTable(this, - MachineType.ZXSpectrum128); + RenderingTable = new RenderTable(this, + MachineType.ZXSpectrum128); - SetupScreenSize(); - } + SetupScreenSize(); + } - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.cs index 5388165142..28859c3fa6 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128K/ZX128.cs @@ -4,48 +4,48 @@ using BizHawk.Emulation.Cores.Sound; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// 128K Constructor - /// - public partial class ZX128 : SpectrumBase - { - #region Construction + /// + /// 128K Constructor + /// + public partial class ZX128 : SpectrumBase + { + #region Construction - /// - /// Main constructor - /// - public ZX128(ZXSpectrum spectrum, Z80A cpu, ZXSpectrum.BorderType borderType, List files, List joysticks) - { - Spectrum = spectrum; - CPU = cpu; + /// + /// Main constructor + /// + public ZX128(ZXSpectrum spectrum, Z80A cpu, ZXSpectrum.BorderType borderType, List files, List joysticks) + { + Spectrum = spectrum; + CPU = cpu; - CPUMon = new CPUMonitor(this); - CPUMon.machineType = MachineType.ZXSpectrum128; + CPUMon = new CPUMonitor(this); + CPUMon.machineType = MachineType.ZXSpectrum128; - ROMPaged = 0; - SHADOWPaged = false; - RAMPaged = 0; - PagingDisabled = false; - - ULADevice = new Screen128(this); + ROMPaged = 0; + SHADOWPaged = false; + RAMPaged = 0; + PagingDisabled = false; + + ULADevice = new Screen128(this); BuzzerDevice = new OneBitBeeper(44100, ULADevice.FrameLength, 50, "SystemBuzzer"); TapeBuzzer = new OneBitBeeper(44100, ULADevice.FrameLength, 50, "TapeBuzzer"); AYDevice = new AY38912(this); - AYDevice.Init(44100, ULADevice.FrameLength); + AYDevice.Init(44100, ULADevice.FrameLength); - KeyboardDevice = new StandardKeyboard(this); + KeyboardDevice = new StandardKeyboard(this); - InitJoysticks(joysticks); + InitJoysticks(joysticks); - TapeDevice = new DatacorderDevice(spectrum.SyncSettings.AutoLoadTape); - TapeDevice.Init(this); + TapeDevice = new DatacorderDevice(spectrum.SyncSettings.AutoLoadTape); + TapeDevice.Init(this); - InitializeMedia(files); - } + InitializeMedia(files); + } - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2/ZX128Plus2.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2/ZX128Plus2.cs index d276e52bb1..e8aecf71f7 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2/ZX128Plus2.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2/ZX128Plus2.cs @@ -3,23 +3,23 @@ using System.Collections.Generic; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// The +2 is almost identical to the 128k from an emulation point of view - /// There are just a few small changes in the ROMs - /// - public partial class ZX128Plus2 : ZX128 - { - #region Construction + /// + /// The +2 is almost identical to the 128k from an emulation point of view + /// There are just a few small changes in the ROMs + /// + public partial class ZX128Plus2 : ZX128 + { + #region Construction - /// - /// Main constructor - /// - public ZX128Plus2(ZXSpectrum spectrum, Z80A cpu, ZXSpectrum.BorderType borderType, List files, List joysticks) - : base(spectrum, cpu, borderType, files, joysticks) - { - - } + /// + /// Main constructor + /// + public ZX128Plus2(ZXSpectrum spectrum, Z80A cpu, ZXSpectrum.BorderType borderType, List files, List joysticks) + : base(spectrum, cpu, borderType, files, joysticks) + { - #endregion - } + } + + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.Screen.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.Screen.cs index 7d9deeed41..ecbbccbb04 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.Screen.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.Screen.cs @@ -1,50 +1,50 @@  namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// +2A/+3 ULA - /// - class Screen128Plus2a : ULA - { - #region Construction + /// + /// +2A/+3 ULA + /// + class Screen128Plus2a : ULA + { + #region Construction - public Screen128Plus2a(SpectrumBase machine) + public Screen128Plus2a(SpectrumBase machine) : base(machine) - { - // interrupt - InterruptStartTime = 0; - InterruptLength = 32; - // offsets - RenderTableOffset = 58; - ContentionOffset = 9; - FloatingBusOffset = 0; - // timing - ClockSpeed = 3546900; - FrameCycleLength = 70908; - ScanlineTime = 228; - BorderLeftTime = 24; - BorderRightTime = 24; - FirstPaperLine = 63; - FirstPaperTState = 64; - // screen layout - Border4T = true; - Border4TStage = 2; - ScreenWidth = 256; - ScreenHeight = 192; - BorderTopHeight = 48;// 55; - BorderBottomHeight = 48; // 56; - BorderLeftWidth = 48; - BorderRightWidth = 48; - ScanLineWidth = BorderLeftWidth + ScreenWidth + BorderRightWidth; + { + // interrupt + InterruptStartTime = 0; + InterruptLength = 32; + // offsets + RenderTableOffset = 58; + ContentionOffset = 9; + FloatingBusOffset = 0; + // timing + ClockSpeed = 3546900; + FrameCycleLength = 70908; + ScanlineTime = 228; + BorderLeftTime = 24; + BorderRightTime = 24; + FirstPaperLine = 63; + FirstPaperTState = 64; + // screen layout + Border4T = true; + Border4TStage = 2; + ScreenWidth = 256; + ScreenHeight = 192; + BorderTopHeight = 48;// 55; + BorderBottomHeight = 48; // 56; + BorderLeftWidth = 48; + BorderRightWidth = 48; + ScanLineWidth = BorderLeftWidth + ScreenWidth + BorderRightWidth; - RenderingTable = new RenderTable(this, - MachineType.ZXSpectrum128Plus2a); + RenderingTable = new RenderTable(this, + MachineType.ZXSpectrum128Plus2a); - SetupScreenSize(); + SetupScreenSize(); - GenerateP3PortTable(); - } + GenerateP3PortTable(); + } - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.cs index a05903b7e7..69140ea87d 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus2a/ZX128Plus2a.cs @@ -4,48 +4,48 @@ using BizHawk.Emulation.Cores.Sound; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// +2A Constructor - /// - public partial class ZX128Plus2a : SpectrumBase - { - #region Construction + /// + /// +2A Constructor + /// + public partial class ZX128Plus2a : SpectrumBase + { + #region Construction - /// - /// Main constructor - /// - public ZX128Plus2a(ZXSpectrum spectrum, Z80A cpu, ZXSpectrum.BorderType borderType, List files, List joysticks) - { - Spectrum = spectrum; - CPU = cpu; + /// + /// Main constructor + /// + public ZX128Plus2a(ZXSpectrum spectrum, Z80A cpu, ZXSpectrum.BorderType borderType, List files, List joysticks) + { + Spectrum = spectrum; + CPU = cpu; - CPUMon = new CPUMonitor(this); - CPUMon.machineType = MachineType.ZXSpectrum128Plus2a; + CPUMon = new CPUMonitor(this); + CPUMon.machineType = MachineType.ZXSpectrum128Plus2a; - ROMPaged = 0; - SHADOWPaged = false; - RAMPaged = 0; - PagingDisabled = false; - - ULADevice = new Screen128Plus2a(this); + ROMPaged = 0; + SHADOWPaged = false; + RAMPaged = 0; + PagingDisabled = false; + + ULADevice = new Screen128Plus2a(this); BuzzerDevice = new OneBitBeeper(44100, ULADevice.FrameLength, 50, "SystemBuzzer"); TapeBuzzer = new OneBitBeeper(44100, ULADevice.FrameLength, 50, "TapeBuzzer"); AYDevice = new AY38912(this); - AYDevice.Init(44100, ULADevice.FrameLength); + AYDevice.Init(44100, ULADevice.FrameLength); - KeyboardDevice = new StandardKeyboard(this); + KeyboardDevice = new StandardKeyboard(this); - InitJoysticks(joysticks); + InitJoysticks(joysticks); - TapeDevice = new DatacorderDevice(spectrum.SyncSettings.AutoLoadTape); - TapeDevice.Init(this); + TapeDevice = new DatacorderDevice(spectrum.SyncSettings.AutoLoadTape); + TapeDevice.Init(this); - InitializeMedia(files); - } + InitializeMedia(files); + } - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.cs index 0b4a0a4610..9b372a0a35 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.cs @@ -4,51 +4,51 @@ using BizHawk.Emulation.Cores.Sound; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// +3 Constructor - /// - public partial class ZX128Plus3 : SpectrumBase - { - #region Construction + /// + /// +3 Constructor + /// + public partial class ZX128Plus3 : SpectrumBase + { + #region Construction - /// - /// Main constructor - /// - public ZX128Plus3(ZXSpectrum spectrum, Z80A cpu, ZXSpectrum.BorderType borderType, List files, List joysticks) - { - Spectrum = spectrum; - CPU = cpu; + /// + /// Main constructor + /// + public ZX128Plus3(ZXSpectrum spectrum, Z80A cpu, ZXSpectrum.BorderType borderType, List files, List joysticks) + { + Spectrum = spectrum; + CPU = cpu; - CPUMon = new CPUMonitor(this); - CPUMon.machineType = MachineType.ZXSpectrum128Plus3; + CPUMon = new CPUMonitor(this); + CPUMon.machineType = MachineType.ZXSpectrum128Plus3; - ROMPaged = 0; - SHADOWPaged = false; - RAMPaged = 0; - PagingDisabled = false; - - ULADevice = new Screen128Plus2a(this); + ROMPaged = 0; + SHADOWPaged = false; + RAMPaged = 0; + PagingDisabled = false; + + ULADevice = new Screen128Plus2a(this); BuzzerDevice = new OneBitBeeper(44100, ULADevice.FrameLength, 50, "SystemBuzzer"); TapeBuzzer = new OneBitBeeper(44100, ULADevice.FrameLength, 50, "TapeBuzzer"); AYDevice = new AY38912(this); - AYDevice.Init(44100, ULADevice.FrameLength); + AYDevice.Init(44100, ULADevice.FrameLength); - KeyboardDevice = new StandardKeyboard(this); + KeyboardDevice = new StandardKeyboard(this); - InitJoysticks(joysticks); + InitJoysticks(joysticks); - TapeDevice = new DatacorderDevice(spectrum.SyncSettings.AutoLoadTape); - TapeDevice.Init(this); + TapeDevice = new DatacorderDevice(spectrum.SyncSettings.AutoLoadTape); + TapeDevice.Init(this); - UPDDiskDevice = new NECUPD765(); - UPDDiskDevice.Init(this); + UPDDiskDevice = new NECUPD765(); + UPDDiskDevice.Init(this); - InitializeMedia(files); - } + InitializeMedia(files); + } - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum16K/ZX16.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum16K/ZX16.cs index ef4af265f2..410fa1843c 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum16K/ZX16.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum16K/ZX16.cs @@ -3,27 +3,27 @@ using System.Collections.Generic; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// 16K is idential to 48K, just without the top 32KB of RAM - /// - public class ZX16 : ZX48 - { - #region Construction + /// + /// 16K is idential to 48K, just without the top 32KB of RAM + /// + public class ZX16 : ZX48 + { + #region Construction - /// - /// Main constructor - /// - public ZX16(ZXSpectrum spectrum, Z80A cpu, ZXSpectrum.BorderType borderType, List files, List joysticks) - : base(spectrum, cpu, borderType, files, joysticks) - { + /// + /// Main constructor + /// + public ZX16(ZXSpectrum spectrum, Z80A cpu, ZXSpectrum.BorderType borderType, List files, List joysticks) + : base(spectrum, cpu, borderType, files, joysticks) + { - } + } - #endregion + #endregion - #region Memory + #region Memory - /* 48K Spectrum has NO memory paging + /* 48K Spectrum has NO memory paging * * | Bank 0 | @@ -38,101 +38,101 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum 0x0000 +--------+ */ - /// - /// Simulates reading from the bus (no contention) - /// Paging should be handled here - /// - public override byte ReadBus(ushort addr) - { - int divisor = addr / 0x4000; - var index = addr % 0x4000; + /// + /// Simulates reading from the bus (no contention) + /// Paging should be handled here + /// + public override byte ReadBus(ushort addr) + { + int divisor = addr / 0x4000; + var index = addr % 0x4000; - // paging logic goes here + // paging logic goes here - switch (divisor) - { - case 0: - TestForTapeTraps(addr % 0x4000); - return ROM0[index]; - case 1: return RAM0[index]; - default: - // memory does not exist - return 0xff; - } - } + switch (divisor) + { + case 0: + TestForTapeTraps(addr % 0x4000); + return ROM0[index]; + case 1: return RAM0[index]; + default: + // memory does not exist + return 0xff; + } + } - /// - /// Simulates writing to the bus (no contention) - /// Paging should be handled here - /// - public override void WriteBus(ushort addr, byte value) - { - int divisor = addr / 0x4000; - var index = addr % 0x4000; + /// + /// Simulates writing to the bus (no contention) + /// Paging should be handled here + /// + public override void WriteBus(ushort addr, byte value) + { + int divisor = addr / 0x4000; + var index = addr % 0x4000; - // paging logic goes here + // paging logic goes here - switch (divisor) - { - case 0: - // cannot write to ROM - break; - case 1: - //ULADevice.RenderScreen((int)CurrentFrameCycle); - RAM0[index] = value; - break; - } - } + switch (divisor) + { + case 0: + // cannot write to ROM + break; + case 1: + //ULADevice.RenderScreen((int)CurrentFrameCycle); + RAM0[index] = value; + break; + } + } - /// - /// Reads a byte of data from a specified memory address - /// (with memory contention if appropriate) - /// - public override byte ReadMemory(ushort addr) - { - var data = ReadBus(addr); - return data; - } + /// + /// Reads a byte of data from a specified memory address + /// (with memory contention if appropriate) + /// + public override byte ReadMemory(ushort addr) + { + var data = ReadBus(addr); + return data; + } - /// - /// Returns the ROM/RAM enum that relates to this particular memory read operation - /// - public override ZXSpectrum.CDLResult ReadCDL(ushort addr) - { - var res = new ZXSpectrum.CDLResult(); + /// + /// Returns the ROM/RAM enum that relates to this particular memory read operation + /// + public override ZXSpectrum.CDLResult ReadCDL(ushort addr) + { + var res = new ZXSpectrum.CDLResult(); - int divisor = addr / 0x4000; - res.Address = addr % 0x4000; + int divisor = addr / 0x4000; + res.Address = addr % 0x4000; - // paging logic goes here - switch (divisor) - { - case 0: res.Type = ZXSpectrum.CDLType.ROM0; break; - case 1: res.Type = ZXSpectrum.CDLType.RAM0; break; - } + // paging logic goes here + switch (divisor) + { + case 0: res.Type = ZXSpectrum.CDLType.ROM0; break; + case 1: res.Type = ZXSpectrum.CDLType.RAM0; break; + } - return res; - } + return res; + } - /// - /// Writes a byte of data to a specified memory address - /// (with memory contention if appropriate) - /// - public override void WriteMemory(ushort addr, byte value) - { - WriteBus(addr, value); - } - - /// - /// Sets up the ROM - /// - public override void InitROM(RomData romData) - { - RomData = romData; - // for 16/48k machines only ROM0 is used (no paging) - RomData.RomBytes?.CopyTo(ROM0, 0); - } + /// + /// Writes a byte of data to a specified memory address + /// (with memory contention if appropriate) + /// + public override void WriteMemory(ushort addr, byte value) + { + WriteBus(addr, value); + } - #endregion - } + /// + /// Sets up the ROM + /// + public override void InitROM(RomData romData) + { + RomData = romData; + // for 16/48k machines only ROM0 is used (no paging) + RomData.RomBytes?.CopyTo(ROM0, 0); + } + + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.Screen.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.Screen.cs index 9f01e83c04..3507b6ce10 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.Screen.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.Screen.cs @@ -1,48 +1,48 @@  namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// 48K ULA - /// - class Screen48 : ULA - { - #region Construction + /// + /// 48K ULA + /// + class Screen48 : ULA + { + #region Construction public Screen48(SpectrumBase machine) : base(machine) - { - // interrupt - InterruptStartTime = 3; - InterruptLength = 32; - // offsets - RenderTableOffset = 56; - ContentionOffset = 6; - FloatingBusOffset = 1; - // timing - ClockSpeed = 3500000; - FrameCycleLength = 69888; - ScanlineTime = 224; - BorderLeftTime = 24; - BorderRightTime = 24; - FirstPaperLine = 64; - FirstPaperTState = 64; - // screen layout - Border4T = true; - Border4TStage = 0; - ScreenWidth = 256; - ScreenHeight = 192; - BorderTopHeight = 48;// 55;// 48; - BorderBottomHeight = 48;// 56; - BorderLeftWidth = 48; - BorderRightWidth = 48; - ScanLineWidth = BorderLeftWidth + ScreenWidth + BorderRightWidth; + { + // interrupt + InterruptStartTime = 3; + InterruptLength = 32; + // offsets + RenderTableOffset = 56; + ContentionOffset = 6; + FloatingBusOffset = 1; + // timing + ClockSpeed = 3500000; + FrameCycleLength = 69888; + ScanlineTime = 224; + BorderLeftTime = 24; + BorderRightTime = 24; + FirstPaperLine = 64; + FirstPaperTState = 64; + // screen layout + Border4T = true; + Border4TStage = 0; + ScreenWidth = 256; + ScreenHeight = 192; + BorderTopHeight = 48;// 55;// 48; + BorderBottomHeight = 48;// 56; + BorderLeftWidth = 48; + BorderRightWidth = 48; + ScanLineWidth = BorderLeftWidth + ScreenWidth + BorderRightWidth; - RenderingTable = new RenderTable(this, - MachineType.ZXSpectrum48); + RenderingTable = new RenderTable(this, + MachineType.ZXSpectrum48); - SetupScreenSize(); - } + SetupScreenSize(); + } - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.cs index 5c235eb47d..2a793f0a47 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.cs @@ -5,23 +5,23 @@ using BizHawk.Emulation.Cores.Sound; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// 48K construction - /// - public partial class ZX48 : SpectrumBase - { - #region Construction + /// + /// 48K construction + /// + public partial class ZX48 : SpectrumBase + { + #region Construction - /// - /// Main constructor - /// - public ZX48(ZXSpectrum spectrum, Z80A cpu, ZXSpectrum.BorderType borderType, List files, List joysticks) - { - Spectrum = spectrum; - CPU = cpu; + /// + /// Main constructor + /// + public ZX48(ZXSpectrum spectrum, Z80A cpu, ZXSpectrum.BorderType borderType, List files, List joysticks) + { + Spectrum = spectrum; + CPU = cpu; - CPUMon = new CPUMonitor(this); - ULADevice = new Screen48(this); + CPUMon = new CPUMonitor(this); + ULADevice = new Screen48(this); BuzzerDevice = new OneBitBeeper(44100, ULADevice.FrameLength, 50, "SystemBuzzer"); @@ -29,29 +29,29 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum KeyboardDevice = new StandardKeyboard(this); - InitJoysticks(joysticks); + InitJoysticks(joysticks); - TapeDevice = new DatacorderDevice(spectrum.SyncSettings.AutoLoadTape); - TapeDevice.Init(this); + TapeDevice = new DatacorderDevice(spectrum.SyncSettings.AutoLoadTape); + TapeDevice.Init(this); - InitializeMedia(files); - } + InitializeMedia(files); + } - #endregion + #endregion - #region Reset + #region Reset - public override void HardReset() - { - base.HardReset(); + public override void HardReset() + { + base.HardReset(); - Random rn = new Random(); - for (int d = 0; d < 6912; d++) - { - RAM0[d] = (byte)rn.Next(255); - } - } - - #endregion - } + Random rn = new Random(); + for (int d = 0; d < 6912; d++) + { + RAM0[d] = (byte)rn.Next(255); + } + } + + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/CPCFormat/CPCExtendedFloppyDisk.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/CPCFormat/CPCExtendedFloppyDisk.cs index c0647b76e6..b6f1a6b9a2 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/CPCFormat/CPCExtendedFloppyDisk.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/CPCFormat/CPCExtendedFloppyDisk.cs @@ -5,260 +5,260 @@ using System.Collections.Generic; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Logical object representing a standard +3 disk image - /// - public class CPCExtendedFloppyDisk : FloppyDisk - { - /// - /// The format type - /// - public override DiskType DiskFormatType => DiskType.CPCExtended; + /// + /// Logical object representing a standard +3 disk image + /// + public class CPCExtendedFloppyDisk : FloppyDisk + { + /// + /// The format type + /// + public override DiskType DiskFormatType => DiskType.CPCExtended; - /// - /// Attempts to parse incoming disk data - /// - /// - /// TRUE: disk parsed - /// FALSE: unable to parse disk - /// - public override bool ParseDisk(byte[] data) - { - // look for standard magic string - string ident = Encoding.ASCII.GetString(data, 0, 16); + /// + /// Attempts to parse incoming disk data + /// + /// + /// TRUE: disk parsed + /// FALSE: unable to parse disk + /// + public override bool ParseDisk(byte[] data) + { + // look for standard magic string + string ident = Encoding.ASCII.GetString(data, 0, 16); - if (!ident.ToUpper().Contains("EXTENDED CPC DSK")) - { - // incorrect format - return false; - } + if (!ident.ToUpper().Contains("EXTENDED CPC DSK")) + { + // incorrect format + return false; + } - // read the disk information block - DiskHeader.DiskIdent = ident; - DiskHeader.DiskCreatorString = Encoding.ASCII.GetString(data, 0x22, 14); - DiskHeader.NumberOfTracks = data[0x30]; - DiskHeader.NumberOfSides = data[0x31]; - DiskHeader.TrackSizes = new int[DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides]; - DiskTracks = new Track[DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides]; - DiskData = data; - int pos = 0x34; + // read the disk information block + DiskHeader.DiskIdent = ident; + DiskHeader.DiskCreatorString = Encoding.ASCII.GetString(data, 0x22, 14); + DiskHeader.NumberOfTracks = data[0x30]; + DiskHeader.NumberOfSides = data[0x31]; + DiskHeader.TrackSizes = new int[DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides]; + DiskTracks = new Track[DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides]; + DiskData = data; + int pos = 0x34; - if (DiskHeader.NumberOfSides > 1) - { - StringBuilder sbm = new StringBuilder(); - sbm.AppendLine(); - sbm.AppendLine(); - sbm.AppendLine("The detected disk image contains multiple sides."); - sbm.AppendLine("This is NOT currently supported in ZXHawk."); - sbm.AppendLine("Please find an alternate image/dump where each side has been saved as a separate *.dsk image (and use the mutli-disk bundler tool to load into Bizhawk)."); - throw new System.NotImplementedException(sbm.ToString()); - } + if (DiskHeader.NumberOfSides > 1) + { + StringBuilder sbm = new StringBuilder(); + sbm.AppendLine(); + sbm.AppendLine(); + sbm.AppendLine("The detected disk image contains multiple sides."); + sbm.AppendLine("This is NOT currently supported in ZXHawk."); + sbm.AppendLine("Please find an alternate image/dump where each side has been saved as a separate *.dsk image (and use the mutli-disk bundler tool to load into Bizhawk)."); + throw new System.NotImplementedException(sbm.ToString()); + } - if (DiskHeader.NumberOfTracks > 42) - { - StringBuilder sbm = new StringBuilder(); - sbm.AppendLine(); - sbm.AppendLine(); - sbm.AppendLine("The detected disk is an " + DiskHeader.NumberOfTracks + " track disk image."); - sbm.AppendLine("This is currently incompatible with the emulated +3 disk drive (42 tracks)."); - sbm.AppendLine("Likely the disk image is an 80 track betadisk or opus image, the drives and controllers for which are not currently emulated in ZXHawk"); - throw new System.NotImplementedException(sbm.ToString()); - } + if (DiskHeader.NumberOfTracks > 42) + { + StringBuilder sbm = new StringBuilder(); + sbm.AppendLine(); + sbm.AppendLine(); + sbm.AppendLine("The detected disk is an " + DiskHeader.NumberOfTracks + " track disk image."); + sbm.AppendLine("This is currently incompatible with the emulated +3 disk drive (42 tracks)."); + sbm.AppendLine("Likely the disk image is an 80 track betadisk or opus image, the drives and controllers for which are not currently emulated in ZXHawk"); + throw new System.NotImplementedException(sbm.ToString()); + } - for (int i = 0; i < DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; i++) - { - DiskHeader.TrackSizes[i] = data[pos++] * 256; - } + for (int i = 0; i < DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; i++) + { + DiskHeader.TrackSizes[i] = data[pos++] * 256; + } - // move to first track information block - pos = 0x100; + // move to first track information block + pos = 0x100; - // parse each track - for (int i = 0; i < DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; i++) - { - // check for unformatted track - if (DiskHeader.TrackSizes[i] == 0) - { - DiskTracks[i] = new Track(); - DiskTracks[i].Sectors = new Sector[0]; - continue; - } + // parse each track + for (int i = 0; i < DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; i++) + { + // check for unformatted track + if (DiskHeader.TrackSizes[i] == 0) + { + DiskTracks[i] = new Track(); + DiskTracks[i].Sectors = new Sector[0]; + continue; + } - int p = pos; - DiskTracks[i] = new Track(); + int p = pos; + DiskTracks[i] = new Track(); - // track info block - DiskTracks[i].TrackIdent = Encoding.ASCII.GetString(data, p, 12); - p += 16; - DiskTracks[i].TrackNumber = data[p++]; - DiskTracks[i].SideNumber = data[p++]; - DiskTracks[i].DataRate = data[p++]; - DiskTracks[i].RecordingMode = data[p++]; - DiskTracks[i].SectorSize = data[p++]; - DiskTracks[i].NumberOfSectors = data[p++]; - DiskTracks[i].GAP3Length = data[p++]; - DiskTracks[i].FillerByte = data[p++]; + // track info block + DiskTracks[i].TrackIdent = Encoding.ASCII.GetString(data, p, 12); + p += 16; + DiskTracks[i].TrackNumber = data[p++]; + DiskTracks[i].SideNumber = data[p++]; + DiskTracks[i].DataRate = data[p++]; + DiskTracks[i].RecordingMode = data[p++]; + DiskTracks[i].SectorSize = data[p++]; + DiskTracks[i].NumberOfSectors = data[p++]; + DiskTracks[i].GAP3Length = data[p++]; + DiskTracks[i].FillerByte = data[p++]; - int dpos = pos + 0x100; + int dpos = pos + 0x100; - // sector info list - DiskTracks[i].Sectors = new Sector[DiskTracks[i].NumberOfSectors]; - for (int s = 0; s < DiskTracks[i].NumberOfSectors; s++) - { - DiskTracks[i].Sectors[s] = new Sector(); + // sector info list + DiskTracks[i].Sectors = new Sector[DiskTracks[i].NumberOfSectors]; + for (int s = 0; s < DiskTracks[i].NumberOfSectors; s++) + { + DiskTracks[i].Sectors[s] = new Sector(); - DiskTracks[i].Sectors[s].TrackNumber = data[p++]; - DiskTracks[i].Sectors[s].SideNumber = data[p++]; - DiskTracks[i].Sectors[s].SectorID = data[p++]; - DiskTracks[i].Sectors[s].SectorSize = data[p++]; - DiskTracks[i].Sectors[s].Status1 = data[p++]; - DiskTracks[i].Sectors[s].Status2 = data[p++]; - DiskTracks[i].Sectors[s].ActualDataByteLength = MediaConverter.GetWordValue(data, p); - p += 2; + DiskTracks[i].Sectors[s].TrackNumber = data[p++]; + DiskTracks[i].Sectors[s].SideNumber = data[p++]; + DiskTracks[i].Sectors[s].SectorID = data[p++]; + DiskTracks[i].Sectors[s].SectorSize = data[p++]; + DiskTracks[i].Sectors[s].Status1 = data[p++]; + DiskTracks[i].Sectors[s].Status2 = data[p++]; + DiskTracks[i].Sectors[s].ActualDataByteLength = MediaConverter.GetWordValue(data, p); + p += 2; - // sector data - begins at 0x100 offset from the start of the track info block (in this case dpos) - DiskTracks[i].Sectors[s].SectorData = new byte[DiskTracks[i].Sectors[s].ActualDataByteLength]; + // sector data - begins at 0x100 offset from the start of the track info block (in this case dpos) + DiskTracks[i].Sectors[s].SectorData = new byte[DiskTracks[i].Sectors[s].ActualDataByteLength]; - // copy the data - for (int b = 0; b < DiskTracks[i].Sectors[s].ActualDataByteLength; b++) - { - DiskTracks[i].Sectors[s].SectorData[b] = data[dpos + b]; - } + // copy the data + for (int b = 0; b < DiskTracks[i].Sectors[s].ActualDataByteLength; b++) + { + DiskTracks[i].Sectors[s].SectorData[b] = data[dpos + b]; + } - // check for multiple weak/random sectors stored - if (DiskTracks[i].Sectors[s].SectorSize <= 7) - { - // sectorsize n=8 is equivilent to n=0 - FDC will use DTL for length - int specifiedSize = 0x80 << DiskTracks[i].Sectors[s].SectorSize; + // check for multiple weak/random sectors stored + if (DiskTracks[i].Sectors[s].SectorSize <= 7) + { + // sectorsize n=8 is equivilent to n=0 - FDC will use DTL for length + int specifiedSize = 0x80 << DiskTracks[i].Sectors[s].SectorSize; - if (specifiedSize < DiskTracks[i].Sectors[s].ActualDataByteLength) - { - // more data stored than sectorsize defines - // check for multiple weak/random copies - if (DiskTracks[i].Sectors[s].ActualDataByteLength % specifiedSize != 0) - { - DiskTracks[i].Sectors[s].ContainsMultipleWeakSectors = true; - } - } - } + if (specifiedSize < DiskTracks[i].Sectors[s].ActualDataByteLength) + { + // more data stored than sectorsize defines + // check for multiple weak/random copies + if (DiskTracks[i].Sectors[s].ActualDataByteLength % specifiedSize != 0) + { + DiskTracks[i].Sectors[s].ContainsMultipleWeakSectors = true; + } + } + } - // move dpos to the next sector data postion - dpos += DiskTracks[i].Sectors[s].ActualDataByteLength; - } + // move dpos to the next sector data postion + dpos += DiskTracks[i].Sectors[s].ActualDataByteLength; + } - // move to the next track info block - pos += DiskHeader.TrackSizes[i]; - } + // move to the next track info block + pos += DiskHeader.TrackSizes[i]; + } - // run protection scheme detector - ParseProtection(); + // run protection scheme detector + ParseProtection(); - return true; - } + return true; + } - /// - /// Takes a double-sided disk byte array and converts into 2 single-sided arrays - /// - public static bool SplitDoubleSided(byte[] data, List results) - { - // look for standard magic string - string ident = Encoding.ASCII.GetString(data, 0, 16); - if (!ident.ToUpper().Contains("EXTENDED CPC DSK")) - { - // incorrect format - return false; - } + /// + /// Takes a double-sided disk byte array and converts into 2 single-sided arrays + /// + public static bool SplitDoubleSided(byte[] data, List results) + { + // look for standard magic string + string ident = Encoding.ASCII.GetString(data, 0, 16); + if (!ident.ToUpper().Contains("EXTENDED CPC DSK")) + { + // incorrect format + return false; + } - byte[] S0 = new byte[data.Length]; - byte[] S1 = new byte[data.Length]; + byte[] S0 = new byte[data.Length]; + byte[] S1 = new byte[data.Length]; - // disk info block - Array.Copy(data, 0, S0, 0, 0x100); - Array.Copy(data, 0, S1, 0, 0x100); - // change side number - S0[0x31] = 1; - S1[0x31] = 1; + // disk info block + Array.Copy(data, 0, S0, 0, 0x100); + Array.Copy(data, 0, S1, 0, 0x100); + // change side number + S0[0x31] = 1; + S1[0x31] = 1; - // extended format can have different track sizes - int[] trkSizes = new int[data[0x30] * data[0x31]]; + // extended format can have different track sizes + int[] trkSizes = new int[data[0x30] * data[0x31]]; - int pos = 0x34; - for (int i = 0; i < data[0x30] * data[0x31]; i++) - { - trkSizes[i] = data[pos] * 256; - // clear destination trk sizes (will be added later) - S0[pos] = 0; - S1[pos] = 0; - pos++; - } + int pos = 0x34; + for (int i = 0; i < data[0x30] * data[0x31]; i++) + { + trkSizes[i] = data[pos] * 256; + // clear destination trk sizes (will be added later) + S0[pos] = 0; + S1[pos] = 0; + pos++; + } - // start at track info blocks - int mPos = 0x100; - int s0Pos = 0x100; - int s0tCount = 0; - int s1tCount = 0; - int s1Pos = 0x100; - int tCount = 0; + // start at track info blocks + int mPos = 0x100; + int s0Pos = 0x100; + int s0tCount = 0; + int s1tCount = 0; + int s1Pos = 0x100; + int tCount = 0; - while (tCount < data[0x30] * data[0x31]) - { - // which side is this? - var side = data[mPos + 0x11]; - if (side == 0) - { - // side 1 - Array.Copy(data, mPos, S0, s0Pos, trkSizes[tCount]); - s0Pos += trkSizes[tCount]; - // trk size table - S0[0x34 + s0tCount++] = (byte)(trkSizes[tCount] / 256); - } - else if (side == 1) - { - // side 2 - Array.Copy(data, mPos, S1, s1Pos, trkSizes[tCount]); - s1Pos += trkSizes[tCount]; - // trk size table - S1[0x34 + s1tCount++] = (byte)(trkSizes[tCount] / 256); - } + while (tCount < data[0x30] * data[0x31]) + { + // which side is this? + var side = data[mPos + 0x11]; + if (side == 0) + { + // side 1 + Array.Copy(data, mPos, S0, s0Pos, trkSizes[tCount]); + s0Pos += trkSizes[tCount]; + // trk size table + S0[0x34 + s0tCount++] = (byte)(trkSizes[tCount] / 256); + } + else if (side == 1) + { + // side 2 + Array.Copy(data, mPos, S1, s1Pos, trkSizes[tCount]); + s1Pos += trkSizes[tCount]; + // trk size table + S1[0x34 + s1tCount++] = (byte)(trkSizes[tCount] / 256); + } - mPos += trkSizes[tCount++]; - } + mPos += trkSizes[tCount++]; + } - byte[] s0final = new byte[s0Pos]; - byte[] s1final = new byte[s1Pos]; - Array.Copy(S0, 0, s0final, 0, s0Pos); - Array.Copy(S1, 0, s1final, 0, s1Pos); + byte[] s0final = new byte[s0Pos]; + byte[] s1final = new byte[s1Pos]; + Array.Copy(S0, 0, s0final, 0, s0Pos); + Array.Copy(S1, 0, s1final, 0, s1Pos); - results.Add(s0final); - results.Add(s1final); + results.Add(s0final); + results.Add(s1final); - return true; - } + return true; + } - /// - /// State serlialization - /// - public override void SyncState(Serializer ser) - { - ser.BeginSection("Plus3FloppyDisk"); + /// + /// State serlialization + /// + public override void SyncState(Serializer ser) + { + ser.BeginSection("Plus3FloppyDisk"); - ser.Sync(nameof(CylinderCount), ref CylinderCount); - ser.Sync(nameof(SideCount), ref SideCount); - ser.Sync(nameof(BytesPerTrack), ref BytesPerTrack); - ser.Sync(nameof(WriteProtected), ref WriteProtected); - ser.SyncEnum(nameof(Protection), ref Protection); + ser.Sync(nameof(CylinderCount), ref CylinderCount); + ser.Sync(nameof(SideCount), ref SideCount); + ser.Sync(nameof(BytesPerTrack), ref BytesPerTrack); + ser.Sync(nameof(WriteProtected), ref WriteProtected); + ser.SyncEnum(nameof(Protection), ref Protection); - ser.Sync(nameof(DirtyData), ref DirtyData); - if (DirtyData) - { + ser.Sync(nameof(DirtyData), ref DirtyData); + if (DirtyData) + { - } + } - // sync deterministic track and sector counters - ser.Sync(nameof( _randomCounter), ref _randomCounter); - RandomCounter = _randomCounter; + // sync deterministic track and sector counters + ser.Sync(nameof(_randomCounter), ref _randomCounter); + RandomCounter = _randomCounter; - ser.EndSection(); - } - } + ser.EndSection(); + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/CPCFormat/CPCFloppyDisk.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/CPCFormat/CPCFloppyDisk.cs index 3851019be3..86ad8c8428 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/CPCFormat/CPCFloppyDisk.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/CPCFormat/CPCFloppyDisk.cs @@ -5,250 +5,250 @@ using System.Collections.Generic; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Logical object representing a standard +3 disk image - /// - public class CPCFloppyDisk : FloppyDisk - { - /// - /// The format type - /// - public override DiskType DiskFormatType => DiskType.CPC; + /// + /// Logical object representing a standard +3 disk image + /// + public class CPCFloppyDisk : FloppyDisk + { + /// + /// The format type + /// + public override DiskType DiskFormatType => DiskType.CPC; - /// - /// Attempts to parse incoming disk data - /// - /// - /// TRUE: disk parsed - /// FALSE: unable to parse disk - /// - public override bool ParseDisk(byte[] data) - { - // look for standard magic string - string ident = Encoding.ASCII.GetString(data, 0, 16); + /// + /// Attempts to parse incoming disk data + /// + /// + /// TRUE: disk parsed + /// FALSE: unable to parse disk + /// + public override bool ParseDisk(byte[] data) + { + // look for standard magic string + string ident = Encoding.ASCII.GetString(data, 0, 16); - if (!ident.ToUpper().Contains("MV - CPC")) - { - // incorrect format - return false; - } + if (!ident.ToUpper().Contains("MV - CPC")) + { + // incorrect format + return false; + } - // read the disk information block - DiskHeader.DiskIdent = ident; - DiskHeader.DiskCreatorString = Encoding.ASCII.GetString(data, 0x22, 14); - DiskHeader.NumberOfTracks = data[0x30]; - DiskHeader.NumberOfSides = data[0x31]; - DiskHeader.TrackSizes = new int[DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides]; - DiskTracks = new Track[DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides]; - DiskData = data; - int pos = 0x32; + // read the disk information block + DiskHeader.DiskIdent = ident; + DiskHeader.DiskCreatorString = Encoding.ASCII.GetString(data, 0x22, 14); + DiskHeader.NumberOfTracks = data[0x30]; + DiskHeader.NumberOfSides = data[0x31]; + DiskHeader.TrackSizes = new int[DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides]; + DiskTracks = new Track[DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides]; + DiskData = data; + int pos = 0x32; - if (DiskHeader.NumberOfSides > 1) - { - StringBuilder sbm = new StringBuilder(); - sbm.AppendLine(); - sbm.AppendLine(); - sbm.AppendLine("The detected disk image contains multiple sides."); - sbm.AppendLine("This is NOT currently supported in ZXHawk."); - sbm.AppendLine("Please find an alternate image/dump where each side has been saved as a separate *.dsk image (and use the mutli-disk bundler tool to load into Bizhawk)."); - throw new System.NotImplementedException(sbm.ToString()); - } + if (DiskHeader.NumberOfSides > 1) + { + StringBuilder sbm = new StringBuilder(); + sbm.AppendLine(); + sbm.AppendLine(); + sbm.AppendLine("The detected disk image contains multiple sides."); + sbm.AppendLine("This is NOT currently supported in ZXHawk."); + sbm.AppendLine("Please find an alternate image/dump where each side has been saved as a separate *.dsk image (and use the mutli-disk bundler tool to load into Bizhawk)."); + throw new System.NotImplementedException(sbm.ToString()); + } - if (DiskHeader.NumberOfTracks > 42) - { - StringBuilder sbm = new StringBuilder(); - sbm.AppendLine(); - sbm.AppendLine(); - sbm.AppendLine("The detected disk is an " + DiskHeader.NumberOfTracks + " track disk image."); - sbm.AppendLine("This is currently incompatible with the emulated +3 disk drive (42 tracks)."); - sbm.AppendLine("Likely the disk image is an 80 track betadisk or opus image, the drives and controllers for which are not currently emulated in ZXHawk"); - throw new System.NotImplementedException(sbm.ToString()); - } + if (DiskHeader.NumberOfTracks > 42) + { + StringBuilder sbm = new StringBuilder(); + sbm.AppendLine(); + sbm.AppendLine(); + sbm.AppendLine("The detected disk is an " + DiskHeader.NumberOfTracks + " track disk image."); + sbm.AppendLine("This is currently incompatible with the emulated +3 disk drive (42 tracks)."); + sbm.AppendLine("Likely the disk image is an 80 track betadisk or opus image, the drives and controllers for which are not currently emulated in ZXHawk"); + throw new System.NotImplementedException(sbm.ToString()); + } - // standard CPC format all track sizes are the same in the image - for (int i = 0; i < DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; i++) - { - DiskHeader.TrackSizes[i] = MediaConverter.GetWordValue(data, pos); - } + // standard CPC format all track sizes are the same in the image + for (int i = 0; i < DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; i++) + { + DiskHeader.TrackSizes[i] = MediaConverter.GetWordValue(data, pos); + } - // move to first track information block - pos = 0x100; + // move to first track information block + pos = 0x100; - // parse each track - for (int i = 0; i < DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; i++) - { - // check for unformatted track - if (DiskHeader.TrackSizes[i] == 0) - { - DiskTracks[i] = new Track(); - DiskTracks[i].Sectors = new Sector[0]; - continue; - } + // parse each track + for (int i = 0; i < DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; i++) + { + // check for unformatted track + if (DiskHeader.TrackSizes[i] == 0) + { + DiskTracks[i] = new Track(); + DiskTracks[i].Sectors = new Sector[0]; + continue; + } - int p = pos; - DiskTracks[i] = new Track(); + int p = pos; + DiskTracks[i] = new Track(); - // track info block - DiskTracks[i].TrackIdent = Encoding.ASCII.GetString(data, p, 12); - p += 16; - DiskTracks[i].TrackNumber = data[p++]; - DiskTracks[i].SideNumber = data[p++]; - p += 2; - DiskTracks[i].SectorSize = data[p++]; - DiskTracks[i].NumberOfSectors = data[p++]; - DiskTracks[i].GAP3Length = data[p++]; - DiskTracks[i].FillerByte = data[p++]; + // track info block + DiskTracks[i].TrackIdent = Encoding.ASCII.GetString(data, p, 12); + p += 16; + DiskTracks[i].TrackNumber = data[p++]; + DiskTracks[i].SideNumber = data[p++]; + p += 2; + DiskTracks[i].SectorSize = data[p++]; + DiskTracks[i].NumberOfSectors = data[p++]; + DiskTracks[i].GAP3Length = data[p++]; + DiskTracks[i].FillerByte = data[p++]; - int dpos = pos + 0x100; + int dpos = pos + 0x100; - // sector info list - DiskTracks[i].Sectors = new Sector[DiskTracks[i].NumberOfSectors]; - for (int s = 0; s < DiskTracks[i].NumberOfSectors; s++) - { - DiskTracks[i].Sectors[s] = new Sector(); + // sector info list + DiskTracks[i].Sectors = new Sector[DiskTracks[i].NumberOfSectors]; + for (int s = 0; s < DiskTracks[i].NumberOfSectors; s++) + { + DiskTracks[i].Sectors[s] = new Sector(); - DiskTracks[i].Sectors[s].TrackNumber = data[p++]; - DiskTracks[i].Sectors[s].SideNumber = data[p++]; - DiskTracks[i].Sectors[s].SectorID = data[p++]; - DiskTracks[i].Sectors[s].SectorSize = data[p++]; - DiskTracks[i].Sectors[s].Status1 = data[p++]; - DiskTracks[i].Sectors[s].Status2 = data[p++]; - DiskTracks[i].Sectors[s].ActualDataByteLength = MediaConverter.GetWordValue(data, p); - p += 2; + DiskTracks[i].Sectors[s].TrackNumber = data[p++]; + DiskTracks[i].Sectors[s].SideNumber = data[p++]; + DiskTracks[i].Sectors[s].SectorID = data[p++]; + DiskTracks[i].Sectors[s].SectorSize = data[p++]; + DiskTracks[i].Sectors[s].Status1 = data[p++]; + DiskTracks[i].Sectors[s].Status2 = data[p++]; + DiskTracks[i].Sectors[s].ActualDataByteLength = MediaConverter.GetWordValue(data, p); + p += 2; - // actualdatabytelength value is calculated now - if (DiskTracks[i].Sectors[s].SectorSize == 0) - { - // no sectorsize specified - DTL will be used at runtime - DiskTracks[i].Sectors[s].ActualDataByteLength = DiskHeader.TrackSizes[i]; - } - else if (DiskTracks[i].Sectors[s].SectorSize > 6) - { - // invalid - wrap around to 0 - DiskTracks[i].Sectors[s].ActualDataByteLength = DiskHeader.TrackSizes[i]; - } - else if (DiskTracks[i].Sectors[s].SectorSize == 6) - { - // only 0x1800 bytes are stored - DiskTracks[i].Sectors[s].ActualDataByteLength = 0x1800; - } - else - { - // valid sector size for this format - DiskTracks[i].Sectors[s].ActualDataByteLength = 0x80 << DiskTracks[i].Sectors[s].SectorSize; - } + // actualdatabytelength value is calculated now + if (DiskTracks[i].Sectors[s].SectorSize == 0) + { + // no sectorsize specified - DTL will be used at runtime + DiskTracks[i].Sectors[s].ActualDataByteLength = DiskHeader.TrackSizes[i]; + } + else if (DiskTracks[i].Sectors[s].SectorSize > 6) + { + // invalid - wrap around to 0 + DiskTracks[i].Sectors[s].ActualDataByteLength = DiskHeader.TrackSizes[i]; + } + else if (DiskTracks[i].Sectors[s].SectorSize == 6) + { + // only 0x1800 bytes are stored + DiskTracks[i].Sectors[s].ActualDataByteLength = 0x1800; + } + else + { + // valid sector size for this format + DiskTracks[i].Sectors[s].ActualDataByteLength = 0x80 << DiskTracks[i].Sectors[s].SectorSize; + } - // sector data - begins at 0x100 offset from the start of the track info block (in this case dpos) - DiskTracks[i].Sectors[s].SectorData = new byte[DiskTracks[i].Sectors[s].ActualDataByteLength]; + // sector data - begins at 0x100 offset from the start of the track info block (in this case dpos) + DiskTracks[i].Sectors[s].SectorData = new byte[DiskTracks[i].Sectors[s].ActualDataByteLength]; - // copy the data - for (int b = 0; b < DiskTracks[i].Sectors[s].ActualDataByteLength; b++) - { - DiskTracks[i].Sectors[s].SectorData[b] = data[dpos + b]; - } + // copy the data + for (int b = 0; b < DiskTracks[i].Sectors[s].ActualDataByteLength; b++) + { + DiskTracks[i].Sectors[s].SectorData[b] = data[dpos + b]; + } - // move dpos to the next sector data postion - dpos += DiskTracks[i].Sectors[s].ActualDataByteLength; - } + // move dpos to the next sector data postion + dpos += DiskTracks[i].Sectors[s].ActualDataByteLength; + } - // move to the next track info block - pos += DiskHeader.TrackSizes[i]; - } + // move to the next track info block + pos += DiskHeader.TrackSizes[i]; + } - // run protection scheme detector - ParseProtection(); + // run protection scheme detector + ParseProtection(); - return true; - } + return true; + } - /// - /// Takes a double-sided disk byte array and converts into 2 single-sided arrays - /// - public static bool SplitDoubleSided(byte[] data, List results) - { - // look for standard magic string - string ident = Encoding.ASCII.GetString(data, 0, 16); - if (!ident.ToUpper().Contains("MV - CPC")) - { - // incorrect format - return false; - } + /// + /// Takes a double-sided disk byte array and converts into 2 single-sided arrays + /// + public static bool SplitDoubleSided(byte[] data, List results) + { + // look for standard magic string + string ident = Encoding.ASCII.GetString(data, 0, 16); + if (!ident.ToUpper().Contains("MV - CPC")) + { + // incorrect format + return false; + } - byte[] S0 = new byte[data.Length]; - byte[] S1 = new byte[data.Length]; + byte[] S0 = new byte[data.Length]; + byte[] S1 = new byte[data.Length]; - // disk info block - Array.Copy(data, 0, S0, 0, 0x100); - Array.Copy(data, 0, S1, 0, 0x100); - // change side number - S0[0x31] = 1; - S1[0x31] = 1; + // disk info block + Array.Copy(data, 0, S0, 0, 0x100); + Array.Copy(data, 0, S1, 0, 0x100); + // change side number + S0[0x31] = 1; + S1[0x31] = 1; - var trkSize = MediaConverter.GetWordValue(data, 0x32); + var trkSize = MediaConverter.GetWordValue(data, 0x32); - // start at track info blocks - int mPos = 0x100; - int s0Pos = 0x100; - int s1Pos = 0x100; + // start at track info blocks + int mPos = 0x100; + int s0Pos = 0x100; + int s1Pos = 0x100; - var numTrks = data[0x30]; - var numSides = data[0x31]; + var numTrks = data[0x30]; + var numSides = data[0x31]; - while (mPos < trkSize * data[0x30] * data[0x31]) - { - // which side is this? - var side = data[mPos + 0x11]; - if (side == 0) - { - // side 1 - Array.Copy(data, mPos, S0, s0Pos, trkSize); - s0Pos += trkSize; - } - else if (side == 1) - { - // side 2 - Array.Copy(data, mPos, S1, s1Pos, trkSize); - s1Pos += trkSize; - } - else - { + while (mPos < trkSize * data[0x30] * data[0x31]) + { + // which side is this? + var side = data[mPos + 0x11]; + if (side == 0) + { + // side 1 + Array.Copy(data, mPos, S0, s0Pos, trkSize); + s0Pos += trkSize; + } + else if (side == 1) + { + // side 2 + Array.Copy(data, mPos, S1, s1Pos, trkSize); + s1Pos += trkSize; + } + else + { - } + } - mPos += trkSize; - } + mPos += trkSize; + } - byte[] s0final = new byte[s0Pos]; - byte[] s1final = new byte[s1Pos]; - Array.Copy(S0, 0, s0final, 0, s0Pos); - Array.Copy(S1, 0, s1final, 0, s1Pos); + byte[] s0final = new byte[s0Pos]; + byte[] s1final = new byte[s1Pos]; + Array.Copy(S0, 0, s0final, 0, s0Pos); + Array.Copy(S1, 0, s1final, 0, s1Pos); - results.Add(s0final); - results.Add(s1final); + results.Add(s0final); + results.Add(s1final); - return true; - } + return true; + } - /// - /// State serlialization - /// - public override void SyncState(Serializer ser) - { - ser.BeginSection("Plus3FloppyDisk"); + /// + /// State serlialization + /// + public override void SyncState(Serializer ser) + { + ser.BeginSection("Plus3FloppyDisk"); - ser.Sync(nameof(CylinderCount), ref CylinderCount); - ser.Sync(nameof(SideCount), ref SideCount); - ser.Sync(nameof(BytesPerTrack), ref BytesPerTrack); - ser.Sync(nameof(WriteProtected), ref WriteProtected); - ser.SyncEnum(nameof(Protection), ref Protection); + ser.Sync(nameof(CylinderCount), ref CylinderCount); + ser.Sync(nameof(SideCount), ref SideCount); + ser.Sync(nameof(BytesPerTrack), ref BytesPerTrack); + ser.Sync(nameof(WriteProtected), ref WriteProtected); + ser.SyncEnum(nameof(Protection), ref Protection); - ser.Sync(nameof(DirtyData), ref DirtyData); - if (DirtyData) - { + ser.Sync(nameof(DirtyData), ref DirtyData); + if (DirtyData) + { - } + } - ser.EndSection(); - } - } + ser.EndSection(); + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/DiskType.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/DiskType.cs index 0adbffd649..d403ec6ffa 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/DiskType.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/DiskType.cs @@ -1,34 +1,34 @@  namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// The different disk formats ZXHawk currently supports - /// - public enum DiskType - { - /// - /// Standard CPCEMU disk format (used in the built-in +3 disk drive) - /// - CPC, + /// + /// The different disk formats ZXHawk currently supports + /// + public enum DiskType + { + /// + /// Standard CPCEMU disk format (used in the built-in +3 disk drive) + /// + CPC, - /// - /// Extended CPCEMU disk format (used in the built-in +3 disk drive) - /// - CPCExtended, + /// + /// Extended CPCEMU disk format (used in the built-in +3 disk drive) + /// + CPCExtended, - /// - /// Interchangeable Preservation Format - /// - IPF, + /// + /// Interchangeable Preservation Format + /// + IPF, - /// - /// Ultra Disk Image Format (v1.0) - /// - UDI, + /// + /// Ultra Disk Image Format (v1.0) + /// + UDI, - /// - /// Ultra Disk Image Format (v1.1) - /// - UDIv1_1 - } + /// + /// Ultra Disk Image Format (v1.1) + /// + UDIv1_1 + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/FloppyDisk.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/FloppyDisk.cs index 63f709ab5b..aaac90489f 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/FloppyDisk.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/FloppyDisk.cs @@ -6,403 +6,403 @@ using System.Text; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// This abstract class defines a logical floppy disk - /// - public abstract class FloppyDisk - { - /// - /// The disk format type - /// - public abstract DiskType DiskFormatType { get; } + /// + /// This abstract class defines a logical floppy disk + /// + public abstract class FloppyDisk + { + /// + /// The disk format type + /// + public abstract DiskType DiskFormatType { get; } - /// - /// Disk information header - /// - public Header DiskHeader = new Header(); + /// + /// Disk information header + /// + public Header DiskHeader = new Header(); - /// - /// Track array - /// - public Track[] DiskTracks = null; + /// + /// Track array + /// + public Track[] DiskTracks = null; - /// - /// No. of tracks per side - /// - public int CylinderCount; - - /// - /// The number of physical sides - /// - public int SideCount; + /// + /// No. of tracks per side + /// + public int CylinderCount; - /// - /// The number of bytes per track - /// - public int BytesPerTrack; + /// + /// The number of physical sides + /// + public int SideCount; - /// - /// The write-protect tab on the disk - /// - public bool WriteProtected; + /// + /// The number of bytes per track + /// + public int BytesPerTrack; - /// - /// The detected protection scheme (if any) - /// - public ProtectionType Protection; + /// + /// The write-protect tab on the disk + /// + public bool WriteProtected; - /// - /// The actual disk image data - /// - public byte[] DiskData; + /// + /// The detected protection scheme (if any) + /// + public ProtectionType Protection; - /// - /// If TRUE then data on the disk has changed (been written to) - /// This will be used to determine whether the disk data needs to be included - /// in any SyncState operations - /// - protected bool DirtyData = false; + /// + /// The actual disk image data + /// + public byte[] DiskData; - /// - /// Used to deterministically choose a 'random' sector when dealing with weak reads - /// - public int RandomCounter - { - get { return _randomCounter; } - set - { - _randomCounter = value; + /// + /// If TRUE then data on the disk has changed (been written to) + /// This will be used to determine whether the disk data needs to be included + /// in any SyncState operations + /// + protected bool DirtyData = false; - foreach (var trk in DiskTracks) - { - foreach (var sec in trk.Sectors) - { - sec.RandSecCounter = _randomCounter; - } - } - } - } - protected int _randomCounter; + /// + /// Used to deterministically choose a 'random' sector when dealing with weak reads + /// + public int RandomCounter + { + get { return _randomCounter; } + set + { + _randomCounter = value; + + foreach (var trk in DiskTracks) + { + foreach (var sec in trk.Sectors) + { + sec.RandSecCounter = _randomCounter; + } + } + } + } + protected int _randomCounter; - /// - /// Attempts to parse incoming disk data - /// - /// - /// TRUE: disk parsed - /// FALSE: unable to parse disk - /// - public virtual bool ParseDisk(byte[] diskData) - { - // default result - // override in inheriting class - return false; - } + /// + /// Attempts to parse incoming disk data + /// + /// + /// TRUE: disk parsed + /// FALSE: unable to parse disk + /// + public virtual bool ParseDisk(byte[] diskData) + { + // default result + // override in inheriting class + return false; + } - /// - /// Examines the floppydisk data to work out what protection (if any) is present - /// If possible it will also fix the disk data for this protection - /// This should be run at the end of the ParseDisk() method - /// - public virtual void ParseProtection() - { - int[] weakArr = new int[2]; + /// + /// Examines the floppydisk data to work out what protection (if any) is present + /// If possible it will also fix the disk data for this protection + /// This should be run at the end of the ParseDisk() method + /// + public virtual void ParseProtection() + { + int[] weakArr = new int[2]; - // speedlock - if (DetectSpeedlock(ref weakArr)) - { - Protection = ProtectionType.Speedlock; + // speedlock + if (DetectSpeedlock(ref weakArr)) + { + Protection = ProtectionType.Speedlock; - Sector sec = DiskTracks[0].Sectors[1]; - if (!sec.ContainsMultipleWeakSectors) - { - byte[] origData = sec.SectorData.ToArray(); - List data = new List(); - for (int m = 0; m < 3; m++) - { - for (int i = 0; i < 512; i++) - { - // deterministic 'random' implementation - int n = origData[i] + m + 1; - if (n > 0xff) - n = n - 0xff; - else if (n < 0) - n = 0xff + n; + Sector sec = DiskTracks[0].Sectors[1]; + if (!sec.ContainsMultipleWeakSectors) + { + byte[] origData = sec.SectorData.ToArray(); + List data = new List(); + for (int m = 0; m < 3; m++) + { + for (int i = 0; i < 512; i++) + { + // deterministic 'random' implementation + int n = origData[i] + m + 1; + if (n > 0xff) + n = n - 0xff; + else if (n < 0) + n = 0xff + n; - byte nByte = (byte)n; + byte nByte = (byte)n; - if (m == 0) - { - data.Add(origData[i]); - continue; - } + if (m == 0) + { + data.Add(origData[i]); + continue; + } - if (i < weakArr[0]) - { - data.Add(origData[i]); - } - - else if (weakArr[1] > 0) - { - data.Add(nByte); - weakArr[1]--; - } - - else - { - data.Add(origData[i]); - } - } - } + if (i < weakArr[0]) + { + data.Add(origData[i]); + } - sec.SectorData = data.ToArray(); - sec.ActualDataByteLength = data.Count(); - sec.ContainsMultipleWeakSectors = true; - } - } - else if (DetectAlkatraz(ref weakArr)) - { - Protection = ProtectionType.Alkatraz; - } - else if (DetectPaulOwens(ref weakArr)) - { - Protection = ProtectionType.PaulOwens; - } - else if (DetectHexagon(ref weakArr)) - { - Protection = ProtectionType.Hexagon; - } - else if (DetectShadowOfTheBeast()) - { - Protection = ProtectionType.ShadowOfTheBeast; - } - } + else if (weakArr[1] > 0) + { + data.Add(nByte); + weakArr[1]--; + } - /// - /// Detection routine for shadow of the beast game - /// Still cannot get this to work, but at least the game is detected - /// - public bool DetectShadowOfTheBeast() - { - if (DiskTracks[0].Sectors.Length != 9) - return false; + else + { + data.Add(origData[i]); + } + } + } - var zeroSecs = DiskTracks[0].Sectors; - if (zeroSecs[0].SectorID != 65 || - zeroSecs[1].SectorID != 66 || - zeroSecs[2].SectorID != 67 || - zeroSecs[3].SectorID != 68 || - zeroSecs[4].SectorID != 69 || - zeroSecs[5].SectorID != 70 || - zeroSecs[6].SectorID != 71 || - zeroSecs[7].SectorID != 72 || - zeroSecs[8].SectorID != 73) - return false; + sec.SectorData = data.ToArray(); + sec.ActualDataByteLength = data.Count(); + sec.ContainsMultipleWeakSectors = true; + } + } + else if (DetectAlkatraz(ref weakArr)) + { + Protection = ProtectionType.Alkatraz; + } + else if (DetectPaulOwens(ref weakArr)) + { + Protection = ProtectionType.PaulOwens; + } + else if (DetectHexagon(ref weakArr)) + { + Protection = ProtectionType.Hexagon; + } + else if (DetectShadowOfTheBeast()) + { + Protection = ProtectionType.ShadowOfTheBeast; + } + } - var oneSecs = DiskTracks[1].Sectors; + /// + /// Detection routine for shadow of the beast game + /// Still cannot get this to work, but at least the game is detected + /// + public bool DetectShadowOfTheBeast() + { + if (DiskTracks[0].Sectors.Length != 9) + return false; - if (oneSecs.Length != 8) - return false; + var zeroSecs = DiskTracks[0].Sectors; + if (zeroSecs[0].SectorID != 65 || + zeroSecs[1].SectorID != 66 || + zeroSecs[2].SectorID != 67 || + zeroSecs[3].SectorID != 68 || + zeroSecs[4].SectorID != 69 || + zeroSecs[5].SectorID != 70 || + zeroSecs[6].SectorID != 71 || + zeroSecs[7].SectorID != 72 || + zeroSecs[8].SectorID != 73) + return false; - if (oneSecs[0].SectorID != 17 || - oneSecs[1].SectorID != 18 || - oneSecs[2].SectorID != 19 || - oneSecs[3].SectorID != 20 || - oneSecs[4].SectorID != 21 || - oneSecs[5].SectorID != 22 || - oneSecs[6].SectorID != 23 || - oneSecs[7].SectorID != 24) - return false; + var oneSecs = DiskTracks[1].Sectors; - return true; - } + if (oneSecs.Length != 8) + return false; - /// - /// Detect speedlock weak sector - /// - public bool DetectSpeedlock(ref int[] weak) - { - // SPEEDLOCK NOTES (-asni 2018-05-01) - // --------------------------------- - // Speedlock is one of the more common +3 disk protections and there are a few different versions - // Usually, track 0 sector 1 (ID 2) has data CRC errors that result in certain bytes returning a different value every time they are read - // Speedlock will generally read this track a number of times during the load process - // and if the correct bytes are not different between reads, the load fails + if (oneSecs[0].SectorID != 17 || + oneSecs[1].SectorID != 18 || + oneSecs[2].SectorID != 19 || + oneSecs[3].SectorID != 20 || + oneSecs[4].SectorID != 21 || + oneSecs[5].SectorID != 22 || + oneSecs[6].SectorID != 23 || + oneSecs[7].SectorID != 24) + return false; - // always must have track 0 containing 9 sectors - if (DiskTracks[0].Sectors.Length != 9) - return false; + return true; + } - // check for SPEEDLOCK ident in sector 0 - string ident = Encoding.ASCII.GetString(DiskTracks[0].Sectors[0].SectorData, 0, DiskTracks[0].Sectors[0].SectorData.Length); - if (!ident.ToUpper().Contains("SPEEDLOCK")) - return false; + /// + /// Detect speedlock weak sector + /// + public bool DetectSpeedlock(ref int[] weak) + { + // SPEEDLOCK NOTES (-asni 2018-05-01) + // --------------------------------- + // Speedlock is one of the more common +3 disk protections and there are a few different versions + // Usually, track 0 sector 1 (ID 2) has data CRC errors that result in certain bytes returning a different value every time they are read + // Speedlock will generally read this track a number of times during the load process + // and if the correct bytes are not different between reads, the load fails - // check for correct sector 0 lengths - if (DiskTracks[0].Sectors[0].SectorSize != 2 || - DiskTracks[0].Sectors[0].SectorData.Length < 0x200) - return false; + // always must have track 0 containing 9 sectors + if (DiskTracks[0].Sectors.Length != 9) + return false; - // sector[1] (SectorID 2) contains the weak sectors - Sector sec = DiskTracks[0].Sectors[1]; + // check for SPEEDLOCK ident in sector 0 + string ident = Encoding.ASCII.GetString(DiskTracks[0].Sectors[0].SectorData, 0, DiskTracks[0].Sectors[0].SectorData.Length); + if (!ident.ToUpper().Contains("SPEEDLOCK")) + return false; - // check for correct sector 1 lengths - if (sec.SectorSize != 2 || - sec.SectorData.Length < 0x200) - return false; + // check for correct sector 0 lengths + if (DiskTracks[0].Sectors[0].SectorSize != 2 || + DiskTracks[0].Sectors[0].SectorData.Length < 0x200) + return false; - // secID 2 needs a CRC error - //if (!(sec.Status1.Bit(5) || sec.Status2.Bit(5))) - //return false; + // sector[1] (SectorID 2) contains the weak sectors + Sector sec = DiskTracks[0].Sectors[1]; - // check for filler - bool startFillerFound = true; - for (int i = 0; i < 250; i++) - { - if (sec.SectorData[i] != sec.SectorData[i + 1]) - { - startFillerFound = false; - break; - } - } + // check for correct sector 1 lengths + if (sec.SectorSize != 2 || + sec.SectorData.Length < 0x200) + return false; - if (!startFillerFound) - { - weak[0] = 0; - weak[1] = 0x200; - } - else - { - weak[0] = 0x150; - weak[1] = 0x20; - } + // secID 2 needs a CRC error + //if (!(sec.Status1.Bit(5) || sec.Status2.Bit(5))) + //return false; - return true; - } + // check for filler + bool startFillerFound = true; + for (int i = 0; i < 250; i++) + { + if (sec.SectorData[i] != sec.SectorData[i + 1]) + { + startFillerFound = false; + break; + } + } - /// - /// Detect Alkatraz - /// - public bool DetectAlkatraz(ref int[] weak) - { - try - { - var data1 = DiskTracks[0].Sectors[0].SectorData; - var data2 = DiskTracks[0].Sectors[0].SectorData.Length; - } - catch (Exception) - { - return false; - } + if (!startFillerFound) + { + weak[0] = 0; + weak[1] = 0x200; + } + else + { + weak[0] = 0x150; + weak[1] = 0x20; + } - // check for ALKATRAZ ident in sector 0 - string ident = Encoding.ASCII.GetString(DiskTracks[0].Sectors[0].SectorData, 0, DiskTracks[0].Sectors[0].SectorData.Length); - if (!ident.ToUpper().Contains("ALKATRAZ PROTECTION SYSTEM")) - return false; + return true; + } - // ALKATRAZ NOTES (-asni 2018-05-01) - // --------------------------------- - // Alkatraz protection appears to revolve around a track on the disk with 18 sectors, - // (track position is not consistent) with the sector ID info being incorrect: - // TrackID is consistent between the sectors although is usually high (233, 237 etc) - // SideID is fairly random looking but with all IDs being even - // SectorID is also fairly random looking but contains both odd and even numbers - // - // There doesnt appear to be any CRC errors in this track, but the sector size is always 1 (256 bytes) - // Each sector contains different filler byte - // Once track 0 is loaded the CPU completely reads all the sectors in this track one-by-one. - // Data transferred during execution must be correct, also result ST0, ST1 and ST2 must be 64, 128 and 0 respectively + /// + /// Detect Alkatraz + /// + public bool DetectAlkatraz(ref int[] weak) + { + try + { + var data1 = DiskTracks[0].Sectors[0].SectorData; + var data2 = DiskTracks[0].Sectors[0].SectorData.Length; + } + catch (Exception) + { + return false; + } - // Immediately following this track are a number of tracks and sectors with a DAM set. - // These are all read in sector by sector - // Again, Alkatraz appears to require that ST0, ST1, and ST2 result bytes are set to 64, 128 and 0 respectively - // (so the CM in ST2 needs to be reset) + // check for ALKATRAZ ident in sector 0 + string ident = Encoding.ASCII.GetString(DiskTracks[0].Sectors[0].SectorData, 0, DiskTracks[0].Sectors[0].SectorData.Length); + if (!ident.ToUpper().Contains("ALKATRAZ PROTECTION SYSTEM")) + return false; - return true; - } + // ALKATRAZ NOTES (-asni 2018-05-01) + // --------------------------------- + // Alkatraz protection appears to revolve around a track on the disk with 18 sectors, + // (track position is not consistent) with the sector ID info being incorrect: + // TrackID is consistent between the sectors although is usually high (233, 237 etc) + // SideID is fairly random looking but with all IDs being even + // SectorID is also fairly random looking but contains both odd and even numbers + // + // There doesnt appear to be any CRC errors in this track, but the sector size is always 1 (256 bytes) + // Each sector contains different filler byte + // Once track 0 is loaded the CPU completely reads all the sectors in this track one-by-one. + // Data transferred during execution must be correct, also result ST0, ST1 and ST2 must be 64, 128 and 0 respectively - /// - /// Detect Paul Owens - /// - public bool DetectPaulOwens(ref int[] weak) - { - try - { - var data1 = DiskTracks[0].Sectors[2].SectorData; - var data2 = DiskTracks[0].Sectors[2].SectorData.Length; - } - catch (Exception) - { - return false; - } + // Immediately following this track are a number of tracks and sectors with a DAM set. + // These are all read in sector by sector + // Again, Alkatraz appears to require that ST0, ST1, and ST2 result bytes are set to 64, 128 and 0 respectively + // (so the CM in ST2 needs to be reset) - // check for PAUL OWENS ident in sector 2 - string ident = Encoding.ASCII.GetString(DiskTracks[0].Sectors[2].SectorData, 0, DiskTracks[0].Sectors[2].SectorData.Length); - if (!ident.ToUpper().Contains("PAUL OWENS")) - return false; + return true; + } - // Paul Owens Disk Protection Notes (-asni 2018-05-01) - // --------------------------------------------------- - // - // This scheme looks a little similar to Alkatraz with incorrect sector ID info in many places - // and deleted address marks (although these do not seem to show the strict relience on removing the CM mark from ST2 result that Alkatraz does) - // There are also data CRC errors but these dont look to be read more than once/checked for changes during load - // Main identifiers: - // - // * There are more than 10 cylinders - // * Cylinder 1 has no sector data - // * The sector ID infomation in most cases contains incorrect track IDs - // * Tracks 0 (boot) and 5 appear to be pretty much the only tracks that do not have incorrect sector ID marks + /// + /// Detect Paul Owens + /// + public bool DetectPaulOwens(ref int[] weak) + { + try + { + var data1 = DiskTracks[0].Sectors[2].SectorData; + var data2 = DiskTracks[0].Sectors[2].SectorData.Length; + } + catch (Exception) + { + return false; + } - return true; - } + // check for PAUL OWENS ident in sector 2 + string ident = Encoding.ASCII.GetString(DiskTracks[0].Sectors[2].SectorData, 0, DiskTracks[0].Sectors[2].SectorData.Length); + if (!ident.ToUpper().Contains("PAUL OWENS")) + return false; - /// - /// Detect Hexagon copy protection - /// - public bool DetectHexagon(ref int[] weak) - { - try - { - var data1 = DiskTracks[0].Sectors.Length; - var data2 = DiskTracks[0].Sectors[8].ActualDataByteLength; - var data3 = DiskTracks[0].Sectors[8].SectorData; - var data4 = DiskTracks[0].Sectors[8].SectorData.Length; - var data5 = DiskTracks[1].Sectors[0]; - } - catch (Exception) - { - return false; - } + // Paul Owens Disk Protection Notes (-asni 2018-05-01) + // --------------------------------------------------- + // + // This scheme looks a little similar to Alkatraz with incorrect sector ID info in many places + // and deleted address marks (although these do not seem to show the strict relience on removing the CM mark from ST2 result that Alkatraz does) + // There are also data CRC errors but these dont look to be read more than once/checked for changes during load + // Main identifiers: + // + // * There are more than 10 cylinders + // * Cylinder 1 has no sector data + // * The sector ID infomation in most cases contains incorrect track IDs + // * Tracks 0 (boot) and 5 appear to be pretty much the only tracks that do not have incorrect sector ID marks - if (DiskTracks[0].Sectors.Length != 10 || DiskTracks[0].Sectors[8].ActualDataByteLength != 512) - return false; + return true; + } - // check for Hexagon ident in sector 8 - string ident = Encoding.ASCII.GetString(DiskTracks[0].Sectors[8].SectorData, 0, DiskTracks[0].Sectors[8].SectorData.Length); - if (ident.ToUpper().Contains("GON DISK PROT")) - return true; + /// + /// Detect Hexagon copy protection + /// + public bool DetectHexagon(ref int[] weak) + { + try + { + var data1 = DiskTracks[0].Sectors.Length; + var data2 = DiskTracks[0].Sectors[8].ActualDataByteLength; + var data3 = DiskTracks[0].Sectors[8].SectorData; + var data4 = DiskTracks[0].Sectors[8].SectorData.Length; + var data5 = DiskTracks[1].Sectors[0]; + } + catch (Exception) + { + return false; + } - // hexagon protection may not be labelled as such - var track = DiskTracks[1]; - var sector = track.Sectors[0]; + if (DiskTracks[0].Sectors.Length != 10 || DiskTracks[0].Sectors[8].ActualDataByteLength != 512) + return false; - if (sector.SectorSize == 6 && sector.Status1 == 0x20 && sector.Status2 == 0x60) - { - if (track.Sectors.Length == 1) - return true; - } + // check for Hexagon ident in sector 8 + string ident = Encoding.ASCII.GetString(DiskTracks[0].Sectors[8].SectorData, 0, DiskTracks[0].Sectors[8].SectorData.Length); + if (ident.ToUpper().Contains("GON DISK PROT")) + return true; + + // hexagon protection may not be labelled as such + var track = DiskTracks[1]; + var sector = track.Sectors[0]; + + if (sector.SectorSize == 6 && sector.Status1 == 0x20 && sector.Status2 == 0x60) + { + if (track.Sectors.Length == 1) + return true; + } - // Hexagon Copy Protection Notes (-asni 2018-05-01) - // --------------------------------------------------- - // - // + // Hexagon Copy Protection Notes (-asni 2018-05-01) + // --------------------------------------------------- + // + // - return false; - } + return false; + } - /* + /* /// /// Should be run at the end of the ParseDisk process /// If speedlock is detected the flag is set in the disk image @@ -501,202 +501,202 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum } */ - /// - /// Returns the track count for the disk - /// - public virtual int GetTrackCount() - { - return DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; - } + /// + /// Returns the track count for the disk + /// + public virtual int GetTrackCount() + { + return DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; + } - /// - /// Reads the current sector ID info - /// - public virtual CHRN ReadID(byte trackIndex, byte side, int sectorIndex) - { - if (side != 0) - return null; + /// + /// Reads the current sector ID info + /// + public virtual CHRN ReadID(byte trackIndex, byte side, int sectorIndex) + { + if (side != 0) + return null; - if (DiskTracks.Length <= trackIndex || trackIndex < 0) - { - // invalid track - wrap around - trackIndex = 0; - } + if (DiskTracks.Length <= trackIndex || trackIndex < 0) + { + // invalid track - wrap around + trackIndex = 0; + } - var track = DiskTracks[trackIndex]; + var track = DiskTracks[trackIndex]; - if (track.NumberOfSectors <= sectorIndex) - { - // invalid sector - wrap around - sectorIndex = 0; - } + if (track.NumberOfSectors <= sectorIndex) + { + // invalid sector - wrap around + sectorIndex = 0; + } - var sector = track.Sectors[sectorIndex]; + var sector = track.Sectors[sectorIndex]; - CHRN chrn = new CHRN(); + CHRN chrn = new CHRN(); - chrn.C = sector.TrackNumber; - chrn.H = sector.SideNumber; - chrn.R = sector.SectorID; + chrn.C = sector.TrackNumber; + chrn.H = sector.SideNumber; + chrn.R = sector.SectorID; - // wrap around for N > 7 - if (sector.SectorSize > 7) - { - chrn.N = (byte)(sector.SectorSize - 7); - } - else if (sector.SectorSize < 0) - { - chrn.N = 0; - } - else - { - chrn.N = sector.SectorSize; - } + // wrap around for N > 7 + if (sector.SectorSize > 7) + { + chrn.N = (byte)(sector.SectorSize - 7); + } + else if (sector.SectorSize < 0) + { + chrn.N = 0; + } + else + { + chrn.N = sector.SectorSize; + } - chrn.Flag1 = (byte)(sector.Status1 & 0x25); - chrn.Flag2 = (byte)(sector.Status2 & 0x61); + chrn.Flag1 = (byte)(sector.Status1 & 0x25); + chrn.Flag2 = (byte)(sector.Status2 & 0x61); - chrn.DataBytes = sector.ActualData; + chrn.DataBytes = sector.ActualData; - return chrn; - } + return chrn; + } - /// - /// State serialization routines - /// - public abstract void SyncState(Serializer ser); + /// + /// State serialization routines + /// + public abstract void SyncState(Serializer ser); - public class Header - { - public string DiskIdent { get; set; } - public string DiskCreatorString { get; set; } - public byte NumberOfTracks { get; set; } - public byte NumberOfSides { get; set; } - public int[] TrackSizes { get; set; } - } + public class Header + { + public string DiskIdent { get; set; } + public string DiskCreatorString { get; set; } + public byte NumberOfTracks { get; set; } + public byte NumberOfSides { get; set; } + public int[] TrackSizes { get; set; } + } - public class Track - { - public string TrackIdent { get; set; } - public byte TrackNumber { get; set; } - public byte SideNumber { get; set; } - public byte DataRate { get; set; } - public byte RecordingMode { get; set; } - public byte SectorSize { get; set; } - public byte NumberOfSectors { get; set; } - public byte GAP3Length { get; set; } - public byte FillerByte { get; set; } - public virtual Sector[] Sectors { get; set; } + public class Track + { + public string TrackIdent { get; set; } + public byte TrackNumber { get; set; } + public byte SideNumber { get; set; } + public byte DataRate { get; set; } + public byte RecordingMode { get; set; } + public byte SectorSize { get; set; } + public byte NumberOfSectors { get; set; } + public byte GAP3Length { get; set; } + public byte FillerByte { get; set; } + public virtual Sector[] Sectors { get; set; } - #region UDI + #region UDI - public virtual byte TrackType { get; set; } - public virtual int TLEN { get; set; } - public virtual int CLEN { get { return TLEN / 8 + (TLEN % 8 / 7) / 8; } } - public virtual byte[] TrackData { get; set; } + public virtual byte TrackType { get; set; } + public virtual int TLEN { get; set; } + public virtual int CLEN { get { return TLEN / 8 + (TLEN % 8 / 7) / 8; } } + public virtual byte[] TrackData { get; set; } - #endregion + #endregion - /// - /// Presents a contiguous byte array of all sector data for this track - /// (including any multiple weak/random data) - /// - public virtual byte[] TrackSectorData - { - get - { - List list = new List(); + /// + /// Presents a contiguous byte array of all sector data for this track + /// (including any multiple weak/random data) + /// + public virtual byte[] TrackSectorData + { + get + { + List list = new List(); - foreach (var sec in Sectors) - { - list.AddRange(sec.ActualData); - } + foreach (var sec in Sectors) + { + list.AddRange(sec.ActualData); + } - return list.ToArray(); - } - } - } + return list.ToArray(); + } + } + } - public class Sector - { - public virtual byte TrackNumber { get; set; } - public virtual byte SideNumber { get; set; } - public virtual byte SectorID { get; set; } - public virtual byte SectorSize { get; set; } - public virtual byte Status1 { get; set; } - public virtual byte Status2 { get; set; } - public virtual int ActualDataByteLength { get; set; } - public virtual byte[] SectorData { get; set; } - public virtual bool ContainsMultipleWeakSectors { get; set; } + public class Sector + { + public virtual byte TrackNumber { get; set; } + public virtual byte SideNumber { get; set; } + public virtual byte SectorID { get; set; } + public virtual byte SectorSize { get; set; } + public virtual byte Status1 { get; set; } + public virtual byte Status2 { get; set; } + public virtual int ActualDataByteLength { get; set; } + public virtual byte[] SectorData { get; set; } + public virtual bool ContainsMultipleWeakSectors { get; set; } - public int WeakReadIndex = 0; + public int WeakReadIndex = 0; - public void SectorReadCompleted() - { - if (ContainsMultipleWeakSectors) - WeakReadIndex++; - } + public void SectorReadCompleted() + { + if (ContainsMultipleWeakSectors) + WeakReadIndex++; + } - public int DataLen - { - get - { - if (!ContainsMultipleWeakSectors) - { - return ActualDataByteLength; - } - else - { - return ActualDataByteLength / (ActualDataByteLength / (0x80 << SectorSize)); - } - } - } + public int DataLen + { + get + { + if (!ContainsMultipleWeakSectors) + { + return ActualDataByteLength; + } + else + { + return ActualDataByteLength / (ActualDataByteLength / (0x80 << SectorSize)); + } + } + } - public int RandSecCounter = 0; + public int RandSecCounter = 0; - public byte[] ActualData - { - get - { - if (!ContainsMultipleWeakSectors) - { - // check whether filler bytes are needed - int size = 0x80 << SectorSize; - if (size > ActualDataByteLength) - { - List l = new List(); - l.AddRange(SectorData); - for (int i = 0; i < size - ActualDataByteLength; i++) - { - //l.Add(SectorData[i]); - l.Add(SectorData.Last()); - } + public byte[] ActualData + { + get + { + if (!ContainsMultipleWeakSectors) + { + // check whether filler bytes are needed + int size = 0x80 << SectorSize; + if (size > ActualDataByteLength) + { + List l = new List(); + l.AddRange(SectorData); + for (int i = 0; i < size - ActualDataByteLength; i++) + { + //l.Add(SectorData[i]); + l.Add(SectorData.Last()); + } - return l.ToArray(); - } - else - { - return SectorData; - } - } - else - { - // weak read neccessary - int copies = ActualDataByteLength / (0x80 << SectorSize); + return l.ToArray(); + } + else + { + return SectorData; + } + } + else + { + // weak read neccessary + int copies = ActualDataByteLength / (0x80 << SectorSize); - // handle index wrap-around - if (WeakReadIndex > copies - 1) - WeakReadIndex = copies - 1; + // handle index wrap-around + if (WeakReadIndex > copies - 1) + WeakReadIndex = copies - 1; - // get the sector data based on the current weakreadindex - int step = WeakReadIndex * (0x80 << SectorSize); - byte[] res = new byte[(0x80 << SectorSize)]; - Array.Copy(SectorData, step, res, 0, 0x80 << SectorSize); - return res; + // get the sector data based on the current weakreadindex + int step = WeakReadIndex * (0x80 << SectorSize); + byte[] res = new byte[(0x80 << SectorSize)]; + Array.Copy(SectorData, step, res, 0, 0x80 << SectorSize); + return res; - /* + /* int copies = ActualDataByteLength / (0x80 << SectorSize); Random rnd = new Random(); int r = rnd.Next(0, copies - 1); @@ -705,40 +705,40 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum Array.Copy(SectorData, step, res, 0, 0x80 << SectorSize); return res; */ - } - } - } + } + } + } - public CHRN SectorIDInfo - { - get - { - return new CHRN - { - C = TrackNumber, - H = SideNumber, - R = SectorID, - N = SectorSize, - Flag1 = Status1, - Flag2 = Status2, - }; - } - } - } - } + public CHRN SectorIDInfo + { + get + { + return new CHRN + { + C = TrackNumber, + H = SideNumber, + R = SectorID, + N = SectorSize, + Flag1 = Status1, + Flag2 = Status2, + }; + } + } + } + } - /// - /// Defines the type of speedlock detection found - /// - public enum ProtectionType - { - None, - Speedlock, - Alkatraz, - Hexagon, - Frontier, - PaulOwens, - ShadowOfTheBeast - } + /// + /// Defines the type of speedlock detection found + /// + public enum ProtectionType + { + None, + Speedlock, + Alkatraz, + Hexagon, + Frontier, + PaulOwens, + ShadowOfTheBeast + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/IPFFormat/IPFFloppyDisk.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/IPFFormat/IPFFloppyDisk.cs index 8133e7a66b..bcf51ca14e 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/IPFFormat/IPFFloppyDisk.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/IPFFormat/IPFFloppyDisk.cs @@ -8,452 +8,452 @@ using System.Threading.Tasks; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - public class IPFFloppyDisk : FloppyDisk - { - /// - /// The format type - /// - public override DiskType DiskFormatType => DiskType.IPF; + public class IPFFloppyDisk : FloppyDisk + { + /// + /// The format type + /// + public override DiskType DiskFormatType => DiskType.IPF; - /// - /// Attempts to parse incoming disk data - /// - /// - /// TRUE: disk parsed - /// FALSE: unable to parse disk - /// - public override bool ParseDisk(byte[] data) - { - // look for standard magic string - string ident = Encoding.ASCII.GetString(data, 0, 16); + /// + /// Attempts to parse incoming disk data + /// + /// + /// TRUE: disk parsed + /// FALSE: unable to parse disk + /// + public override bool ParseDisk(byte[] data) + { + // look for standard magic string + string ident = Encoding.ASCII.GetString(data, 0, 16); - if (!ident.ToUpper().Contains("CAPS")) - { - // incorrect format - return false; - } + if (!ident.ToUpper().Contains("CAPS")) + { + // incorrect format + return false; + } - int pos = 0; + int pos = 0; - List blocks = new List(); + List blocks = new List(); - while (pos < data.Length) - { - try - { - var block = IPFBlock.ParseNextBlock(ref pos, this, data, blocks); + while (pos < data.Length) + { + try + { + var block = IPFBlock.ParseNextBlock(ref pos, this, data, blocks); - if (block == null) - { - // EOF - break; - } + if (block == null) + { + // EOF + break; + } - if (block.RecordType == RecordHeaderType.None) - { - // unknown block - } + if (block.RecordType == RecordHeaderType.None) + { + // unknown block + } - blocks.Add(block); - } - catch (Exception ex) - { + blocks.Add(block); + } + catch (Exception ex) + { var e = ex.ToString(); - } - } + } + } - // now process the blocks - var infoBlock = blocks.Where(a => a.RecordType == RecordHeaderType.INFO).FirstOrDefault(); - var IMGEblocks = blocks.Where(a => a.RecordType == RecordHeaderType.IMGE).ToList(); - var DATAblocks = blocks.Where(a => a.RecordType == RecordHeaderType.DATA); + // now process the blocks + var infoBlock = blocks.Where(a => a.RecordType == RecordHeaderType.INFO).FirstOrDefault(); + var IMGEblocks = blocks.Where(a => a.RecordType == RecordHeaderType.IMGE).ToList(); + var DATAblocks = blocks.Where(a => a.RecordType == RecordHeaderType.DATA); - DiskHeader.NumberOfTracks = (byte)(IMGEblocks.Count()); - DiskHeader.NumberOfSides = (byte)(infoBlock.INFOmaxSide + 1); - DiskTracks = new Track[DiskHeader.NumberOfTracks]; + DiskHeader.NumberOfTracks = (byte)(IMGEblocks.Count()); + DiskHeader.NumberOfSides = (byte)(infoBlock.INFOmaxSide + 1); + DiskTracks = new Track[DiskHeader.NumberOfTracks]; - for (int t = 0; t < DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; t++) - { - // each imge block represents one track - var img = IMGEblocks[t]; - DiskTracks[t] = new Track(); - var trk = DiskTracks[t]; + for (int t = 0; t < DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides; t++) + { + // each imge block represents one track + var img = IMGEblocks[t]; + DiskTracks[t] = new Track(); + var trk = DiskTracks[t]; - var blockCount = img.IMGEblockCount; - var dataBlock = DATAblocks.Where(a => a.DATAdataKey == img.IMGEdataKey).FirstOrDefault(); + var blockCount = img.IMGEblockCount; + var dataBlock = DATAblocks.Where(a => a.DATAdataKey == img.IMGEdataKey).FirstOrDefault(); - trk.SideNumber = (byte)img.IMGEside; - trk.TrackNumber = (byte)img.IMGEtrack; + trk.SideNumber = (byte)img.IMGEside; + trk.TrackNumber = (byte)img.IMGEtrack; - trk.Sectors = new Sector[blockCount]; + trk.Sectors = new Sector[blockCount]; - // process data block descriptors - int p = 0; - for (int d = 0; d < blockCount; d++) - { - var extraDataAreaStart = 32 * blockCount; - trk.Sectors[d] = new Sector(); - var sector = trk.Sectors[d]; + // process data block descriptors + int p = 0; + for (int d = 0; d < blockCount; d++) + { + var extraDataAreaStart = 32 * blockCount; + trk.Sectors[d] = new Sector(); + var sector = trk.Sectors[d]; - int dataBits = MediaConverter.GetBEInt32(dataBlock.DATAextraDataRaw, p); p += 4; - int gapBits = MediaConverter.GetBEInt32(dataBlock.DATAextraDataRaw, p); p += 4; - int dataBytes; - int gapBytes; - int gapOffset; - int cellType; - if (infoBlock.INFOencoderType == 1) - { - dataBytes = MediaConverter.GetBEInt32(dataBlock.DATAextraDataRaw, p); p += 4; - gapBytes = MediaConverter.GetBEInt32(dataBlock.DATAextraDataRaw, p); p += 4; - } - else if (infoBlock.INFOencoderType == 2) - { - gapOffset = MediaConverter.GetBEInt32(dataBlock.DATAextraDataRaw, p); p += 4; - cellType = MediaConverter.GetBEInt32(dataBlock.DATAextraDataRaw, p); p += 4; - } - int encoderType = MediaConverter.GetBEInt32(dataBlock.DATAextraDataRaw, p); p += 4; - int? blockFlags = null; - if (infoBlock.INFOencoderType == 2) - { - blockFlags = MediaConverter.GetBEInt32(dataBlock.DATAextraDataRaw, p); - } - p += 4; + int dataBits = MediaConverter.GetBEInt32(dataBlock.DATAextraDataRaw, p); p += 4; + int gapBits = MediaConverter.GetBEInt32(dataBlock.DATAextraDataRaw, p); p += 4; + int dataBytes; + int gapBytes; + int gapOffset; + int cellType; + if (infoBlock.INFOencoderType == 1) + { + dataBytes = MediaConverter.GetBEInt32(dataBlock.DATAextraDataRaw, p); p += 4; + gapBytes = MediaConverter.GetBEInt32(dataBlock.DATAextraDataRaw, p); p += 4; + } + else if (infoBlock.INFOencoderType == 2) + { + gapOffset = MediaConverter.GetBEInt32(dataBlock.DATAextraDataRaw, p); p += 4; + cellType = MediaConverter.GetBEInt32(dataBlock.DATAextraDataRaw, p); p += 4; + } + int encoderType = MediaConverter.GetBEInt32(dataBlock.DATAextraDataRaw, p); p += 4; + int? blockFlags = null; + if (infoBlock.INFOencoderType == 2) + { + blockFlags = MediaConverter.GetBEInt32(dataBlock.DATAextraDataRaw, p); + } + p += 4; - int gapDefault = MediaConverter.GetBEInt32(dataBlock.DATAextraDataRaw, p); p += 4; - int dataOffset = MediaConverter.GetBEInt32(dataBlock.DATAextraDataRaw, p); p += 4; + int gapDefault = MediaConverter.GetBEInt32(dataBlock.DATAextraDataRaw, p); p += 4; + int dataOffset = MediaConverter.GetBEInt32(dataBlock.DATAextraDataRaw, p); p += 4; - // gap stream elements - if (infoBlock.INFOencoderType == 2 && gapBits != 0 && blockFlags != null) - { - if (!blockFlags.Value.Bit(1) && !blockFlags.Value.Bit(0)) - { - // no gap stream - } - if (!blockFlags.Value.Bit(1) && blockFlags.Value.Bit(0)) - { - // Forward gap stream list only - } - if (blockFlags.Value.Bit(1) && !blockFlags.Value.Bit(0)) - { - // Backward gap stream list only - } - if (blockFlags.Value.Bit(1) && blockFlags.Value.Bit(0)) - { - // Forward and Backward stream lists - } - } + // gap stream elements + if (infoBlock.INFOencoderType == 2 && gapBits != 0 && blockFlags != null) + { + if (!blockFlags.Value.Bit(1) && !blockFlags.Value.Bit(0)) + { + // no gap stream + } + if (!blockFlags.Value.Bit(1) && blockFlags.Value.Bit(0)) + { + // Forward gap stream list only + } + if (blockFlags.Value.Bit(1) && !blockFlags.Value.Bit(0)) + { + // Backward gap stream list only + } + if (blockFlags.Value.Bit(1) && blockFlags.Value.Bit(0)) + { + // Forward and Backward stream lists + } + } - // data stream elements - if (dataBits != 0) - { - var dsLocation = dataOffset; + // data stream elements + if (dataBits != 0) + { + var dsLocation = dataOffset; - for (;;) - { - byte dataHead = dataBlock.DATAextraDataRaw[dsLocation++]; - if (dataHead == 0) - { - // end of data stream list - break; - } + for (; ; ) + { + byte dataHead = dataBlock.DATAextraDataRaw[dsLocation++]; + if (dataHead == 0) + { + // end of data stream list + break; + } - var sampleSize = ((dataHead & 0xE0) >> 5); - var dataType = dataHead & 0x1F; - byte[] dSize = new byte[sampleSize]; - Array.Copy(dataBlock.DATAextraDataRaw, dsLocation, dSize, 0, sampleSize); - var dataSize = MediaConverter.GetBEInt32FromByteArray(dSize); - dsLocation += dSize.Length; - int dataLen; - byte[] dataStream = new byte[0]; + var sampleSize = ((dataHead & 0xE0) >> 5); + var dataType = dataHead & 0x1F; + byte[] dSize = new byte[sampleSize]; + Array.Copy(dataBlock.DATAextraDataRaw, dsLocation, dSize, 0, sampleSize); + var dataSize = MediaConverter.GetBEInt32FromByteArray(dSize); + dsLocation += dSize.Length; + int dataLen; + byte[] dataStream = new byte[0]; - if (blockFlags != null && blockFlags.Value.Bit(2)) - { - // bits - if (dataType != 5) - { - dataLen = dataSize / 8; - if (dataSize % 8 != 0) - { - // bits left over - } - dataStream = new byte[dataLen]; - Array.Copy(dataBlock.DATAextraDataRaw, dsLocation, dataStream, 0, dataLen); - } - } - else - { - // bytes - if (dataType != 5) - { - dataStream = new byte[dataSize]; - Array.Copy(dataBlock.DATAextraDataRaw, dsLocation, dataStream, 0, dataSize); - } - } + if (blockFlags != null && blockFlags.Value.Bit(2)) + { + // bits + if (dataType != 5) + { + dataLen = dataSize / 8; + if (dataSize % 8 != 0) + { + // bits left over + } + dataStream = new byte[dataLen]; + Array.Copy(dataBlock.DATAextraDataRaw, dsLocation, dataStream, 0, dataLen); + } + } + else + { + // bytes + if (dataType != 5) + { + dataStream = new byte[dataSize]; + Array.Copy(dataBlock.DATAextraDataRaw, dsLocation, dataStream, 0, dataSize); + } + } - // dataStream[] now contains the data - switch (dataType) - { - // SYNC - case 1: - break; - // DATA - case 2: - if (dataStream.Length == 7) - { - // ID - // first byte IAM - sector.TrackNumber = dataStream[1]; - sector.SideNumber = dataStream[2]; - sector.SectorID = dataStream[3]; - sector.SectorSize = dataStream[4]; - } - else if (dataStream.Length > 255) - { - // DATA - // first byte DAM - if (dataStream[0] == 0xF8) - { - // deleted address mark - //sector.Status1 - } - sector.SectorData = new byte[dataStream.Length - 1 - 2]; - Array.Copy(dataStream, 1, sector.SectorData, 0, dataStream.Length - 1 - 2); - } - break; - // GAP - case 3: - break; - // RAW - case 4: - break; - // FUZZY - case 5: - break; - default: - break; - } + // dataStream[] now contains the data + switch (dataType) + { + // SYNC + case 1: + break; + // DATA + case 2: + if (dataStream.Length == 7) + { + // ID + // first byte IAM + sector.TrackNumber = dataStream[1]; + sector.SideNumber = dataStream[2]; + sector.SectorID = dataStream[3]; + sector.SectorSize = dataStream[4]; + } + else if (dataStream.Length > 255) + { + // DATA + // first byte DAM + if (dataStream[0] == 0xF8) + { + // deleted address mark + //sector.Status1 + } + sector.SectorData = new byte[dataStream.Length - 1 - 2]; + Array.Copy(dataStream, 1, sector.SectorData, 0, dataStream.Length - 1 - 2); + } + break; + // GAP + case 3: + break; + // RAW + case 4: + break; + // FUZZY + case 5: + break; + default: + break; + } - dsLocation += dataStream.Length; - } - } - } - } + dsLocation += dataStream.Length; + } + } + } + } - return true; - } + return true; + } - public class IPFBlock - { - public RecordHeaderType RecordType; - public int BlockLength; - public int CRC; - public byte[] RawBlockData; - public int StartPos; + public class IPFBlock + { + public RecordHeaderType RecordType; + public int BlockLength; + public int CRC; + public byte[] RawBlockData; + public int StartPos; - #region INFO + #region INFO - public int INFOmediaType; - public int INFOencoderType; - public int INFOencoderRev; - public int INFOfileKey; - public int INFOfileRev; - public int INFOorigin; - public int INFOminTrack; - public int INFOmaxTrack; - public int INFOminSide; - public int INFOmaxSide; - public int INFOcreationDate; - public int INFOcreationTime; - public int INFOplatform1; - public int INFOplatform2; - public int INFOplatform3; - public int INFOplatform4; - public int INFOdiskNumber; - public int INFOcreatorId; + public int INFOmediaType; + public int INFOencoderType; + public int INFOencoderRev; + public int INFOfileKey; + public int INFOfileRev; + public int INFOorigin; + public int INFOminTrack; + public int INFOmaxTrack; + public int INFOminSide; + public int INFOmaxSide; + public int INFOcreationDate; + public int INFOcreationTime; + public int INFOplatform1; + public int INFOplatform2; + public int INFOplatform3; + public int INFOplatform4; + public int INFOdiskNumber; + public int INFOcreatorId; - #endregion + #endregion - #region IMGE + #region IMGE - public int IMGEtrack; - public int IMGEside; - public int IMGEdensity; - public int IMGEsignalType; - public int IMGEtrackBytes; - public int IMGEstartBytePos; - public int IMGEstartBitPos; - public int IMGEdataBits; - public int IMGEgapBits; - public int IMGEtrackBits; - public int IMGEblockCount; - public int IMGEencoderProcess; - public int IMGEtrackFlags; - public int IMGEdataKey; + public int IMGEtrack; + public int IMGEside; + public int IMGEdensity; + public int IMGEsignalType; + public int IMGEtrackBytes; + public int IMGEstartBytePos; + public int IMGEstartBitPos; + public int IMGEdataBits; + public int IMGEgapBits; + public int IMGEtrackBits; + public int IMGEblockCount; + public int IMGEencoderProcess; + public int IMGEtrackFlags; + public int IMGEdataKey; - #endregion + #endregion - #region DATA + #region DATA - public int DATAlength; - public int DATAbitSize; - public int DATAcrc; - public int DATAdataKey; - public byte[] DATAextraDataRaw; + public int DATAlength; + public int DATAbitSize; + public int DATAcrc; + public int DATAdataKey; + public byte[] DATAextraDataRaw; - #endregion + #endregion - public static IPFBlock ParseNextBlock(ref int startPos, FloppyDisk disk, byte[] data, List blockCollection) - { - IPFBlock ipf = new IPFBlock(); - ipf.StartPos = startPos; + public static IPFBlock ParseNextBlock(ref int startPos, FloppyDisk disk, byte[] data, List blockCollection) + { + IPFBlock ipf = new IPFBlock(); + ipf.StartPos = startPos; - if (startPos >= data.Length) - { - // EOF - return null; - } + if (startPos >= data.Length) + { + // EOF + return null; + } - // assume the startPos passed in is actually the start of a new block - // look for record header ident - string ident = Encoding.ASCII.GetString(data, startPos, 4); - startPos += 4; - try - { - ipf.RecordType = (RecordHeaderType)Enum.Parse(typeof(RecordHeaderType), ident); - } - catch - { - ipf.RecordType = RecordHeaderType.None; - } + // assume the startPos passed in is actually the start of a new block + // look for record header ident + string ident = Encoding.ASCII.GetString(data, startPos, 4); + startPos += 4; + try + { + ipf.RecordType = (RecordHeaderType)Enum.Parse(typeof(RecordHeaderType), ident); + } + catch + { + ipf.RecordType = RecordHeaderType.None; + } - // setup for actual block size - ipf.BlockLength = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.CRC = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.RawBlockData = new byte[ipf.BlockLength]; - Array.Copy(data, ipf.StartPos, ipf.RawBlockData, 0, ipf.BlockLength); + // setup for actual block size + ipf.BlockLength = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.CRC = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.RawBlockData = new byte[ipf.BlockLength]; + Array.Copy(data, ipf.StartPos, ipf.RawBlockData, 0, ipf.BlockLength); - switch (ipf.RecordType) - { - // Nothing to process / unknown - // just move ahead - case RecordHeaderType.CAPS: - case RecordHeaderType.TRCK: - case RecordHeaderType.DUMP: - case RecordHeaderType.CTEI: - case RecordHeaderType.CTEX: - default: - startPos = ipf.StartPos + ipf.BlockLength; - break; + switch (ipf.RecordType) + { + // Nothing to process / unknown + // just move ahead + case RecordHeaderType.CAPS: + case RecordHeaderType.TRCK: + case RecordHeaderType.DUMP: + case RecordHeaderType.CTEI: + case RecordHeaderType.CTEX: + default: + startPos = ipf.StartPos + ipf.BlockLength; + break; - // INFO block - case RecordHeaderType.INFO: - // INFO header is followed immediately by an INFO block - ipf.INFOmediaType = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.INFOencoderType = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.INFOencoderRev = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.INFOfileKey = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.INFOfileRev = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.INFOorigin = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.INFOminTrack = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.INFOmaxTrack = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.INFOminSide = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.INFOmaxSide = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.INFOcreationDate = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.INFOcreationTime = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.INFOplatform1 = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.INFOplatform2 = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.INFOplatform3 = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.INFOplatform4 = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.INFOdiskNumber = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.INFOcreatorId = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - startPos += 12; // reserved - break; + // INFO block + case RecordHeaderType.INFO: + // INFO header is followed immediately by an INFO block + ipf.INFOmediaType = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.INFOencoderType = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.INFOencoderRev = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.INFOfileKey = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.INFOfileRev = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.INFOorigin = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.INFOminTrack = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.INFOmaxTrack = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.INFOminSide = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.INFOmaxSide = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.INFOcreationDate = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.INFOcreationTime = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.INFOplatform1 = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.INFOplatform2 = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.INFOplatform3 = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.INFOplatform4 = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.INFOdiskNumber = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.INFOcreatorId = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + startPos += 12; // reserved + break; - case RecordHeaderType.IMGE: - ipf.IMGEtrack = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.IMGEside = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.IMGEdensity = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.IMGEsignalType = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.IMGEtrackBytes = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.IMGEstartBytePos = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.IMGEstartBitPos = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.IMGEdataBits = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.IMGEgapBits = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.IMGEtrackBits = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.IMGEblockCount = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.IMGEencoderProcess = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.IMGEtrackFlags = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.IMGEdataKey = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - startPos += 12; // reserved - break; + case RecordHeaderType.IMGE: + ipf.IMGEtrack = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.IMGEside = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.IMGEdensity = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.IMGEsignalType = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.IMGEtrackBytes = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.IMGEstartBytePos = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.IMGEstartBitPos = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.IMGEdataBits = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.IMGEgapBits = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.IMGEtrackBits = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.IMGEblockCount = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.IMGEencoderProcess = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.IMGEtrackFlags = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.IMGEdataKey = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + startPos += 12; // reserved + break; - case RecordHeaderType.DATA: - ipf.DATAlength = MediaConverter.GetBEInt32(data, startPos); - if (ipf.DATAlength == 0) - { - ipf.DATAextraDataRaw = new byte[0]; - ipf.DATAlength = 0; - } - else - { - ipf.DATAextraDataRaw = new byte[ipf.DATAlength]; - } - startPos += 4; - ipf.DATAbitSize = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.DATAcrc = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - ipf.DATAdataKey = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + case RecordHeaderType.DATA: + ipf.DATAlength = MediaConverter.GetBEInt32(data, startPos); + if (ipf.DATAlength == 0) + { + ipf.DATAextraDataRaw = new byte[0]; + ipf.DATAlength = 0; + } + else + { + ipf.DATAextraDataRaw = new byte[ipf.DATAlength]; + } + startPos += 4; + ipf.DATAbitSize = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.DATAcrc = MediaConverter.GetBEInt32(data, startPos); startPos += 4; + ipf.DATAdataKey = MediaConverter.GetBEInt32(data, startPos); startPos += 4; - if (ipf.DATAlength != 0) - { - Array.Copy(data, startPos, ipf.DATAextraDataRaw, 0, ipf.DATAlength); - } + if (ipf.DATAlength != 0) + { + Array.Copy(data, startPos, ipf.DATAextraDataRaw, 0, ipf.DATAlength); + } - startPos += ipf.DATAlength; - break; - } + startPos += ipf.DATAlength; + break; + } - return ipf; - } - } + return ipf; + } + } - public enum RecordHeaderType - { - None, - CAPS, - DUMP, - DATA, - TRCK, - INFO, - IMGE, - CTEI, - CTEX, - } + public enum RecordHeaderType + { + None, + CAPS, + DUMP, + DATA, + TRCK, + INFO, + IMGE, + CTEI, + CTEX, + } - /// - /// State serlialization - /// - public override void SyncState(Serializer ser) - { - ser.BeginSection("Plus3FloppyDisk"); + /// + /// State serlialization + /// + public override void SyncState(Serializer ser) + { + ser.BeginSection("Plus3FloppyDisk"); - ser.Sync(nameof(CylinderCount), ref CylinderCount); - ser.Sync(nameof(SideCount), ref SideCount); - ser.Sync(nameof(BytesPerTrack), ref BytesPerTrack); - ser.Sync(nameof(WriteProtected), ref WriteProtected); - ser.SyncEnum(nameof(Protection), ref Protection); + ser.Sync(nameof(CylinderCount), ref CylinderCount); + ser.Sync(nameof(SideCount), ref SideCount); + ser.Sync(nameof(BytesPerTrack), ref BytesPerTrack); + ser.Sync(nameof(WriteProtected), ref WriteProtected); + ser.SyncEnum(nameof(Protection), ref Protection); - ser.Sync(nameof(DirtyData), ref DirtyData); - if (DirtyData) - { + ser.Sync(nameof(DirtyData), ref DirtyData); + if (DirtyData) + { - } + } - // sync deterministic track and sector counters - ser.Sync(nameof( _randomCounter), ref _randomCounter); - RandomCounter = _randomCounter; + // sync deterministic track and sector counters + ser.Sync(nameof(_randomCounter), ref _randomCounter); + RandomCounter = _randomCounter; - ser.EndSection(); - } - } + ser.EndSection(); + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/UDIFormat/UDI1_0FloppyDisk.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/UDIFormat/UDI1_0FloppyDisk.cs index d38209f49b..5b6006bf9c 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/UDIFormat/UDI1_0FloppyDisk.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/UDIFormat/UDI1_0FloppyDisk.cs @@ -8,205 +8,205 @@ using System.Threading.Tasks; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - public class UDI1_0FloppyDisk : FloppyDisk - { - /// - /// The format type - /// - public override DiskType DiskFormatType => DiskType.UDI; + public class UDI1_0FloppyDisk : FloppyDisk + { + /// + /// The format type + /// + public override DiskType DiskFormatType => DiskType.UDI; - /// - /// Attempts to parse incoming disk data - /// - /// - /// TRUE: disk parsed - /// FALSE: unable to parse disk - /// - public override bool ParseDisk(byte[] data) - { - // look for standard magic string - string ident = Encoding.ASCII.GetString(data, 0, 4); + /// + /// Attempts to parse incoming disk data + /// + /// + /// TRUE: disk parsed + /// FALSE: unable to parse disk + /// + public override bool ParseDisk(byte[] data) + { + // look for standard magic string + string ident = Encoding.ASCII.GetString(data, 0, 4); - if (!ident.StartsWith("UDI!") && !ident.StartsWith("udi!")) - { - // incorrect format - return false; - } + if (!ident.StartsWith("UDI!") && !ident.StartsWith("udi!")) + { + // incorrect format + return false; + } - if (data[0x08] != 0) - { - // wrong version - return false; - } + if (data[0x08] != 0) + { + // wrong version + return false; + } - if (ident == "udi!") - { - // cant handle compression yet - return false; - } + if (ident == "udi!") + { + // cant handle compression yet + return false; + } - DiskHeader.DiskIdent = ident; - DiskHeader.NumberOfTracks = (byte)(data[0x09] + 1); - DiskHeader.NumberOfSides = (byte)(data[0x0A] + 1); + DiskHeader.DiskIdent = ident; + DiskHeader.NumberOfTracks = (byte)(data[0x09] + 1); + DiskHeader.NumberOfSides = (byte)(data[0x0A] + 1); - DiskTracks = new Track[DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides]; + DiskTracks = new Track[DiskHeader.NumberOfTracks * DiskHeader.NumberOfSides]; - int fileSize = MediaConverter.GetInt32(data, 4); // not including the final 4-byte checksum + int fileSize = MediaConverter.GetInt32(data, 4); // not including the final 4-byte checksum - // ignore extended header - var extHdrSize = MediaConverter.GetInt32(data, 0x0C); - int pos = 0x10 + extHdrSize; + // ignore extended header + var extHdrSize = MediaConverter.GetInt32(data, 0x0C); + int pos = 0x10 + extHdrSize; - // process track information - for (int t = 0; t < DiskHeader.NumberOfTracks; t++) - { - DiskTracks[t] = new UDIv1Track(); - DiskTracks[t].TrackNumber = (byte)t; - DiskTracks[t].SideNumber = 0; - DiskTracks[t].TrackType = data[pos++]; - DiskTracks[t].TLEN = MediaConverter.GetWordValue(data, pos); pos += 2; - DiskTracks[t].TrackData = new byte[DiskTracks[t].TLEN + DiskTracks[t].CLEN]; - Array.Copy(data, pos, DiskTracks[t].TrackData, 0, DiskTracks[t].TLEN + DiskTracks[t].CLEN); - pos += DiskTracks[t].TLEN + DiskTracks[t].CLEN; - } + // process track information + for (int t = 0; t < DiskHeader.NumberOfTracks; t++) + { + DiskTracks[t] = new UDIv1Track(); + DiskTracks[t].TrackNumber = (byte)t; + DiskTracks[t].SideNumber = 0; + DiskTracks[t].TrackType = data[pos++]; + DiskTracks[t].TLEN = MediaConverter.GetWordValue(data, pos); pos += 2; + DiskTracks[t].TrackData = new byte[DiskTracks[t].TLEN + DiskTracks[t].CLEN]; + Array.Copy(data, pos, DiskTracks[t].TrackData, 0, DiskTracks[t].TLEN + DiskTracks[t].CLEN); + pos += DiskTracks[t].TLEN + DiskTracks[t].CLEN; + } - return true; - } + return true; + } - /// - /// Takes a double-sided disk byte array and converts into 2 single-sided arrays - /// - public static bool SplitDoubleSided(byte[] data, List results) - { - // look for standard magic string - string ident = Encoding.ASCII.GetString(data, 0, 4); + /// + /// Takes a double-sided disk byte array and converts into 2 single-sided arrays + /// + public static bool SplitDoubleSided(byte[] data, List results) + { + // look for standard magic string + string ident = Encoding.ASCII.GetString(data, 0, 4); - if (!ident.StartsWith("UDI!") && !ident.StartsWith("udi!")) - { - // incorrect format - return false; - } + if (!ident.StartsWith("UDI!") && !ident.StartsWith("udi!")) + { + // incorrect format + return false; + } - if (data[0x08] != 0) - { - // wrong version - return false; - } + if (data[0x08] != 0) + { + // wrong version + return false; + } - if (ident == "udi!") - { - // cant handle compression yet - return false; - } + if (ident == "udi!") + { + // cant handle compression yet + return false; + } - byte[] S0 = new byte[data.Length]; - byte[] S1 = new byte[data.Length]; + byte[] S0 = new byte[data.Length]; + byte[] S1 = new byte[data.Length]; - // header - var extHdr = MediaConverter.GetInt32(data, 0x0C); - Array.Copy(data, 0, S0, 0, 0x10 + extHdr); - Array.Copy(data, 0, S1, 0, 0x10 + extHdr); - // change side number - S0[0x0A] = 0; - S1[0x0A] = 0; + // header + var extHdr = MediaConverter.GetInt32(data, 0x0C); + Array.Copy(data, 0, S0, 0, 0x10 + extHdr); + Array.Copy(data, 0, S1, 0, 0x10 + extHdr); + // change side number + S0[0x0A] = 0; + S1[0x0A] = 0; - int pos = 0x10 + extHdr; - int fileSize = MediaConverter.GetInt32(data, 4); // not including the final 4-byte checksum + int pos = 0x10 + extHdr; + int fileSize = MediaConverter.GetInt32(data, 4); // not including the final 4-byte checksum - int s0Pos = pos; - int s1Pos = pos; + int s0Pos = pos; + int s1Pos = pos; - // process track information - for (int t = 0; t < (data[0x09] + 1) * 2; t++) - { - var TLEN = MediaConverter.GetWordValue(data, pos + 1); - var CLEN = TLEN / 8 + (TLEN % 8 / 7) / 8; - var blockSize = TLEN + CLEN + 3; + // process track information + for (int t = 0; t < (data[0x09] + 1) * 2; t++) + { + var TLEN = MediaConverter.GetWordValue(data, pos + 1); + var CLEN = TLEN / 8 + (TLEN % 8 / 7) / 8; + var blockSize = TLEN + CLEN + 3; - // 2 sided image: side 0 tracks will all have t as an even number - try - { - if (t == 0 || t % 2 == 0) - { - Array.Copy(data, pos, S0, s0Pos, blockSize); - s0Pos += blockSize; - } - else - { - Array.Copy(data, pos, S1, s1Pos, blockSize); - s1Pos += blockSize; - } - } - catch (Exception) - { - - } - + // 2 sided image: side 0 tracks will all have t as an even number + try + { + if (t == 0 || t % 2 == 0) + { + Array.Copy(data, pos, S0, s0Pos, blockSize); + s0Pos += blockSize; + } + else + { + Array.Copy(data, pos, S1, s1Pos, blockSize); + s1Pos += blockSize; + } + } + catch (Exception) + { - pos += blockSize; - } - - // skip checkum bytes for now - - byte[] s0final = new byte[s0Pos]; - byte[] s1final = new byte[s1Pos]; - Array.Copy(S0, 0, s0final, 0, s0Pos); - Array.Copy(S1, 0, s1final, 0, s1Pos); - - results.Add(s0final); - results.Add(s1final); - - return true; - } - - public class UDIv1Track : Track - { - /// - /// Parse the UDI TrackData byte[] array into sector objects - /// - public override Sector[] Sectors - { - get - { - List secs = new List(); - var datas = TrackData.Skip(3).Take(TLEN).ToArray(); - var clocks = new BitArray(TrackData.Skip(3 + TLEN).Take(CLEN).ToArray()); - - return secs.ToArray(); - } - } - } - - public class UDIv1Sector : Sector - { - - } + } - /// - /// State serlialization - /// - public override void SyncState(Serializer ser) - { - ser.BeginSection("Plus3FloppyDisk"); + pos += blockSize; + } - ser.Sync(nameof(CylinderCount), ref CylinderCount); - ser.Sync(nameof(SideCount), ref SideCount); - ser.Sync(nameof(BytesPerTrack), ref BytesPerTrack); - ser.Sync(nameof(WriteProtected), ref WriteProtected); - ser.SyncEnum(nameof(Protection), ref Protection); + // skip checkum bytes for now - ser.Sync(nameof(DirtyData), ref DirtyData); - if (DirtyData) - { + byte[] s0final = new byte[s0Pos]; + byte[] s1final = new byte[s1Pos]; + Array.Copy(S0, 0, s0final, 0, s0Pos); + Array.Copy(S1, 0, s1final, 0, s1Pos); - } + results.Add(s0final); + results.Add(s1final); - // sync deterministic track and sector counters - ser.Sync(nameof( _randomCounter), ref _randomCounter); - RandomCounter = _randomCounter; + return true; + } - ser.EndSection(); - } - } + public class UDIv1Track : Track + { + /// + /// Parse the UDI TrackData byte[] array into sector objects + /// + public override Sector[] Sectors + { + get + { + List secs = new List(); + var datas = TrackData.Skip(3).Take(TLEN).ToArray(); + var clocks = new BitArray(TrackData.Skip(3 + TLEN).Take(CLEN).ToArray()); + + return secs.ToArray(); + } + } + } + + public class UDIv1Sector : Sector + { + + } + + + /// + /// State serlialization + /// + public override void SyncState(Serializer ser) + { + ser.BeginSection("Plus3FloppyDisk"); + + ser.Sync(nameof(CylinderCount), ref CylinderCount); + ser.Sync(nameof(SideCount), ref SideCount); + ser.Sync(nameof(BytesPerTrack), ref BytesPerTrack); + ser.Sync(nameof(WriteProtected), ref WriteProtected); + ser.SyncEnum(nameof(Protection), ref Protection); + + ser.Sync(nameof(DirtyData), ref DirtyData); + if (DirtyData) + { + + } + + // sync deterministic track and sector counters + ser.Sync(nameof(_randomCounter), ref _randomCounter); + RandomCounter = _randomCounter; + + ser.EndSection(); + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/MediaConverter.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/MediaConverter.cs index 1047d2fd1a..a8fa0effbd 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/MediaConverter.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/MediaConverter.cs @@ -6,205 +6,205 @@ using System.Linq; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Abtract class that represents all Media Converters - /// - public abstract class MediaConverter - { - /// - /// The type of serializer - /// - public abstract MediaConverterType FormatType { get; } + /// + /// Abtract class that represents all Media Converters + /// + public abstract class MediaConverter + { + /// + /// The type of serializer + /// + public abstract MediaConverterType FormatType { get; } - /// - /// Signs whether this class can be used to read the data format - /// - public virtual bool IsReader - { - get - { - return false; - } - } + /// + /// Signs whether this class can be used to read the data format + /// + public virtual bool IsReader + { + get + { + return false; + } + } - /// - /// Signs whether this class can be used to write the data format - /// - public virtual bool IsWriter - { - get - { - return false; - } - } + /// + /// Signs whether this class can be used to write the data format + /// + public virtual bool IsWriter + { + get + { + return false; + } + } - /// - /// Serialization method - /// - public virtual void Read(byte[] data) - { - throw new NotImplementedException(this.GetType().ToString() + - "Read operation is not implemented for this converter"); - } + /// + /// Serialization method + /// + public virtual void Read(byte[] data) + { + throw new NotImplementedException(this.GetType().ToString() + + "Read operation is not implemented for this converter"); + } - /// - /// DeSerialization method - /// - public virtual void Write(byte[] data) - { - throw new NotImplementedException(this.GetType().ToString() + - "Write operation is not implemented for this converter"); - } + /// + /// DeSerialization method + /// + public virtual void Write(byte[] data) + { + throw new NotImplementedException(this.GetType().ToString() + + "Write operation is not implemented for this converter"); + } - /// - /// Serializer does a quick check, returns TRUE if file is detected as this type - /// - public virtual bool CheckType(byte[] data) - { - throw new NotImplementedException(this.GetType().ToString() + - "Check type operation is not implemented for this converter"); - } + /// + /// Serializer does a quick check, returns TRUE if file is detected as this type + /// + public virtual bool CheckType(byte[] data) + { + throw new NotImplementedException(this.GetType().ToString() + + "Check type operation is not implemented for this converter"); + } - #region Static Tools + #region Static Tools - /// - /// Converts an int32 value into a byte array - /// - public static byte[] GetBytes(int value) - { - byte[] buf = new byte[4]; - buf[0] = (byte)value; - buf[1] = (byte)(value >> 8); - buf[2] = (byte)(value >> 16); - buf[3] = (byte)(value >> 24); - return buf; - } + /// + /// Converts an int32 value into a byte array + /// + public static byte[] GetBytes(int value) + { + byte[] buf = new byte[4]; + buf[0] = (byte)value; + buf[1] = (byte)(value >> 8); + buf[2] = (byte)(value >> 16); + buf[3] = (byte)(value >> 24); + return buf; + } - /// - /// Returns an int32 from a byte array based on offset - /// - public static int GetInt32(byte[] buf, int offsetIndex) - { - return buf[offsetIndex] | buf[offsetIndex + 1] << 8 | buf[offsetIndex + 2] << 16 | buf[offsetIndex + 3] << 24; - } + /// + /// Returns an int32 from a byte array based on offset + /// + public static int GetInt32(byte[] buf, int offsetIndex) + { + return buf[offsetIndex] | buf[offsetIndex + 1] << 8 | buf[offsetIndex + 2] << 16 | buf[offsetIndex + 3] << 24; + } - /// - /// Returns an int32 from a byte array based on offset (in BIG ENDIAN format) - /// - public static int GetBEInt32(byte[] buf, int offsetIndex) - { - byte[] b = new byte[4]; - Array.Copy(buf, offsetIndex, b, 0, 4); - byte[] buffer = b.Reverse().ToArray(); - int pos = 0; - return buffer[pos++] | buffer[pos++] << 8 | buffer[pos++] << 16 | buffer[pos++] << 24; - } + /// + /// Returns an int32 from a byte array based on offset (in BIG ENDIAN format) + /// + public static int GetBEInt32(byte[] buf, int offsetIndex) + { + byte[] b = new byte[4]; + Array.Copy(buf, offsetIndex, b, 0, 4); + byte[] buffer = b.Reverse().ToArray(); + int pos = 0; + return buffer[pos++] | buffer[pos++] << 8 | buffer[pos++] << 16 | buffer[pos++] << 24; + } - /// - /// Returns an int32 from a byte array based on the length of the byte array (in BIG ENDIAN format) - /// - public static int GetBEInt32FromByteArray(byte[] buf) - { - byte[] b = buf.Reverse().ToArray(); - if (b.Length == 0) - return 0; - int res = b[0]; - int pos = 1; - switch (b.Length) - { - case 1: - default: - return res; - case 2: - return res | b[pos] << (8 * pos++); - case 3: - return res | b[pos] << (8 * pos++) | b[pos] << (8 * pos++); - case 4: - return res | b[pos] << (8 * pos++) | b[pos] << (8 * pos++) | b[pos] << (8 * pos++); - case 5: - return res | b[pos] << (8 * pos++) | b[pos] << (8 * pos++) | b[pos] << (8 * pos++) | b[pos] << (8 * pos++); - case 6: - return res | b[pos] << (8 * pos++) | b[pos] << (8 * pos++) | b[pos] << (8 * pos++) | b[pos] << (8 * pos++) | b[pos] << (8 * pos++); - case 7: - return res | b[pos] << (8 * pos++) | b[pos] << (8 * pos++) | b[pos] << (8 * pos++) | b[pos] << (8 * pos++) | b[pos] << (8 * pos++) | b[pos] << (8 * pos++); - } - } + /// + /// Returns an int32 from a byte array based on the length of the byte array (in BIG ENDIAN format) + /// + public static int GetBEInt32FromByteArray(byte[] buf) + { + byte[] b = buf.Reverse().ToArray(); + if (b.Length == 0) + return 0; + int res = b[0]; + int pos = 1; + switch (b.Length) + { + case 1: + default: + return res; + case 2: + return res | b[pos] << (8 * pos++); + case 3: + return res | b[pos] << (8 * pos++) | b[pos] << (8 * pos++); + case 4: + return res | b[pos] << (8 * pos++) | b[pos] << (8 * pos++) | b[pos] << (8 * pos++); + case 5: + return res | b[pos] << (8 * pos++) | b[pos] << (8 * pos++) | b[pos] << (8 * pos++) | b[pos] << (8 * pos++); + case 6: + return res | b[pos] << (8 * pos++) | b[pos] << (8 * pos++) | b[pos] << (8 * pos++) | b[pos] << (8 * pos++) | b[pos] << (8 * pos++); + case 7: + return res | b[pos] << (8 * pos++) | b[pos] << (8 * pos++) | b[pos] << (8 * pos++) | b[pos] << (8 * pos++) | b[pos] << (8 * pos++) | b[pos] << (8 * pos++); + } + } - /// - /// Returns an int32 from a byte array based on offset - /// - public static uint GetUInt32(byte[] buf, int offsetIndex) - { - return (uint)(buf[offsetIndex] | buf[offsetIndex + 1] << 8 | buf[offsetIndex + 2] << 16 | buf[offsetIndex + 3] << 24); - } + /// + /// Returns an int32 from a byte array based on offset + /// + public static uint GetUInt32(byte[] buf, int offsetIndex) + { + return (uint)(buf[offsetIndex] | buf[offsetIndex + 1] << 8 | buf[offsetIndex + 2] << 16 | buf[offsetIndex + 3] << 24); + } - /// - /// Returns an uint16 from a byte array based on offset - /// - public static ushort GetWordValue(byte[] buf, int offsetIndex) - { - return (ushort)(buf[offsetIndex] | buf[offsetIndex + 1] << 8); - } + /// + /// Returns an uint16 from a byte array based on offset + /// + public static ushort GetWordValue(byte[] buf, int offsetIndex) + { + return (ushort)(buf[offsetIndex] | buf[offsetIndex + 1] << 8); + } - /// - /// Updates a byte array with a uint16 value based on offset - /// - public static void SetWordValue(byte[] buf, int offsetIndex, ushort value) - { - buf[offsetIndex] = (byte)value; - buf[offsetIndex + 1] = (byte)(value >> 8); - } + /// + /// Updates a byte array with a uint16 value based on offset + /// + public static void SetWordValue(byte[] buf, int offsetIndex, ushort value) + { + buf[offsetIndex] = (byte)value; + buf[offsetIndex + 1] = (byte)(value >> 8); + } - /// - /// Takes a PauseInMilliseconds value and returns the value in T-States - /// - public static int TranslatePause(int pauseInMS) - { - // t-states per millisecond - var tspms = (69888 * 50) / 1000; - // get value - int res = pauseInMS * tspms; + /// + /// Takes a PauseInMilliseconds value and returns the value in T-States + /// + public static int TranslatePause(int pauseInMS) + { + // t-states per millisecond + var tspms = (69888 * 50) / 1000; + // get value + int res = pauseInMS * tspms; - return res; - } + return res; + } - /// - /// Decompresses a byte array that is Z-RLE compressed - /// - public static void DecompressZRLE(byte[] sourceBuffer, ref byte[] destBuffer) - { - MemoryStream stream = new MemoryStream(); - stream.Write(sourceBuffer, 0, sourceBuffer.Length); - stream.Position = 0; - stream.ReadByte(); - stream.ReadByte(); - DeflateStream ds = new DeflateStream(stream, CompressionMode.Decompress, false); - ds.Read(destBuffer, 0, destBuffer.Length); - } + /// + /// Decompresses a byte array that is Z-RLE compressed + /// + public static void DecompressZRLE(byte[] sourceBuffer, ref byte[] destBuffer) + { + MemoryStream stream = new MemoryStream(); + stream.Write(sourceBuffer, 0, sourceBuffer.Length); + stream.Position = 0; + stream.ReadByte(); + stream.ReadByte(); + DeflateStream ds = new DeflateStream(stream, CompressionMode.Decompress, false); + ds.Read(destBuffer, 0, destBuffer.Length); + } - public static byte[] SerializeRaw(object obj) - { - int rSize = Marshal.SizeOf(obj); - IntPtr buff = Marshal.AllocHGlobal(rSize); - Marshal.StructureToPtr(obj, buff, false); - byte[] rData = new byte[rSize]; - Marshal.Copy(buff, rData, 0, rSize); - return rData; - } + public static byte[] SerializeRaw(object obj) + { + int rSize = Marshal.SizeOf(obj); + IntPtr buff = Marshal.AllocHGlobal(rSize); + Marshal.StructureToPtr(obj, buff, false); + byte[] rData = new byte[rSize]; + Marshal.Copy(buff, rData, 0, rSize); + return rData; + } - public static T DeserializeRaw(byte[] rData, int pos) - { - int rSize = Marshal.SizeOf(typeof(T)); - if (rSize > rData.Length - pos) - throw new Exception(); - IntPtr buff = Marshal.AllocHGlobal(rSize); - Marshal.Copy(rData, pos, buff, rSize); - T rObj = (T)Marshal.PtrToStructure(buff, typeof(T)); - Marshal.FreeHGlobal(buff); - return rObj; - } + public static T DeserializeRaw(byte[] rData, int pos) + { + int rSize = Marshal.SizeOf(typeof(T)); + if (rSize > rData.Length - pos) + throw new Exception(); + IntPtr buff = Marshal.AllocHGlobal(rSize); + Marshal.Copy(rData, pos, buff, rSize); + T rObj = (T)Marshal.PtrToStructure(buff, typeof(T)); + Marshal.FreeHGlobal(buff); + return rObj; + } - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/MediaConverterType.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/MediaConverterType.cs index c82133037b..018e5aa2fc 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/MediaConverterType.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/MediaConverterType.cs @@ -1,17 +1,17 @@  namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Represents the different types of media serializer avaiable - /// - public enum MediaConverterType - { - NONE, - TZX, - TAP, - PZX, - CSW, - WAV, - DSK - } + /// + /// Represents the different types of media serializer avaiable + /// + public enum MediaConverterType + { + NONE, + TZX, + TAP, + PZX, + CSW, + WAV, + DSK + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Snapshot/SZX/SZX.Methods.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Snapshot/SZX/SZX.Methods.cs index 0f2c25dab0..c8f0f5e7a2 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Snapshot/SZX/SZX.Methods.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Snapshot/SZX/SZX.Methods.cs @@ -11,177 +11,177 @@ using System.Threading.Tasks; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// SZX Methods - /// Based on the work done by ArjunNair in ZERO spectrum emulator: https://github.com/ArjunNair/Zero-Emulator/blob/master/Ziggy/Peripherals/SZXFile.cs - /// - public partial class SZX - { - private SpectrumBase _machine; + /// + /// SZX Methods + /// Based on the work done by ArjunNair in ZERO spectrum emulator: https://github.com/ArjunNair/Zero-Emulator/blob/master/Ziggy/Peripherals/SZXFile.cs + /// + public partial class SZX + { + private SpectrumBase _machine; - private Z80A _cpu => _machine.CPU; + private Z80A _cpu => _machine.CPU; - private SZX(SpectrumBase machine) - { - _machine = machine; - } + private SZX(SpectrumBase machine) + { + _machine = machine; + } - /// - /// Exports state information to a byte array in ZX-State format - /// - public static byte[] ExportSZX(SpectrumBase machine) - { - var s = new SZX(machine); + /// + /// Exports state information to a byte array in ZX-State format + /// + public static byte[] ExportSZX(SpectrumBase machine) + { + var s = new SZX(machine); - byte[] result = null; + byte[] result = null; - using (MemoryStream ms = new MemoryStream()) - { - using (BinaryWriter r = new BinaryWriter(ms)) - { - // temp buffer - byte[] buff; - // working block - ZXSTBLOCK block = new ZXSTBLOCK(); + using (MemoryStream ms = new MemoryStream()) + { + using (BinaryWriter r = new BinaryWriter(ms)) + { + // temp buffer + byte[] buff; + // working block + ZXSTBLOCK block = new ZXSTBLOCK(); - // header - ZXSTHEADER header = new ZXSTHEADER(); - header.dwMagic = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("ZXST"), 0); - header.chMajorVersion = 1; - header.chMinorVersion = 4; - header.chFlags = 0; - switch (s._machine.Spectrum.MachineType) - { - case MachineType.ZXSpectrum16: header.chMachineId = (int)MachineIdentifier.ZXSTMID_16K; break; - case MachineType.ZXSpectrum48: header.chMachineId = (int)MachineIdentifier.ZXSTMID_48K; break; - case MachineType.ZXSpectrum128: header.chMachineId = (int)MachineIdentifier.ZXSTMID_128K; break; - case MachineType.ZXSpectrum128Plus2: header.chMachineId = (int)MachineIdentifier.ZXSTMID_PLUS2; break; - case MachineType.ZXSpectrum128Plus2a: header.chMachineId = (int)MachineIdentifier.ZXSTMID_PLUS2A; break; - case MachineType.ZXSpectrum128Plus3: header.chMachineId = (int)MachineIdentifier.ZXSTMID_PLUS3; break; - } - buff = MediaConverter.SerializeRaw(header); - r.Write(buff); + // header + ZXSTHEADER header = new ZXSTHEADER(); + header.dwMagic = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("ZXST"), 0); + header.chMajorVersion = 1; + header.chMinorVersion = 4; + header.chFlags = 0; + switch (s._machine.Spectrum.MachineType) + { + case MachineType.ZXSpectrum16: header.chMachineId = (int)MachineIdentifier.ZXSTMID_16K; break; + case MachineType.ZXSpectrum48: header.chMachineId = (int)MachineIdentifier.ZXSTMID_48K; break; + case MachineType.ZXSpectrum128: header.chMachineId = (int)MachineIdentifier.ZXSTMID_128K; break; + case MachineType.ZXSpectrum128Plus2: header.chMachineId = (int)MachineIdentifier.ZXSTMID_PLUS2; break; + case MachineType.ZXSpectrum128Plus2a: header.chMachineId = (int)MachineIdentifier.ZXSTMID_PLUS2A; break; + case MachineType.ZXSpectrum128Plus3: header.chMachineId = (int)MachineIdentifier.ZXSTMID_PLUS3; break; + } + buff = MediaConverter.SerializeRaw(header); + r.Write(buff); - // ZXSTCREATOR - var bStruct = s.GetZXSTCREATOR(); - block.dwId = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("CRTR"), 0); - block.dwSize = (uint)Marshal.SizeOf(bStruct); - buff = MediaConverter.SerializeRaw(block); - r.Write(buff); - buff = MediaConverter.SerializeRaw(bStruct); - r.Write(buff); + // ZXSTCREATOR + var bStruct = s.GetZXSTCREATOR(); + block.dwId = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("CRTR"), 0); + block.dwSize = (uint)Marshal.SizeOf(bStruct); + buff = MediaConverter.SerializeRaw(block); + r.Write(buff); + buff = MediaConverter.SerializeRaw(bStruct); + r.Write(buff); - // ZXSTZ80REGS - var cStruct = s.GetZXSTZ80REGS(); - block.dwId = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("Z80R"), 0); - block.dwSize = (uint)Marshal.SizeOf(cStruct); - buff = MediaConverter.SerializeRaw(block); - r.Write(buff); - buff = MediaConverter.SerializeRaw(cStruct); - r.Write(buff); + // ZXSTZ80REGS + var cStruct = s.GetZXSTZ80REGS(); + block.dwId = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("Z80R"), 0); + block.dwSize = (uint)Marshal.SizeOf(cStruct); + buff = MediaConverter.SerializeRaw(block); + r.Write(buff); + buff = MediaConverter.SerializeRaw(cStruct); + r.Write(buff); - // ZXSTSPECREGS - var dStruct = s.GetZXSTSPECREGS(); - block.dwId = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("SPCR"), 0); - block.dwSize = (uint)Marshal.SizeOf(dStruct); - buff = MediaConverter.SerializeRaw(block); - r.Write(buff); - buff = MediaConverter.SerializeRaw(dStruct); - r.Write(buff); + // ZXSTSPECREGS + var dStruct = s.GetZXSTSPECREGS(); + block.dwId = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("SPCR"), 0); + block.dwSize = (uint)Marshal.SizeOf(dStruct); + buff = MediaConverter.SerializeRaw(block); + r.Write(buff); + buff = MediaConverter.SerializeRaw(dStruct); + r.Write(buff); - // ZXSTKEYBOARD - var eStruct = s.GetZXSTKEYBOARD(); - block.dwId = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("KEYB"), 0); - block.dwSize = (uint)Marshal.SizeOf(eStruct); - buff = MediaConverter.SerializeRaw(block); - r.Write(buff); - buff = MediaConverter.SerializeRaw(eStruct); - r.Write(buff); + // ZXSTKEYBOARD + var eStruct = s.GetZXSTKEYBOARD(); + block.dwId = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("KEYB"), 0); + block.dwSize = (uint)Marshal.SizeOf(eStruct); + buff = MediaConverter.SerializeRaw(block); + r.Write(buff); + buff = MediaConverter.SerializeRaw(eStruct); + r.Write(buff); - // ZXSTJOYSTICK - var fStruct = s.GetZXSTJOYSTICK(); - block.dwId = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("JOY\0"), 0); - block.dwSize = (uint)Marshal.SizeOf(fStruct); - buff = MediaConverter.SerializeRaw(block); - r.Write(buff); - buff = MediaConverter.SerializeRaw(fStruct); - r.Write(buff); - + // ZXSTJOYSTICK + var fStruct = s.GetZXSTJOYSTICK(); + block.dwId = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("JOY\0"), 0); + block.dwSize = (uint)Marshal.SizeOf(fStruct); + buff = MediaConverter.SerializeRaw(block); + r.Write(buff); + buff = MediaConverter.SerializeRaw(fStruct); + r.Write(buff); - // ZXSTAYBLOCK - if (s._machine.Spectrum.MachineType != MachineType.ZXSpectrum16 && s._machine.Spectrum.MachineType != MachineType.ZXSpectrum48) - { - var gStruct = s.GetZXSTAYBLOCK(); - block.dwId = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("AY\0\0"), 0); - block.dwSize = (uint)Marshal.SizeOf(gStruct); - buff = MediaConverter.SerializeRaw(block); - r.Write(buff); - buff = MediaConverter.SerializeRaw(gStruct); - r.Write(buff); - } - // ZXSTRAMPAGE - switch (s._machine.Spectrum.MachineType) - { - // For 16k Spectrums, only page 5 (0x4000 - 0x7fff) is saved. - case MachineType.ZXSpectrum16: - block.dwId = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("RAMP"), 0); - var rp16 = s.GetZXSTRAMPAGE(5, s._machine.RAM0); - block.dwSize = (uint)Marshal.SizeOf(rp16); - buff = MediaConverter.SerializeRaw(block); - r.Write(buff); - buff = MediaConverter.SerializeRaw(rp16); - r.Write(buff); - break; - // For 48k Spectrums and Timex TS/TC models, pages 5, 2 (0x8000 - 0xbfff) and 0 (0xc000 - 0xffff) are saved. - case MachineType.ZXSpectrum48: - block.dwId = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("RAMP"), 0); - var rp48_0 = s.GetZXSTRAMPAGE(5, s._machine.RAM0); - block.dwSize = (uint)Marshal.SizeOf(rp48_0); - buff = MediaConverter.SerializeRaw(block); - r.Write(buff); - buff = MediaConverter.SerializeRaw(rp48_0); - r.Write(buff); + // ZXSTAYBLOCK + if (s._machine.Spectrum.MachineType != MachineType.ZXSpectrum16 && s._machine.Spectrum.MachineType != MachineType.ZXSpectrum48) + { + var gStruct = s.GetZXSTAYBLOCK(); + block.dwId = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("AY\0\0"), 0); + block.dwSize = (uint)Marshal.SizeOf(gStruct); + buff = MediaConverter.SerializeRaw(block); + r.Write(buff); + buff = MediaConverter.SerializeRaw(gStruct); + r.Write(buff); + } - block.dwId = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("RAMP"), 0); - var rp48_1 = s.GetZXSTRAMPAGE(5, s._machine.RAM1); - block.dwSize = (uint)Marshal.SizeOf(rp48_1); - buff = MediaConverter.SerializeRaw(block); - r.Write(buff); - buff = MediaConverter.SerializeRaw(rp48_1); - r.Write(buff); + // ZXSTRAMPAGE + switch (s._machine.Spectrum.MachineType) + { + // For 16k Spectrums, only page 5 (0x4000 - 0x7fff) is saved. + case MachineType.ZXSpectrum16: + block.dwId = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("RAMP"), 0); + var rp16 = s.GetZXSTRAMPAGE(5, s._machine.RAM0); + block.dwSize = (uint)Marshal.SizeOf(rp16); + buff = MediaConverter.SerializeRaw(block); + r.Write(buff); + buff = MediaConverter.SerializeRaw(rp16); + r.Write(buff); + break; + // For 48k Spectrums and Timex TS/TC models, pages 5, 2 (0x8000 - 0xbfff) and 0 (0xc000 - 0xffff) are saved. + case MachineType.ZXSpectrum48: + block.dwId = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("RAMP"), 0); + var rp48_0 = s.GetZXSTRAMPAGE(5, s._machine.RAM0); + block.dwSize = (uint)Marshal.SizeOf(rp48_0); + buff = MediaConverter.SerializeRaw(block); + r.Write(buff); + buff = MediaConverter.SerializeRaw(rp48_0); + r.Write(buff); - block.dwId = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("RAMP"), 0); - var rp48_2 = s.GetZXSTRAMPAGE(5, s._machine.RAM2); - block.dwSize = (uint)Marshal.SizeOf(rp48_2); - buff = MediaConverter.SerializeRaw(block); - r.Write(buff); - buff = MediaConverter.SerializeRaw(rp48_2); - r.Write(buff); - break; - // For 128k Spectrums and the Pentagon 128, all pages (0-7) are saved. - case MachineType.ZXSpectrum128: - case MachineType.ZXSpectrum128Plus2: - case MachineType.ZXSpectrum128Plus2a: - case MachineType.ZXSpectrum128Plus3: - List rams = new List - { - s._machine.RAM0, s._machine.RAM1, s._machine.RAM2, s._machine.RAM3, - s._machine.RAM4, s._machine.RAM5, s._machine.RAM6, s._machine.RAM7 - }; - for (byte i = 0; i < 8; i++) - { - block.dwId = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("RAMP"), 0); - var rp = s.GetZXSTRAMPAGE(i, rams[i]); - block.dwSize = (uint)Marshal.SizeOf(rp); - buff = MediaConverter.SerializeRaw(block); - r.Write(buff); - buff = MediaConverter.SerializeRaw(rp); - r.Write(buff); - } - break; - } - /* + block.dwId = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("RAMP"), 0); + var rp48_1 = s.GetZXSTRAMPAGE(5, s._machine.RAM1); + block.dwSize = (uint)Marshal.SizeOf(rp48_1); + buff = MediaConverter.SerializeRaw(block); + r.Write(buff); + buff = MediaConverter.SerializeRaw(rp48_1); + r.Write(buff); + + block.dwId = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("RAMP"), 0); + var rp48_2 = s.GetZXSTRAMPAGE(5, s._machine.RAM2); + block.dwSize = (uint)Marshal.SizeOf(rp48_2); + buff = MediaConverter.SerializeRaw(block); + r.Write(buff); + buff = MediaConverter.SerializeRaw(rp48_2); + r.Write(buff); + break; + // For 128k Spectrums and the Pentagon 128, all pages (0-7) are saved. + case MachineType.ZXSpectrum128: + case MachineType.ZXSpectrum128Plus2: + case MachineType.ZXSpectrum128Plus2a: + case MachineType.ZXSpectrum128Plus3: + List rams = new List + { + s._machine.RAM0, s._machine.RAM1, s._machine.RAM2, s._machine.RAM3, + s._machine.RAM4, s._machine.RAM5, s._machine.RAM6, s._machine.RAM7 + }; + for (byte i = 0; i < 8; i++) + { + block.dwId = MediaConverter.GetUInt32(Encoding.UTF8.GetBytes("RAMP"), 0); + var rp = s.GetZXSTRAMPAGE(i, rams[i]); + block.dwSize = (uint)Marshal.SizeOf(rp); + buff = MediaConverter.SerializeRaw(block); + r.Write(buff); + buff = MediaConverter.SerializeRaw(rp); + r.Write(buff); + } + break; + } + /* // ZXSTPLUS3 if (s._machine.Spectrum.MachineType == MachineType.ZXSpectrum128Plus3) { @@ -223,201 +223,201 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum r.Write(terminator); } */ - - } - result = ms.ToArray(); - } + } - return result; - } + result = ms.ToArray(); + } - private ZXSTRAMPAGE GetZXSTRAMPAGE(byte page, byte[] RAM) - { - var s = new ZXSTRAMPAGE(); - s.wFlags = 0; // uncompressed only at the moment - s.chPageNo = page; - s.ramPage = RAM; - return s; - } + return result; + } - private ZXSTCREATOR GetZXSTCREATOR() - { - var s = new ZXSTCREATOR(); - var str = "BIZHAWK EMULATOR".ToCharArray(); - s.szCreator = new char[32]; - for (int i = 0; i < str.Length; i++) - s.szCreator[i] = str[i]; - s.chMajorVersion = 1; - s.chMinorVersion = 4; + private ZXSTRAMPAGE GetZXSTRAMPAGE(byte page, byte[] RAM) + { + var s = new ZXSTRAMPAGE(); + s.wFlags = 0; // uncompressed only at the moment + s.chPageNo = page; + s.ramPage = RAM; + return s; + } - return s; - } + private ZXSTCREATOR GetZXSTCREATOR() + { + var s = new ZXSTCREATOR(); + var str = "BIZHAWK EMULATOR".ToCharArray(); + s.szCreator = new char[32]; + for (int i = 0; i < str.Length; i++) + s.szCreator[i] = str[i]; + s.chMajorVersion = 1; + s.chMinorVersion = 4; - private ZXSTZ80REGS GetZXSTZ80REGS() - { - var s = new ZXSTZ80REGS(); - s.AF = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["AF"].Value; - s.BC = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["BC"].Value; - s.DE = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["DE"].Value; - s.HL = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["HL"].Value; - s.AF1 = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["Shadow AF"].Value; - s.BC1 = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["Shadow BC"].Value; - s.DE1 = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["Shadow DE"].Value; - s.HL1 = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["Shadow HL"].Value; - s.IX = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["IX"].Value; - s.IY = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["IY"].Value; - s.SP = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["SP"].Value; - s.PC = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["PC"].Value; - s.I = (byte)_machine.CPU.Regs[_machine.CPU.I]; - s.R = (byte)_machine.CPU.Regs[_machine.CPU.R]; - s.IFF1 = (byte)(_machine.CPU.IFF1 ? 1 : 0); - s.IFF2 = (byte)(_machine.CPU.IFF2 ? 1 : 0); - s.IM = (byte)_machine.CPU.InterruptMode; - s.dwCyclesStart = (uint)(_machine.CurrentFrameCycle + _machine.ULADevice.InterruptStartTime); - s.wMemPtr = (ushort)(_machine.CPU.Regs[_machine.CPU.Z] + (_machine.CPU.Regs[_machine.CPU.W] << 8)); - //s.chHoldIntReqCycles = ? - - if (_machine.CPU.EIPending > 0) - { - s.chFlags |= ZXSTZF_EILAST; - } - else if (_machine.CPU.halted) - { - s.chFlags |= ZXSTZF_HALTED; - } - - return s; - } + return s; + } - private ZXSTSPECREGS GetZXSTSPECREGS() - { - var s = new ZXSTSPECREGS(); - s.chBorder = _machine.ULADevice.BorderColor > 7 ? (byte)0 : (byte)_machine.ULADevice.BorderColor; - s.chFe = _machine.LastFe; - byte x7ffd = (byte)_machine.RAMPaged; - byte x1ffd = 0; - switch (_machine.Spectrum.MachineType) - { - case MachineType.ZXSpectrum16: - case MachineType.ZXSpectrum48: - s.ch7ffd = 0; - s.unionPage = 0; - break; + private ZXSTZ80REGS GetZXSTZ80REGS() + { + var s = new ZXSTZ80REGS(); + s.AF = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["AF"].Value; + s.BC = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["BC"].Value; + s.DE = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["DE"].Value; + s.HL = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["HL"].Value; + s.AF1 = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["Shadow AF"].Value; + s.BC1 = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["Shadow BC"].Value; + s.DE1 = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["Shadow DE"].Value; + s.HL1 = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["Shadow HL"].Value; + s.IX = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["IX"].Value; + s.IY = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["IY"].Value; + s.SP = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["SP"].Value; + s.PC = (ushort)_machine.Spectrum.GetCpuFlagsAndRegisters()["PC"].Value; + s.I = (byte)_machine.CPU.Regs[_machine.CPU.I]; + s.R = (byte)_machine.CPU.Regs[_machine.CPU.R]; + s.IFF1 = (byte)(_machine.CPU.IFF1 ? 1 : 0); + s.IFF2 = (byte)(_machine.CPU.IFF2 ? 1 : 0); + s.IM = (byte)_machine.CPU.InterruptMode; + s.dwCyclesStart = (uint)(_machine.CurrentFrameCycle + _machine.ULADevice.InterruptStartTime); + s.wMemPtr = (ushort)(_machine.CPU.Regs[_machine.CPU.Z] + (_machine.CPU.Regs[_machine.CPU.W] << 8)); + //s.chHoldIntReqCycles = ? - case MachineType.ZXSpectrum128: - case MachineType.ZXSpectrum128Plus2: - // 7FFD - if (_machine._ROMpaged == 1) - x7ffd |= 0x10; - if (_machine.SHADOWPaged) - x7ffd |= 0x08; - if (_machine.PagingDisabled) - x7ffd |= 0x20; - break; + if (_machine.CPU.EIPending > 0) + { + s.chFlags |= ZXSTZF_EILAST; + } + else if (_machine.CPU.halted) + { + s.chFlags |= ZXSTZF_HALTED; + } - case MachineType.ZXSpectrum128Plus2a: - case MachineType.ZXSpectrum128Plus3: - if (_machine.UPDDiskDevice.FDD_FLAG_MOTOR) - x1ffd |= 0x08; - if (_machine.SpecialPagingMode) - { - x1ffd |= 0x01; - switch (_machine.PagingConfiguration) - { - case 1: - x1ffd |= 0x02; - break; - case 2: - x1ffd |= 0x04; - break; - case 3: - x1ffd |= 0x02; - x1ffd |= 0x04; - break; - } - } - else - { - if (_machine.ROMhigh) - x1ffd |= 0x04; - } - if (_machine.ROMlow) - x7ffd |= 0x10; - if (_machine.SHADOWPaged) - x7ffd |= 0x08; - if (_machine.PagingDisabled) - x7ffd |= 0x20; - break; - } + return s; + } - s.ch7ffd = x7ffd; - s.unionPage = x1ffd; - return s; - } + private ZXSTSPECREGS GetZXSTSPECREGS() + { + var s = new ZXSTSPECREGS(); + s.chBorder = _machine.ULADevice.BorderColor > 7 ? (byte)0 : (byte)_machine.ULADevice.BorderColor; + s.chFe = _machine.LastFe; + byte x7ffd = (byte)_machine.RAMPaged; + byte x1ffd = 0; + switch (_machine.Spectrum.MachineType) + { + case MachineType.ZXSpectrum16: + case MachineType.ZXSpectrum48: + s.ch7ffd = 0; + s.unionPage = 0; + break; - private ZXSTKEYBOARD GetZXSTKEYBOARD() - { - var s = new ZXSTKEYBOARD(); - s.dwFlags = 0; //no issue 2 emulation - s.chKeyboardJoystick |= (byte)JoystickTypes.ZXSTKJT_NONE; - return s; - } + case MachineType.ZXSpectrum128: + case MachineType.ZXSpectrum128Plus2: + // 7FFD + if (_machine._ROMpaged == 1) + x7ffd |= 0x10; + if (_machine.SHADOWPaged) + x7ffd |= 0x08; + if (_machine.PagingDisabled) + x7ffd |= 0x20; + break; - private ZXSTJOYSTICK GetZXSTJOYSTICK() - { - var s = new ZXSTJOYSTICK(); - s.dwFlags = 0; //depreciated - s.chTypePlayer1 |= (byte)JoystickTypes.ZXSTKJT_KEMPSTON; - s.chTypePlayer2 |= (byte)JoystickTypes.ZXSTKJT_SINCLAIR1; - return s; - } + case MachineType.ZXSpectrum128Plus2a: + case MachineType.ZXSpectrum128Plus3: + if (_machine.UPDDiskDevice.FDD_FLAG_MOTOR) + x1ffd |= 0x08; + if (_machine.SpecialPagingMode) + { + x1ffd |= 0x01; + switch (_machine.PagingConfiguration) + { + case 1: + x1ffd |= 0x02; + break; + case 2: + x1ffd |= 0x04; + break; + case 3: + x1ffd |= 0x02; + x1ffd |= 0x04; + break; + } + } + else + { + if (_machine.ROMhigh) + x1ffd |= 0x04; + } + if (_machine.ROMlow) + x7ffd |= 0x10; + if (_machine.SHADOWPaged) + x7ffd |= 0x08; + if (_machine.PagingDisabled) + x7ffd |= 0x20; + break; + } - private ZXSTAYBLOCK GetZXSTAYBLOCK() - { - var s = new ZXSTAYBLOCK(); - s.cFlags = 0; // no external units - s.chCurrentRegister = (byte)_machine.AYDevice.SelectedRegister; - var regs = _machine.AYDevice.ExportRegisters(); - s.chAyRegs = new byte[16]; - for (int i = 0; i < 16; i++) - { - s.chAyRegs[i] = (byte)regs[i]; - } - return s; - } + s.ch7ffd = x7ffd; + s.unionPage = x1ffd; + return s; + } - private ZXSTTAPE GetZXSTTAPE() - { - var s = new ZXSTTAPE(); - s.wFlags |= (int)CassetteRecorderState.ZXSTTP_EMBEDDED; - s.wCurrentBlockNo = (ushort)_machine.TapeDevice.CurrentDataBlockIndex; - s.dwCompressedSize = _machine.tapeImages[_machine.TapeDevice.CurrentDataBlockIndex].Length; - s.dwUncompressedSize = _machine.tapeImages[_machine.TapeDevice.CurrentDataBlockIndex].Length; - char[] ext = "tzx".ToCharArray(); - s.szFileExtension = new char[16]; - for (int f = 1; f < ext.Length; f++) - { - s.szFileExtension[f - 1] = ext[f]; - } - return s; - } + private ZXSTKEYBOARD GetZXSTKEYBOARD() + { + var s = new ZXSTKEYBOARD(); + s.dwFlags = 0; //no issue 2 emulation + s.chKeyboardJoystick |= (byte)JoystickTypes.ZXSTKJT_NONE; + return s; + } - private ZXSTPLUS3 GetZXSTPLUS3() - { - var s = new ZXSTPLUS3(); - s.chNumDrives = 1; - s.fMotorOn = _machine.UPDDiskDevice.FDD_FLAG_MOTOR ? (byte)1 : (byte)0; - return s; - } + private ZXSTJOYSTICK GetZXSTJOYSTICK() + { + var s = new ZXSTJOYSTICK(); + s.dwFlags = 0; //depreciated + s.chTypePlayer1 |= (byte)JoystickTypes.ZXSTKJT_KEMPSTON; + s.chTypePlayer2 |= (byte)JoystickTypes.ZXSTKJT_SINCLAIR1; + return s; + } - private ZXSTDSKFILE GetZXSTDSKFILE() - { - var s = new ZXSTDSKFILE(); - s.wFlags = 0; - s.chDriveNum = 0; - s.dwUncompressedSize = 0; - return s; - } - } + private ZXSTAYBLOCK GetZXSTAYBLOCK() + { + var s = new ZXSTAYBLOCK(); + s.cFlags = 0; // no external units + s.chCurrentRegister = (byte)_machine.AYDevice.SelectedRegister; + var regs = _machine.AYDevice.ExportRegisters(); + s.chAyRegs = new byte[16]; + for (int i = 0; i < 16; i++) + { + s.chAyRegs[i] = (byte)regs[i]; + } + return s; + } + + private ZXSTTAPE GetZXSTTAPE() + { + var s = new ZXSTTAPE(); + s.wFlags |= (int)CassetteRecorderState.ZXSTTP_EMBEDDED; + s.wCurrentBlockNo = (ushort)_machine.TapeDevice.CurrentDataBlockIndex; + s.dwCompressedSize = _machine.tapeImages[_machine.TapeDevice.CurrentDataBlockIndex].Length; + s.dwUncompressedSize = _machine.tapeImages[_machine.TapeDevice.CurrentDataBlockIndex].Length; + char[] ext = "tzx".ToCharArray(); + s.szFileExtension = new char[16]; + for (int f = 1; f < ext.Length; f++) + { + s.szFileExtension[f - 1] = ext[f]; + } + return s; + } + + private ZXSTPLUS3 GetZXSTPLUS3() + { + var s = new ZXSTPLUS3(); + s.chNumDrives = 1; + s.fMotorOn = _machine.UPDDiskDevice.FDD_FLAG_MOTOR ? (byte)1 : (byte)0; + return s; + } + + private ZXSTDSKFILE GetZXSTDSKFILE() + { + var s = new ZXSTDSKFILE(); + s.wFlags = 0; + s.chDriveNum = 0; + s.dwUncompressedSize = 0; + return s; + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Snapshot/SZX/SZX.Objects.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Snapshot/SZX/SZX.Objects.cs index 3bbe9acead..50699fa0bc 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Snapshot/SZX/SZX.Objects.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Snapshot/SZX/SZX.Objects.cs @@ -7,404 +7,404 @@ using System.Threading.Tasks; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Structs, Constants and Enums - /// http://www.spectaculator.com/docs/zx-state/intro.shtml - /// - public partial class SZX - { - #region ZX-State Header - - public enum MachineIdentifier : byte - { - ZXSTMID_16K = 0, - ZXSTMID_48K = 1, - ZXSTMID_128K = 2, - ZXSTMID_PLUS2 = 3, - ZXSTMID_PLUS2A = 4, - ZXSTMID_PLUS3 = 5, - ZXSTMID_PLUS3E = 6, - ZXSTMID_PENTAGON128 = 7, - ZXSTMID_TC2048 = 8, - ZXSTMID_TC2068 = 9, - ZXSTMID_SCORPION = 10, - ZXSTMID_SE = 11, - ZXSTMID_TS2068 = 12, - ZXSTMID_PENTAGON512 = 13, - ZXSTMID_PENTAGON1024 = 14, - ZXSTMID_NTSC48K = 15, - ZXSTMID_128KE = 16 - } - - /// - /// If set, the emulated Spectrum uses alternate timings (one cycle later than normal timings). If reset, the emulated Spectrum uses standard timings. - /// This flag is only applicable for the ZXSTMID_16K, ZXSTMID_48K and ZXSTMID_128K models. - /// - public const int ZXSTMF_ALTERNATETIMINGS = 1; - - /// - /// The zx-state header appears right at the start of a zx-state (.szx) file. - /// - [StructLayout(LayoutKind.Sequential, Pack = 1)] - public struct ZXSTHEADER - { - public uint dwMagic; - public byte chMajorVersion; - public byte chMinorVersion; - public byte chMachineId; - public byte chFlags; - } - - #endregion - - #region ZXSTBLOCK Header - - /// - /// Block Header. Each real block starts with this header. - /// - public struct ZXSTBLOCK - { - public uint dwId; - public uint dwSize; - } - - #endregion - - #region ZXSTCREATOR - - /// - /// This block identifies the program that created this zx-state file. - /// - [StructLayout(LayoutKind.Sequential, Pack = 1)] - public struct ZXSTCREATOR - { - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] - public char[] szCreator; - public short chMajorVersion; - public short chMinorVersion; - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] - public byte[] chData; - } - - #endregion - - #region ZXSTZ80REGS - - /// - /// The last instruction executed was an EI instruction or an invalid $DD or $FD prefix. - /// - public const int ZXSTZF_EILAST = 1; - /// - /// The last instruction executed was a HALT instruction. The CPU is currently executing NOPs and will continue to do so until the next interrupt occurs. - /// This flag is mutually exclusive with ZXSTZF_EILAST. - /// - public const int ZXSTZF_HALTED = 2; - - /// - /// Contains the Z80 registers and other internal state values. It does not contain any specific model registers. - /// - [StructLayout(LayoutKind.Sequential, Pack = 1)] - public struct ZXSTZ80REGS - { - public ushort AF, BC, DE, HL; - public ushort AF1, BC1, DE1, HL1; - public ushort IX, IY, SP, PC; - public byte I; - public byte R; - public byte IFF1, IFF2; - public byte IM; - public uint dwCyclesStart; - public byte chHoldIntReqCycles; - public byte chFlags; - public ushort wMemPtr; - } - - #endregion - - #region ZXSTSPECREGS - - [StructLayout(LayoutKind.Sequential, Pack = 1)] - public struct ZXSTSPECREGS - { - public byte chBorder; - public byte ch7ffd; - public byte unionPage; - public byte chFe; - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] - public byte[] chReserved; - } - - #endregion - - #region ZXSTAYBLOCK - - /// - /// Fuller Box emulation - /// - public const int ZXSTAYF_FULLERBOX = 1; - /// - /// Melodik Soundbox emulation. - /// This is essentially an AY chip for older Spectrums that uses the same ports as that found in 128k Spectrums - /// - public const int ZXSTAYF_128AY = 2; - - /// - /// The state of the AY chip found in all 128k Spectrums, Pentagons, Scorpions and Timex machines. - /// This block may also be present for 16k/48k Spectrums if Fuller Box or Melodik emulation is enabled. - /// - [StructLayout(LayoutKind.Sequential, Pack = 1)] - public struct ZXSTAYBLOCK - { - public byte cFlags; - public byte chCurrentRegister; - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public byte[] chAyRegs; - } - - #endregion - - #region ZXSTRAMPAGE - - /// - /// Ram pages are compressed using Zlib - /// - public const int ZXSTRF_COMPRESSED = 1; - - /// - /// zx-state files will contain a number of 16KB RAM page blocks, depending on the specific Spectrum model. - /// - [StructLayout(LayoutKind.Sequential, Pack = 1)] - public struct ZXSTRAMPAGE - { - public ushort wFlags; - public byte chPageNo; - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x4000)] - public byte[] ramPage; - } - - #endregion - - #region ZXSTKEYBOARD - - /// - /// Keyboard state - /// - public const int ZXSTKF_ISSUE2 = 1; - - /// - /// Supported joystick types - /// - public enum JoystickTypes - { - ZXSTKJT_KEMPSTON = 0, - ZXSTKJT_FULLER = 1, - ZXSTKJT_CURSOR = 2, - ZXSTKJT_SINCLAIR1 = 3, - ZXSTKJT_SINCLAIR2 = 4, - ZXSTKJT_SPECTRUMPLUS = 5, - ZXSTKJT_TIMEX1 = 6, - ZXSTKJT_TIMEX2 = 7, - ZXSTKJT_NONE = 8 - } - - /// - /// The state of the Spectrum keyboard and any keyboard joystick emulation. - /// - [StructLayout(LayoutKind.Sequential, Pack = 1)] - public struct ZXSTKEYBOARD - { - public uint dwFlags; - public byte chKeyboardJoystick; - } - - #endregion - - #region ZXSTJOYSTICK - - /// - /// Joystick setup for both players. - /// - [StructLayout(LayoutKind.Sequential, Pack = 1)] - public struct ZXSTJOYSTICK - { - public uint dwFlags; - public byte chTypePlayer1; - public byte chTypePlayer2; - } - - #endregion - - #region ZXSTTAPE - - /// - /// Cassette Recorder state - /// - public enum CassetteRecorderState - { - ZXSTTP_EMBEDDED = 1, - ZXSTTP_COMPRESSED = 2 - } - - [StructLayout(LayoutKind.Sequential, Pack = 1)] - public struct ZXSTTAPE - { - public ushort wCurrentBlockNo; - public ushort wFlags; - public int dwUncompressedSize; - public int dwCompressedSize; - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public char[] szFileExtension; - } + /// + /// Structs, Constants and Enums + /// http://www.spectaculator.com/docs/zx-state/intro.shtml + /// + public partial class SZX + { + #region ZX-State Header + + public enum MachineIdentifier : byte + { + ZXSTMID_16K = 0, + ZXSTMID_48K = 1, + ZXSTMID_128K = 2, + ZXSTMID_PLUS2 = 3, + ZXSTMID_PLUS2A = 4, + ZXSTMID_PLUS3 = 5, + ZXSTMID_PLUS3E = 6, + ZXSTMID_PENTAGON128 = 7, + ZXSTMID_TC2048 = 8, + ZXSTMID_TC2068 = 9, + ZXSTMID_SCORPION = 10, + ZXSTMID_SE = 11, + ZXSTMID_TS2068 = 12, + ZXSTMID_PENTAGON512 = 13, + ZXSTMID_PENTAGON1024 = 14, + ZXSTMID_NTSC48K = 15, + ZXSTMID_128KE = 16 + } + + /// + /// If set, the emulated Spectrum uses alternate timings (one cycle later than normal timings). If reset, the emulated Spectrum uses standard timings. + /// This flag is only applicable for the ZXSTMID_16K, ZXSTMID_48K and ZXSTMID_128K models. + /// + public const int ZXSTMF_ALTERNATETIMINGS = 1; + + /// + /// The zx-state header appears right at the start of a zx-state (.szx) file. + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ZXSTHEADER + { + public uint dwMagic; + public byte chMajorVersion; + public byte chMinorVersion; + public byte chMachineId; + public byte chFlags; + } + + #endregion + + #region ZXSTBLOCK Header + + /// + /// Block Header. Each real block starts with this header. + /// + public struct ZXSTBLOCK + { + public uint dwId; + public uint dwSize; + } + + #endregion + + #region ZXSTCREATOR + + /// + /// This block identifies the program that created this zx-state file. + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ZXSTCREATOR + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] + public char[] szCreator; + public short chMajorVersion; + public short chMinorVersion; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] + public byte[] chData; + } + + #endregion + + #region ZXSTZ80REGS + + /// + /// The last instruction executed was an EI instruction or an invalid $DD or $FD prefix. + /// + public const int ZXSTZF_EILAST = 1; + /// + /// The last instruction executed was a HALT instruction. The CPU is currently executing NOPs and will continue to do so until the next interrupt occurs. + /// This flag is mutually exclusive with ZXSTZF_EILAST. + /// + public const int ZXSTZF_HALTED = 2; + + /// + /// Contains the Z80 registers and other internal state values. It does not contain any specific model registers. + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ZXSTZ80REGS + { + public ushort AF, BC, DE, HL; + public ushort AF1, BC1, DE1, HL1; + public ushort IX, IY, SP, PC; + public byte I; + public byte R; + public byte IFF1, IFF2; + public byte IM; + public uint dwCyclesStart; + public byte chHoldIntReqCycles; + public byte chFlags; + public ushort wMemPtr; + } + + #endregion + + #region ZXSTSPECREGS + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ZXSTSPECREGS + { + public byte chBorder; + public byte ch7ffd; + public byte unionPage; + public byte chFe; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] + public byte[] chReserved; + } + + #endregion + + #region ZXSTAYBLOCK + + /// + /// Fuller Box emulation + /// + public const int ZXSTAYF_FULLERBOX = 1; + /// + /// Melodik Soundbox emulation. + /// This is essentially an AY chip for older Spectrums that uses the same ports as that found in 128k Spectrums + /// + public const int ZXSTAYF_128AY = 2; + + /// + /// The state of the AY chip found in all 128k Spectrums, Pentagons, Scorpions and Timex machines. + /// This block may also be present for 16k/48k Spectrums if Fuller Box or Melodik emulation is enabled. + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ZXSTAYBLOCK + { + public byte cFlags; + public byte chCurrentRegister; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] + public byte[] chAyRegs; + } + + #endregion + + #region ZXSTRAMPAGE + + /// + /// Ram pages are compressed using Zlib + /// + public const int ZXSTRF_COMPRESSED = 1; + + /// + /// zx-state files will contain a number of 16KB RAM page blocks, depending on the specific Spectrum model. + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ZXSTRAMPAGE + { + public ushort wFlags; + public byte chPageNo; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x4000)] + public byte[] ramPage; + } + + #endregion + + #region ZXSTKEYBOARD + + /// + /// Keyboard state + /// + public const int ZXSTKF_ISSUE2 = 1; + + /// + /// Supported joystick types + /// + public enum JoystickTypes + { + ZXSTKJT_KEMPSTON = 0, + ZXSTKJT_FULLER = 1, + ZXSTKJT_CURSOR = 2, + ZXSTKJT_SINCLAIR1 = 3, + ZXSTKJT_SINCLAIR2 = 4, + ZXSTKJT_SPECTRUMPLUS = 5, + ZXSTKJT_TIMEX1 = 6, + ZXSTKJT_TIMEX2 = 7, + ZXSTKJT_NONE = 8 + } + + /// + /// The state of the Spectrum keyboard and any keyboard joystick emulation. + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ZXSTKEYBOARD + { + public uint dwFlags; + public byte chKeyboardJoystick; + } + + #endregion + + #region ZXSTJOYSTICK + + /// + /// Joystick setup for both players. + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ZXSTJOYSTICK + { + public uint dwFlags; + public byte chTypePlayer1; + public byte chTypePlayer2; + } + + #endregion + + #region ZXSTTAPE + + /// + /// Cassette Recorder state + /// + public enum CassetteRecorderState + { + ZXSTTP_EMBEDDED = 1, + ZXSTTP_COMPRESSED = 2 + } + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ZXSTTAPE + { + public ushort wCurrentBlockNo; + public ushort wFlags; + public int dwUncompressedSize; + public int dwCompressedSize; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] + public char[] szFileExtension; + } - #endregion + #endregion - #region ZXSTPLUS3 + #region ZXSTPLUS3 - /// - /// The number of drives connected to the Spectrum +3 and whether their motors are turned on. - /// Any blocks specifying which disk files are in which drive will follow this one. - /// - [StructLayout(LayoutKind.Sequential, Pack = 1)] - public struct ZXSTPLUS3 - { - public byte chNumDrives; - public byte fMotorOn; - } + /// + /// The number of drives connected to the Spectrum +3 and whether their motors are turned on. + /// Any blocks specifying which disk files are in which drive will follow this one. + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ZXSTPLUS3 + { + public byte chNumDrives; + public byte fMotorOn; + } - #endregion + #endregion - #region ZXSTDSKFILE + #region ZXSTDSKFILE - /// - /// Not implemented. All disk images are currently links to external .dsk or .ipf files - /// - public const int ZXSTDSKF_COMPRESSED = 1; - /// - /// Not implemented. All disk images are currently links to external .dsk or .ipf files - /// - public const int ZXSTDSKF_EMBEDDED = 2; - /// - /// When a double-sided disk is inserted into a single-sided drive, specifies the side being read from/written to. - /// If set, Side B is the active side, otherwise it is Side A. - /// - public const int ZXSTDSKF_SIDEB = 3; + /// + /// Not implemented. All disk images are currently links to external .dsk or .ipf files + /// + public const int ZXSTDSKF_COMPRESSED = 1; + /// + /// Not implemented. All disk images are currently links to external .dsk or .ipf files + /// + public const int ZXSTDSKF_EMBEDDED = 2; + /// + /// When a double-sided disk is inserted into a single-sided drive, specifies the side being read from/written to. + /// If set, Side B is the active side, otherwise it is Side A. + /// + public const int ZXSTDSKF_SIDEB = 3; - /// - /// Each +3 disk drive that has a disk inserted in it will have one of these blocks. - /// They follow the ZXSTPLUS3 block which identifies the number of drives. - /// - [StructLayout(LayoutKind.Sequential, Pack = 1)] - public struct ZXSTDSKFILE - { - public ushort wFlags; - public byte chDriveNum; - public int dwUncompressedSize; - } + /// + /// Each +3 disk drive that has a disk inserted in it will have one of these blocks. + /// They follow the ZXSTPLUS3 block which identifies the number of drives. + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ZXSTDSKFILE + { + public ushort wFlags; + public byte chDriveNum; + public int dwUncompressedSize; + } - #endregion + #endregion - #region Not Yet Implemented + #region Not Yet Implemented - #region ZXSTATASP + #region ZXSTATASP - #endregion + #endregion - #region ZXSTATARAM + #region ZXSTATARAM - #endregion + #endregion - #region ZXSTCF + #region ZXSTCF - #endregion + #endregion - #region ZXSTCFRAM + #region ZXSTCFRAM - #endregion + #endregion - #region ZXSTCOVOX + #region ZXSTCOVOX - #endregion + #endregion - #region ZXSTBETA128 + #region ZXSTBETA128 - #endregion + #endregion - #region ZXSTBETADISK + #region ZXSTBETADISK - #endregion + #endregion - #region ZXSTDOCK + #region ZXSTDOCK - #endregion + #endregion - #region ZXSTGS + #region ZXSTGS - #endregion + #endregion - #region ZXSTGSRAMPAGE + #region ZXSTGSRAMPAGE - #endregion + #endregion - #region ZXSTIF1 + #region ZXSTIF1 - #endregion + #endregion - #region ZXSTIF2ROM + #region ZXSTIF2ROM - #endregion + #endregion - #region ZXSTMCART + #region ZXSTMCART - #endregion + #endregion - #region ZXSTMOUSE + #region ZXSTMOUSE - #endregion + #endregion - #region ZXSTMULTIFACE + #region ZXSTMULTIFACE - #endregion + #endregion - #region ZXSTOPUS + #region ZXSTOPUS - #endregion + #endregion - #region ZXSTOPUSDISK + #region ZXSTOPUSDISK - #endregion + #endregion - #region ZXSTPLUSD + #region ZXSTPLUSD - #endregion + #endregion - #region ZXSTPLUSDDISK + #region ZXSTPLUSDDISK - #endregion + #endregion - #region ZXSTROM + #region ZXSTROM - #endregion + #endregion - #region ZXSTSCLDREGS + #region ZXSTSCLDREGS - #endregion + #endregion - #region ZXSTSIDE + #region ZXSTSIDE - #endregion + #endregion - #region ZXSTSPECDRUM + #region ZXSTSPECDRUM - #endregion + #endregion - #region ZXSTUSPEECH + #region ZXSTUSPEECH - #endregion + #endregion - #region ZXSTZXPRINTER + #region ZXSTZXPRINTER - #endregion + #endregion - #endregion - } + #endregion + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/CSW/CswConverter.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/CSW/CswConverter.cs index 0506b1e232..679370c5ca 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/CSW/CswConverter.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/CSW/CswConverter.cs @@ -6,121 +6,121 @@ using System.Text; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Responsible for Compressed Square Wave conversion - /// https://web.archive.org/web/20171024182530/http://ramsoft.bbk.org.omegahg.com/csw.html - /// - public class CswConverter : MediaConverter - { - /// - /// The type of serializer - /// - private MediaConverterType _formatType = MediaConverterType.CSW; - public override MediaConverterType FormatType - { - get - { - return _formatType; - } - } + /// + /// Responsible for Compressed Square Wave conversion + /// https://web.archive.org/web/20171024182530/http://ramsoft.bbk.org.omegahg.com/csw.html + /// + public class CswConverter : MediaConverter + { + /// + /// The type of serializer + /// + private MediaConverterType _formatType = MediaConverterType.CSW; + public override MediaConverterType FormatType + { + get + { + return _formatType; + } + } - /// - /// Position counter - /// - private int _position = 0; + /// + /// Position counter + /// + private int _position = 0; - /// - /// Signs whether this class can be used to read the data format - /// - public override bool IsReader { get { return true; } } + /// + /// Signs whether this class can be used to read the data format + /// + public override bool IsReader { get { return true; } } - /// - /// Signs whether this class can be used to write the data format - /// - public override bool IsWriter { get { return false; } } + /// + /// Signs whether this class can be used to write the data format + /// + public override bool IsWriter { get { return false; } } - #region Construction + #region Construction - private DatacorderDevice _datacorder; + private DatacorderDevice _datacorder; - public CswConverter(DatacorderDevice _tapeDevice) - { - _datacorder = _tapeDevice; - } + public CswConverter(DatacorderDevice _tapeDevice) + { + _datacorder = _tapeDevice; + } - #endregion + #endregion - /// - /// Returns TRUE if pzx header is detected - /// - public override bool CheckType(byte[] data) - { - // CSW Header + /// + /// Returns TRUE if pzx header is detected + /// + public override bool CheckType(byte[] data) + { + // CSW Header - // check whether this is a valid csw format file by looking at the identifier in the header - // (first 22 bytes of the file) - string ident = Encoding.ASCII.GetString(data, 0, 22); + // check whether this is a valid csw format file by looking at the identifier in the header + // (first 22 bytes of the file) + string ident = Encoding.ASCII.GetString(data, 0, 22); - // version info - int majorVer = data[8]; - int minorVer = data[9]; + // version info + int majorVer = data[8]; + int minorVer = data[9]; - if (ident.ToUpper() != "COMPRESSED SQUARE WAVE") - { - // this is not a valid CSW format file - return false; - } - else - { - return true; - } - } + if (ident.ToUpper() != "COMPRESSED SQUARE WAVE") + { + // this is not a valid CSW format file + return false; + } + else + { + return true; + } + } - /// - /// DeSerialization method - /// - public override void Read(byte[] data) - { - // clear existing tape blocks - _datacorder.DataBlocks.Clear(); + /// + /// DeSerialization method + /// + public override void Read(byte[] data) + { + // clear existing tape blocks + _datacorder.DataBlocks.Clear(); - // CSW Header + // CSW Header - // check whether this is a valid csw format file by looking at the identifier in the header - // (first 22 bytes of the file) - string ident = Encoding.ASCII.GetString(data, 0, 22); + // check whether this is a valid csw format file by looking at the identifier in the header + // (first 22 bytes of the file) + string ident = Encoding.ASCII.GetString(data, 0, 22); - if (ident.ToUpper() != "COMPRESSED SQUARE WAVE") - { - // this is not a valid CSW format file - throw new Exception(this.GetType().ToString() + - "This is not a valid CSW format file"); - } + if (ident.ToUpper() != "COMPRESSED SQUARE WAVE") + { + // this is not a valid CSW format file + throw new Exception(this.GetType().ToString() + + "This is not a valid CSW format file"); + } - if (data[0x16] != 0x1a) - { - // invalid terminator code - throw new Exception(this.GetType().ToString() + - "This image reports as a CSW but has an invalid terminator code"); - } + if (data[0x16] != 0x1a) + { + // invalid terminator code + throw new Exception(this.GetType().ToString() + + "This image reports as a CSW but has an invalid terminator code"); + } - _position = 0; + _position = 0; - // version info - int majorVer = data[0x17]; - int minorVer = data[0x18]; + // version info + int majorVer = data[0x17]; + int minorVer = data[0x18]; - int sampleRate; - int totalPulses; - byte compressionType; - byte flags; - byte headerExtensionLen; - byte[] cswData; - byte[] cswDataUncompressed; + int sampleRate; + int totalPulses; + byte compressionType; + byte flags; + byte headerExtensionLen; + byte[] cswData; + byte[] cswDataUncompressed; - if (majorVer == 2) - { - /* + if (majorVer == 2) + { + /* CSW-2 Header CSW global file header - status: required Offset Value Type Description @@ -143,28 +143,28 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum 0x34+HDR - - CSW data. */ - _position = 0x19; - sampleRate = GetInt32(data, _position); - _position += 4; + _position = 0x19; + sampleRate = GetInt32(data, _position); + _position += 4; - totalPulses = GetInt32(data, _position); - cswDataUncompressed = new byte[totalPulses + 1]; - _position += 4; + totalPulses = GetInt32(data, _position); + cswDataUncompressed = new byte[totalPulses + 1]; + _position += 4; - compressionType = data[_position++]; - flags = data[_position++]; - headerExtensionLen = data[_position++]; - - _position = 0x34 + headerExtensionLen; + compressionType = data[_position++]; + flags = data[_position++]; + headerExtensionLen = data[_position++]; - cswData = new byte[data.Length - _position]; - Array.Copy(data, _position, cswData, 0, cswData.Length); + _position = 0x34 + headerExtensionLen; - ProcessCSWV2(cswData, ref cswDataUncompressed, compressionType, totalPulses); - } - else if (majorVer == 1) - { - /* + cswData = new byte[data.Length - _position]; + Array.Copy(data, _position, cswData, 0, cswData.Length); + + ProcessCSWV2(cswData, ref cswDataUncompressed, compressionType, totalPulses); + } + else if (majorVer == 1) + { + /* CSW-1 Header CSW global file header - status: required Offset Value Type Description @@ -181,81 +181,81 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum 0x20 - - CSW data. */ - _position = 0x19; - sampleRate = GetWordValue(data, _position); - _position += 2; + _position = 0x19; + sampleRate = GetWordValue(data, _position); + _position += 2; - compressionType = data[_position++]; - flags = data[_position++]; + compressionType = data[_position++]; + flags = data[_position++]; - _position += 3; + _position += 3; - cswDataUncompressed = new byte[data.Length - _position]; + cswDataUncompressed = new byte[data.Length - _position]; - if (compressionType == 1) - Array.Copy(data, _position, cswDataUncompressed, 0, cswDataUncompressed.Length); - else - throw new Exception(this.GetType().ToString() + - "CSW Format unknown compression type"); - } - else - { - throw new Exception(this.GetType().ToString() + - "CSW Format Version " + majorVer + "." + minorVer + " is not currently supported"); - } + if (compressionType == 1) + Array.Copy(data, _position, cswDataUncompressed, 0, cswDataUncompressed.Length); + else + throw new Exception(this.GetType().ToString() + + "CSW Format unknown compression type"); + } + else + { + throw new Exception(this.GetType().ToString() + + "CSW Format Version " + majorVer + "." + minorVer + " is not currently supported"); + } - // create the single tape block - // (use DATA block for now so initial signal level is handled correctly by the datacorder device) - TapeDataBlock t = new TapeDataBlock(); - t.BlockDescription = BlockType.CSW_Recording; - t.BlockID = 0x18; - t.DataPeriods = new List(); + // create the single tape block + // (use DATA block for now so initial signal level is handled correctly by the datacorder device) + TapeDataBlock t = new TapeDataBlock(); + t.BlockDescription = BlockType.CSW_Recording; + t.BlockID = 0x18; + t.DataPeriods = new List(); - if (flags.Bit(0)) - t.InitialPulseLevel = true; - else - t.InitialPulseLevel = false; + if (flags.Bit(0)) + t.InitialPulseLevel = true; + else + t.InitialPulseLevel = false; - var rate = (69888 * 50) / sampleRate; + var rate = (69888 * 50) / sampleRate; - for (int i = 0; i < cswDataUncompressed.Length;) - { - int length = cswDataUncompressed[i++] * rate; - if (length == 0) - { - length = GetInt32(cswDataUncompressed, i) / rate; - i += 4; - } + for (int i = 0; i < cswDataUncompressed.Length;) + { + int length = cswDataUncompressed[i++] * rate; + if (length == 0) + { + length = GetInt32(cswDataUncompressed, i) / rate; + i += 4; + } - t.DataPeriods.Add(length); - } + t.DataPeriods.Add(length); + } - // add closing period - t.DataPeriods.Add((69888 * 50) / 10); + // add closing period + t.DataPeriods.Add((69888 * 50) / 10); - // add to datacorder - _datacorder.DataBlocks.Add(t); - } + // add to datacorder + _datacorder.DataBlocks.Add(t); + } - /// - /// Processes a CSW v2 data block - /// - public static void ProcessCSWV2( - byte[] srcBuff, - ref byte[] destBuff, - byte compType, - int pulseCount) - { - if (compType == 1) - { - Array.Copy(srcBuff, 0, destBuff, 0, pulseCount); - } - else if (compType == 2) - { - DecompressZRLE(srcBuff, ref destBuff); - } - else - throw new Exception("CSW Format unknown compression type"); - } - } + /// + /// Processes a CSW v2 data block + /// + public static void ProcessCSWV2( + byte[] srcBuff, + ref byte[] destBuff, + byte compType, + int pulseCount) + { + if (compType == 1) + { + Array.Copy(srcBuff, 0, destBuff, 0, pulseCount); + } + else if (compType == 2) + { + DecompressZRLE(srcBuff, ref destBuff); + } + else + throw new Exception("CSW Format unknown compression type"); + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/PZX/PzxConverter.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/PZX/PzxConverter.cs index d8eb9e1f07..6201b52b83 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/PZX/PzxConverter.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/PZX/PzxConverter.cs @@ -6,95 +6,95 @@ using System.Text; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Reponsible for PZX format serializaton - /// Based on the information here: http://zxds.raxoft.cz/docs/pzx.txt - /// - public class PzxConverter : MediaConverter - { - /// - /// The type of serializer - /// - private MediaConverterType _formatType = MediaConverterType.PZX; - public override MediaConverterType FormatType - { - get - { - return _formatType; - } - } + /// + /// Reponsible for PZX format serializaton + /// Based on the information here: http://zxds.raxoft.cz/docs/pzx.txt + /// + public class PzxConverter : MediaConverter + { + /// + /// The type of serializer + /// + private MediaConverterType _formatType = MediaConverterType.PZX; + public override MediaConverterType FormatType + { + get + { + return _formatType; + } + } - /// - /// Signs whether this class can be used to read the data format - /// - public override bool IsReader { get { return true; } } + /// + /// Signs whether this class can be used to read the data format + /// + public override bool IsReader { get { return true; } } - /// - /// Signs whether this class can be used to write the data format - /// - public override bool IsWriter { get { return false; } } + /// + /// Signs whether this class can be used to write the data format + /// + public override bool IsWriter { get { return false; } } - /// - /// Working list of generated tape data blocks - /// - private List _blocks = new List(); + /// + /// Working list of generated tape data blocks + /// + private List _blocks = new List(); - /// - /// Position counter - /// - private int _position = 0; + /// + /// Position counter + /// + private int _position = 0; - /// - /// Object to keep track of loops - this assumes there is only one loop at a time - /// - private List> _loopCounter = new List>(); + /// + /// Object to keep track of loops - this assumes there is only one loop at a time + /// + private List> _loopCounter = new List>(); - #region Construction + #region Construction - private DatacorderDevice _datacorder; + private DatacorderDevice _datacorder; - public PzxConverter(DatacorderDevice _tapeDevice) - { - _datacorder = _tapeDevice; - } + public PzxConverter(DatacorderDevice _tapeDevice) + { + _datacorder = _tapeDevice; + } - #endregion + #endregion - /// - /// Returns TRUE if pzx header is detected - /// - public override bool CheckType(byte[] data) - { - // PZX Header + /// + /// Returns TRUE if pzx header is detected + /// + public override bool CheckType(byte[] data) + { + // PZX Header - // check whether this is a valid pzx format file by looking at the identifier in the header - // (first 4 bytes of the file) - string ident = Encoding.ASCII.GetString(data, 0, 4); + // check whether this is a valid pzx format file by looking at the identifier in the header + // (first 4 bytes of the file) + string ident = Encoding.ASCII.GetString(data, 0, 4); - // version info - int majorVer = data[8]; - int minorVer = data[9]; + // version info + int majorVer = data[8]; + int minorVer = data[9]; - if (ident.ToUpper() != "PZXT") - { - // this is not a valid PZX format file - return false; - } - else - { - return true; - } - } + if (ident.ToUpper() != "PZXT") + { + // this is not a valid PZX format file + return false; + } + else + { + return true; + } + } - /// - /// DeSerialization method - /// - public override void Read(byte[] data) - { - // clear existing tape blocks - _datacorder.DataBlocks.Clear(); + /// + /// DeSerialization method + /// + public override void Read(byte[] data) + { + // clear existing tape blocks + _datacorder.DataBlocks.Clear(); - /* + /* // PZX uniform block layout offset type name meaning ------ ---- ---- ------- @@ -103,62 +103,62 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum 8 u8[size] data arbitrary amount of block data. */ - // check whether this is a valid pzx format file by looking at the identifier in the header block - string ident = Encoding.ASCII.GetString(data, 0, 4); + // check whether this is a valid pzx format file by looking at the identifier in the header block + string ident = Encoding.ASCII.GetString(data, 0, 4); - if (ident.ToUpper() != "PZXT") - { - // this is not a valid TZX format file - throw new Exception(this.GetType().ToString() + - "This is not a valid PZX format file"); - } + if (ident.ToUpper() != "PZXT") + { + // this is not a valid TZX format file + throw new Exception(this.GetType().ToString() + + "This is not a valid PZX format file"); + } - _position = 0; + _position = 0; - // parse all blocks out into seperate byte arrays first - List bDatas = new List(); + // parse all blocks out into seperate byte arrays first + List bDatas = new List(); - while (_position < data.Length) - { - int startPos = _position; + while (_position < data.Length) + { + int startPos = _position; - // data size - _position += 4; - int blockSize = GetInt32(data, _position); - _position += 4; + // data size + _position += 4; + int blockSize = GetInt32(data, _position); + _position += 4; - // block data - byte[] bd = new byte[8 + blockSize]; - Array.Copy(data, startPos, bd, 0, bd.Length); - bDatas.Add(bd); + // block data + byte[] bd = new byte[8 + blockSize]; + Array.Copy(data, startPos, bd, 0, bd.Length); + bDatas.Add(bd); - _position += blockSize; - } + _position += blockSize; + } - // process the blocks - foreach (var b in bDatas) - { - int pos = 8; - string blockId = Encoding.ASCII.GetString(b, 0, 4); - int blockSize = GetInt32(b, 4); + // process the blocks + foreach (var b in bDatas) + { + int pos = 8; + string blockId = Encoding.ASCII.GetString(b, 0, 4); + int blockSize = GetInt32(b, 4); - TapeDataBlock t = new TapeDataBlock(); + TapeDataBlock t = new TapeDataBlock(); - switch (blockId) - { - // PZXT - PZX header block - /* + switch (blockId) + { + // PZXT - PZX header block + /* offset type name meaning 0 u8 major major version number (currently 1). 1 u8 minor minor version number (currently 0). 2 u8[?] info tape info, see below. */ - case "PZXT": + case "PZXT": - break; + break; - // PULS - Pulse sequence - /* + // PULS - Pulse sequence + /* offset type name meaning 0 u16 count bits 0-14 optional repeat count (see bit 15), always greater than zero bit 15 repeat count present: 0 not present 1 present @@ -167,58 +167,58 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum 4 u16 duration2 optional low bits of pulse duration (see bit 15 of duration1) 6 ... ... ditto repeated until the end of the block */ - case "PULS": - - t.BlockID = GetInt32(b, 0); - t.DataPeriods = new List(); + case "PULS": - t.InitialPulseLevel = false; + t.BlockID = GetInt32(b, 0); + t.DataPeriods = new List(); - List pulses = new List(); + t.InitialPulseLevel = false; - while (pos < blockSize + 8) - { - ushort[] p = new ushort[2]; - p[0] = 1; - p[1] = GetWordValue(b, pos); - pos += 2; + List pulses = new List(); - if (p[1] > 0x8000) - { - p[0] = (ushort)(p[1] & 0x7fff); - p[1] = GetWordValue(b, pos); - pos += 2; - } + while (pos < blockSize + 8) + { + ushort[] p = new ushort[2]; + p[0] = 1; + p[1] = GetWordValue(b, pos); + pos += 2; - if (p[1] >= 0x8000) - { - p[1] &= 0x7fff; - p[1] <<= 16; - p[1] |= GetWordValue(b, pos); - pos += 2; - } + if (p[1] > 0x8000) + { + p[0] = (ushort)(p[1] & 0x7fff); + p[1] = GetWordValue(b, pos); + pos += 2; + } - pulses.Add(p); - } + if (p[1] >= 0x8000) + { + p[1] &= 0x7fff; + p[1] <<= 16; + p[1] |= GetWordValue(b, pos); + pos += 2; + } - // convert to tape block - t.BlockDescription = BlockType.PULS; - t.PauseInMS = 0; + pulses.Add(p); + } - foreach (var x in pulses) - { - for (int i = 0; i < x[0]; i++) - { - t.DataPeriods.Add(x[1]); - } - } + // convert to tape block + t.BlockDescription = BlockType.PULS; + t.PauseInMS = 0; - _datacorder.DataBlocks.Add(t); + foreach (var x in pulses) + { + for (int i = 0; i < x[0]; i++) + { + t.DataPeriods.Add(x[1]); + } + } - break; + _datacorder.DataBlocks.Add(t); - // DATA - Data block - /* + break; + + // DATA - Data block + /* offset type name meaning 0 u32 count bits 0-30 number of bits in the data stream bit 31 initial pulse level: 0 low 1 high @@ -229,171 +229,171 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum 8+2*p0 u16[p1] s1 sequence of pulse durations encoding bit equal to 1. 8+2*(p0+p1) u8[ceil(bits/8)] data data stream, see below. */ - case "DATA": + case "DATA": - t.BlockID = GetInt32(b, 0); - t.DataPeriods = new List(); + t.BlockID = GetInt32(b, 0); + t.DataPeriods = new List(); - List s0 = new List(); - List s1 = new List(); - List dData = new List(); + List s0 = new List(); + List s1 = new List(); + List dData = new List(); - uint initPulseLevel = 1; - int dCount = 1; - ushort tail = 0; + uint initPulseLevel = 1; + int dCount = 1; + ushort tail = 0; - while (pos < blockSize + 8) - { - dCount = GetInt32(b, pos); - initPulseLevel = (uint)((dCount & 0x80000000) == 0 ? 0 : 1); + while (pos < blockSize + 8) + { + dCount = GetInt32(b, pos); + initPulseLevel = (uint)((dCount & 0x80000000) == 0 ? 0 : 1); - t.InitialPulseLevel = initPulseLevel == 1; + t.InitialPulseLevel = initPulseLevel == 1; - dCount = (int)(dCount & 0x7FFFFFFF); - pos += 4; + dCount = (int)(dCount & 0x7FFFFFFF); + pos += 4; - tail = GetWordValue(b, pos); - pos += 2; + tail = GetWordValue(b, pos); + pos += 2; - var p0 = b[pos++]; - var p1 = b[pos++]; + var p0 = b[pos++]; + var p1 = b[pos++]; - for (int i = 0; i < p1; i++) - { - var s = GetWordValue(b, pos); - pos += 2; - s0.Add(s); - } + for (int i = 0; i < p1; i++) + { + var s = GetWordValue(b, pos); + pos += 2; + s0.Add(s); + } - for (int i = 0; i < p1; i++) - { - var s = GetWordValue(b, pos); - pos += 2; - s1.Add(s); - } + for (int i = 0; i < p1; i++) + { + var s = GetWordValue(b, pos); + pos += 2; + s1.Add(s); + } - for (int i = 0; i < Math.Ceiling((decimal)dCount / 8); i++) - { - var buff = b[pos++]; - dData.Add(buff); - } + for (int i = 0; i < Math.Ceiling((decimal)dCount / 8); i++) + { + var buff = b[pos++]; + dData.Add(buff); + } - foreach (var by in dData) - { - for (int i = 7; i >= 0; i--) - { - if (by.Bit(i) == true) - { - foreach (var pu in s1) - { - t.DataPeriods.Add((int)pu); - } - - } - else - { - foreach (var pu in s0) - { - t.DataPeriods.Add((int)pu); - } - - } - } - } - if (tail > 0) - t.DataPeriods.Add(tail); - dData.Clear(); - } + foreach (var by in dData) + { + for (int i = 7; i >= 0; i--) + { + if (by.Bit(i) == true) + { + foreach (var pu in s1) + { + t.DataPeriods.Add((int)pu); + } - // convert to tape block - t.BlockDescription = BlockType.DATA; - t.PauseInMS = 0; + } + else + { + foreach (var pu in s0) + { + t.DataPeriods.Add((int)pu); + } - // tail - //t.DataPeriods.Add(tail); + } + } + } + if (tail > 0) + t.DataPeriods.Add(tail); + dData.Clear(); + } - _datacorder.DataBlocks.Add(t); + // convert to tape block + t.BlockDescription = BlockType.DATA; + t.PauseInMS = 0; - break; + // tail + //t.DataPeriods.Add(tail); - // PAUS - Pause - /* + _datacorder.DataBlocks.Add(t); + + break; + + // PAUS - Pause + /* offset type name meaning 0 u32 duration bits 0-30 duration of the pause bit 31 initial pulse level: 0 low 1 high */ - case "PAUS": + case "PAUS": - t.BlockID = GetInt32(b, 0); - t.DataPeriods = new List(); + t.BlockID = GetInt32(b, 0); + t.DataPeriods = new List(); - int iniPulseLevel = 1; - int pCount = 0; + int iniPulseLevel = 1; + int pCount = 0; - var d = GetInt32(b, pos); - iniPulseLevel = ((d & 0x80000000) == 0 ? 0 : 1); - t.InitialPulseLevel = iniPulseLevel == 1; - pCount = (d & 0x7FFFFFFF); + var d = GetInt32(b, pos); + iniPulseLevel = ((d & 0x80000000) == 0 ? 0 : 1); + t.InitialPulseLevel = iniPulseLevel == 1; + pCount = (d & 0x7FFFFFFF); - // convert to tape block - t.BlockDescription = BlockType.PAUS; - t.DataPeriods.Add(0); - t.DataPeriods.Add(pCount); - t.DataPeriods.Add(0); + // convert to tape block + t.BlockDescription = BlockType.PAUS; + t.DataPeriods.Add(0); + t.DataPeriods.Add(pCount); + t.DataPeriods.Add(0); - _datacorder.DataBlocks.Add(t); + _datacorder.DataBlocks.Add(t); - break; + break; - // BRWS - Browse point - /* + // BRWS - Browse point + /* offset type name meaning 0 u8[?] text text describing this browse point */ - case "BRWS": + case "BRWS": - t.BlockID = GetInt32(b, 0); - t.DataPeriods = new List(); + t.BlockID = GetInt32(b, 0); + t.DataPeriods = new List(); - string info = Encoding.ASCII.GetString(b, 8, blockSize); + string info = Encoding.ASCII.GetString(b, 8, blockSize); - // convert to tape block - t.BlockDescription = BlockType.BRWS; - t.MetaData.Add(BlockDescriptorTitle.Comments, info); - t.PauseInMS = 0; + // convert to tape block + t.BlockDescription = BlockType.BRWS; + t.MetaData.Add(BlockDescriptorTitle.Comments, info); + t.PauseInMS = 0; - _datacorder.DataBlocks.Add(t); + _datacorder.DataBlocks.Add(t); - break; + break; - // STOP - Stop tape command - /* + // STOP - Stop tape command + /* offset type name meaning 0 u16 flags when exactly to stop the tape (1 48k only, other always). */ - case "STOP": + case "STOP": - - t.BlockID = GetInt32(b, 0); - t.DataPeriods = new List(); - var flags = GetWordValue(b, pos); - if (flags == 1) - { - t.BlockDescription = BlockType.Stop_the_Tape_48K; - t.Command = TapeCommand.STOP_THE_TAPE_48K; - } - else - { - t.BlockDescription = BlockType.Pause_or_Stop_the_Tape; - t.Command = TapeCommand.STOP_THE_TAPE; - } + t.BlockID = GetInt32(b, 0); + t.DataPeriods = new List(); - _datacorder.DataBlocks.Add(t); + var flags = GetWordValue(b, pos); + if (flags == 1) + { + t.BlockDescription = BlockType.Stop_the_Tape_48K; + t.Command = TapeCommand.STOP_THE_TAPE_48K; + } + else + { + t.BlockDescription = BlockType.Pause_or_Stop_the_Tape; + t.Command = TapeCommand.STOP_THE_TAPE; + } - break; - } - } - } - } + _datacorder.DataBlocks.Add(t); + + break; + } + } + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TAP/TapConverter.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TAP/TapConverter.cs index 901e0496ae..1e01558da6 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TAP/TapConverter.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TAP/TapConverter.cs @@ -6,104 +6,104 @@ using System.Text; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Reponsible for TAP format serializaton - /// - public class TapConverter : MediaConverter - { - /// - /// The type of serializer - /// - private MediaConverterType _formatType = MediaConverterType.TAP; - public override MediaConverterType FormatType - { - get - { - return _formatType; - } - } + /// + /// Reponsible for TAP format serializaton + /// + public class TapConverter : MediaConverter + { + /// + /// The type of serializer + /// + private MediaConverterType _formatType = MediaConverterType.TAP; + public override MediaConverterType FormatType + { + get + { + return _formatType; + } + } - /// - /// Signs whether this class can be used to read the data format - /// - public override bool IsReader { get { return true; } } + /// + /// Signs whether this class can be used to read the data format + /// + public override bool IsReader { get { return true; } } - /// - /// Signs whether this class can be used to write the data format - /// - public override bool IsWriter { get { return false; } } + /// + /// Signs whether this class can be used to write the data format + /// + public override bool IsWriter { get { return false; } } - #region Construction + #region Construction - private DatacorderDevice _datacorder; + private DatacorderDevice _datacorder; - public TapConverter(DatacorderDevice _tapeDevice) - { - _datacorder = _tapeDevice; - } + public TapConverter(DatacorderDevice _tapeDevice) + { + _datacorder = _tapeDevice; + } - #endregion + #endregion - #region TAP Format Constants + #region TAP Format Constants - /// - /// Pilot pulse length - /// - public const int PILOT_PL = 2168; + /// + /// Pilot pulse length + /// + public const int PILOT_PL = 2168; - /// - /// Pilot pulses in the ROM header block - /// - public const int HEADER_PILOT_COUNT = 8063; + /// + /// Pilot pulses in the ROM header block + /// + public const int HEADER_PILOT_COUNT = 8063; - /// - /// Pilot pulses in the ROM data block - /// - public const int DATA_PILOT_COUNT = 3223; + /// + /// Pilot pulses in the ROM data block + /// + public const int DATA_PILOT_COUNT = 3223; - /// - /// Sync 1 pulse length - /// - public const int SYNC_1_PL = 667; + /// + /// Sync 1 pulse length + /// + public const int SYNC_1_PL = 667; - /// - /// Sync 2 pulse lenth - /// - public const int SYNC_2_PL = 735; + /// + /// Sync 2 pulse lenth + /// + public const int SYNC_2_PL = 735; - /// - /// Bit 0 pulse length - /// - public const int BIT_0_PL = 855; + /// + /// Bit 0 pulse length + /// + public const int BIT_0_PL = 855; - /// - /// Bit 1 pulse length - /// - public const int BIT_1_PL = 1710; + /// + /// Bit 1 pulse length + /// + public const int BIT_1_PL = 1710; - /// - /// End sync pulse length - /// - public const int TERM_SYNC = 947; + /// + /// End sync pulse length + /// + public const int TERM_SYNC = 947; - /// - /// 1 millisecond pause - /// - public const int PAUSE_MS = 3500; + /// + /// 1 millisecond pause + /// + public const int PAUSE_MS = 3500; - /// - /// Used bit count in last byte - /// - public const int BIT_COUNT_IN_LAST = 8; + /// + /// Used bit count in last byte + /// + public const int BIT_COUNT_IN_LAST = 8; - #endregion + #endregion - /// - /// DeSerialization method - /// - public override void Read(byte[] data) - { - /* + /// + /// DeSerialization method + /// + public override void Read(byte[] data) + { + /* The .TAP files contain blocks of tape-saved data. All blocks start with two bytes specifying how many bytes will follow (not counting the two length bytes). Then raw tape data follows, including the flag and checksum bytes. The checksum is the bitwise XOR of all bytes including the flag byte. For example, when you execute the line SAVE "ROM" CODE 0,2 this will result: |------ Spectrum-generated data -------| |---------| @@ -123,115 +123,115 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum checksum (checkbittoggle would be a better name!).............^^ */ - // clear existing tape blocks - _datacorder.DataBlocks.Clear(); + // clear existing tape blocks + _datacorder.DataBlocks.Clear(); - // convert bytearray to memory stream - MemoryStream stream = new MemoryStream(data); + // convert bytearray to memory stream + MemoryStream stream = new MemoryStream(data); - // the first 2 bytes of the TAP file designate the length of the first data block - // this (I think) should always be 17 bytes (as this is the tape header) - byte[] blockLengthData = new byte[2]; + // the first 2 bytes of the TAP file designate the length of the first data block + // this (I think) should always be 17 bytes (as this is the tape header) + byte[] blockLengthData = new byte[2]; - // we are now going to stream through the entire file processing a block at a time - while (stream.Position < stream.Length) - { - // read and calculate the length of the block - stream.Read(blockLengthData, 0, 2); - int blockSize = BitConverter.ToUInt16(blockLengthData, 0); - if (blockSize == 0) - { - // block size is 0 - this is probably invalid (but I guess could be EoF in some situations) - break; - } + // we are now going to stream through the entire file processing a block at a time + while (stream.Position < stream.Length) + { + // read and calculate the length of the block + stream.Read(blockLengthData, 0, 2); + int blockSize = BitConverter.ToUInt16(blockLengthData, 0); + if (blockSize == 0) + { + // block size is 0 - this is probably invalid (but I guess could be EoF in some situations) + break; + } - // copy the entire block into a new bytearray - byte[] blockdata = new byte[blockSize]; - stream.Read(blockdata, 0, blockSize); + // copy the entire block into a new bytearray + byte[] blockdata = new byte[blockSize]; + stream.Read(blockdata, 0, blockSize); - // create and populate a new tapedatablock object - TapeDataBlock tdb = new TapeDataBlock(); + // create and populate a new tapedatablock object + TapeDataBlock tdb = new TapeDataBlock(); - // ascertain the block description - string description = string.Empty; - byte crc = 0; - byte crcValue = 0; - byte crcFile = 0; - byte[] programData = new byte[10]; + // ascertain the block description + string description = string.Empty; + byte crc = 0; + byte crcValue = 0; + byte crcFile = 0; + byte[] programData = new byte[10]; - // calculate block checksum value - for (int i = 0; i < blockSize; i++) - { - crc ^= blockdata[i]; - if (i < blockSize - 1) - { - crcValue = crc; - } - else - { - crcFile = blockdata[i]; - } - } + // calculate block checksum value + for (int i = 0; i < blockSize; i++) + { + crc ^= blockdata[i]; + if (i < blockSize - 1) + { + crcValue = crc; + } + else + { + crcFile = blockdata[i]; + } + } - // process the type byte - /* (The type is 0,1,2 or 3 for a Program, Number array, Character array or Code file. + // process the type byte + /* (The type is 0,1,2 or 3 for a Program, Number array, Character array or Code file. A SCREEN$ file is regarded as a Code file with start address 16384 and length 6912 decimal. If the file is a Program file, parameter 1 holds the autostart line number (or a number >=32768 if no LINE parameter was given) and parameter 2 holds the start of the variable area relative to the start of the program. If it's a Code file, parameter 1 holds the start of the code block when saved, and parameter 2 holds 32768. For data files finally, the byte at position 14 decimal holds the variable name.) */ - tdb.MetaData = new Dictionary(); + tdb.MetaData = new Dictionary(); - if (blockdata[0] == 0x00 && blockSize == 19) - { - string fileName = Encoding.ASCII.GetString(blockdata.Skip(2).Take(10).ToArray()).Trim(); - string type = "Unknown Type"; - StringBuilder sb = new StringBuilder(); + if (blockdata[0] == 0x00 && blockSize == 19) + { + string fileName = Encoding.ASCII.GetString(blockdata.Skip(2).Take(10).ToArray()).Trim(); + string type = "Unknown Type"; + StringBuilder sb = new StringBuilder(); - var param1 = GetWordValue(blockdata, 12); - var param2 = GetWordValue(blockdata, 14); + var param1 = GetWordValue(blockdata, 12); + var param2 = GetWordValue(blockdata, 14); - // header block - examine first byte of header - if (blockdata[1] == 0) - { - type = "Program"; - sb.Append(type + ": "); - sb.Append(fileName + " "); - } - else if (blockdata[1] == 1) - { - type = "NumArray"; - sb.Append(type + ": "); - sb.Append(fileName + " "); - } - else if (blockdata[1] == 2) - { - type = "CharArray"; - sb.Append(type + ": "); - sb.Append(fileName + " "); - } - else if (blockdata[1] == 3) - { - type = "Code"; - sb.Append(type + ": "); - sb.Append(fileName + " "); - } - } - else if (blockdata[0] == 0xff) - { - // data block - description = "Data Block " + (blockSize - 2) + "bytes"; - tdb.AddMetaData(BlockDescriptorTitle.Data_Bytes, (blockSize - 2).ToString() + " Bytes"); - } - else - { - // some other type (turbo data etc..) - description = $"#{blockdata[0].ToString("X2")} block, {blockSize} bytes"; - //description += (crc != 0) ? $", crc bad (#{crcFile:X2}!=#{crcValue:X2})" : ", crc ok"; - tdb.AddMetaData(BlockDescriptorTitle.Undefined, description); - } - /* + // header block - examine first byte of header + if (blockdata[1] == 0) + { + type = "Program"; + sb.Append(type + ": "); + sb.Append(fileName + " "); + } + else if (blockdata[1] == 1) + { + type = "NumArray"; + sb.Append(type + ": "); + sb.Append(fileName + " "); + } + else if (blockdata[1] == 2) + { + type = "CharArray"; + sb.Append(type + ": "); + sb.Append(fileName + " "); + } + else if (blockdata[1] == 3) + { + type = "Code"; + sb.Append(type + ": "); + sb.Append(fileName + " "); + } + } + else if (blockdata[0] == 0xff) + { + // data block + description = "Data Block " + (blockSize - 2) + "bytes"; + tdb.AddMetaData(BlockDescriptorTitle.Data_Bytes, (blockSize - 2).ToString() + " Bytes"); + } + else + { + // some other type (turbo data etc..) + description = $"#{blockdata[0].ToString("X2")} block, {blockSize} bytes"; + //description += (crc != 0) ? $", crc bad (#{crcFile:X2}!=#{crcValue:X2})" : ", crc ok"; + tdb.AddMetaData(BlockDescriptorTitle.Undefined, description); + } + /* if (blockdata[0] == 0x00 && blockSize == 19 && (blockdata[1] == 0x00) || blockdata[1] == 3) { // This is the PROGRAM header @@ -274,113 +274,113 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum } */ - tdb.BlockDescription = BlockType.Standard_Speed_Data_Block; + tdb.BlockDescription = BlockType.Standard_Speed_Data_Block; - // calculate the data periods for this block - int pilotLength = 0; + // calculate the data periods for this block + int pilotLength = 0; - // work out pilot length - if (blockdata[0] < 4) - { - pilotLength = 8064; - } - else - { - pilotLength = 3220; - } + // work out pilot length + if (blockdata[0] < 4) + { + pilotLength = 8064; + } + else + { + pilotLength = 3220; + } - // create a list to hold the data periods - List dataPeriods = new List(); + // create a list to hold the data periods + List dataPeriods = new List(); - // generate pilot pulses - for (int i = 0; i < pilotLength; i++) - { - dataPeriods.Add(PILOT_PL); - } + // generate pilot pulses + for (int i = 0; i < pilotLength; i++) + { + dataPeriods.Add(PILOT_PL); + } - // add syncro pulses - dataPeriods.Add(SYNC_1_PL); - dataPeriods.Add(SYNC_2_PL); + // add syncro pulses + dataPeriods.Add(SYNC_1_PL); + dataPeriods.Add(SYNC_2_PL); - int pos = 0; + int pos = 0; - // add bit0 and bit1 periods - for (int i = 0; i < blockSize - 1; i++, pos++) - { - for (byte b = 0x80; b != 0; b >>= 1) - { - if ((blockdata[i] & b) != 0) - dataPeriods.Add(BIT_1_PL); - else - dataPeriods.Add(BIT_0_PL); - if ((blockdata[i] & b) != 0) - dataPeriods.Add(BIT_1_PL); - else - dataPeriods.Add(BIT_0_PL); - } - } + // add bit0 and bit1 periods + for (int i = 0; i < blockSize - 1; i++, pos++) + { + for (byte b = 0x80; b != 0; b >>= 1) + { + if ((blockdata[i] & b) != 0) + dataPeriods.Add(BIT_1_PL); + else + dataPeriods.Add(BIT_0_PL); + if ((blockdata[i] & b) != 0) + dataPeriods.Add(BIT_1_PL); + else + dataPeriods.Add(BIT_0_PL); + } + } - // add the last byte - for (byte c = 0x80; c != (byte)(0x80 >> BIT_COUNT_IN_LAST); c >>= 1) - { - if ((blockdata[pos] & c) != 0) - dataPeriods.Add(BIT_1_PL); - else - dataPeriods.Add(BIT_0_PL); - if ((blockdata[pos] & c) != 0) - dataPeriods.Add(BIT_1_PL); - else - dataPeriods.Add(BIT_0_PL); - } + // add the last byte + for (byte c = 0x80; c != (byte)(0x80 >> BIT_COUNT_IN_LAST); c >>= 1) + { + if ((blockdata[pos] & c) != 0) + dataPeriods.Add(BIT_1_PL); + else + dataPeriods.Add(BIT_0_PL); + if ((blockdata[pos] & c) != 0) + dataPeriods.Add(BIT_1_PL); + else + dataPeriods.Add(BIT_0_PL); + } - // add block pause - //int actualPause = PAUSE_MS * 1000; - //dataPeriods.Add(actualPause); + // add block pause + //int actualPause = PAUSE_MS * 1000; + //dataPeriods.Add(actualPause); - // default pause for tap files - tdb.PauseInMS = 1000; + // default pause for tap files + tdb.PauseInMS = 1000; - // add to the tapedatablock object - tdb.DataPeriods = dataPeriods; + // add to the tapedatablock object + tdb.DataPeriods = dataPeriods; - // add the raw data - tdb.BlockData = blockdata; + // add the raw data + tdb.BlockData = blockdata; - // generate separate PAUS block - TapeDataBlock tdbPause = new TapeDataBlock(); - tdbPause.DataPeriods = new List(); - tdbPause.BlockDescription = BlockType.PAUSE_BLOCK; - tdbPause.PauseInMS = 0; - var pauseInTStates = TranslatePause(tdb.PauseInMS); - //if (pauseInTStates > 0) - //tdbPause.DataPeriods.Add(pauseInTStates); - tdb.PauseInMS = 0; + // generate separate PAUS block + TapeDataBlock tdbPause = new TapeDataBlock(); + tdbPause.DataPeriods = new List(); + tdbPause.BlockDescription = BlockType.PAUSE_BLOCK; + tdbPause.PauseInMS = 0; + var pauseInTStates = TranslatePause(tdb.PauseInMS); + //if (pauseInTStates > 0) + //tdbPause.DataPeriods.Add(pauseInTStates); + tdb.PauseInMS = 0; - // add block to the tape - _datacorder.DataBlocks.Add(tdb); + // add block to the tape + _datacorder.DataBlocks.Add(tdb); - // PAUS block if neccessary - if (pauseInTStates > 0) - { - tdbPause.AddMetaData(BlockDescriptorTitle.Block_ID, pauseInTStates.ToString() + " cycles"); + // PAUS block if neccessary + if (pauseInTStates > 0) + { + tdbPause.AddMetaData(BlockDescriptorTitle.Block_ID, pauseInTStates.ToString() + " cycles"); - int by1000 = pauseInTStates / 70000; - int rem1000 = pauseInTStates % 70000; + int by1000 = pauseInTStates / 70000; + int rem1000 = pauseInTStates % 70000; - if (by1000 > 1) - { - tdbPause.DataPeriods.Add(35000); - tdbPause.DataPeriods.Add(pauseInTStates - 35000); - } - else - { - tdbPause.DataPeriods.Add(pauseInTStates); - tdbPause.DataPeriods.Add(0); - } + if (by1000 > 1) + { + tdbPause.DataPeriods.Add(35000); + tdbPause.DataPeriods.Add(pauseInTStates - 35000); + } + else + { + tdbPause.DataPeriods.Add(pauseInTStates); + tdbPause.DataPeriods.Add(0); + } - _datacorder.DataBlocks.Add(tdbPause); - } - } - } - } + _datacorder.DataBlocks.Add(tdbPause); + } + } + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TZX/TzxConverter.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TZX/TzxConverter.cs index faf1c003d1..b9e3803cd0 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TZX/TzxConverter.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TZX/TzxConverter.cs @@ -5,65 +5,65 @@ using System.Text; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Reponsible for TZX format serializaton - /// - public class TzxConverter : MediaConverter - { - /// - /// The type of serializer - /// - private MediaConverterType _formatType = MediaConverterType.TZX; - public override MediaConverterType FormatType - { - get - { - return _formatType; - } - } + /// + /// Reponsible for TZX format serializaton + /// + public class TzxConverter : MediaConverter + { + /// + /// The type of serializer + /// + private MediaConverterType _formatType = MediaConverterType.TZX; + public override MediaConverterType FormatType + { + get + { + return _formatType; + } + } - /// - /// Signs whether this class can be used to read the data format - /// - public override bool IsReader { get { return true; } } + /// + /// Signs whether this class can be used to read the data format + /// + public override bool IsReader { get { return true; } } - /// - /// Signs whether this class can be used to write the data format - /// - public override bool IsWriter { get { return false; } } + /// + /// Signs whether this class can be used to write the data format + /// + public override bool IsWriter { get { return false; } } - /// - /// Working list of generated tape data blocks - /// - private List _blocks = new List(); + /// + /// Working list of generated tape data blocks + /// + private List _blocks = new List(); - /// - /// Position counter - /// - private int _position = 0; + /// + /// Position counter + /// + private int _position = 0; - /// - /// Object to keep track of loops - this assumes there is only one loop at a time - /// - private List> _loopCounter = new List>(); + /// + /// Object to keep track of loops - this assumes there is only one loop at a time + /// + private List> _loopCounter = new List>(); - #region Construction + #region Construction - private DatacorderDevice _datacorder; + private DatacorderDevice _datacorder; - public TzxConverter(DatacorderDevice _tapeDevice) - { - _datacorder = _tapeDevice; - } + public TzxConverter(DatacorderDevice _tapeDevice) + { + _datacorder = _tapeDevice; + } - #endregion + #endregion - /// - /// Returns TRUE if tzx header is detected - /// - public override bool CheckType(byte[] data) - { - /* + /// + /// Returns TRUE if tzx header is detected + /// + public override bool CheckType(byte[] data) + { + /* // TZX Header length: 10 bytes Offset Value Type Description @@ -73,1499 +73,1499 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum 0x09 20 BYTE TZX minor revision number */ - // check whether this is a valid tzx format file by looking at the identifier in the header - // (first 7 bytes of the file) - string ident = Encoding.ASCII.GetString(data, 0, 7); - // and 'end of text' marker - byte eotm = data[7]; - - // version info - int majorVer = data[8]; - int minorVer = data[9]; - - if (ident != "ZXTape!" || eotm != 0x1A) - { - // this is not a valid TZX format file - return false; - } - else - { - return true; - } - } - - /// - /// DeSerialization method - /// - public override void Read(byte[] data) - { - // clear existing tape blocks - _datacorder.DataBlocks.Clear(); - -/* - // TZX Header - length: 10 bytes - Offset Value Type Description - 0x00 "ZXTape!" ASCII[7] TZX signature - 0x07 0x1A BYTE End of text file marker - 0x08 1 BYTE TZX major revision number - 0x09 20 BYTE TZX minor revision number -*/ - - // check whether this is a valid tzx format file by looking at the identifier in the header - // (first 7 bytes of the file) - string ident = Encoding.ASCII.GetString(data, 0, 7); - // and 'end of text' marker - byte eotm = data[7]; - - // version info - int majorVer = data[8]; - int minorVer = data[9]; - - if (ident != "ZXTape!" || eotm != 0x1A) - { - // this is not a valid TZX format file - throw new Exception(this.GetType().ToString() + - "This is not a valid TZX format file"); - } - - // iterate through each block - _position = 10; - while (_position < data.Length) - { - // block ID is the first byte in a new block - int ID = data[_position++]; - - // process the data - ProcessBlock(data, ID); - } - - } - - /// - /// Processes a TZX block - /// - private void ProcessBlock(byte[] data, int id) - { - // process based on detected block ID - switch (id) - { - // ID 10 - Standard Speed Data Block - case 0x10: - ProcessBlockID10(data); - break; - // ID 11 - Turbo Speed Data Block - case 0x11: - ProcessBlockID11(data); - break; - // ID 12 - Pure Tone - case 0x12: - ProcessBlockID12(data); - break; - // ID 13 - Pulse sequence - case 0x13: - ProcessBlockID13(data); - break; - // ID 14 - Pure Data Block - case 0x14: - ProcessBlockID14(data); - break; - // ID 15 - Direct Recording - case 0x15: - ProcessBlockID15(data); - break; - // ID 18 - CSW Recording - case 0x18: - ProcessBlockID18(data); - break; - // ID 19 - Generalized Data Block - case 0x19: - ProcessBlockID19(data); - break; - // ID 20 - Pause (silence) or 'Stop the Tape' command - case 0x20: - ProcessBlockID20(data); - break; - // ID 21 - Group start - case 0x21: - ProcessBlockID21(data); - break; - // ID 22 - Group end - case 0x22: - ProcessBlockID22(data); - break; - // ID 23 - Jump to block - case 0x23: - ProcessBlockID23(data); - break; - // ID 24 - Loop start - case 0x24: - ProcessBlockID24(data); - break; - // ID 25 - Loop end - case 0x25: - ProcessBlockID25(data); - break; - // ID 26 - Call sequence - case 0x26: - ProcessBlockID26(data); - break; - // ID 27 - Return from sequence - case 0x27: - ProcessBlockID27(data); - break; - // ID 28 - Select block - case 0x28: - ProcessBlockID28(data); - break; - // ID 2A - Stop the tape if in 48K mode - case 0x2A: - ProcessBlockID2A(data); - break; - // ID 2B - Set signal level - case 0x2B: - ProcessBlockID2B(data); - break; - // ID 30 - Text description - case 0x30: - ProcessBlockID30(data); - break; - // ID 31 - Message block - case 0x31: - ProcessBlockID31(data); - break; - // ID 32 - Archive info - case 0x32: - ProcessBlockID32(data); - break; - // ID 33 - Hardware type - case 0x33: - ProcessBlockID33(data); - break; - // ID 35 - Custom info block - case 0x35: - ProcessBlockID35(data); - break; - // ID 5A - "Glue" block - case 0x5A: - ProcessBlockID5A(data); - break; - - #region Depreciated Blocks - - // ID 16 - C64 ROM Type Data Block - case 0x16: - ProcessBlockID16(data); - break; - // ID 17 - C64 Turbo Tape Data Block - case 0x17: - ProcessBlockID17(data); - break; - // ID 34 - Emulation info - case 0x34: - ProcessBlockID34(data); - break; - // ID 40 - Snapshot block - case 0x40: - ProcessBlockID40(data); - break; - - #endregion - - default: - ProcessUnidentifiedBlock(data); - break; - } - } - - #region TZX Block Processors - - #region ID 10 - Standard Speed Data Block -/* length: [02,03]+04 - Offset Value Type Description - 0x00 - WORD Pause after this block (ms.) {1000} - 0x02 N WORD Length of data that follow - 0x04 - BYTE[N] Data as in .TAP files - - This block must be replayed with the standard Spectrum ROM timing values - see the values in - curly brackets in block ID 11. The pilot tone consists in 8063 pulses if the first data byte - (flag byte) is < 128, 3223 otherwise. This block can be used for the ROM loading routines AND - for custom loading routines that use the same timings as ROM ones do. */ - private void ProcessBlockID10(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x10; - t.BlockDescription = BlockType.Standard_Speed_Data_Block; - t.DataPeriods = new List(); - - int pauseLen = GetWordValue(data, _position); - if (pauseLen == 0) - pauseLen = 1000; - - t.PauseInMS = pauseLen; - - int blockLen = GetWordValue(data, _position + 2); - - _position += 4; - - byte[] tmp = new byte[blockLen]; - tmp = data.Skip(_position).Take(blockLen).ToArray(); - - var t2 = DecodeDataBlock(t, tmp, DataBlockType.Standard, pauseLen); - - // add the block - _datacorder.DataBlocks.Add(t2); - - // advance the position to the next block - _position += blockLen; - - // generate PAUSE block - CreatePauseBlock(_datacorder.DataBlocks.Last()); - } - #endregion - - #region ID 11 - Turbo Speed Data Block -/* length: [0F,10,11]+12 - Offset Value Type Description - 0x00 - WORD Length of PILOT pulse {2168} - 0x02 - WORD Length of SYNC first pulse {667} - 0x04 - WORD Length of SYNC second pulse {735} - 0x06 - WORD Length of ZERO bit pulse {855} - 0x08 - WORD Length of ONE bit pulse {1710} - 0x0A - WORD Length of PILOT tone (number of pulses) {8063 header (flag<128), 3223 data (flag>=128)} - 0x0C - BYTE Used bits in the last byte (other bits should be 0) {8} - (e.g. if this is 6, then the bits used (x) in the last byte are: xxxxxx00, - where MSb is the leftmost bit, LSb is the rightmost bit) - 0x0D - WORD Pause after this block (ms.) {1000} - 0x0F N BYTE[3] Length of data that follow - 0x12 - BYTE[N] Data as in .TAP files - - This block is very similar to the normal TAP block but with some additional info on the timings and other important - differences. The same tape encoding is used as for the standard speed data block. If a block should use some non-standard - sync or pilot tones (i.e. all sorts of protection schemes) then use the next three blocks to describe it.*/ - private void ProcessBlockID11(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x11; - t.BlockDescription = BlockType.Turbo_Speed_Data_Block; - t.DataPeriods = new List(); - - int pilotPL = GetWordValue(data, _position); - int sync1P = GetWordValue(data, _position + 2); - int sync2P = GetWordValue(data, _position + 4); - int bit0P = GetWordValue(data, _position + 6); - int bit1P = GetWordValue(data, _position + 8); - int pilotTL = GetWordValue(data, _position + 10); - int bitinbyte = data[_position + 12]; - int pause = GetWordValue(data, _position + 13); - - - int blockLen = 0xFFFFFF & GetInt32(data, _position + 0x0F); - - byte[] bLenArr = data.Skip(_position + 0x0F).Take(3).ToArray(); - - _position += 0x12; - - byte[] tmp = new byte[blockLen]; - tmp = data.Skip(_position).Take(blockLen).ToArray(); - - var t2 = DecodeDataBlock(t, tmp, DataBlockType.Turbo, pause, pilotTL, pilotPL, sync1P, sync2P, bit0P, bit1P, bitinbyte); - - t.PauseInMS = pause; - - // add the block - _datacorder.DataBlocks.Add(t2); - - // advance the position to the next block - _position += blockLen; - - // generate PAUSE block - CreatePauseBlock(_datacorder.DataBlocks.Last()); - } - #endregion - - #region ID 12 - Pure Tone -/* length: 04 - Offset Value Type Description - 0x00 - WORD Length of one pulse in T-states - 0x02 - WORD Number of pulses - - This will produce a tone which is basically the same as the pilot tone in the ID 10, ID 11 blocks. You can define how - long the pulse is and how many pulses are in the tone. */ - private void ProcessBlockID12(byte[] data) - { - int blockLen = 4; - - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x12; - t.BlockDescription = BlockType.Pure_Tone; - t.DataPeriods = new List(); - t.PauseInMS = 0; - - // get values - int pulseLength = GetWordValue(data, _position); - int pulseCount = GetWordValue(data, _position + 2); - - t.AddMetaData(BlockDescriptorTitle.Pulse_Length, pulseLength.ToString() + " T-States"); - t.AddMetaData(BlockDescriptorTitle.Pulse_Count, pulseCount.ToString()); - - // build period information - for (int p = 0; p < pulseCount; p++) - { - t.DataPeriods.Add(pulseLength); - } - - // add the block - _datacorder.DataBlocks.Add(t); - - // advance the position to the next block - _position += blockLen; - } - #endregion - - #region ID 13 - Pulse sequence -/* length: [00]*02+01 - Offset Value Type Description - 0x00 N BYTE Number of pulses - 0x01 - WORD[N] Pulses' lengths - - This will produce N pulses, each having its own timing. Up to 255 pulses can be stored in this block; this is useful for non-standard - sync tones used by some protection schemes. */ - private void ProcessBlockID13(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x13; - t.BlockDescription = BlockType.Pulse_Sequence; - t.DataPeriods = new List(); - - t.PauseInMS = 0; - - // get pulse count - int pulseCount = data[_position]; - t.AddMetaData(BlockDescriptorTitle.Pulse_Count, pulseCount.ToString()); - _position++; - - // build period information - for (int p = 0; p < pulseCount; p++, _position += 2) - { - // get pulse length - int pulseLength = GetWordValue(data, _position); - t.AddMetaData(BlockDescriptorTitle.Needs_Parsing, "Pulse " + p + " Length\t" + pulseLength.ToString() + " T-States"); - t.DataPeriods.Add(pulseLength); - } - - // add the block - _datacorder.DataBlocks.Add(t); - } - #endregion - - #region ID 14 - Pure Data Block -/* length: [07,08,09]+0A - Offset Value Type Description - 0x00 - WORD Length of ZERO bit pulse - 0x02 - WORD Length of ONE bit pulse - 0x04 - BYTE Used bits in last byte (other bits should be 0) - (e.g. if this is 6, then the bits used (x) in the last byte are: xxxxxx00, - where MSb is the leftmost bit, LSb is the rightmost bit) - 0x05 - WORD Pause after this block (ms.) - 0x07 N BYTE[3] Length of data that follow - 0x0A - BYTE[N] Data as in .TAP files - - This is the same as in the turbo loading data block, except that it has no pilot or sync pulses. */ - private void ProcessBlockID14(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x14; - t.BlockDescription = BlockType.Pure_Data_Block; - t.DataPeriods = new List(); - - int pilotPL = 0; - int sync1P = 0; - int sync2P = 0; - int bit0P = GetWordValue(data, _position + 0); - int bit1P = GetWordValue(data, _position + 2); - int pilotTL = 0; - int bitinbyte = data[_position + 4]; - int pause = GetWordValue(data, _position + 5); - - int blockLen = 0xFFFFFF & GetInt32(data, _position + 0x07); - - _position += 0x0A; - - byte[] tmp = new byte[blockLen]; - tmp = data.Skip(_position).Take(blockLen).ToArray(); - - var t2 = DecodeDataBlock(t, tmp, DataBlockType.Pure, pause, pilotTL, pilotPL, sync1P, sync2P, bit0P, bit1P, bitinbyte); - - t.PauseInMS = pause; - - // add the block - _datacorder.DataBlocks.Add(t2); - - // advance the position to the next block - _position += blockLen; - - // generate PAUSE block - CreatePauseBlock(_datacorder.DataBlocks.Last()); - } - #endregion - - #region ID 15 - Direct Recording -/* length: [05,06,07]+08 - Offset Value Type Description - 0x00 - WORD Number of T-states per sample (bit of data) - 0x02 - WORD Pause after this block in milliseconds (ms.) - 0x04 - BYTE Used bits (samples) in last byte of data (1-8) - (e.g. if this is 2, only first two samples of the last byte will be played) - 0x05 N BYTE[3] Length of samples' data - 0x08 - BYTE[N] Samples data. Each bit represents a state on the EAR port (i.e. one sample). - MSb is played first. - - This block is used for tapes which have some parts in a format such that the turbo loader block cannot be used. - This is not like a VOC file, since the information is much more compact. Each sample value is represented by one bit only - (0 for low, 1 for high) which means that the block will be at most 1/8 the size of the equivalent VOC. - The preferred sampling frequencies are 22050 or 44100 Hz (158 or 79 T-states/sample). - Please, if you can, don't use other sampling frequencies. - Please use this block only if you cannot use any other block. */ - private void ProcessBlockID15(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x15; - t.BlockDescription = BlockType.Direct_Recording; - t.DataPeriods = new List(); - - // get values - int samLen = GetInt32(data, _position + 5); - int samSize = 0xFFFFFF & samLen; - - int tStatesPerSample = GetWordValue(data, _position); - int pauseAfterBlock = GetWordValue(data, _position + 2); - int usedBitsInLastByte = data[_position + 4]; - - // skip to samples data - _position += 8; - - int pulseLength = 0; - int pulseCount = 0; - - // ascertain the pulse count - for (int i = 0; i < samSize; i++) - { - for (int p = 0x80; p != 0; p >>= 1) - { - if (((data[_position + i] ^ pulseLength) & p) != 0) - { - pulseCount++; - pulseLength ^= -1; - } - } - } - - // get the pulses - t.DataPeriods = new List(pulseCount + 2); - int tStateCount = 0; - pulseLength = 0; - for (int i = 1; i < samSize; i++) - { - for (int p = 0x80; p != 0; p >>= 1) - { - tStateCount += tStatesPerSample; - if (((data[_position] ^ pulseLength) & p) != 0) - { - t.DataPeriods.Add(tStateCount); - pulseLength ^= -1; - tStateCount = 0; - } - } - - // incrememt position - _position++; - } - - // get the pulses in the last byte of data - for (int p = 0x80; p != (byte)(0x80 >> usedBitsInLastByte); p >>= 1) - { - tStateCount += tStatesPerSample; - if (((data[_position] ^ pulseLength) & p) != 0) - { - t.DataPeriods.Add(tStateCount); - pulseLength ^= -1; - tStateCount = 0; - } - } - - // add final pulse - t.DataPeriods.Add(tStateCount); - - // add end of block pause - if (pauseAfterBlock > 0) - { - //t.DataPeriods.Add(3500 * pauseAfterBlock); - } - - t.PauseInMS = pauseAfterBlock; - - // increment position - _position++; - - // add the block - _datacorder.DataBlocks.Add(t); - - // generate PAUSE block - CreatePauseBlock(_datacorder.DataBlocks.Last()); - } - #endregion - - #region ID 18 - CSW Recording -/* length: [00,01,02,03]+04 - Offset Value Type Description - 0x00 10+N DWORD Block length (without these four bytes) - 0x04 - WORD Pause after this block (in ms). - 0x06 - BYTE[3] Sampling rate - 0x09 - BYTE Compression type - 0x01: RLE - 0x02: Z-RLE - 0x0A - DWORD Number of stored pulses (after decompression, for validation purposes) - 0x0E - BYTE[N] CSW data, encoded according to the CSW file format specification. - - This block contains a sequence of raw pulses encoded in CSW format v2 (Compressed Square Wave). */ - private void ProcessBlockID18(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x18; - t.BlockDescription = BlockType.CSW_Recording; - t.DataPeriods = new List(); - - int blockLen = GetInt32(data, _position); - _position += 4; - - t.PauseInMS = GetWordValue(data, _position); - - _position += 2; - - int sampleRate = data[_position++] << 16 | data[_position++] << 8 | data[_position++]; - byte compType = data[_position++]; - int pulses = GetInt32(data, _position); - _position += 4; - - int dataLen = blockLen - 10; - - // build source array - byte[] src = new byte[dataLen]; - // build destination array - byte[] dest = new byte[pulses + 1]; - - // process the CSW data - CswConverter.ProcessCSWV2(src, ref dest, compType, pulses); - - // create the periods - var rate = (69888 * 50) / sampleRate; - - for (int i = 0; i < dest.Length;) - { - int length = dest[i++] * rate; - if (length == 0) - { - length = GetInt32(dest, i) / rate; - i += 4; - } - - t.DataPeriods.Add(length); - } - - // add closing period - t.DataPeriods.Add((69888 * 50) / 10); - - _position += dataLen; - //_position += blockLen; - - // add the block - _datacorder.DataBlocks.Add(t); - - // generate PAUSE block - CreatePauseBlock(_datacorder.DataBlocks.Last()); - } - #endregion - - #region ID 19 - Generalized Data Block -/* length: [00,01,02,03]+04 - Offset Value Type Description - 0x00 - DWORD Block length (without these four bytes) - 0x04 - WORD Pause after this block (ms) - 0x06 TOTP DWORD Total number of symbols in pilot/sync block (can be 0) - 0x0A NPP BYTE Maximum number of pulses per pilot/sync symbol - 0x0B ASP BYTE Number of pilot/sync symbols in the alphabet table (0=256) - 0x0C TOTD DWORD Total number of symbols in data stream (can be 0) - 0x10 NPD BYTE Maximum number of pulses per data symbol - 0x11 ASD BYTE Number of data symbols in the alphabet table (0=256) - 0x12 - SYMDEF[ASP] Pilot and sync symbols definition table - This field is present only if TOTP>0 - 0x12+ - (2*NPP+1)*ASP - PRLE[TOTP] Pilot and sync data stream - This field is present only if TOTP>0 - 0x12+ - (TOTP>0)*((2*NPP+1)*ASP)+ - TOTP*3 - SYMDEF[ASD] Data symbols definition table - This field is present only if TOTD>0 - 0x12+ - (TOTP>0)*((2*NPP+1)*ASP)+ - TOTP*3+ - (2*NPD+1)*ASD - BYTE[DS] Data stream - This field is present only if TOTD>0 - - This block has been specifically developed to represent an extremely wide range of data encoding techniques. - The basic idea is that each loading component (pilot tone, sync pulses, data) is associated to a specific sequence - of pulses, where each sequence (wave) can contain a different number of pulses from the others. - In this way we can have a situation where bit 0 is represented with 4 pulses and bit 1 with 8 pulses. - - ---- - SYMDEF structure format - Offset Value Type Description - 0x00 - BYTE Symbol flags - b0-b1: starting symbol polarity - 00: opposite to the current level (make an edge, as usual) - default - 01: same as the current level (no edge - prolongs the previous pulse) - 10: force low level - 11: force high level - 0x01 - WORD[MAXP] Array of pulse lengths. - - The alphabet is stored using a table where each symbol is a row of pulses. The number of columns (i.e. pulses) of the table is the - length of the longest sequence amongst all (MAXP=NPP or NPD, for pilot/sync or data blocks respectively); shorter waves are terminated by a - zero-length pulse in the sequence. - Any number of data symbols is allowed, so we can have more than two distinct waves; for example, imagine a loader which writes two bits at a - time by encoding them with four distinct pulse lengths: this loader would have an alphabet of four symbols, each associated to a specific - sequence of pulses (wave). - ---- - ---- - PRLE structure format - Offset Value Type Description - 0x00 - BYTE Symbol to be represented - 0x01 - WORD Number of repetitions - - Most commonly, pilot and sync are repetitions of the same pulse, thus they are represented using a very simple RLE encoding structure which stores - the symbol and the number of times it must be repeated. - Each symbol in the data stream is represented by a string of NB bits of the block data, where NB = ceiling(Log2(ASD)). - Thus the length of the whole data stream in bits is NB*TOTD, or in bytes DS=ceil(NB*TOTD/8). - ---- */ - private void ProcessBlockID19(byte[] data) - { - // not currently implemented properly - - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x19; - t.BlockDescription = BlockType.Generalized_Data_Block; - t.DataPeriods = new List(); - - int blockLen = GetInt32(data, _position); - _position += 4; - - int pause = GetWordValue(data, _position); - _position += 2; - - int totp = GetInt32(data, _position); - _position += 4; - - int npp = data[_position++]; - - int asp = data[_position++]; - - int totd = GetInt32(data, _position); - _position += 4; - - int npd = data[_position++]; - - int asd = data[_position++]; - - // add the block - _datacorder.DataBlocks.Add(t); - - // advance the position to the next block - _position += blockLen; - } - #endregion - - #region ID 20 - Pause (silence) or 'Stop the Tape' command -/* length: 02 - Offset Value Type Description - 0x00 - WORD Pause duration (ms.) - - This will make a silence (low amplitude level (0)) for a given time in milliseconds. If the value is 0 then the - emulator or utility should (in effect) STOP THE TAPE, i.e. should not continue loading until the user or emulator requests it. */ - private void ProcessBlockID20(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x20; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Pause_or_Stop_the_Tape; - - int pauseDuration = GetWordValue(data, _position); - if (pauseDuration != 0) - { - //t.BlockDescription = "Pause: " + pauseDuration + " ms"; - } - else - { - //t.BlockDescription = "[STOP THE TAPE]"; - } - - t.PauseInMS = pauseDuration; - - if (pauseDuration == 0) - { - // issue stop the tape command - t.Command = TapeCommand.STOP_THE_TAPE; - // add 1ms period - //t.DataPeriods.Add(3500); - //pauseDuration = -1; - - } - else - { - // this is actually just a pause - //pauseDuration = 3500 * pauseDuration; - //t.DataPeriods.Add(pauseDuration); - } - - // add end of block pause - //t.DataPeriods.Add(pauseDuration); - - // add to tape - _datacorder.DataBlocks.Add(t); - - // advanced position to next block - _position += 2; - - // generate PAUSE block - CreatePauseBlock(_datacorder.DataBlocks.Last()); - - } - #endregion - - #region ID 21 - Group start -/* length: [00]+01 - Offset Value Type Description - 0x00 L BYTE Length of the group name string - 0x01 - CHAR[L] Group name in ASCII format (please keep it under 30 characters long) - - This block marks the start of a group of blocks which are to be treated as one single (composite) block. - This is very handy for tapes that use lots of subblocks like Bleepload (which may well have over 160 custom loading blocks). - You can also give the group a name (example 'Bleepload Block 1'). - For each group start block, there must be a group end block. Nesting of groups is not allowed. */ - private void ProcessBlockID21(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x21; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Group_Start; - - int nameLength = data[_position]; - _position++; - - string name = Encoding.ASCII.GetString(data, _position, nameLength); - //t.BlockDescription = "[GROUP: " + name + "]"; - t.Command = TapeCommand.BEGIN_GROUP; - - t.PauseInMS = 0; - - // add to tape - _datacorder.DataBlocks.Add(t); - - // advance to next block - _position += nameLength; - } - #endregion - - #region ID 22 - Group end -/* length: 00 - - This indicates the end of a group. This block has no body. */ - private void ProcessBlockID22(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x22; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Group_End; - t.Command = TapeCommand.END_GROUP; - - t.PauseInMS = 0; - - // add to tape - _datacorder.DataBlocks.Add(t); - } - #endregion - - #region ID 23 - Jump to block -/* length: 02 - Offset Value Type Description - 0x00 - WORD Relative jump value - - This block will enable you to jump from one block to another within the file. The value is a signed short word - (usually 'signed short' in C); Some examples: - Jump 0 = 'Loop Forever' - this should never happen - Jump 1 = 'Go to the next block' - it is like NOP in assembler ;) - Jump 2 = 'Skip one block' - Jump -1 = 'Go to the previous block' - All blocks are included in the block count!. */ - private void ProcessBlockID23(byte[] data) - { - // not implemented properly - - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x23; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Jump_to_Block; - - int relativeJumpValue = GetWordValue(data, _position); - string result = string.Empty; - - switch(relativeJumpValue) - { - case 0: - result = "Loop Forever"; - break; - case 1: - result = "To Next Block"; - break; - case 2: - result = "Skip One Block"; - break; - case -1: - result = "Go to Previous Block"; - break; - } - - //t.BlockDescription = "[JUMP BLOCK - " + result +"]"; - - t.PauseInMS = 0; - - // add to tape - _datacorder.DataBlocks.Add(t); - - // advance to next block - _position += 2; - } - #endregion - - #region ID 24 - Loop start -/* length: 02 - Offset Value Type Description - 0x00 - WORD Number of repetitions (greater than 1) - - If you have a sequence of identical blocks, or of identical groups of blocks, you can use this block to tell how many times they should - be repeated. This block is the same as the FOR statement in BASIC. - For simplicity reasons don't nest loop blocks! */ - private void ProcessBlockID24(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x24; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Loop_Start; - - // loop should start from the next block - int loopStart = _datacorder.DataBlocks.Count() + 1; - - int numberOfRepetitions = GetWordValue(data, _position); - - // update loop counter - _loopCounter.Add( - new KeyValuePair( - loopStart, - numberOfRepetitions)); - - // update description - //t.BlockDescription = "[LOOP START - " + numberOfRepetitions + " times]"; - - t.PauseInMS = 0; - - // add to tape - _datacorder.DataBlocks.Add(t); - - // advance to next block - _position += 2; - } - #endregion - - #region ID 25 - Loop end -/* length: 00 - - This is the same as BASIC's NEXT statement. It means that the utility should jump back to the start of the loop if it hasn't - been run for the specified number of times. - This block has no body. */ - private void ProcessBlockID25(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x25; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Loop_End; - - // get the most recent loop info - var loop = _loopCounter.LastOrDefault(); - - int loopStart = loop.Key; - int numberOfRepetitions = loop.Value; - - if (numberOfRepetitions == 0) - { - return; - } - - // get the number of blocks to loop - int blockCnt = _datacorder.DataBlocks.Count() - loopStart; - - // loop through each group to repeat - for (int b = 0; b < numberOfRepetitions; b++) - { - TapeDataBlock repeater = new TapeDataBlock(); - //repeater.BlockDescription = "[LOOP REPEAT - " + (b + 1) + "]"; - repeater.DataPeriods = new List(); - - // add the repeat block - _datacorder.DataBlocks.Add(repeater); - - // now iterate through and add the blocks to be repeated - for (int i = 0; i < blockCnt; i++) - { - var block = _datacorder.DataBlocks[loopStart + i]; - _datacorder.DataBlocks.Add(block); - } - } - } - #endregion - - #region ID 26 - Call sequence -/* length: [00,01]*02+02 - Offset Value Type Description - 0x00 N WORD Number of calls to be made - 0x02 - WORD[N] Array of call block numbers (relative-signed offsets) - - This block is an analogue of the CALL Subroutine statement. It basically executes a sequence of blocks that are somewhere else and - then goes back to the next block. Because more than one call can be normally used you can include a list of sequences to be called. - The 'nesting' of call blocks is also not allowed for the simplicity reasons. You can, of course, use the CALL blocks in the LOOP - sequences and vice versa. The value is relative for the obvious reasons - so that you can add some blocks in the beginning of the - file without disturbing the call values. Please take a look at 'Jump To Block' for reference on the values. */ - private void ProcessBlockID26(byte[] data) - { - // block processing not implemented for this - just gets added for informational purposes only - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x26; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Call_Sequence; - - int blockSize = 2 + 2 * GetWordValue(data, _position); - t.PauseInMS = 0; - - - // add to tape - _datacorder.DataBlocks.Add(t); - - // advance to next block - _position += blockSize; - } - #endregion - - #region ID 27 - Return from sequence -/* length: 00 - - This block indicates the end of the Called Sequence. The next block played will be the block after the last CALL block (or the next Call, - if the Call block had multiple calls). - Again, this block has no body. */ - private void ProcessBlockID27(byte[] data) - { - // block processing not implemented for this - just gets added for informational purposes only - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x27; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Return_From_Sequence; - t.PauseInMS = 0; - - - // add to tape - _datacorder.DataBlocks.Add(t); - } - #endregion - - #region ID 28 - Select block -/* length: [00,01]+02 - Offset Value Type Description - 0x00 - WORD Length of the whole block (without these two bytes) - 0x02 N BYTE Number of selections - 0x03 - SELECT[N] List of selections - - ---- - SELECT structure format - Offset Value Type Description - 0x00 - WORD Relative Offset - 0x02 L BYTE Length of description text - 0x03 - CHAR[L] Description text (please use single line and max. 30 chars) - ---- - - This block is useful when the tape consists of two or more separately-loadable parts. With this block, you are able to select - one of the parts and the utility/emulator will start loading from that block. For example you can use it when the game has a - separate Trainer or when it is a multiload. Of course, to make some use of it the emulator/utility has to show a menu with the - selections when it encounters such a block. All offsets are relative signed words. */ - private void ProcessBlockID28(byte[] data) - { - // block processing not implemented for this - just gets added for informational purposes only - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x28; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Select_Block; - - int blockSize = 2 + GetWordValue(data, _position); - - t.PauseInMS = 0; - - // add to tape - _datacorder.DataBlocks.Add(t); - - // advance to next block - _position += blockSize; - } - #endregion - - #region ID 2A - Stop the tape if in 48K mode -/* length: 04 - Offset Value Type Description - 0x00 0 DWORD Length of the block without these four bytes (0) - - When this block is encountered, the tape will stop ONLY if the machine is an 48K Spectrum. This block is to be used for - multiloading games that load one level at a time in 48K mode, but load the entire tape at once if in 128K mode. - This block has no body of its own, but follows the extension rule. */ - private void ProcessBlockID2A(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x2A; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Stop_the_Tape_48K; - t.Command = TapeCommand.STOP_THE_TAPE_48K; - - int blockSize = 4 + GetWordValue(data, _position); - - t.PauseInMS = 0; - - // add to tape - _datacorder.DataBlocks.Add(t); - - // advance to next block - _position += blockSize; - } - #endregion - - #region ID 2B - Set signal level -/* length: 05 - Offset Value Type Description - 0x00 1 DWORD Block length (without these four bytes) - 0x04 - BYTE Signal level (0=low, 1=high) - - This block sets the current signal level to the specified value (high or low). It should be used whenever it is necessary to avoid any - ambiguities, e.g. with custom loaders which are level-sensitive. */ - private void ProcessBlockID2B(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x2B; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Set_Signal_Level; - - t.PauseInMS = 0; - - // add to tape - _datacorder.DataBlocks.Add(t); - - // advance to next block - _position += 5; - } - #endregion - - #region ID 30 - Text description -/* length: [00]+01 - Offset Value Type Description - 0x00 N BYTE Length of the text description - 0x01 - CHAR[N] Text description in ASCII format - - This is meant to identify parts of the tape, so you know where level 1 starts, where to rewind to when the game ends, etc. - This description is not guaranteed to be shown while the tape is playing, but can be read while browsing the tape or changing - the tape pointer. - The description can be up to 255 characters long but please keep it down to about 30 so the programs can show it in one line - (where this is appropriate). - Please use 'Archive Info' block for title, authors, publisher, etc. */ - private void ProcessBlockID30(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x30; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Text_Description; - - int textLen = data[_position]; - _position++; - - string desc = Encoding.ASCII.GetString(data, _position, textLen); - - t.PauseInMS = 0; - - //t.BlockDescription = "[" + desc + "]"; - - // add to tape - _datacorder.DataBlocks.Add(t); - - // advance to next block - _position += textLen; - } - #endregion - - #region ID 31 - Message block -/* length: [01]+02 - Offset Value Type Description - 0x00 - BYTE Time (in seconds) for which the message should be displayed - 0x01 N BYTE Length of the text message - 0x02 - CHAR[N] Message that should be displayed in ASCII format - - This will enable the emulators to display a message for a given time. This should not stop the tape and it should not make silence. - If the time is 0 then the emulator should wait for the user to press a key. - The text message should: - stick to a maximum of 30 chars per line; - use single 0x0D (13 decimal) to separate lines; - stick to a maximum of 8 lines. - If you do not obey these rules, emulators may display your message in any way they like. */ - private void ProcessBlockID31(byte[] data) - { - // currently not implemented properly in ZXHawk - - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x31; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Message_Block; - - _position++; - - int msgLen = data[_position]; - _position++; - - string desc = Encoding.ASCII.GetString(data, _position, msgLen); - - t.Command = TapeCommand.SHOW_MESSAGE; - - //t.BlockDescription = "[MESSAGE: " + desc + "]"; - - t.PauseInMS = 0; - - // add to tape - _datacorder.DataBlocks.Add(t); - - // advance to next block - _position += msgLen; - } - #endregion - - #region ID 32 - Archive info -/* length: [00,01]+02 - Offset Value Type Description - 0x00 - WORD Length of the whole block (without these two bytes) - 0x02 N BYTE Number of text strings - 0x03 - TEXT[N] List of text strings - - ---- - TEXT structure format - Offset Value Type Description - 0x00 - BYTE Text identification byte: - 00 - Full title - 01 - Software house/publisher - 02 - Author(s) - 03 - Year of publication - 04 - Language - 05 - Game/utility type - 06 - Price - 07 - Protection scheme/loader - 08 - Origin - FF - Comment(s) - 0x01 L BYTE Length of text string - 0x02 - CHAR[L] Text string in ASCII format - ---- - - Use this block at the beginning of the tape to identify the title of the game, author, publisher, year of publication, price (including - the currency), type of software (arcade adventure, puzzle, word processor, ...), protection scheme it uses (Speedlock 1, Alkatraz, ...) - and its origin (Original, Budget re-release, ...), etc. This block is built in a way that allows easy future expansion. - The block consists of a series of text strings. Each text has its identification number (which tells us what the text means) and then - the ASCII text. To make it possible to skip this block, if needed, the length of the whole block is at the beginning of it. - If all texts on the tape are in English language then you don't have to supply the 'Language' field - The information about what hardware the tape uses is in the 'Hardware Type' block, so no need for it here. */ - private void ProcessBlockID32(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x32; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Archive_Info; - - int blockLen = GetWordValue(data, _position); - _position += 2; - int stringCount = data[_position++]; - - // iterate through each string - for (int s = 0; s < stringCount; s++) - { - // identify the type of text - int type = data[_position++]; - - // get text length - int strLen = data[_position++]; + // check whether this is a valid tzx format file by looking at the identifier in the header + // (first 7 bytes of the file) + string ident = Encoding.ASCII.GetString(data, 0, 7); + // and 'end of text' marker + byte eotm = data[7]; + + // version info + int majorVer = data[8]; + int minorVer = data[9]; + + if (ident != "ZXTape!" || eotm != 0x1A) + { + // this is not a valid TZX format file + return false; + } + else + { + return true; + } + } + + /// + /// DeSerialization method + /// + public override void Read(byte[] data) + { + // clear existing tape blocks + _datacorder.DataBlocks.Clear(); + + /* + // TZX Header + length: 10 bytes + Offset Value Type Description + 0x00 "ZXTape!" ASCII[7] TZX signature + 0x07 0x1A BYTE End of text file marker + 0x08 1 BYTE TZX major revision number + 0x09 20 BYTE TZX minor revision number + */ + + // check whether this is a valid tzx format file by looking at the identifier in the header + // (first 7 bytes of the file) + string ident = Encoding.ASCII.GetString(data, 0, 7); + // and 'end of text' marker + byte eotm = data[7]; + + // version info + int majorVer = data[8]; + int minorVer = data[9]; + + if (ident != "ZXTape!" || eotm != 0x1A) + { + // this is not a valid TZX format file + throw new Exception(this.GetType().ToString() + + "This is not a valid TZX format file"); + } + + // iterate through each block + _position = 10; + while (_position < data.Length) + { + // block ID is the first byte in a new block + int ID = data[_position++]; + + // process the data + ProcessBlock(data, ID); + } + + } + + /// + /// Processes a TZX block + /// + private void ProcessBlock(byte[] data, int id) + { + // process based on detected block ID + switch (id) + { + // ID 10 - Standard Speed Data Block + case 0x10: + ProcessBlockID10(data); + break; + // ID 11 - Turbo Speed Data Block + case 0x11: + ProcessBlockID11(data); + break; + // ID 12 - Pure Tone + case 0x12: + ProcessBlockID12(data); + break; + // ID 13 - Pulse sequence + case 0x13: + ProcessBlockID13(data); + break; + // ID 14 - Pure Data Block + case 0x14: + ProcessBlockID14(data); + break; + // ID 15 - Direct Recording + case 0x15: + ProcessBlockID15(data); + break; + // ID 18 - CSW Recording + case 0x18: + ProcessBlockID18(data); + break; + // ID 19 - Generalized Data Block + case 0x19: + ProcessBlockID19(data); + break; + // ID 20 - Pause (silence) or 'Stop the Tape' command + case 0x20: + ProcessBlockID20(data); + break; + // ID 21 - Group start + case 0x21: + ProcessBlockID21(data); + break; + // ID 22 - Group end + case 0x22: + ProcessBlockID22(data); + break; + // ID 23 - Jump to block + case 0x23: + ProcessBlockID23(data); + break; + // ID 24 - Loop start + case 0x24: + ProcessBlockID24(data); + break; + // ID 25 - Loop end + case 0x25: + ProcessBlockID25(data); + break; + // ID 26 - Call sequence + case 0x26: + ProcessBlockID26(data); + break; + // ID 27 - Return from sequence + case 0x27: + ProcessBlockID27(data); + break; + // ID 28 - Select block + case 0x28: + ProcessBlockID28(data); + break; + // ID 2A - Stop the tape if in 48K mode + case 0x2A: + ProcessBlockID2A(data); + break; + // ID 2B - Set signal level + case 0x2B: + ProcessBlockID2B(data); + break; + // ID 30 - Text description + case 0x30: + ProcessBlockID30(data); + break; + // ID 31 - Message block + case 0x31: + ProcessBlockID31(data); + break; + // ID 32 - Archive info + case 0x32: + ProcessBlockID32(data); + break; + // ID 33 - Hardware type + case 0x33: + ProcessBlockID33(data); + break; + // ID 35 - Custom info block + case 0x35: + ProcessBlockID35(data); + break; + // ID 5A - "Glue" block + case 0x5A: + ProcessBlockID5A(data); + break; + + #region Depreciated Blocks + + // ID 16 - C64 ROM Type Data Block + case 0x16: + ProcessBlockID16(data); + break; + // ID 17 - C64 Turbo Tape Data Block + case 0x17: + ProcessBlockID17(data); + break; + // ID 34 - Emulation info + case 0x34: + ProcessBlockID34(data); + break; + // ID 40 - Snapshot block + case 0x40: + ProcessBlockID40(data); + break; + + #endregion + + default: + ProcessUnidentifiedBlock(data); + break; + } + } + + #region TZX Block Processors + + #region ID 10 - Standard Speed Data Block + /* length: [02,03]+04 + Offset Value Type Description + 0x00 - WORD Pause after this block (ms.) {1000} + 0x02 N WORD Length of data that follow + 0x04 - BYTE[N] Data as in .TAP files + + This block must be replayed with the standard Spectrum ROM timing values - see the values in + curly brackets in block ID 11. The pilot tone consists in 8063 pulses if the first data byte + (flag byte) is < 128, 3223 otherwise. This block can be used for the ROM loading routines AND + for custom loading routines that use the same timings as ROM ones do. */ + private void ProcessBlockID10(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x10; + t.BlockDescription = BlockType.Standard_Speed_Data_Block; + t.DataPeriods = new List(); + + int pauseLen = GetWordValue(data, _position); + if (pauseLen == 0) + pauseLen = 1000; + + t.PauseInMS = pauseLen; + + int blockLen = GetWordValue(data, _position + 2); + + _position += 4; + + byte[] tmp = new byte[blockLen]; + tmp = data.Skip(_position).Take(blockLen).ToArray(); + + var t2 = DecodeDataBlock(t, tmp, DataBlockType.Standard, pauseLen); + + // add the block + _datacorder.DataBlocks.Add(t2); + + // advance the position to the next block + _position += blockLen; + + // generate PAUSE block + CreatePauseBlock(_datacorder.DataBlocks.Last()); + } + #endregion + + #region ID 11 - Turbo Speed Data Block + /* length: [0F,10,11]+12 + Offset Value Type Description + 0x00 - WORD Length of PILOT pulse {2168} + 0x02 - WORD Length of SYNC first pulse {667} + 0x04 - WORD Length of SYNC second pulse {735} + 0x06 - WORD Length of ZERO bit pulse {855} + 0x08 - WORD Length of ONE bit pulse {1710} + 0x0A - WORD Length of PILOT tone (number of pulses) {8063 header (flag<128), 3223 data (flag>=128)} + 0x0C - BYTE Used bits in the last byte (other bits should be 0) {8} + (e.g. if this is 6, then the bits used (x) in the last byte are: xxxxxx00, + where MSb is the leftmost bit, LSb is the rightmost bit) + 0x0D - WORD Pause after this block (ms.) {1000} + 0x0F N BYTE[3] Length of data that follow + 0x12 - BYTE[N] Data as in .TAP files + + This block is very similar to the normal TAP block but with some additional info on the timings and other important + differences. The same tape encoding is used as for the standard speed data block. If a block should use some non-standard + sync or pilot tones (i.e. all sorts of protection schemes) then use the next three blocks to describe it.*/ + private void ProcessBlockID11(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x11; + t.BlockDescription = BlockType.Turbo_Speed_Data_Block; + t.DataPeriods = new List(); + + int pilotPL = GetWordValue(data, _position); + int sync1P = GetWordValue(data, _position + 2); + int sync2P = GetWordValue(data, _position + 4); + int bit0P = GetWordValue(data, _position + 6); + int bit1P = GetWordValue(data, _position + 8); + int pilotTL = GetWordValue(data, _position + 10); + int bitinbyte = data[_position + 12]; + int pause = GetWordValue(data, _position + 13); + + + int blockLen = 0xFFFFFF & GetInt32(data, _position + 0x0F); + + byte[] bLenArr = data.Skip(_position + 0x0F).Take(3).ToArray(); + + _position += 0x12; + + byte[] tmp = new byte[blockLen]; + tmp = data.Skip(_position).Take(blockLen).ToArray(); + + var t2 = DecodeDataBlock(t, tmp, DataBlockType.Turbo, pause, pilotTL, pilotPL, sync1P, sync2P, bit0P, bit1P, bitinbyte); + + t.PauseInMS = pause; + + // add the block + _datacorder.DataBlocks.Add(t2); + + // advance the position to the next block + _position += blockLen; + + // generate PAUSE block + CreatePauseBlock(_datacorder.DataBlocks.Last()); + } + #endregion + + #region ID 12 - Pure Tone + /* length: 04 + Offset Value Type Description + 0x00 - WORD Length of one pulse in T-states + 0x02 - WORD Number of pulses + + This will produce a tone which is basically the same as the pilot tone in the ID 10, ID 11 blocks. You can define how + long the pulse is and how many pulses are in the tone. */ + private void ProcessBlockID12(byte[] data) + { + int blockLen = 4; + + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x12; + t.BlockDescription = BlockType.Pure_Tone; + t.DataPeriods = new List(); + t.PauseInMS = 0; + + // get values + int pulseLength = GetWordValue(data, _position); + int pulseCount = GetWordValue(data, _position + 2); + + t.AddMetaData(BlockDescriptorTitle.Pulse_Length, pulseLength.ToString() + " T-States"); + t.AddMetaData(BlockDescriptorTitle.Pulse_Count, pulseCount.ToString()); + + // build period information + for (int p = 0; p < pulseCount; p++) + { + t.DataPeriods.Add(pulseLength); + } + + // add the block + _datacorder.DataBlocks.Add(t); + + // advance the position to the next block + _position += blockLen; + } + #endregion + + #region ID 13 - Pulse sequence + /* length: [00]*02+01 + Offset Value Type Description + 0x00 N BYTE Number of pulses + 0x01 - WORD[N] Pulses' lengths + + This will produce N pulses, each having its own timing. Up to 255 pulses can be stored in this block; this is useful for non-standard + sync tones used by some protection schemes. */ + private void ProcessBlockID13(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x13; + t.BlockDescription = BlockType.Pulse_Sequence; + t.DataPeriods = new List(); + + t.PauseInMS = 0; + + // get pulse count + int pulseCount = data[_position]; + t.AddMetaData(BlockDescriptorTitle.Pulse_Count, pulseCount.ToString()); + _position++; + + // build period information + for (int p = 0; p < pulseCount; p++, _position += 2) + { + // get pulse length + int pulseLength = GetWordValue(data, _position); + t.AddMetaData(BlockDescriptorTitle.Needs_Parsing, "Pulse " + p + " Length\t" + pulseLength.ToString() + " T-States"); + t.DataPeriods.Add(pulseLength); + } + + // add the block + _datacorder.DataBlocks.Add(t); + } + #endregion + + #region ID 14 - Pure Data Block + /* length: [07,08,09]+0A + Offset Value Type Description + 0x00 - WORD Length of ZERO bit pulse + 0x02 - WORD Length of ONE bit pulse + 0x04 - BYTE Used bits in last byte (other bits should be 0) + (e.g. if this is 6, then the bits used (x) in the last byte are: xxxxxx00, + where MSb is the leftmost bit, LSb is the rightmost bit) + 0x05 - WORD Pause after this block (ms.) + 0x07 N BYTE[3] Length of data that follow + 0x0A - BYTE[N] Data as in .TAP files + + This is the same as in the turbo loading data block, except that it has no pilot or sync pulses. */ + private void ProcessBlockID14(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x14; + t.BlockDescription = BlockType.Pure_Data_Block; + t.DataPeriods = new List(); + + int pilotPL = 0; + int sync1P = 0; + int sync2P = 0; + int bit0P = GetWordValue(data, _position + 0); + int bit1P = GetWordValue(data, _position + 2); + int pilotTL = 0; + int bitinbyte = data[_position + 4]; + int pause = GetWordValue(data, _position + 5); + + int blockLen = 0xFFFFFF & GetInt32(data, _position + 0x07); + + _position += 0x0A; + + byte[] tmp = new byte[blockLen]; + tmp = data.Skip(_position).Take(blockLen).ToArray(); + + var t2 = DecodeDataBlock(t, tmp, DataBlockType.Pure, pause, pilotTL, pilotPL, sync1P, sync2P, bit0P, bit1P, bitinbyte); + + t.PauseInMS = pause; + + // add the block + _datacorder.DataBlocks.Add(t2); + + // advance the position to the next block + _position += blockLen; + + // generate PAUSE block + CreatePauseBlock(_datacorder.DataBlocks.Last()); + } + #endregion + + #region ID 15 - Direct Recording + /* length: [05,06,07]+08 + Offset Value Type Description + 0x00 - WORD Number of T-states per sample (bit of data) + 0x02 - WORD Pause after this block in milliseconds (ms.) + 0x04 - BYTE Used bits (samples) in last byte of data (1-8) + (e.g. if this is 2, only first two samples of the last byte will be played) + 0x05 N BYTE[3] Length of samples' data + 0x08 - BYTE[N] Samples data. Each bit represents a state on the EAR port (i.e. one sample). + MSb is played first. + + This block is used for tapes which have some parts in a format such that the turbo loader block cannot be used. + This is not like a VOC file, since the information is much more compact. Each sample value is represented by one bit only + (0 for low, 1 for high) which means that the block will be at most 1/8 the size of the equivalent VOC. + The preferred sampling frequencies are 22050 or 44100 Hz (158 or 79 T-states/sample). + Please, if you can, don't use other sampling frequencies. + Please use this block only if you cannot use any other block. */ + private void ProcessBlockID15(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x15; + t.BlockDescription = BlockType.Direct_Recording; + t.DataPeriods = new List(); + + // get values + int samLen = GetInt32(data, _position + 5); + int samSize = 0xFFFFFF & samLen; + + int tStatesPerSample = GetWordValue(data, _position); + int pauseAfterBlock = GetWordValue(data, _position + 2); + int usedBitsInLastByte = data[_position + 4]; + + // skip to samples data + _position += 8; + + int pulseLength = 0; + int pulseCount = 0; + + // ascertain the pulse count + for (int i = 0; i < samSize; i++) + { + for (int p = 0x80; p != 0; p >>= 1) + { + if (((data[_position + i] ^ pulseLength) & p) != 0) + { + pulseCount++; + pulseLength ^= -1; + } + } + } + + // get the pulses + t.DataPeriods = new List(pulseCount + 2); + int tStateCount = 0; + pulseLength = 0; + for (int i = 1; i < samSize; i++) + { + for (int p = 0x80; p != 0; p >>= 1) + { + tStateCount += tStatesPerSample; + if (((data[_position] ^ pulseLength) & p) != 0) + { + t.DataPeriods.Add(tStateCount); + pulseLength ^= -1; + tStateCount = 0; + } + } + + // incrememt position + _position++; + } + + // get the pulses in the last byte of data + for (int p = 0x80; p != (byte)(0x80 >> usedBitsInLastByte); p >>= 1) + { + tStateCount += tStatesPerSample; + if (((data[_position] ^ pulseLength) & p) != 0) + { + t.DataPeriods.Add(tStateCount); + pulseLength ^= -1; + tStateCount = 0; + } + } + + // add final pulse + t.DataPeriods.Add(tStateCount); + + // add end of block pause + if (pauseAfterBlock > 0) + { + //t.DataPeriods.Add(3500 * pauseAfterBlock); + } + + t.PauseInMS = pauseAfterBlock; + + // increment position + _position++; + + // add the block + _datacorder.DataBlocks.Add(t); + + // generate PAUSE block + CreatePauseBlock(_datacorder.DataBlocks.Last()); + } + #endregion + + #region ID 18 - CSW Recording + /* length: [00,01,02,03]+04 + Offset Value Type Description + 0x00 10+N DWORD Block length (without these four bytes) + 0x04 - WORD Pause after this block (in ms). + 0x06 - BYTE[3] Sampling rate + 0x09 - BYTE Compression type + 0x01: RLE + 0x02: Z-RLE + 0x0A - DWORD Number of stored pulses (after decompression, for validation purposes) + 0x0E - BYTE[N] CSW data, encoded according to the CSW file format specification. + + This block contains a sequence of raw pulses encoded in CSW format v2 (Compressed Square Wave). */ + private void ProcessBlockID18(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x18; + t.BlockDescription = BlockType.CSW_Recording; + t.DataPeriods = new List(); + + int blockLen = GetInt32(data, _position); + _position += 4; + + t.PauseInMS = GetWordValue(data, _position); + + _position += 2; + + int sampleRate = data[_position++] << 16 | data[_position++] << 8 | data[_position++]; + byte compType = data[_position++]; + int pulses = GetInt32(data, _position); + _position += 4; + + int dataLen = blockLen - 10; + + // build source array + byte[] src = new byte[dataLen]; + // build destination array + byte[] dest = new byte[pulses + 1]; + + // process the CSW data + CswConverter.ProcessCSWV2(src, ref dest, compType, pulses); + + // create the periods + var rate = (69888 * 50) / sampleRate; + + for (int i = 0; i < dest.Length;) + { + int length = dest[i++] * rate; + if (length == 0) + { + length = GetInt32(dest, i) / rate; + i += 4; + } + + t.DataPeriods.Add(length); + } + + // add closing period + t.DataPeriods.Add((69888 * 50) / 10); + + _position += dataLen; + //_position += blockLen; + + // add the block + _datacorder.DataBlocks.Add(t); + + // generate PAUSE block + CreatePauseBlock(_datacorder.DataBlocks.Last()); + } + #endregion + + #region ID 19 - Generalized Data Block + /* length: [00,01,02,03]+04 + Offset Value Type Description + 0x00 - DWORD Block length (without these four bytes) + 0x04 - WORD Pause after this block (ms) + 0x06 TOTP DWORD Total number of symbols in pilot/sync block (can be 0) + 0x0A NPP BYTE Maximum number of pulses per pilot/sync symbol + 0x0B ASP BYTE Number of pilot/sync symbols in the alphabet table (0=256) + 0x0C TOTD DWORD Total number of symbols in data stream (can be 0) + 0x10 NPD BYTE Maximum number of pulses per data symbol + 0x11 ASD BYTE Number of data symbols in the alphabet table (0=256) + 0x12 - SYMDEF[ASP] Pilot and sync symbols definition table + This field is present only if TOTP>0 + 0x12+ + (2*NPP+1)*ASP - PRLE[TOTP] Pilot and sync data stream + This field is present only if TOTP>0 + 0x12+ + (TOTP>0)*((2*NPP+1)*ASP)+ + TOTP*3 - SYMDEF[ASD] Data symbols definition table + This field is present only if TOTD>0 + 0x12+ + (TOTP>0)*((2*NPP+1)*ASP)+ + TOTP*3+ + (2*NPD+1)*ASD - BYTE[DS] Data stream + This field is present only if TOTD>0 + + This block has been specifically developed to represent an extremely wide range of data encoding techniques. + The basic idea is that each loading component (pilot tone, sync pulses, data) is associated to a specific sequence + of pulses, where each sequence (wave) can contain a different number of pulses from the others. + In this way we can have a situation where bit 0 is represented with 4 pulses and bit 1 with 8 pulses. + + ---- + SYMDEF structure format + Offset Value Type Description + 0x00 - BYTE Symbol flags + b0-b1: starting symbol polarity + 00: opposite to the current level (make an edge, as usual) - default + 01: same as the current level (no edge - prolongs the previous pulse) + 10: force low level + 11: force high level + 0x01 - WORD[MAXP] Array of pulse lengths. + + The alphabet is stored using a table where each symbol is a row of pulses. The number of columns (i.e. pulses) of the table is the + length of the longest sequence amongst all (MAXP=NPP or NPD, for pilot/sync or data blocks respectively); shorter waves are terminated by a + zero-length pulse in the sequence. + Any number of data symbols is allowed, so we can have more than two distinct waves; for example, imagine a loader which writes two bits at a + time by encoding them with four distinct pulse lengths: this loader would have an alphabet of four symbols, each associated to a specific + sequence of pulses (wave). + ---- + ---- + PRLE structure format + Offset Value Type Description + 0x00 - BYTE Symbol to be represented + 0x01 - WORD Number of repetitions + + Most commonly, pilot and sync are repetitions of the same pulse, thus they are represented using a very simple RLE encoding structure which stores + the symbol and the number of times it must be repeated. + Each symbol in the data stream is represented by a string of NB bits of the block data, where NB = ceiling(Log2(ASD)). + Thus the length of the whole data stream in bits is NB*TOTD, or in bytes DS=ceil(NB*TOTD/8). + ---- */ + private void ProcessBlockID19(byte[] data) + { + // not currently implemented properly + + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x19; + t.BlockDescription = BlockType.Generalized_Data_Block; + t.DataPeriods = new List(); + + int blockLen = GetInt32(data, _position); + _position += 4; + + int pause = GetWordValue(data, _position); + _position += 2; + + int totp = GetInt32(data, _position); + _position += 4; + + int npp = data[_position++]; + + int asp = data[_position++]; + + int totd = GetInt32(data, _position); + _position += 4; + + int npd = data[_position++]; + + int asd = data[_position++]; + + // add the block + _datacorder.DataBlocks.Add(t); + + // advance the position to the next block + _position += blockLen; + } + #endregion + + #region ID 20 - Pause (silence) or 'Stop the Tape' command + /* length: 02 + Offset Value Type Description + 0x00 - WORD Pause duration (ms.) + + This will make a silence (low amplitude level (0)) for a given time in milliseconds. If the value is 0 then the + emulator or utility should (in effect) STOP THE TAPE, i.e. should not continue loading until the user or emulator requests it. */ + private void ProcessBlockID20(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x20; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Pause_or_Stop_the_Tape; + + int pauseDuration = GetWordValue(data, _position); + if (pauseDuration != 0) + { + //t.BlockDescription = "Pause: " + pauseDuration + " ms"; + } + else + { + //t.BlockDescription = "[STOP THE TAPE]"; + } + + t.PauseInMS = pauseDuration; + + if (pauseDuration == 0) + { + // issue stop the tape command + t.Command = TapeCommand.STOP_THE_TAPE; + // add 1ms period + //t.DataPeriods.Add(3500); + //pauseDuration = -1; + + } + else + { + // this is actually just a pause + //pauseDuration = 3500 * pauseDuration; + //t.DataPeriods.Add(pauseDuration); + } + + // add end of block pause + //t.DataPeriods.Add(pauseDuration); + + // add to tape + _datacorder.DataBlocks.Add(t); + + // advanced position to next block + _position += 2; + + // generate PAUSE block + CreatePauseBlock(_datacorder.DataBlocks.Last()); + + } + #endregion + + #region ID 21 - Group start + /* length: [00]+01 + Offset Value Type Description + 0x00 L BYTE Length of the group name string + 0x01 - CHAR[L] Group name in ASCII format (please keep it under 30 characters long) + + This block marks the start of a group of blocks which are to be treated as one single (composite) block. + This is very handy for tapes that use lots of subblocks like Bleepload (which may well have over 160 custom loading blocks). + You can also give the group a name (example 'Bleepload Block 1'). + For each group start block, there must be a group end block. Nesting of groups is not allowed. */ + private void ProcessBlockID21(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x21; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Group_Start; + + int nameLength = data[_position]; + _position++; + + string name = Encoding.ASCII.GetString(data, _position, nameLength); + //t.BlockDescription = "[GROUP: " + name + "]"; + t.Command = TapeCommand.BEGIN_GROUP; + + t.PauseInMS = 0; + + // add to tape + _datacorder.DataBlocks.Add(t); + + // advance to next block + _position += nameLength; + } + #endregion + + #region ID 22 - Group end + /* length: 00 + + This indicates the end of a group. This block has no body. */ + private void ProcessBlockID22(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x22; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Group_End; + t.Command = TapeCommand.END_GROUP; + + t.PauseInMS = 0; + + // add to tape + _datacorder.DataBlocks.Add(t); + } + #endregion + + #region ID 23 - Jump to block + /* length: 02 + Offset Value Type Description + 0x00 - WORD Relative jump value + + This block will enable you to jump from one block to another within the file. The value is a signed short word + (usually 'signed short' in C); Some examples: + Jump 0 = 'Loop Forever' - this should never happen + Jump 1 = 'Go to the next block' - it is like NOP in assembler ;) + Jump 2 = 'Skip one block' + Jump -1 = 'Go to the previous block' + All blocks are included in the block count!. */ + private void ProcessBlockID23(byte[] data) + { + // not implemented properly + + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x23; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Jump_to_Block; + + int relativeJumpValue = GetWordValue(data, _position); + string result = string.Empty; + + switch (relativeJumpValue) + { + case 0: + result = "Loop Forever"; + break; + case 1: + result = "To Next Block"; + break; + case 2: + result = "Skip One Block"; + break; + case -1: + result = "Go to Previous Block"; + break; + } + + //t.BlockDescription = "[JUMP BLOCK - " + result +"]"; + + t.PauseInMS = 0; + + // add to tape + _datacorder.DataBlocks.Add(t); + + // advance to next block + _position += 2; + } + #endregion + + #region ID 24 - Loop start + /* length: 02 + Offset Value Type Description + 0x00 - WORD Number of repetitions (greater than 1) + + If you have a sequence of identical blocks, or of identical groups of blocks, you can use this block to tell how many times they should + be repeated. This block is the same as the FOR statement in BASIC. + For simplicity reasons don't nest loop blocks! */ + private void ProcessBlockID24(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x24; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Loop_Start; + + // loop should start from the next block + int loopStart = _datacorder.DataBlocks.Count() + 1; + + int numberOfRepetitions = GetWordValue(data, _position); + + // update loop counter + _loopCounter.Add( + new KeyValuePair( + loopStart, + numberOfRepetitions)); + + // update description + //t.BlockDescription = "[LOOP START - " + numberOfRepetitions + " times]"; + + t.PauseInMS = 0; + + // add to tape + _datacorder.DataBlocks.Add(t); + + // advance to next block + _position += 2; + } + #endregion + + #region ID 25 - Loop end + /* length: 00 + + This is the same as BASIC's NEXT statement. It means that the utility should jump back to the start of the loop if it hasn't + been run for the specified number of times. + This block has no body. */ + private void ProcessBlockID25(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x25; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Loop_End; + + // get the most recent loop info + var loop = _loopCounter.LastOrDefault(); + + int loopStart = loop.Key; + int numberOfRepetitions = loop.Value; + + if (numberOfRepetitions == 0) + { + return; + } + + // get the number of blocks to loop + int blockCnt = _datacorder.DataBlocks.Count() - loopStart; + + // loop through each group to repeat + for (int b = 0; b < numberOfRepetitions; b++) + { + TapeDataBlock repeater = new TapeDataBlock(); + //repeater.BlockDescription = "[LOOP REPEAT - " + (b + 1) + "]"; + repeater.DataPeriods = new List(); + + // add the repeat block + _datacorder.DataBlocks.Add(repeater); + + // now iterate through and add the blocks to be repeated + for (int i = 0; i < blockCnt; i++) + { + var block = _datacorder.DataBlocks[loopStart + i]; + _datacorder.DataBlocks.Add(block); + } + } + } + #endregion + + #region ID 26 - Call sequence + /* length: [00,01]*02+02 + Offset Value Type Description + 0x00 N WORD Number of calls to be made + 0x02 - WORD[N] Array of call block numbers (relative-signed offsets) + + This block is an analogue of the CALL Subroutine statement. It basically executes a sequence of blocks that are somewhere else and + then goes back to the next block. Because more than one call can be normally used you can include a list of sequences to be called. + The 'nesting' of call blocks is also not allowed for the simplicity reasons. You can, of course, use the CALL blocks in the LOOP + sequences and vice versa. The value is relative for the obvious reasons - so that you can add some blocks in the beginning of the + file without disturbing the call values. Please take a look at 'Jump To Block' for reference on the values. */ + private void ProcessBlockID26(byte[] data) + { + // block processing not implemented for this - just gets added for informational purposes only + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x26; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Call_Sequence; + + int blockSize = 2 + 2 * GetWordValue(data, _position); + t.PauseInMS = 0; + + + // add to tape + _datacorder.DataBlocks.Add(t); + + // advance to next block + _position += blockSize; + } + #endregion + + #region ID 27 - Return from sequence + /* length: 00 + + This block indicates the end of the Called Sequence. The next block played will be the block after the last CALL block (or the next Call, + if the Call block had multiple calls). + Again, this block has no body. */ + private void ProcessBlockID27(byte[] data) + { + // block processing not implemented for this - just gets added for informational purposes only + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x27; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Return_From_Sequence; + t.PauseInMS = 0; + + + // add to tape + _datacorder.DataBlocks.Add(t); + } + #endregion + + #region ID 28 - Select block + /* length: [00,01]+02 + Offset Value Type Description + 0x00 - WORD Length of the whole block (without these two bytes) + 0x02 N BYTE Number of selections + 0x03 - SELECT[N] List of selections + + ---- + SELECT structure format + Offset Value Type Description + 0x00 - WORD Relative Offset + 0x02 L BYTE Length of description text + 0x03 - CHAR[L] Description text (please use single line and max. 30 chars) + ---- + + This block is useful when the tape consists of two or more separately-loadable parts. With this block, you are able to select + one of the parts and the utility/emulator will start loading from that block. For example you can use it when the game has a + separate Trainer or when it is a multiload. Of course, to make some use of it the emulator/utility has to show a menu with the + selections when it encounters such a block. All offsets are relative signed words. */ + private void ProcessBlockID28(byte[] data) + { + // block processing not implemented for this - just gets added for informational purposes only + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x28; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Select_Block; + + int blockSize = 2 + GetWordValue(data, _position); + + t.PauseInMS = 0; + + // add to tape + _datacorder.DataBlocks.Add(t); + + // advance to next block + _position += blockSize; + } + #endregion + + #region ID 2A - Stop the tape if in 48K mode + /* length: 04 + Offset Value Type Description + 0x00 0 DWORD Length of the block without these four bytes (0) + + When this block is encountered, the tape will stop ONLY if the machine is an 48K Spectrum. This block is to be used for + multiloading games that load one level at a time in 48K mode, but load the entire tape at once if in 128K mode. + This block has no body of its own, but follows the extension rule. */ + private void ProcessBlockID2A(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x2A; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Stop_the_Tape_48K; + t.Command = TapeCommand.STOP_THE_TAPE_48K; + + int blockSize = 4 + GetWordValue(data, _position); + + t.PauseInMS = 0; + + // add to tape + _datacorder.DataBlocks.Add(t); + + // advance to next block + _position += blockSize; + } + #endregion + + #region ID 2B - Set signal level + /* length: 05 + Offset Value Type Description + 0x00 1 DWORD Block length (without these four bytes) + 0x04 - BYTE Signal level (0=low, 1=high) + + This block sets the current signal level to the specified value (high or low). It should be used whenever it is necessary to avoid any + ambiguities, e.g. with custom loaders which are level-sensitive. */ + private void ProcessBlockID2B(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x2B; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Set_Signal_Level; + + t.PauseInMS = 0; + + // add to tape + _datacorder.DataBlocks.Add(t); + + // advance to next block + _position += 5; + } + #endregion + + #region ID 30 - Text description + /* length: [00]+01 + Offset Value Type Description + 0x00 N BYTE Length of the text description + 0x01 - CHAR[N] Text description in ASCII format + + This is meant to identify parts of the tape, so you know where level 1 starts, where to rewind to when the game ends, etc. + This description is not guaranteed to be shown while the tape is playing, but can be read while browsing the tape or changing + the tape pointer. + The description can be up to 255 characters long but please keep it down to about 30 so the programs can show it in one line + (where this is appropriate). + Please use 'Archive Info' block for title, authors, publisher, etc. */ + private void ProcessBlockID30(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x30; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Text_Description; + + int textLen = data[_position]; + _position++; + + string desc = Encoding.ASCII.GetString(data, _position, textLen); + + t.PauseInMS = 0; + + //t.BlockDescription = "[" + desc + "]"; + + // add to tape + _datacorder.DataBlocks.Add(t); + + // advance to next block + _position += textLen; + } + #endregion + + #region ID 31 - Message block + /* length: [01]+02 + Offset Value Type Description + 0x00 - BYTE Time (in seconds) for which the message should be displayed + 0x01 N BYTE Length of the text message + 0x02 - CHAR[N] Message that should be displayed in ASCII format + + This will enable the emulators to display a message for a given time. This should not stop the tape and it should not make silence. + If the time is 0 then the emulator should wait for the user to press a key. + The text message should: + stick to a maximum of 30 chars per line; + use single 0x0D (13 decimal) to separate lines; + stick to a maximum of 8 lines. + If you do not obey these rules, emulators may display your message in any way they like. */ + private void ProcessBlockID31(byte[] data) + { + // currently not implemented properly in ZXHawk + + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x31; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Message_Block; + + _position++; + + int msgLen = data[_position]; + _position++; + + string desc = Encoding.ASCII.GetString(data, _position, msgLen); + + t.Command = TapeCommand.SHOW_MESSAGE; + + //t.BlockDescription = "[MESSAGE: " + desc + "]"; + + t.PauseInMS = 0; + + // add to tape + _datacorder.DataBlocks.Add(t); + + // advance to next block + _position += msgLen; + } + #endregion + + #region ID 32 - Archive info + /* length: [00,01]+02 + Offset Value Type Description + 0x00 - WORD Length of the whole block (without these two bytes) + 0x02 N BYTE Number of text strings + 0x03 - TEXT[N] List of text strings + + ---- + TEXT structure format + Offset Value Type Description + 0x00 - BYTE Text identification byte: + 00 - Full title + 01 - Software house/publisher + 02 - Author(s) + 03 - Year of publication + 04 - Language + 05 - Game/utility type + 06 - Price + 07 - Protection scheme/loader + 08 - Origin + FF - Comment(s) + 0x01 L BYTE Length of text string + 0x02 - CHAR[L] Text string in ASCII format + ---- + + Use this block at the beginning of the tape to identify the title of the game, author, publisher, year of publication, price (including + the currency), type of software (arcade adventure, puzzle, word processor, ...), protection scheme it uses (Speedlock 1, Alkatraz, ...) + and its origin (Original, Budget re-release, ...), etc. This block is built in a way that allows easy future expansion. + The block consists of a series of text strings. Each text has its identification number (which tells us what the text means) and then + the ASCII text. To make it possible to skip this block, if needed, the length of the whole block is at the beginning of it. + If all texts on the tape are in English language then you don't have to supply the 'Language' field + The information about what hardware the tape uses is in the 'Hardware Type' block, so no need for it here. */ + private void ProcessBlockID32(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x32; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Archive_Info; + + int blockLen = GetWordValue(data, _position); + _position += 2; + int stringCount = data[_position++]; + + // iterate through each string + for (int s = 0; s < stringCount; s++) + { + // identify the type of text + int type = data[_position++]; + + // get text length + int strLen = data[_position++]; string title = String.Empty; title = "Info: "; switch (type) - { - case 0x00: - title = "Full Title: "; - break; - case 0x01: - title = "Software House/Publisher: "; - break; - case 0x02: - title = "Author(s): "; - break; - case 0x03: - title = "Year of Publication: "; - break; - case 0x04: - title = "Language: "; - break; - case 0x05: - title = "Game/Utility Type: "; - break; - case 0x06: - title = "Price: "; - break; - case 0x07: - title = "Protection Scheme/Loader: "; - break; - case 0x08: - title = "Origin: "; - break; - case 0xFF: - title = "Comment(s): "; - break; - default: - break; - } + { + case 0x00: + title = "Full Title: "; + break; + case 0x01: + title = "Software House/Publisher: "; + break; + case 0x02: + title = "Author(s): "; + break; + case 0x03: + title = "Year of Publication: "; + break; + case 0x04: + title = "Language: "; + break; + case 0x05: + title = "Game/Utility Type: "; + break; + case 0x06: + title = "Price: "; + break; + case 0x07: + title = "Protection Scheme/Loader: "; + break; + case 0x08: + title = "Origin: "; + break; + case 0xFF: + title = "Comment(s): "; + break; + default: + break; + } - // add title to description - //t.BlockDescription += title; + // add title to description + //t.BlockDescription += title; - // get string data - string val = Encoding.ASCII.GetString(data, _position, strLen); - //t.BlockDescription += val + " \n"; + // get string data + string val = Encoding.ASCII.GetString(data, _position, strLen); + //t.BlockDescription += val + " \n"; - t.PauseInMS = 0; + t.PauseInMS = 0; - // advance to next string block - _position += strLen; - } + // advance to next string block + _position += strLen; + } - // add to tape - _datacorder.DataBlocks.Add(t); - } - #endregion + // add to tape + _datacorder.DataBlocks.Add(t); + } + #endregion - #region ID 33 - Hardware type -/* length: [00]*03+01 - Offset Value Type Description - 0x00 N BYTE Number of machines and hardware types for which info is supplied - 0x01 - HWINFO[N] List of machines and hardware + #region ID 33 - Hardware type + /* length: [00]*03+01 + Offset Value Type Description + 0x00 N BYTE Number of machines and hardware types for which info is supplied + 0x01 - HWINFO[N] List of machines and hardware - ---- - HWINFO structure format - Offset Value Type Description - 0x00 - BYTE Hardware type - 0x01 - BYTE Hardware ID - 0x02 - BYTE Hardware information: - 00 - The tape RUNS on this machine or with this hardware, - but may or may not use the hardware or special features of the machine. - 01 - The tape USES the hardware or special features of the machine, - such as extra memory or a sound chip. - 02 - The tape RUNS but it DOESN'T use the hardware - or special features of the machine. - 03 - The tape DOESN'T RUN on this machine or with this hardware. - ---- + ---- + HWINFO structure format + Offset Value Type Description + 0x00 - BYTE Hardware type + 0x01 - BYTE Hardware ID + 0x02 - BYTE Hardware information: + 00 - The tape RUNS on this machine or with this hardware, + but may or may not use the hardware or special features of the machine. + 01 - The tape USES the hardware or special features of the machine, + such as extra memory or a sound chip. + 02 - The tape RUNS but it DOESN'T use the hardware + or special features of the machine. + 03 - The tape DOESN'T RUN on this machine or with this hardware. + ---- - This blocks contains information about the hardware that the programs on this tape use. Please include only machines and hardware for - which you are 100% sure that it either runs (or doesn't run) on or with, or you know it uses (or doesn't use) the hardware or special - features of that machine. - If the tape runs only on the ZX81 (and TS1000, etc.) then it clearly won't work on any Spectrum or Spectrum variant, so there's no - need to list this information. - If you are not sure or you haven't tested a tape on some particular machine/hardware combination then do not include it in the list. - The list of hardware types and IDs is somewhat large, and may be found at the end of the format description. */ - private void ProcessBlockID33(byte[] data) - { - // currently not implemented properly in ZXHawk + This blocks contains information about the hardware that the programs on this tape use. Please include only machines and hardware for + which you are 100% sure that it either runs (or doesn't run) on or with, or you know it uses (or doesn't use) the hardware or special + features of that machine. + If the tape runs only on the ZX81 (and TS1000, etc.) then it clearly won't work on any Spectrum or Spectrum variant, so there's no + need to list this information. + If you are not sure or you haven't tested a tape on some particular machine/hardware combination then do not include it in the list. + The list of hardware types and IDs is somewhat large, and may be found at the end of the format description. */ + private void ProcessBlockID33(byte[] data) + { + // currently not implemented properly in ZXHawk - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x33; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Hardware_Type; + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x33; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Hardware_Type; - t.PauseInMS = 0; + t.PauseInMS = 0; - // first byte contains number of HWINFOs - int infos = data[_position]; + // first byte contains number of HWINFOs + int infos = data[_position]; - _position += 1; + _position += 1; - // now starts the HW infos (each block 3 bytes) - for (int i = 0; i < infos; i++) - { - _position += 3; - } + // now starts the HW infos (each block 3 bytes) + for (int i = 0; i < infos; i++) + { + _position += 3; + } - // add to tape - _datacorder.DataBlocks.Add(t); - } - #endregion + // add to tape + _datacorder.DataBlocks.Add(t); + } + #endregion - #region ID 35 - Custom info block -/* length: [10,11,12,13]+14 - Offset Value Type Description - 0x00 - CHAR[10] Identification string (in ASCII) - 0x10 L DWORD Length of the custom info - 0x14 - BYTE[L] Custom info + #region ID 35 - Custom info block + /* length: [10,11,12,13]+14 + Offset Value Type Description + 0x00 - CHAR[10] Identification string (in ASCII) + 0x10 L DWORD Length of the custom info + 0x14 - BYTE[L] Custom info - This block can be used to save any information you want. For example, it might contain some information written by a utility, - extra settings required by a particular emulator, or even poke data. */ - private void ProcessBlockID35(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x35; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Custom_Info_Block; + This block can be used to save any information you want. For example, it might contain some information written by a utility, + extra settings required by a particular emulator, or even poke data. */ + private void ProcessBlockID35(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x35; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Custom_Info_Block; - t.PauseInMS = 0; + t.PauseInMS = 0; - string info = Encoding.ASCII.GetString(data, _position, 0x10); - //t.BlockDescription = "[CUSTOM INFO: " + info + "]"; - _position += 0x10; + string info = Encoding.ASCII.GetString(data, _position, 0x10); + //t.BlockDescription = "[CUSTOM INFO: " + info + "]"; + _position += 0x10; - int blockLen = BitConverter.ToInt32(data, _position); - _position += 4; + int blockLen = BitConverter.ToInt32(data, _position); + _position += 4; - // add to tape - _datacorder.DataBlocks.Add(t); + // add to tape + _datacorder.DataBlocks.Add(t); - // advance to next block - _position += blockLen; - } - #endregion + // advance to next block + _position += blockLen; + } + #endregion - #region ID 5A - "Glue" block -/* length: 09 - Offset Value Type Description - 0x00 - BYTE[9] Value: { "XTape!",0x1A,MajR,MinR } - Just skip these 9 bytes and you will end up on the next ID. + #region ID 5A - "Glue" block + /* length: 09 + Offset Value Type Description + 0x00 - BYTE[9] Value: { "XTape!",0x1A,MajR,MinR } + Just skip these 9 bytes and you will end up on the next ID. - This block is generated when you merge two ZX Tape files together. It is here so that you can easily copy the files together and use - them. Of course, this means that resulting file would be 10 bytes longer than if this block was not used. All you have to do - if you encounter this block ID is to skip next 9 bytes. - If you can avoid using this block for this purpose, then do so; it is preferable to use a utility to join the two files and - ensure that they are both of the higher version number. */ - private void ProcessBlockID5A(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x5A; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Glue_Block; + This block is generated when you merge two ZX Tape files together. It is here so that you can easily copy the files together and use + them. Of course, this means that resulting file would be 10 bytes longer than if this block was not used. All you have to do + if you encounter this block ID is to skip next 9 bytes. + If you can avoid using this block for this purpose, then do so; it is preferable to use a utility to join the two files and + ensure that they are both of the higher version number. */ + private void ProcessBlockID5A(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x5A; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Glue_Block; - t.PauseInMS = 0; + t.PauseInMS = 0; - // add to tape - _datacorder.DataBlocks.Add(t); + // add to tape + _datacorder.DataBlocks.Add(t); - // advance to next block - _position += 9; - } - #endregion + // advance to next block + _position += 9; + } + #endregion - #region UnDetected Blocks + #region UnDetected Blocks - private void ProcessUnidentifiedBlock(byte[] data) - { - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = -2; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Unsupported; - //t.BlockDescription = "[UNSUPPORTED - 0x" + data[_position - 1] + "]"; + private void ProcessUnidentifiedBlock(byte[] data) + { + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = -2; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Unsupported; + //t.BlockDescription = "[UNSUPPORTED - 0x" + data[_position - 1] + "]"; - _position += GetInt32(data, _position) & 0xFFFFFF; + _position += GetInt32(data, _position) & 0xFFFFFF; - // add to tape - _datacorder.DataBlocks.Add(t); + // add to tape + _datacorder.DataBlocks.Add(t); - // advance to next block - _position += 4; - } + // advance to next block + _position += 4; + } - #endregion + #endregion - #region Depreciated Blocks + #region Depreciated Blocks - // These mostly should be ignored by ZXHawk - here for completeness + // These mostly should be ignored by ZXHawk - here for completeness - #region ID 16 - C64 ROM Type Data Block - private void ProcessBlockID16(byte[] data) - { - // zxhawk will not implement this block. it will however handle it so subsequent blocks can be parsed - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x16; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.C64_ROM_Type_Data_Block; + #region ID 16 - C64 ROM Type Data Block + private void ProcessBlockID16(byte[] data) + { + // zxhawk will not implement this block. it will however handle it so subsequent blocks can be parsed + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x16; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.C64_ROM_Type_Data_Block; - t.PauseInMS = 0; + t.PauseInMS = 0; - // add to tape - _datacorder.DataBlocks.Add(t); + // add to tape + _datacorder.DataBlocks.Add(t); - // advance to next block - int blockLen = GetInt32(data, _position); - _position += blockLen; - } - #endregion + // advance to next block + int blockLen = GetInt32(data, _position); + _position += blockLen; + } + #endregion - #region ID 17 - C64 Turbo Tape Data Block - private void ProcessBlockID17(byte[] data) - { - // zxhawk will not implement this block. it will however handle it so subsequent blocks can be parsed - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x17; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.C64_Turbo_Tape_Data_Block; + #region ID 17 - C64 Turbo Tape Data Block + private void ProcessBlockID17(byte[] data) + { + // zxhawk will not implement this block. it will however handle it so subsequent blocks can be parsed + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x17; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.C64_Turbo_Tape_Data_Block; - t.PauseInMS = 0; + t.PauseInMS = 0; - // add to tape - _datacorder.DataBlocks.Add(t); + // add to tape + _datacorder.DataBlocks.Add(t); - // advance to next block - int blockLen = GetInt32(data, _position); - _position += blockLen; - } - #endregion + // advance to next block + int blockLen = GetInt32(data, _position); + _position += blockLen; + } + #endregion - #region ID 34 - Emulation info - private void ProcessBlockID34(byte[] data) - { - // currently not implemented properly in ZXHawk + #region ID 34 - Emulation info + private void ProcessBlockID34(byte[] data) + { + // currently not implemented properly in ZXHawk - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x34; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Emulation_Info; + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x34; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Emulation_Info; - // add to tape - _datacorder.DataBlocks.Add(t); + // add to tape + _datacorder.DataBlocks.Add(t); - // advance to next block - _position += 8; - } - #endregion + // advance to next block + _position += 8; + } + #endregion - #region ID 40 - Snapshot block - /* length: [01,02,03]+04 + #region ID 40 - Snapshot block + /* length: [01,02,03]+04 Offset Value Type Description 0x00 - BYTE Snapshot type: 00: .Z80 format @@ -1577,120 +1577,120 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum Only .Z80 and .SNA snapshots are supported for compatibility reasons! The emulator should take care of that the snapshot is not taken while the actual Tape loading is taking place (which doesn't do much sense). And when an emulator encounters the snapshot block it should load it and then continue with the next block. */ - private void ProcessBlockID40(byte[] data) - { - // currently not implemented properly in ZXHawk + private void ProcessBlockID40(byte[] data) + { + // currently not implemented properly in ZXHawk - TapeDataBlock t = new TapeDataBlock(); - t.BlockID = 0x40; - t.DataPeriods = new List(); - t.BlockDescription = BlockType.Snapshot_Block; + TapeDataBlock t = new TapeDataBlock(); + t.BlockID = 0x40; + t.DataPeriods = new List(); + t.BlockDescription = BlockType.Snapshot_Block; - _position++; + _position++; - int blockLen = data[_position] | - data[_position + 1] << 8 | - data[_position + 2] << 16; - _position += 3; + int blockLen = data[_position] | + data[_position + 1] << 8 | + data[_position + 2] << 16; + _position += 3; - // add to tape - _datacorder.DataBlocks.Add(t); + // add to tape + _datacorder.DataBlocks.Add(t); - // advance to next block - _position += blockLen; - } - #endregion + // advance to next block + _position += blockLen; + } + #endregion - #endregion + #endregion - #endregion + #endregion - #region DataBlockDecoder + #region DataBlockDecoder - /// - /// Used to process either a standard or turbo data block - /// - private TapeDataBlock DecodeDataBlock - ( - TapeDataBlock block, - byte[] blockdata, - DataBlockType dataBlockType, - int pauseAfterBlock, - int pilotCount, + /// + /// Used to process either a standard or turbo data block + /// + private TapeDataBlock DecodeDataBlock + ( + TapeDataBlock block, + byte[] blockdata, + DataBlockType dataBlockType, + int pauseAfterBlock, + int pilotCount, - int pilotToneLength = 2168, - int sync1PulseLength = 667, - int sync2PulseLength = 735, - int bit0PulseLength = 855, - int bit1PulseLength = 1710, - int bitsInLastByte = 8 - ) - { - // first get the block description - string description = string.Empty; + int pilotToneLength = 2168, + int sync1PulseLength = 667, + int sync2PulseLength = 735, + int bit0PulseLength = 855, + int bit1PulseLength = 1710, + int bitsInLastByte = 8 + ) + { + // first get the block description + string description = string.Empty; - // process the type byte - /* (The type is 0,1,2 or 3 for a Program, Number array, Character array or Code file. + // process the type byte + /* (The type is 0,1,2 or 3 for a Program, Number array, Character array or Code file. A SCREEN$ file is regarded as a Code file with start address 16384 and length 6912 decimal. If the file is a Program file, parameter 1 holds the autostart line number (or a number >=32768 if no LINE parameter was given) and parameter 2 holds the start of the variable area relative to the start of the program. If it's a Code file, parameter 1 holds the start of the code block when saved, and parameter 2 holds 32768. For data files finally, the byte at position 14 decimal holds the variable name.) */ - int blockSize = blockdata.Length; + int blockSize = blockdata.Length; - // dont get description info for Pure Data Blocks - if (dataBlockType != DataBlockType.Pure) - { - if (blockdata[0] == 0x00 && blockSize == 19) - { - string fileName = Encoding.ASCII.GetString(blockdata.Skip(2).Take(10).ToArray()).Trim(); - string type = "Unknown Type"; - StringBuilder sb = new StringBuilder(); + // dont get description info for Pure Data Blocks + if (dataBlockType != DataBlockType.Pure) + { + if (blockdata[0] == 0x00 && blockSize == 19) + { + string fileName = Encoding.ASCII.GetString(blockdata.Skip(2).Take(10).ToArray()).Trim(); + string type = "Unknown Type"; + StringBuilder sb = new StringBuilder(); - var param1 = GetWordValue(blockdata, 12); - var param2 = GetWordValue(blockdata, 14); + var param1 = GetWordValue(blockdata, 12); + var param2 = GetWordValue(blockdata, 14); - // header block - examine first byte of header - if (blockdata[1] == 0) - { - type = "Program"; - sb.Append(type + ": "); - sb.Append(fileName + " "); - } - else if (blockdata[1] == 1) - { - type = "NumArray"; - sb.Append(type + ": "); - sb.Append(fileName + " "); - } - else if (blockdata[1] == 2) - { - type = "CharArray"; - sb.Append(type + ": "); - sb.Append(fileName + " "); - } - else if (blockdata[1] == 3) - { - type = "Code"; - sb.Append(type + ": "); - sb.Append(fileName + " "); - } - } - else if (blockdata[0] == 0xff) - { - // data block - description = "Data Block " + (blockSize - 2) + "bytes"; - block.AddMetaData(BlockDescriptorTitle.Data_Bytes, (blockSize - 2).ToString() + " Bytes"); - } - else - { - // some other type (turbo data etc..) - description = $"#{blockdata[0].ToString("X2")} block, {blockSize} bytes"; - //description += (crc != 0) ? $", crc bad (#{crcFile:X2}!=#{crcValue:X2})" : ", crc ok"; - block.AddMetaData(BlockDescriptorTitle.Undefined, description); - } - /* + // header block - examine first byte of header + if (blockdata[1] == 0) + { + type = "Program"; + sb.Append(type + ": "); + sb.Append(fileName + " "); + } + else if (blockdata[1] == 1) + { + type = "NumArray"; + sb.Append(type + ": "); + sb.Append(fileName + " "); + } + else if (blockdata[1] == 2) + { + type = "CharArray"; + sb.Append(type + ": "); + sb.Append(fileName + " "); + } + else if (blockdata[1] == 3) + { + type = "Code"; + sb.Append(type + ": "); + sb.Append(fileName + " "); + } + } + else if (blockdata[0] == 0xff) + { + // data block + description = "Data Block " + (blockSize - 2) + "bytes"; + block.AddMetaData(BlockDescriptorTitle.Data_Bytes, (blockSize - 2).ToString() + " Bytes"); + } + else + { + // some other type (turbo data etc..) + description = $"#{blockdata[0].ToString("X2")} block, {blockSize} bytes"; + //description += (crc != 0) ? $", crc bad (#{crcFile:X2}!=#{crcValue:X2})" : ", crc ok"; + block.AddMetaData(BlockDescriptorTitle.Undefined, description); + } + /* if (blockdata[0] == 0x00 && blockSize == 19 && (blockdata[1] == 0x00) || (blockdata[1] == 3 && blockdata.Length > 3)) { if (dataBlockType != DataBlockType.Turbo) @@ -1733,192 +1733,192 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum //description += (crc != 0) ? $", crc bad (#{crcFile:X2}!=#{crcValue:X2})" : ", crc ok"; block.AddMetaData(BlockDescriptorTitle.Undefined, description); } - */ - } + */ + } - // update metadata - switch (dataBlockType) - { - case DataBlockType.Standard: - case DataBlockType.Turbo: + // update metadata + switch (dataBlockType) + { + case DataBlockType.Standard: + case DataBlockType.Turbo: - if (dataBlockType == DataBlockType.Standard) - block.BlockDescription = BlockType.Standard_Speed_Data_Block; - if (dataBlockType == DataBlockType.Turbo) - block.BlockDescription = BlockType.Turbo_Speed_Data_Block; + if (dataBlockType == DataBlockType.Standard) + block.BlockDescription = BlockType.Standard_Speed_Data_Block; + if (dataBlockType == DataBlockType.Turbo) + block.BlockDescription = BlockType.Turbo_Speed_Data_Block; - block.AddMetaData(BlockDescriptorTitle.Pilot_Pulse_Length, pilotToneLength.ToString() + " T-States"); - block.AddMetaData(BlockDescriptorTitle.Pilot_Pulse_Count, pilotCount.ToString() + " Pulses"); - block.AddMetaData(BlockDescriptorTitle.First_Sync_Length, sync1PulseLength.ToString() + " T-States"); - block.AddMetaData(BlockDescriptorTitle.Second_Sync_Length, sync2PulseLength.ToString() + " T-States"); - break; + block.AddMetaData(BlockDescriptorTitle.Pilot_Pulse_Length, pilotToneLength.ToString() + " T-States"); + block.AddMetaData(BlockDescriptorTitle.Pilot_Pulse_Count, pilotCount.ToString() + " Pulses"); + block.AddMetaData(BlockDescriptorTitle.First_Sync_Length, sync1PulseLength.ToString() + " T-States"); + block.AddMetaData(BlockDescriptorTitle.Second_Sync_Length, sync2PulseLength.ToString() + " T-States"); + break; - case DataBlockType.Pure: - block.BlockDescription = BlockType.Pure_Data_Block; - break; - } + case DataBlockType.Pure: + block.BlockDescription = BlockType.Pure_Data_Block; + break; + } - block.AddMetaData(BlockDescriptorTitle.Zero_Bit_Length, bit0PulseLength.ToString() + " T-States"); - block.AddMetaData(BlockDescriptorTitle.One_Bit_Length, bit1PulseLength.ToString() + " T-States"); - block.AddMetaData(BlockDescriptorTitle.Data_Length, blockSize.ToString() + " Bytes"); - block.AddMetaData(BlockDescriptorTitle.Bits_In_Last_Byte, bitsInLastByte.ToString() + " Bits"); - block.AddMetaData(BlockDescriptorTitle.Pause_After_Data, pauseAfterBlock.ToString() + " ms"); + block.AddMetaData(BlockDescriptorTitle.Zero_Bit_Length, bit0PulseLength.ToString() + " T-States"); + block.AddMetaData(BlockDescriptorTitle.One_Bit_Length, bit1PulseLength.ToString() + " T-States"); + block.AddMetaData(BlockDescriptorTitle.Data_Length, blockSize.ToString() + " Bytes"); + block.AddMetaData(BlockDescriptorTitle.Bits_In_Last_Byte, bitsInLastByte.ToString() + " Bits"); + block.AddMetaData(BlockDescriptorTitle.Pause_After_Data, pauseAfterBlock.ToString() + " ms"); - // calculate period information - List dataPeriods = new List(); + // calculate period information + List dataPeriods = new List(); - // generate pilot pulses + // generate pilot pulses - if (pilotCount > 0) - { - for (int i = 0; i < pilotCount; i++) - { - dataPeriods.Add(pilotToneLength); - } + if (pilotCount > 0) + { + for (int i = 0; i < pilotCount; i++) + { + dataPeriods.Add(pilotToneLength); + } - // add syncro pulses - dataPeriods.Add(sync1PulseLength); - dataPeriods.Add(sync2PulseLength); - } + // add syncro pulses + dataPeriods.Add(sync1PulseLength); + dataPeriods.Add(sync2PulseLength); + } - int pos = 0; + int pos = 0; - // add bit0 and bit1 periods - for (int i = 0; i < blockSize - 1; i++, pos++) - { - for (byte b = 0x80; b != 0; b >>= 1) - { - if ((blockdata[i] & b) != 0) - dataPeriods.Add(bit1PulseLength); - else - dataPeriods.Add(bit0PulseLength); - if ((blockdata[i] & b) != 0) - dataPeriods.Add(bit1PulseLength); - else - dataPeriods.Add(bit0PulseLength); - } - } + // add bit0 and bit1 periods + for (int i = 0; i < blockSize - 1; i++, pos++) + { + for (byte b = 0x80; b != 0; b >>= 1) + { + if ((blockdata[i] & b) != 0) + dataPeriods.Add(bit1PulseLength); + else + dataPeriods.Add(bit0PulseLength); + if ((blockdata[i] & b) != 0) + dataPeriods.Add(bit1PulseLength); + else + dataPeriods.Add(bit0PulseLength); + } + } - // add the last byte - for (byte c = 0x80; c != (byte)(0x80 >> bitsInLastByte); c >>= 1) - { - if ((blockdata[pos] & c) != 0) - dataPeriods.Add(bit1PulseLength); - else - dataPeriods.Add(bit0PulseLength); - if ((blockdata[pos] & c) != 0) - dataPeriods.Add(bit1PulseLength); - else - dataPeriods.Add(bit0PulseLength); - } + // add the last byte + for (byte c = 0x80; c != (byte)(0x80 >> bitsInLastByte); c >>= 1) + { + if ((blockdata[pos] & c) != 0) + dataPeriods.Add(bit1PulseLength); + else + dataPeriods.Add(bit0PulseLength); + if ((blockdata[pos] & c) != 0) + dataPeriods.Add(bit1PulseLength); + else + dataPeriods.Add(bit0PulseLength); + } - // add block pause if pause is not 0 - if (pauseAfterBlock != 0) - { - block.PauseInMS = pauseAfterBlock; - //int actualPause = pauseAfterBlock * 3500; - //dataPeriods.Add(actualPause); - } + // add block pause if pause is not 0 + if (pauseAfterBlock != 0) + { + block.PauseInMS = pauseAfterBlock; + //int actualPause = pauseAfterBlock * 3500; + //dataPeriods.Add(actualPause); + } - // add to the tapedatablock object - block.DataPeriods = dataPeriods; + // add to the tapedatablock object + block.DataPeriods = dataPeriods; - // add the raw data - block.BlockData = blockdata; + // add the raw data + block.BlockData = blockdata; - return block; - } + return block; + } - /// - /// Used to process either a standard or turbo data block - /// - private TapeDataBlock DecodeDataBlock - ( - TapeDataBlock block, - byte[] blockData, - DataBlockType dataBlockType, - int pauseAfterBlock, + /// + /// Used to process either a standard or turbo data block + /// + private TapeDataBlock DecodeDataBlock + ( + TapeDataBlock block, + byte[] blockData, + DataBlockType dataBlockType, + int pauseAfterBlock, - int pilotToneLength = 2168, - int sync1PulseLength = 667, - int sync2PulseLength = 735, - int bit0PulseLength = 855, - int bit1PulseLength = 1710, - int bitsInLastByte = 8 - ) - { + int pilotToneLength = 2168, + int sync1PulseLength = 667, + int sync2PulseLength = 735, + int bit0PulseLength = 855, + int bit1PulseLength = 1710, + int bitsInLastByte = 8 + ) + { - // pilot count needs to be ascertained from flag byte - int pilotCount; - if (blockData[0] < 128) - pilotCount = 8063; - else - pilotCount = 3223; + // pilot count needs to be ascertained from flag byte + int pilotCount; + if (blockData[0] < 128) + pilotCount = 8063; + else + pilotCount = 3223; - // now we can decode - var nBlock = DecodeDataBlock - ( - block, - blockData, - dataBlockType, - pauseAfterBlock, - pilotCount, - pilotToneLength, - sync1PulseLength, - sync2PulseLength, - bit0PulseLength, - bit1PulseLength, - bitsInLastByte - ); + // now we can decode + var nBlock = DecodeDataBlock + ( + block, + blockData, + dataBlockType, + pauseAfterBlock, + pilotCount, + pilotToneLength, + sync1PulseLength, + sync2PulseLength, + bit0PulseLength, + bit1PulseLength, + bitsInLastByte + ); - return nBlock; - } + return nBlock; + } - #endregion + #endregion - #region Pause Block Creator + #region Pause Block Creator - /// - /// If neccessary a seperate PAUSE block will be created - /// - private void CreatePauseBlock(TapeDataBlock original) - { - if (original.PauseInMS > 0) - { - TapeDataBlock pBlock = new TapeDataBlock(); - pBlock.DataPeriods = new List(); - pBlock.BlockDescription = BlockType.PAUSE_BLOCK; - pBlock.PauseInMS = 0; - var pauseInTStates = TranslatePause(original.PauseInMS); + /// + /// If neccessary a seperate PAUSE block will be created + /// + private void CreatePauseBlock(TapeDataBlock original) + { + if (original.PauseInMS > 0) + { + TapeDataBlock pBlock = new TapeDataBlock(); + pBlock.DataPeriods = new List(); + pBlock.BlockDescription = BlockType.PAUSE_BLOCK; + pBlock.PauseInMS = 0; + var pauseInTStates = TranslatePause(original.PauseInMS); - pBlock.AddMetaData(BlockDescriptorTitle.Block_ID, pauseInTStates.ToString() + " cycles"); + pBlock.AddMetaData(BlockDescriptorTitle.Block_ID, pauseInTStates.ToString() + " cycles"); - int by1000 = pauseInTStates / 70000; - int rem1000 = pauseInTStates % 70000; + int by1000 = pauseInTStates / 70000; + int rem1000 = pauseInTStates % 70000; - if (by1000 > 1) - { - pBlock.DataPeriods.Add(35000); - pBlock.DataPeriods.Add(pauseInTStates - 35000); - } - else - { - pBlock.DataPeriods.Add(pauseInTStates); - pBlock.DataPeriods.Add(0); - } + if (by1000 > 1) + { + pBlock.DataPeriods.Add(35000); + pBlock.DataPeriods.Add(pauseInTStates - 35000); + } + else + { + pBlock.DataPeriods.Add(pauseInTStates); + pBlock.DataPeriods.Add(0); + } - _datacorder.DataBlocks.Add(pBlock); - } - } + _datacorder.DataBlocks.Add(pBlock); + } + } - #endregion - } + #endregion + } - public enum DataBlockType - { - Standard, - Turbo, - Pure - } + public enum DataBlockType + { + Standard, + Turbo, + Pure + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TapeCommand.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TapeCommand.cs index f61fc49e0f..28383dd838 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TapeCommand.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TapeCommand.cs @@ -1,16 +1,16 @@  namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Represents the possible commands that can be raised from each tape block - /// - public enum TapeCommand - { - NONE, - STOP_THE_TAPE, - STOP_THE_TAPE_48K, - BEGIN_GROUP, - END_GROUP, - SHOW_MESSAGE, - } + /// + /// Represents the possible commands that can be raised from each tape block + /// + public enum TapeCommand + { + NONE, + STOP_THE_TAPE, + STOP_THE_TAPE_48K, + BEGIN_GROUP, + END_GROUP, + SHOW_MESSAGE, + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TapeDataBlock.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TapeDataBlock.cs index 489f425b6e..a810af6201 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TapeDataBlock.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TapeDataBlock.cs @@ -5,51 +5,53 @@ using System.Text; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Represents a tape block - /// - public class TapeDataBlock - { - /// - /// Either the TZX block ID, or -1 in the case of non-tzx blocks - /// - private int _blockID = -1; - public int BlockID - { - get { return _blockID; } - set { - _blockID = value; + /// + /// Represents a tape block + /// + public class TapeDataBlock + { + /// + /// Either the TZX block ID, or -1 in the case of non-tzx blocks + /// + private int _blockID = -1; + public int BlockID + { + get { return _blockID; } + set + { + _blockID = value; - if (MetaData == null) - MetaData = new Dictionary(); + if (MetaData == null) + MetaData = new Dictionary(); - AddMetaData(BlockDescriptorTitle.Block_ID, value.ToString()); - } - } + AddMetaData(BlockDescriptorTitle.Block_ID, value.ToString()); + } + } - /// - /// The block type - /// - private BlockType _blockType; - public BlockType BlockDescription - { - get { return _blockType; } - set { - _blockType = value; - if (MetaData == null) - MetaData = new Dictionary(); - } - } + /// + /// The block type + /// + private BlockType _blockType; + public BlockType BlockDescription + { + get { return _blockType; } + set + { + _blockType = value; + if (MetaData == null) + MetaData = new Dictionary(); + } + } - /// - /// Byte array containing the raw block data - /// - private byte[] _blockData; - public byte[] BlockData - { - get { return _blockData; } - set { _blockData = value; } - } + /// + /// Byte array containing the raw block data + /// + private byte[] _blockData; + public byte[] BlockData + { + get { return _blockData; } + set { _blockData = value; } + } /* @@ -79,203 +81,203 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum */ - #region Block Meta Data + #region Block Meta Data - /// - /// Dictionary of block related data - /// - public Dictionary MetaData { get; set; } + /// + /// Dictionary of block related data + /// + public Dictionary MetaData { get; set; } - /// - /// Adds a single metadata item to the Dictionary - /// - public void AddMetaData(BlockDescriptorTitle descriptor, string data) - { - // check whether entry already exists - bool check = MetaData.ContainsKey(descriptor); - if (check) - { - // already exists - update - MetaData[descriptor] = data; - } - else - { - // create new - MetaData.Add(descriptor, data); - } - } + /// + /// Adds a single metadata item to the Dictionary + /// + public void AddMetaData(BlockDescriptorTitle descriptor, string data) + { + // check whether entry already exists + bool check = MetaData.ContainsKey(descriptor); + if (check) + { + // already exists - update + MetaData[descriptor] = data; + } + else + { + // create new + MetaData.Add(descriptor, data); + } + } - #endregion + #endregion - /// - /// List containing the pulse timing values - /// - public List DataPeriods = new List(); + /// + /// List containing the pulse timing values + /// + public List DataPeriods = new List(); - public bool InitialPulseLevel; + public bool InitialPulseLevel; - /// - /// Command that is raised by this data block - /// (that may or may not need to be acted on) - /// - private TapeCommand _command = TapeCommand.NONE; - public TapeCommand Command - { - get { return _command; } - set { _command = value; } - } + /// + /// Command that is raised by this data block + /// (that may or may not need to be acted on) + /// + private TapeCommand _command = TapeCommand.NONE; + public TapeCommand Command + { + get { return _command; } + set { _command = value; } + } - /// - /// The defined post-block pause - /// - private int _pauseInMS; - public int PauseInMS - { - get { return _pauseInMS; } - set { _pauseInMS = value; } - } + /// + /// The defined post-block pause + /// + private int _pauseInMS; + public int PauseInMS + { + get { return _pauseInMS; } + set { _pauseInMS = value; } + } - /// - /// Returns the data periods as an array - /// (primarily to aid in bizhawk state serialization) - /// - public int[] GetDataPeriodsArray() - { - return DataPeriods.ToArray(); - } + /// + /// Returns the data periods as an array + /// (primarily to aid in bizhawk state serialization) + /// + public int[] GetDataPeriodsArray() + { + return DataPeriods.ToArray(); + } - /// - /// Accepts an array of data periods and updates the DataPeriods list accordingly - /// (primarily to aid in bizhawk state serialization) - /// - public void SetDataPeriodsArray(int[] periodArray) - { - DataPeriods = periodArray?.ToList() ?? new List(); - } + /// + /// Accepts an array of data periods and updates the DataPeriods list accordingly + /// (primarily to aid in bizhawk state serialization) + /// + public void SetDataPeriodsArray(int[] periodArray) + { + DataPeriods = periodArray?.ToList() ?? new List(); + } - /// - /// Bizhawk state serialization - /// - public void SyncState(Serializer ser, int blockPosition) - { - ser.BeginSection("DataBlock" + blockPosition); + /// + /// Bizhawk state serialization + /// + public void SyncState(Serializer ser, int blockPosition) + { + ser.BeginSection("DataBlock" + blockPosition); - ser.Sync(nameof(_blockID), ref _blockID); - //ser.SyncFixedString(nameof(_blockDescription), ref _blockDescription, 200); - ser.SyncEnum(nameof(_blockType), ref _blockType); - ser.Sync(nameof(_blockData), ref _blockData, true); - ser.SyncEnum(nameof(_command), ref _command); + ser.Sync(nameof(_blockID), ref _blockID); + //ser.SyncFixedString(nameof(_blockDescription), ref _blockDescription, 200); + ser.SyncEnum(nameof(_blockType), ref _blockType); + ser.Sync(nameof(_blockData), ref _blockData, true); + ser.SyncEnum(nameof(_command), ref _command); - int[] tempArray = null; + int[] tempArray = null; - if (ser.IsWriter) - { - tempArray = GetDataPeriodsArray(); - ser.Sync("_periods", ref tempArray, true); - } - else - { - ser.Sync("_periods", ref tempArray, true); - SetDataPeriodsArray(tempArray); - } + if (ser.IsWriter) + { + tempArray = GetDataPeriodsArray(); + ser.Sync("_periods", ref tempArray, true); + } + else + { + ser.Sync("_periods", ref tempArray, true); + SetDataPeriodsArray(tempArray); + } - ser.EndSection(); - } - } + ser.EndSection(); + } + } - /// - /// The types of TZX blocks - /// - public enum BlockType - { - Standard_Speed_Data_Block = 0x10, - Turbo_Speed_Data_Block = 0x11, - Pure_Tone = 0x12, - Pulse_Sequence = 0x13, - Pure_Data_Block = 0x14, - Direct_Recording = 0x15, - CSW_Recording = 0x18, - Generalized_Data_Block = 0x19, - Pause_or_Stop_the_Tape = 0x20, - Group_Start = 0x21, - Group_End = 0x22, - Jump_to_Block = 0x23, - Loop_Start = 0x24, - Loop_End = 0x25, - Call_Sequence = 0x26, - Return_From_Sequence = 0x27, - Select_Block = 0x28, - Stop_the_Tape_48K = 0x2A, - Set_Signal_Level = 0x2B, - Text_Description = 0x30, - Message_Block = 0x31, - Archive_Info = 0x32, - Hardware_Type = 0x33, - Custom_Info_Block = 0x35, - Glue_Block = 0x5A, + /// + /// The types of TZX blocks + /// + public enum BlockType + { + Standard_Speed_Data_Block = 0x10, + Turbo_Speed_Data_Block = 0x11, + Pure_Tone = 0x12, + Pulse_Sequence = 0x13, + Pure_Data_Block = 0x14, + Direct_Recording = 0x15, + CSW_Recording = 0x18, + Generalized_Data_Block = 0x19, + Pause_or_Stop_the_Tape = 0x20, + Group_Start = 0x21, + Group_End = 0x22, + Jump_to_Block = 0x23, + Loop_Start = 0x24, + Loop_End = 0x25, + Call_Sequence = 0x26, + Return_From_Sequence = 0x27, + Select_Block = 0x28, + Stop_the_Tape_48K = 0x2A, + Set_Signal_Level = 0x2B, + Text_Description = 0x30, + Message_Block = 0x31, + Archive_Info = 0x32, + Hardware_Type = 0x33, + Custom_Info_Block = 0x35, + Glue_Block = 0x5A, - // depreciated blocks - C64_ROM_Type_Data_Block = 0x16, - C64_Turbo_Tape_Data_Block = 0x17, - Emulation_Info = 0x34, - Snapshot_Block = 0x40, + // depreciated blocks + C64_ROM_Type_Data_Block = 0x16, + C64_Turbo_Tape_Data_Block = 0x17, + Emulation_Info = 0x34, + Snapshot_Block = 0x40, - // unsupported / undetected - Unsupported, + // unsupported / undetected + Unsupported, - // PZX blocks - PZXT, - PULS, - DATA, - BRWS, - PAUS, + // PZX blocks + PZXT, + PULS, + DATA, + BRWS, + PAUS, - // zxhawk proprietry - PAUSE_BLOCK, + // zxhawk proprietry + PAUSE_BLOCK, - WAV_Recording - } - + WAV_Recording + } - /// - /// Different title possibilities - /// - public enum BlockDescriptorTitle - { - Undefined, - Block_ID, - Program, - Data_Bytes, - Bytes, - Pilot_Pulse_Length, - Pilot_Pulse_Count, - First_Sync_Length, - Second_Sync_Length, - Zero_Bit_Length, - One_Bit_Length, - Data_Length, - Bits_In_Last_Byte, - Pause_After_Data, + /// + /// Different title possibilities + /// + public enum BlockDescriptorTitle + { + Undefined, + Block_ID, + Program, + Data_Bytes, + Bytes, - Pulse_Length, - Pulse_Count, + Pilot_Pulse_Length, + Pilot_Pulse_Count, + First_Sync_Length, + Second_Sync_Length, + Zero_Bit_Length, + One_Bit_Length, + Data_Length, + Bits_In_Last_Byte, + Pause_After_Data, - Text_Description, - Title, - Publisher, - Author, - Year, - Language, - Type, - Price, - Protection, - Origin, - Comments, + Pulse_Length, + Pulse_Count, - Needs_Parsing - } + Text_Description, + Title, + Publisher, + Author, + Year, + Language, + Type, + Price, + Protection, + Origin, + Comments, + + Needs_Parsing + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/StreamHelper.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/StreamHelper.cs index 5c24a66b61..cd4806b90d 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/StreamHelper.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/StreamHelper.cs @@ -3,102 +3,102 @@ using System.IO; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// From https://archive.codeplex.com/?p=zxmak2 - /// - public static class StreamHelper - { - public static void Write(Stream stream, Int32 value) - { - byte[] data = BitConverter.GetBytes(value); - stream.Write(data, 0, data.Length); - } + /// + /// From https://archive.codeplex.com/?p=zxmak2 + /// + public static class StreamHelper + { + public static void Write(Stream stream, Int32 value) + { + byte[] data = BitConverter.GetBytes(value); + stream.Write(data, 0, data.Length); + } - public static void Write(Stream stream, UInt32 value) - { - byte[] data = BitConverter.GetBytes(value); - stream.Write(data, 0, data.Length); - } + public static void Write(Stream stream, UInt32 value) + { + byte[] data = BitConverter.GetBytes(value); + stream.Write(data, 0, data.Length); + } - public static void Write(Stream stream, Int16 value) - { - byte[] data = BitConverter.GetBytes(value); - stream.Write(data, 0, data.Length); - } + public static void Write(Stream stream, Int16 value) + { + byte[] data = BitConverter.GetBytes(value); + stream.Write(data, 0, data.Length); + } - public static void Write(Stream stream, UInt16 value) - { - byte[] data = BitConverter.GetBytes(value); - stream.Write(data, 0, data.Length); - } + public static void Write(Stream stream, UInt16 value) + { + byte[] data = BitConverter.GetBytes(value); + stream.Write(data, 0, data.Length); + } - public static void Write(Stream stream, Byte value) - { - byte[] data = new byte[1]; - data[0] = value; - stream.Write(data, 0, data.Length); - } + public static void Write(Stream stream, Byte value) + { + byte[] data = new byte[1]; + data[0] = value; + stream.Write(data, 0, data.Length); + } - public static void Write(Stream stream, SByte value) - { - byte[] data = new byte[1]; - data[0] = (byte)value; - stream.Write(data, 0, data.Length); - } + public static void Write(Stream stream, SByte value) + { + byte[] data = new byte[1]; + data[0] = (byte)value; + stream.Write(data, 0, data.Length); + } - public static void Write(Stream stream, byte[] value) - { - stream.Write(value, 0, value.Length); - } + public static void Write(Stream stream, byte[] value) + { + stream.Write(value, 0, value.Length); + } - public static void Read(Stream stream, out Int32 value) - { - byte[] data = new byte[4]; - stream.Read(data, 0, data.Length); - //if (!BitConverter.IsLittleEndian) - // Array.Reverse(data); - value = BitConverter.ToInt32(data, 0); - } + public static void Read(Stream stream, out Int32 value) + { + byte[] data = new byte[4]; + stream.Read(data, 0, data.Length); + //if (!BitConverter.IsLittleEndian) + // Array.Reverse(data); + value = BitConverter.ToInt32(data, 0); + } - public static void Read(Stream stream, out UInt32 value) - { - byte[] data = new byte[4]; - stream.Read(data, 0, data.Length); - value = BitConverter.ToUInt32(data, 0); - } + public static void Read(Stream stream, out UInt32 value) + { + byte[] data = new byte[4]; + stream.Read(data, 0, data.Length); + value = BitConverter.ToUInt32(data, 0); + } - public static void Read(Stream stream, out Int16 value) - { - byte[] data = new byte[2]; - stream.Read(data, 0, data.Length); - value = BitConverter.ToInt16(data, 0); - } + public static void Read(Stream stream, out Int16 value) + { + byte[] data = new byte[2]; + stream.Read(data, 0, data.Length); + value = BitConverter.ToInt16(data, 0); + } - public static void Read(Stream stream, out UInt16 value) - { - byte[] data = new byte[2]; - stream.Read(data, 0, data.Length); - value = BitConverter.ToUInt16(data, 0); - } + public static void Read(Stream stream, out UInt16 value) + { + byte[] data = new byte[2]; + stream.Read(data, 0, data.Length); + value = BitConverter.ToUInt16(data, 0); + } - public static void Read(Stream stream, out Byte value) - { - byte[] data = new byte[1]; - stream.Read(data, 0, data.Length); - value = data[0]; - } + public static void Read(Stream stream, out Byte value) + { + byte[] data = new byte[1]; + stream.Read(data, 0, data.Length); + value = data[0]; + } - public static void Read(Stream stream, out SByte value) - { - byte[] data = new byte[1]; - stream.Read(data, 0, data.Length); - value = (sbyte)data[0]; - } + public static void Read(Stream stream, out SByte value) + { + byte[] data = new byte[1]; + stream.Read(data, 0, data.Length); + value = (sbyte)data[0]; + } - public static void Read(Stream stream, byte[] value) - { - stream.Read(value, 0, value.Length); - } - } + public static void Read(Stream stream, byte[] value) + { + stream.Read(value, 0, value.Length); + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/WavConverter.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/WavConverter.cs index 410155a2fa..c783ce59c5 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/WavConverter.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/WavConverter.cs @@ -6,123 +6,123 @@ using System.Text; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// Reponsible for WAV format conversion - /// Based heavily on code from zxmak2: https://archive.codeplex.com/?p=zxmak2 - /// - public class WavConverter : MediaConverter - { - /// - /// The type of serializer - /// - private MediaConverterType _formatType = MediaConverterType.WAV; - public override MediaConverterType FormatType - { - get - { - return _formatType; - } - } + /// + /// Reponsible for WAV format conversion + /// Based heavily on code from zxmak2: https://archive.codeplex.com/?p=zxmak2 + /// + public class WavConverter : MediaConverter + { + /// + /// The type of serializer + /// + private MediaConverterType _formatType = MediaConverterType.WAV; + public override MediaConverterType FormatType + { + get + { + return _formatType; + } + } - /// - /// Signs whether this class can be used to read the data format - /// - public override bool IsReader { get { return true; } } + /// + /// Signs whether this class can be used to read the data format + /// + public override bool IsReader { get { return true; } } - /// - /// Signs whether this class can be used to write the data format - /// - public override bool IsWriter { get { return false; } } + /// + /// Signs whether this class can be used to write the data format + /// + public override bool IsWriter { get { return false; } } - /// - /// Position counter - /// - //private int _position = 0; + /// + /// Position counter + /// + //private int _position = 0; - #region Construction + #region Construction - private DatacorderDevice _datacorder; + private DatacorderDevice _datacorder; - public WavConverter(DatacorderDevice _tapeDevice) - { - _datacorder = _tapeDevice; - } + public WavConverter(DatacorderDevice _tapeDevice) + { + _datacorder = _tapeDevice; + } - #endregion + #endregion - /// - /// Returns TRUE if pzx header is detected - /// - public override bool CheckType(byte[] data) - { - // WAV Header + /// + /// Returns TRUE if pzx header is detected + /// + public override bool CheckType(byte[] data) + { + // WAV Header - // check whether this is a valid wav format file by looking at the identifier in the header - string ident = Encoding.ASCII.GetString(data, 8, 4); + // check whether this is a valid wav format file by looking at the identifier in the header + string ident = Encoding.ASCII.GetString(data, 8, 4); - if (ident.ToUpper() != "WAVE") - { - // this is not a valid WAV format file - return false; - } - else - { - return true; - } - } + if (ident.ToUpper() != "WAVE") + { + // this is not a valid WAV format file + return false; + } + else + { + return true; + } + } - /// - /// DeSerialization method - /// - public override void Read(byte[] data) - { - // clear existing tape blocks - _datacorder.DataBlocks.Clear(); + /// + /// DeSerialization method + /// + public override void Read(byte[] data) + { + // clear existing tape blocks + _datacorder.DataBlocks.Clear(); - // check whether this is a valid pzx format file by looking at the identifier in the header block - string ident = Encoding.ASCII.GetString(data, 8, 4); + // check whether this is a valid pzx format file by looking at the identifier in the header block + string ident = Encoding.ASCII.GetString(data, 8, 4); - if (ident.ToUpper() != "WAVE") - { - // this is not a valid TZX format file - throw new Exception(this.GetType().ToString() + - "This is not a valid WAV format file"); - } + if (ident.ToUpper() != "WAVE") + { + // this is not a valid TZX format file + throw new Exception(this.GetType().ToString() + + "This is not a valid WAV format file"); + } - //_position = 0; + //_position = 0; - MemoryStream stream = new MemoryStream(); - stream.Write(data, 0, data.Length); - stream.Position = 0; + MemoryStream stream = new MemoryStream(); + stream.Write(data, 0, data.Length); + stream.Position = 0; - WavStreamReader reader = new WavStreamReader(stream); + WavStreamReader reader = new WavStreamReader(stream); - int rate = (69888 * 50) / reader.Header.sampleRate; - int smpCounter = 0; - int state = reader.ReadNext(); + int rate = (69888 * 50) / reader.Header.sampleRate; + int smpCounter = 0; + int state = reader.ReadNext(); - // create the single tape block - TapeDataBlock t = new TapeDataBlock(); - t.BlockDescription = BlockType.WAV_Recording; - t.BlockID = 0; - t.DataPeriods = new List(); + // create the single tape block + TapeDataBlock t = new TapeDataBlock(); + t.BlockDescription = BlockType.WAV_Recording; + t.BlockID = 0; + t.DataPeriods = new List(); - for (int i = 0; i < reader.Count; i++) - { - int sample = reader.ReadNext(); - smpCounter++; - if ((state < 0 && sample < 0) || (state >= 0 && sample >= 0)) - continue; - t.DataPeriods.Add(smpCounter * rate); - smpCounter = 0; - state = sample; - } + for (int i = 0; i < reader.Count; i++) + { + int sample = reader.ReadNext(); + smpCounter++; + if ((state < 0 && sample < 0) || (state >= 0 && sample >= 0)) + continue; + t.DataPeriods.Add(smpCounter * rate); + smpCounter = 0; + state = sample; + } - // add closing period - t.DataPeriods.Add((69888 * 50) / 10); + // add closing period + t.DataPeriods.Add((69888 * 50) / 10); - // add to datacorder - _datacorder.DataBlocks.Add(t); - } - } + // add to datacorder + _datacorder.DataBlocks.Add(t); + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/WavHeader.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/WavHeader.cs index 270ecf35ec..336d2ac64a 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/WavHeader.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/WavHeader.cs @@ -7,99 +7,99 @@ using System.Threading.Tasks; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// From https://archive.codeplex.com/?p=zxmak2 - /// - public class WavHeader - { - // RIFF chunk (12 bytes) - public Int32 chunkID; // "RIFF" - public Int32 fileSize; - public Int32 riffType; // "WAVE" + /// + /// From https://archive.codeplex.com/?p=zxmak2 + /// + public class WavHeader + { + // RIFF chunk (12 bytes) + public Int32 chunkID; // "RIFF" + public Int32 fileSize; + public Int32 riffType; // "WAVE" - // Format chunk (24 bytes) - public Int32 fmtID; // "fmt " - public Int32 fmtSize; - public Int16 fmtCode; - public Int16 channels; - public Int32 sampleRate; - public Int32 fmtAvgBPS; - public Int16 fmtBlockAlign; - public Int16 bitDepth; - public Int16 fmtExtraSize; + // Format chunk (24 bytes) + public Int32 fmtID; // "fmt " + public Int32 fmtSize; + public Int16 fmtCode; + public Int16 channels; + public Int32 sampleRate; + public Int32 fmtAvgBPS; + public Int16 fmtBlockAlign; + public Int16 bitDepth; + public Int16 fmtExtraSize; - // Data chunk - public Int32 dataID; // "data" - public Int32 dataSize; // The data size should be file size - 36 bytes. + // Data chunk + public Int32 dataID; // "data" + public Int32 dataSize; // The data size should be file size - 36 bytes. - public void Deserialize(Stream stream) - { - StreamHelper.Read(stream, out chunkID); - StreamHelper.Read(stream, out fileSize); - StreamHelper.Read(stream, out riffType); - if (chunkID != BitConverter.ToInt32(Encoding.ASCII.GetBytes("RIFF"), 0)) - { - throw new FormatException("Invalid WAV file header"); - } - if (riffType != BitConverter.ToInt32(Encoding.ASCII.GetBytes("WAVE"), 0)) - { - throw new FormatException($"Not supported RIFF type: '{Encoding.ASCII.GetString(BitConverter.GetBytes(riffType))}'"); - } - Int32 chunkId; - Int32 chunkSize; - while (stream.Position < stream.Length) - { - StreamHelper.Read(stream, out chunkId); - StreamHelper.Read(stream, out chunkSize); - string strChunkId = Encoding.ASCII.GetString( - BitConverter.GetBytes(chunkId)); - if (strChunkId == "fmt ") - { - read_fmt(stream, chunkId, chunkSize); - } - else if (strChunkId == "data") - { - read_data(stream, chunkId, chunkSize); - break; - } - else - { - stream.Seek(chunkSize, SeekOrigin.Current); - } - } - if (fmtID != BitConverter.ToInt32(Encoding.ASCII.GetBytes("fmt "), 0)) - { - throw new FormatException("WAV format chunk not found"); - } - if (dataID != BitConverter.ToInt32(Encoding.ASCII.GetBytes("data"), 0)) - { - throw new FormatException("WAV data chunk not found"); - } - } + public void Deserialize(Stream stream) + { + StreamHelper.Read(stream, out chunkID); + StreamHelper.Read(stream, out fileSize); + StreamHelper.Read(stream, out riffType); + if (chunkID != BitConverter.ToInt32(Encoding.ASCII.GetBytes("RIFF"), 0)) + { + throw new FormatException("Invalid WAV file header"); + } + if (riffType != BitConverter.ToInt32(Encoding.ASCII.GetBytes("WAVE"), 0)) + { + throw new FormatException($"Not supported RIFF type: '{Encoding.ASCII.GetString(BitConverter.GetBytes(riffType))}'"); + } + Int32 chunkId; + Int32 chunkSize; + while (stream.Position < stream.Length) + { + StreamHelper.Read(stream, out chunkId); + StreamHelper.Read(stream, out chunkSize); + string strChunkId = Encoding.ASCII.GetString( + BitConverter.GetBytes(chunkId)); + if (strChunkId == "fmt ") + { + read_fmt(stream, chunkId, chunkSize); + } + else if (strChunkId == "data") + { + read_data(stream, chunkId, chunkSize); + break; + } + else + { + stream.Seek(chunkSize, SeekOrigin.Current); + } + } + if (fmtID != BitConverter.ToInt32(Encoding.ASCII.GetBytes("fmt "), 0)) + { + throw new FormatException("WAV format chunk not found"); + } + if (dataID != BitConverter.ToInt32(Encoding.ASCII.GetBytes("data"), 0)) + { + throw new FormatException("WAV data chunk not found"); + } + } - private void read_data(Stream stream, int chunkId, int chunkSize) - { - dataID = chunkId; - dataSize = chunkSize; - } + private void read_data(Stream stream, int chunkId, int chunkSize) + { + dataID = chunkId; + dataSize = chunkSize; + } - private void read_fmt(Stream stream, int chunkId, int chunkSize) - { - fmtID = chunkId; - fmtSize = chunkSize; - StreamHelper.Read(stream, out fmtCode); - StreamHelper.Read(stream, out channels); - StreamHelper.Read(stream, out sampleRate); - StreamHelper.Read(stream, out fmtAvgBPS); - StreamHelper.Read(stream, out fmtBlockAlign); - StreamHelper.Read(stream, out bitDepth); - if (fmtSize == 18) - { - // Read any extra values - StreamHelper.Read(stream, out fmtExtraSize); - stream.Seek(fmtExtraSize, SeekOrigin.Current); - } - } - } + private void read_fmt(Stream stream, int chunkId, int chunkSize) + { + fmtID = chunkId; + fmtSize = chunkSize; + StreamHelper.Read(stream, out fmtCode); + StreamHelper.Read(stream, out channels); + StreamHelper.Read(stream, out sampleRate); + StreamHelper.Read(stream, out fmtAvgBPS); + StreamHelper.Read(stream, out fmtBlockAlign); + StreamHelper.Read(stream, out bitDepth); + if (fmtSize == 18) + { + // Read any extra values + StreamHelper.Read(stream, out fmtExtraSize); + stream.Seek(fmtExtraSize, SeekOrigin.Current); + } + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/WavStreamReader.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/WavStreamReader.cs index 15b1d06493..9be471d3de 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/WavStreamReader.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/WavStreamReader.cs @@ -3,109 +3,109 @@ using System.IO; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// From https://archive.codeplex.com/?p=zxmak2 - /// - public class WavStreamReader - { - private Stream m_stream; - private WavHeader m_header = new WavHeader(); + /// + /// From https://archive.codeplex.com/?p=zxmak2 + /// + public class WavStreamReader + { + private Stream m_stream; + private WavHeader m_header = new WavHeader(); - public WavStreamReader(Stream stream) - { - m_stream = stream; - m_header.Deserialize(stream); - } + public WavStreamReader(Stream stream) + { + m_stream = stream; + m_header.Deserialize(stream); + } - public WavHeader Header { get { return m_header; } } + public WavHeader Header { get { return m_header; } } - public int Count { get { return m_header.dataSize / m_header.fmtBlockAlign; } } + public int Count { get { return m_header.dataSize / m_header.fmtBlockAlign; } } - public Int32 ReadNext() - { - // check - sample should be in PCM format - if (m_header.fmtCode != WAVE_FORMAT_PCM && - m_header.fmtCode != WAVE_FORMAT_IEEE_FLOAT) - { - throw new FormatException($"Not supported audio format: fmtCode={m_header.fmtCode}, bitDepth={m_header.bitDepth}"); - } - byte[] data = new byte[m_header.fmtBlockAlign]; - m_stream.Read(data, 0, data.Length); - if (m_header.fmtCode == WAVE_FORMAT_PCM) - { - // use first channel only - if (m_header.bitDepth == 8) - return getSamplePcm8(data, 0, 0); - if (m_header.bitDepth == 16) - return getSamplePcm16(data, 0, 0); - if (m_header.bitDepth == 24) - return getSamplePcm24(data, 0, 0); - if (m_header.bitDepth == 32) - return getSamplePcm32(data, 0, 0); - } - else if (m_header.fmtCode == WAVE_FORMAT_IEEE_FLOAT) - { - // use first channel only - if (m_header.bitDepth == 32) - return getSampleFloat32(data, 0, 0); - if (m_header.bitDepth == 64) - return getSampleFloat64(data, 0, 0); - } - throw new NotSupportedException($"Not supported audio format ({(m_header.fmtCode == WAVE_FORMAT_PCM ? "PCM" : "FLOAT")}/{m_header.bitDepth} bit)"); - } + public Int32 ReadNext() + { + // check - sample should be in PCM format + if (m_header.fmtCode != WAVE_FORMAT_PCM && + m_header.fmtCode != WAVE_FORMAT_IEEE_FLOAT) + { + throw new FormatException($"Not supported audio format: fmtCode={m_header.fmtCode}, bitDepth={m_header.bitDepth}"); + } + byte[] data = new byte[m_header.fmtBlockAlign]; + m_stream.Read(data, 0, data.Length); + if (m_header.fmtCode == WAVE_FORMAT_PCM) + { + // use first channel only + if (m_header.bitDepth == 8) + return getSamplePcm8(data, 0, 0); + if (m_header.bitDepth == 16) + return getSamplePcm16(data, 0, 0); + if (m_header.bitDepth == 24) + return getSamplePcm24(data, 0, 0); + if (m_header.bitDepth == 32) + return getSamplePcm32(data, 0, 0); + } + else if (m_header.fmtCode == WAVE_FORMAT_IEEE_FLOAT) + { + // use first channel only + if (m_header.bitDepth == 32) + return getSampleFloat32(data, 0, 0); + if (m_header.bitDepth == 64) + return getSampleFloat64(data, 0, 0); + } + throw new NotSupportedException($"Not supported audio format ({(m_header.fmtCode == WAVE_FORMAT_PCM ? "PCM" : "FLOAT")}/{m_header.bitDepth} bit)"); + } - private Int32 getSamplePcm8(byte[] bufferRaw, int offset, int channel) - { - return bufferRaw[offset + channel] - 128; - } + private Int32 getSamplePcm8(byte[] bufferRaw, int offset, int channel) + { + return bufferRaw[offset + channel] - 128; + } - private Int32 getSamplePcm16(byte[] bufferRaw, int offset, int channel) - { - return BitConverter.ToInt16(bufferRaw, offset + 2 * channel); - } + private Int32 getSamplePcm16(byte[] bufferRaw, int offset, int channel) + { + return BitConverter.ToInt16(bufferRaw, offset + 2 * channel); + } - private Int32 getSamplePcm24(byte[] bufferRaw, int offset, int channel) - { - Int32 result; - int subOffset = offset + channel * 3; - if (BitConverter.IsLittleEndian) - { - result = ((sbyte)bufferRaw[2 + subOffset]) * 0x10000; - result |= bufferRaw[1 + subOffset] * 0x100; - result |= bufferRaw[0 + subOffset]; - } - else - { - result = ((sbyte)bufferRaw[0 + subOffset]) * 0x10000; - result |= bufferRaw[1 + subOffset] * 0x100; - result |= bufferRaw[2 + subOffset]; - } - return result; - } + private Int32 getSamplePcm24(byte[] bufferRaw, int offset, int channel) + { + Int32 result; + int subOffset = offset + channel * 3; + if (BitConverter.IsLittleEndian) + { + result = ((sbyte)bufferRaw[2 + subOffset]) * 0x10000; + result |= bufferRaw[1 + subOffset] * 0x100; + result |= bufferRaw[0 + subOffset]; + } + else + { + result = ((sbyte)bufferRaw[0 + subOffset]) * 0x10000; + result |= bufferRaw[1 + subOffset] * 0x100; + result |= bufferRaw[2 + subOffset]; + } + return result; + } - private Int32 getSamplePcm32(byte[] bufferRaw, int offset, int channel) - { - return BitConverter.ToInt32(bufferRaw, offset + 4 * channel); - } + private Int32 getSamplePcm32(byte[] bufferRaw, int offset, int channel) + { + return BitConverter.ToInt32(bufferRaw, offset + 4 * channel); + } - private Int32 getSampleFloat32(byte[] data, int offset, int channel) - { - float fSample = BitConverter.ToSingle(data, offset + 4 * channel); - // convert to 32 bit integer - return (Int32)(fSample * Int32.MaxValue); - } + private Int32 getSampleFloat32(byte[] data, int offset, int channel) + { + float fSample = BitConverter.ToSingle(data, offset + 4 * channel); + // convert to 32 bit integer + return (Int32)(fSample * Int32.MaxValue); + } - private Int32 getSampleFloat64(byte[] data, int offset, int channel) - { - double fSample = BitConverter.ToDouble(data, offset + 8 * channel); - // convert to 32 bit integer - return (Int32)(fSample * Int32.MaxValue); - } + private Int32 getSampleFloat64(byte[] data, int offset, int channel) + { + double fSample = BitConverter.ToDouble(data, offset + 8 * channel); + // convert to 32 bit integer + return (Int32)(fSample * Int32.MaxValue); + } - private const int WAVE_FORMAT_PCM = 1; /* PCM */ - private const int WAVE_FORMAT_IEEE_FLOAT = 3; /* IEEE float */ - private const int WAVE_FORMAT_ALAW = 6; /* 8-bit ITU-T G.711 A-law */ - private const int WAVE_FORMAT_MULAW = 7; /* 8-bit ITU-T G.711 µ-law */ - private const int WAVE_FORMAT_EXTENSIBLE = 0xFFFE; /* Determined by SubFormat */ - } + private const int WAVE_FORMAT_PCM = 1; /* PCM */ + private const int WAVE_FORMAT_IEEE_FLOAT = 3; /* IEEE float */ + private const int WAVE_FORMAT_ALAW = 6; /* 8-bit ITU-T G.711 A-law */ + private const int WAVE_FORMAT_MULAW = 7; /* 8-bit ITU-T G.711 µ-law */ + private const int WAVE_FORMAT_EXTENSIBLE = 0xFFFE; /* Determined by SubFormat */ + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.IStatable.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.IStatable.cs index c0b6b4b06d..2fa6068384 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.IStatable.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.IStatable.cs @@ -4,97 +4,94 @@ using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// ZXHawk: Core Class - /// * IStatable * - /// - public partial class ZXSpectrum : IStatable - { - public bool BinarySaveStatesPreferred - { - get { return true; } - } + /// + /// ZXHawk: Core Class + /// * IStatable * + /// + public partial class ZXSpectrum : IStatable + { + public bool BinarySaveStatesPreferred => true; - public void SaveStateText(TextWriter writer) - { - SyncState(new Serializer(writer)); - } + public void SaveStateText(TextWriter writer) + { + SyncState(new Serializer(writer)); + } - public void LoadStateText(TextReader reader) - { - SyncState(new Serializer(reader)); - } + public void LoadStateText(TextReader reader) + { + SyncState(new Serializer(reader)); + } - public void SaveStateBinary(BinaryWriter bw) - { - SyncState(new Serializer(bw)); - } + public void SaveStateBinary(BinaryWriter bw) + { + SyncState(new Serializer(bw)); + } - public void LoadStateBinary(BinaryReader br) - { - SyncState(new Serializer(br)); - } + public void LoadStateBinary(BinaryReader br) + { + SyncState(new Serializer(br)); + } - public byte[] SaveStateBinary() - { - MemoryStream ms = new MemoryStream(); - BinaryWriter bw = new BinaryWriter(ms); - SaveStateBinary(bw); - bw.Flush(); - return ms.ToArray(); - } + public byte[] SaveStateBinary() + { + using var ms = new MemoryStream(); + using var bw = new BinaryWriter(ms); + SaveStateBinary(bw); + bw.Flush(); + return ms.ToArray(); + } - private void SyncState(Serializer ser) - { - byte[] core = null; - if (ser.IsWriter) - { - var ms = new MemoryStream(); - ms.Close(); - core = ms.ToArray(); - } + private void SyncState(Serializer ser) + { + byte[] core = null; + if (ser.IsWriter) + { + var ms = new MemoryStream(); + ms.Close(); + core = ms.ToArray(); + } - if (ser.IsWriter) - { - ser.SyncEnum(nameof(_machineType), ref _machineType); + if (ser.IsWriter) + { + ser.SyncEnum(nameof(_machineType), ref _machineType); - _cpu.SyncState(ser); - ser.BeginSection(nameof(ZXSpectrum)); - _machine.SyncState(ser); - ser.Sync("Frame", ref _machine.FrameCount); - ser.Sync("LagCount", ref _lagCount); - ser.Sync("IsLag", ref _isLag); - ser.EndSection(); - } - - if (ser.IsReader) - { - var tmpM = _machineType; - ser.SyncEnum(nameof(_machineType), ref _machineType); - if (tmpM != _machineType && _machineType.ToString() != "72") - { - string msg = "SAVESTATE FAILED TO LOAD!!\n\n"; - msg += "Current Configuration: " + tmpM.ToString(); - msg += "\n"; - msg += "Saved Configuration: " + _machineType.ToString(); - msg += "\n\n"; - msg += "If you wish to load this SaveState ensure that you have the correct machine configuration selected, reboot the core, then try again."; - CoreComm.ShowMessage(msg); - _machineType = tmpM; - } - else - { - _cpu.SyncState(ser); - ser.BeginSection(nameof(ZXSpectrum)); - _machine.SyncState(ser); - ser.Sync("Frame", ref _machine.FrameCount); - ser.Sync("LagCount", ref _lagCount); - ser.Sync("IsLag", ref _isLag); - ser.EndSection(); + _cpu.SyncState(ser); + ser.BeginSection(nameof(ZXSpectrum)); + _machine.SyncState(ser); + ser.Sync("Frame", ref _machine.FrameCount); + ser.Sync("LagCount", ref _lagCount); + ser.Sync("IsLag", ref _isLag); + ser.EndSection(); + } - SyncAllByteArrayDomains(); - } - } - } - } + if (ser.IsReader) + { + var tmpM = _machineType; + ser.SyncEnum(nameof(_machineType), ref _machineType); + if (tmpM != _machineType && _machineType.ToString() != "72") + { + string msg = "SAVESTATE FAILED TO LOAD!!\n\n"; + msg += "Current Configuration: " + tmpM.ToString(); + msg += "\n"; + msg += "Saved Configuration: " + _machineType.ToString(); + msg += "\n\n"; + msg += "If you wish to load this SaveState ensure that you have the correct machine configuration selected, reboot the core, then try again."; + CoreComm.ShowMessage(msg); + _machineType = tmpM; + } + else + { + _cpu.SyncState(ser); + ser.BeginSection(nameof(ZXSpectrum)); + _machine.SyncState(ser); + ser.Sync("Frame", ref _machine.FrameCount); + ser.Sync("LagCount", ref _lagCount); + ser.Sync("IsLag", ref _isLag); + ser.EndSection(); + + SyncAllByteArrayDomains(); + } + } + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.cs index 1c51cbbc10..33688aaaf0 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.cs @@ -11,113 +11,113 @@ using BizHawk.Emulation.Cores.Sound; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { - /// - /// ZXHawk: Core Class - /// * Main Initialization * - /// - [Core( - "ZXHawk", - "Asnivor, Alyosha", - isPorted: false, - isReleased: true)] - public partial class ZXSpectrum : IRegionable, IDriveLight - { - public ZXSpectrum(CoreComm comm, IEnumerable files, List game, object settings, object syncSettings, bool? deterministic) - { - var ser = new BasicServiceProvider(this); - ServiceProvider = ser; - InputCallbacks = new InputCallbackSystem(); - MemoryCallbacks = new MemoryCallbackSystem(new[] { "System Bus" }); + /// + /// ZXHawk: Core Class + /// * Main Initialization * + /// + [Core( + "ZXHawk", + "Asnivor, Alyosha", + isPorted: false, + isReleased: true)] + public partial class ZXSpectrum : IRegionable, IDriveLight + { + public ZXSpectrum(CoreComm comm, IEnumerable files, List game, object settings, object syncSettings, bool? deterministic) + { + var ser = new BasicServiceProvider(this); + ServiceProvider = ser; + InputCallbacks = new InputCallbackSystem(); + MemoryCallbacks = new MemoryCallbackSystem(new[] { "System Bus" }); - CoreComm = comm; + CoreComm = comm; - _gameInfo = game; + _gameInfo = game; - _cpu = new Z80A(); + _cpu = new Z80A(); - _tracer = new TraceBuffer { Header = _cpu.TraceHeader }; - - _files = files?.ToList() ?? new List(); + _tracer = new TraceBuffer { Header = _cpu.TraceHeader }; - if (settings == null) - settings = new ZXSpectrumSettings(); - if (syncSettings == null) - syncSettings = new ZXSpectrumSyncSettings(); + _files = files?.ToList() ?? new List(); - PutSyncSettings((ZXSpectrumSyncSettings)syncSettings ?? new ZXSpectrumSyncSettings()); - PutSettings((ZXSpectrumSettings)settings ?? new ZXSpectrumSettings()); + if (settings == null) + settings = new ZXSpectrumSettings(); + if (syncSettings == null) + syncSettings = new ZXSpectrumSyncSettings(); - List joysticks = new List(); - joysticks.Add(((ZXSpectrumSyncSettings)syncSettings).JoystickType1); - joysticks.Add(((ZXSpectrumSyncSettings)syncSettings).JoystickType2); - joysticks.Add(((ZXSpectrumSyncSettings)syncSettings).JoystickType3); + PutSyncSettings((ZXSpectrumSyncSettings)syncSettings ?? new ZXSpectrumSyncSettings()); + PutSettings((ZXSpectrumSettings)settings ?? new ZXSpectrumSettings()); - deterministicEmulation = ((ZXSpectrumSyncSettings)syncSettings).DeterministicEmulation; + List joysticks = new List(); + joysticks.Add(((ZXSpectrumSyncSettings)syncSettings).JoystickType1); + joysticks.Add(((ZXSpectrumSyncSettings)syncSettings).JoystickType2); + joysticks.Add(((ZXSpectrumSyncSettings)syncSettings).JoystickType3); - if (deterministic != null && deterministic == true) - { - if (deterministicEmulation == false) - { - CoreComm.Notify("Forcing Deterministic Emulation"); - } - - deterministicEmulation = deterministic.Value; - } + deterministicEmulation = ((ZXSpectrumSyncSettings)syncSettings).DeterministicEmulation; - MachineType = SyncSettings.MachineType; + if (deterministic != null && deterministic == true) + { + if (deterministicEmulation == false) + { + CoreComm.Notify("Forcing Deterministic Emulation"); + } - switch (MachineType) - { - case MachineType.ZXSpectrum16: - ControllerDefinition = ZXSpectrumControllerDefinition; - Init(MachineType.ZXSpectrum16, SyncSettings.BorderType, SyncSettings.TapeLoadSpeed, _files, joysticks); - break; - case MachineType.ZXSpectrum48: - ControllerDefinition = ZXSpectrumControllerDefinition; - Init(MachineType.ZXSpectrum48, SyncSettings.BorderType, SyncSettings.TapeLoadSpeed, _files, joysticks); - break; - case MachineType.ZXSpectrum128: - ControllerDefinition = ZXSpectrumControllerDefinition; - Init(MachineType.ZXSpectrum128, SyncSettings.BorderType, SyncSettings.TapeLoadSpeed, _files, joysticks); - break; - case MachineType.ZXSpectrum128Plus2: - ControllerDefinition = ZXSpectrumControllerDefinition; - Init(MachineType.ZXSpectrum128Plus2, SyncSettings.BorderType, SyncSettings.TapeLoadSpeed, _files, joysticks); - break; - case MachineType.ZXSpectrum128Plus2a: - ControllerDefinition = ZXSpectrumControllerDefinition; - Init(MachineType.ZXSpectrum128Plus2a, SyncSettings.BorderType, SyncSettings.TapeLoadSpeed, _files, joysticks); - break; - case MachineType.ZXSpectrum128Plus3: - ControllerDefinition = ZXSpectrumControllerDefinition; - Init(MachineType.ZXSpectrum128Plus3, SyncSettings.BorderType, SyncSettings.TapeLoadSpeed, _files, joysticks); - break; + deterministicEmulation = deterministic.Value; + } + + MachineType = SyncSettings.MachineType; + + switch (MachineType) + { + case MachineType.ZXSpectrum16: + ControllerDefinition = ZXSpectrumControllerDefinition; + Init(MachineType.ZXSpectrum16, SyncSettings.BorderType, SyncSettings.TapeLoadSpeed, _files, joysticks); + break; + case MachineType.ZXSpectrum48: + ControllerDefinition = ZXSpectrumControllerDefinition; + Init(MachineType.ZXSpectrum48, SyncSettings.BorderType, SyncSettings.TapeLoadSpeed, _files, joysticks); + break; + case MachineType.ZXSpectrum128: + ControllerDefinition = ZXSpectrumControllerDefinition; + Init(MachineType.ZXSpectrum128, SyncSettings.BorderType, SyncSettings.TapeLoadSpeed, _files, joysticks); + break; + case MachineType.ZXSpectrum128Plus2: + ControllerDefinition = ZXSpectrumControllerDefinition; + Init(MachineType.ZXSpectrum128Plus2, SyncSettings.BorderType, SyncSettings.TapeLoadSpeed, _files, joysticks); + break; + case MachineType.ZXSpectrum128Plus2a: + ControllerDefinition = ZXSpectrumControllerDefinition; + Init(MachineType.ZXSpectrum128Plus2a, SyncSettings.BorderType, SyncSettings.TapeLoadSpeed, _files, joysticks); + break; + case MachineType.ZXSpectrum128Plus3: + ControllerDefinition = ZXSpectrumControllerDefinition; + Init(MachineType.ZXSpectrum128Plus3, SyncSettings.BorderType, SyncSettings.TapeLoadSpeed, _files, joysticks); + break; case MachineType.Pentagon128: ControllerDefinition = ZXSpectrumControllerDefinition; Init(MachineType.Pentagon128, SyncSettings.BorderType, SyncSettings.TapeLoadSpeed, _files, joysticks); break; - default: - throw new InvalidOperationException("Machine not yet emulated"); - } + default: + throw new InvalidOperationException("Machine not yet emulated"); + } - _cpu.MemoryCallbacks = MemoryCallbacks; + _cpu.MemoryCallbacks = MemoryCallbacks; - HardReset = _machine.HardReset; - SoftReset = _machine.SoftReset; + HardReset = _machine.HardReset; + SoftReset = _machine.SoftReset; - _cpu.FetchMemory = _machine.ReadMemory; - _cpu.ReadMemory = _machine.ReadMemory; - _cpu.WriteMemory = _machine.WriteMemory; - _cpu.ReadHardware = _machine.ReadPort; - _cpu.WriteHardware = _machine.WritePort; - _cpu.FetchDB = _machine.PushBus; - _cpu.OnExecFetch = _machine.CPUMon.OnExecFetch; + _cpu.FetchMemory = _machine.ReadMemory; + _cpu.ReadMemory = _machine.ReadMemory; + _cpu.WriteMemory = _machine.WriteMemory; + _cpu.ReadHardware = _machine.ReadPort; + _cpu.WriteHardware = _machine.WritePort; + _cpu.FetchDB = _machine.PushBus; + _cpu.OnExecFetch = _machine.CPUMon.OnExecFetch; - ser.Register(_tracer); - ser.Register(_cpu); - ser.Register(_machine.ULADevice); + ser.Register(_tracer); + ser.Register(_cpu); + ser.Register(_machine.ULADevice); - // initialize sound mixer and attach the various ISoundProvider devices + // initialize sound mixer and attach the various ISoundProvider devices SoundMixer = new SyncSoundMixer(targetSampleCount: 882); SoundMixer.PinSource(_machine.BuzzerDevice, "System Beeper", (int)(32767 / 10)); SoundMixer.PinSource(_machine.TapeBuzzer, "Tape Audio", (int)(32767 / 10)); @@ -126,194 +126,194 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum SoundMixer.PinSource(_machine.AYDevice, "AY-3-3912"); } - // set audio device settings - if (_machine.AYDevice != null && _machine.AYDevice.GetType() == typeof(AY38912)) - { - ((AY38912)_machine.AYDevice).PanningConfiguration = ((ZXSpectrumSettings)settings).AYPanConfig; - _machine.AYDevice.Volume = ((ZXSpectrumSettings)settings).AYVolume; - } + // set audio device settings + if (_machine.AYDevice != null && _machine.AYDevice.GetType() == typeof(AY38912)) + { + ((AY38912)_machine.AYDevice).PanningConfiguration = ((ZXSpectrumSettings)settings).AYPanConfig; + _machine.AYDevice.Volume = ((ZXSpectrumSettings)settings).AYVolume; + } - if (_machine.BuzzerDevice != null) - { - _machine.BuzzerDevice.Volume = ((ZXSpectrumSettings)settings).EarVolume; - } + if (_machine.BuzzerDevice != null) + { + _machine.BuzzerDevice.Volume = ((ZXSpectrumSettings)settings).EarVolume; + } - if (_machine.TapeBuzzer != null) - { - _machine.TapeBuzzer.Volume = ((ZXSpectrumSettings)settings).TapeVolume; - } + if (_machine.TapeBuzzer != null) + { + _machine.TapeBuzzer.Volume = ((ZXSpectrumSettings)settings).TapeVolume; + } - DCFilter dc = new DCFilter(SoundMixer, 512); - ser.Register(dc); + DCFilter dc = new DCFilter(SoundMixer, 512); + ser.Register(dc); - HardReset(); - SetupMemoryDomains(); - } + HardReset(); + SetupMemoryDomains(); + } - public Action HardReset; - public Action SoftReset; + public Action HardReset; + public Action SoftReset; - private readonly Z80A _cpu; - private readonly TraceBuffer _tracer; - public IController _controller; - public SpectrumBase _machine; - public MachineType MachineType; + private readonly Z80A _cpu; + private readonly TraceBuffer _tracer; + public IController _controller; + public SpectrumBase _machine; + public MachineType MachineType; - public List _gameInfo; + public List _gameInfo; - public List _tapeInfo = new List(); - public List _diskInfo = new List(); + public List _tapeInfo = new List(); + public List _diskInfo = new List(); - private SyncSoundMixer SoundMixer; + private SyncSoundMixer SoundMixer; - private readonly List _files; + private readonly List _files; - public bool DiagRom = false; + public bool DiagRom = false; - private List diagRoms = new List - { - @"\DiagROM.v28", - @"\zx-diagnostics\testrom.bin" - }; - private int diagIndex = 1; + private List diagRoms = new List + { + @"\DiagROM.v28", + @"\zx-diagnostics\testrom.bin" + }; + private int diagIndex = 1; - private byte[] GetFirmware(int length, params string[] names) - { - if (DiagRom & File.Exists(Directory.GetCurrentDirectory() + diagRoms[diagIndex])) - { - var rom = File.ReadAllBytes(Directory.GetCurrentDirectory() + diagRoms[diagIndex]); - return rom; - } + private byte[] GetFirmware(int length, params string[] names) + { + if (DiagRom & File.Exists(Directory.GetCurrentDirectory() + diagRoms[diagIndex])) + { + var rom = File.ReadAllBytes(Directory.GetCurrentDirectory() + diagRoms[diagIndex]); + return rom; + } - // Amstrad licensed ROMs are free to distribute and shipped with BizHawk - byte[] embeddedRom = new byte[length]; - bool embeddedFound = true; - switch (names.FirstOrDefault()) - { - case "48ROM": - embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.ZX_48_ROM)); - break; - case "128ROM": - embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.ZX_128_ROM)); - break; - case "PLUS2ROM": - embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.ZX_plus2_rom)); - break; - case "PLUS2AROM": - embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.ZX_plus2a_rom)); - break; - case "PLUS3ROM": - byte[] r0 = Util.DecompressGzipFile(new MemoryStream(Resources.Spectrum3_V4_0_ROM0_bin)); - byte[] r1 = Util.DecompressGzipFile(new MemoryStream(Resources.Spectrum3_V4_0_ROM1_bin)); - byte[] r2 = Util.DecompressGzipFile(new MemoryStream(Resources.Spectrum3_V4_0_ROM2_bin)); - byte[] r3 = Util.DecompressGzipFile(new MemoryStream(Resources.Spectrum3_V4_0_ROM3_bin)); - embeddedRom = r0.Concat(r1).Concat(r2).Concat(r3).ToArray(); - break; - default: - embeddedFound = false; - break; - } + // Amstrad licensed ROMs are free to distribute and shipped with BizHawk + byte[] embeddedRom = new byte[length]; + bool embeddedFound = true; + switch (names.FirstOrDefault()) + { + case "48ROM": + embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.ZX_48_ROM)); + break; + case "128ROM": + embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.ZX_128_ROM)); + break; + case "PLUS2ROM": + embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.ZX_plus2_rom)); + break; + case "PLUS2AROM": + embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.ZX_plus2a_rom)); + break; + case "PLUS3ROM": + byte[] r0 = Util.DecompressGzipFile(new MemoryStream(Resources.Spectrum3_V4_0_ROM0_bin)); + byte[] r1 = Util.DecompressGzipFile(new MemoryStream(Resources.Spectrum3_V4_0_ROM1_bin)); + byte[] r2 = Util.DecompressGzipFile(new MemoryStream(Resources.Spectrum3_V4_0_ROM2_bin)); + byte[] r3 = Util.DecompressGzipFile(new MemoryStream(Resources.Spectrum3_V4_0_ROM3_bin)); + embeddedRom = r0.Concat(r1).Concat(r2).Concat(r3).ToArray(); + break; + default: + embeddedFound = false; + break; + } - if (embeddedFound) - return embeddedRom; + if (embeddedFound) + return embeddedRom; - // Embedded ROM not found, maybe this is a peripheral ROM? - var result = names.Select(n => CoreComm.CoreFileProvider.GetFirmware("ZXSpectrum", n, false)).FirstOrDefault(b => b != null && b.Length == length); - if (result == null) - { - throw new MissingFirmwareException($"At least one of these firmwares is required: {string.Join(", ", names)}"); - } + // Embedded ROM not found, maybe this is a peripheral ROM? + var result = names.Select(n => CoreComm.CoreFileProvider.GetFirmware("ZXSpectrum", n, false)).FirstOrDefault(b => b != null && b.Length == length); + if (result == null) + { + throw new MissingFirmwareException($"At least one of these firmwares is required: {string.Join(", ", names)}"); + } - return result; - } + return result; + } - private MachineType _machineType; + private MachineType _machineType; - private void Init(MachineType machineType, BorderType borderType, TapeLoadSpeed tapeLoadSpeed, List files, List joys) - { - _machineType = machineType; + private void Init(MachineType machineType, BorderType borderType, TapeLoadSpeed tapeLoadSpeed, List files, List joys) + { + _machineType = machineType; - // setup the emulated model based on the MachineType - switch (machineType) - { - case MachineType.ZXSpectrum16: - _machine = new ZX16(this, _cpu, borderType, files, joys); - var _systemRom16 = GetFirmware(0x4000, "48ROM"); - var romData16 = RomData.InitROM(machineType, _systemRom16); - _machine.InitROM(romData16); - break; - case MachineType.ZXSpectrum48: - _machine = new ZX48(this, _cpu, borderType, files, joys); - var _systemRom = GetFirmware(0x4000, "48ROM"); - var romData = RomData.InitROM(machineType, _systemRom); - _machine.InitROM(romData); - break; - case MachineType.ZXSpectrum128: - _machine = new ZX128(this, _cpu, borderType, files, joys); - var _systemRom128 = GetFirmware(0x8000, "128ROM"); - var romData128 = RomData.InitROM(machineType, _systemRom128); - _machine.InitROM(romData128); - break; - case MachineType.ZXSpectrum128Plus2: - _machine = new ZX128Plus2(this, _cpu, borderType, files, joys); - var _systemRomP2 = GetFirmware(0x8000, "PLUS2ROM"); - var romDataP2 = RomData.InitROM(machineType, _systemRomP2); - _machine.InitROM(romDataP2); - break; - case MachineType.ZXSpectrum128Plus2a: - _machine = new ZX128Plus2a(this, _cpu, borderType, files, joys); - var _systemRomP4 = GetFirmware(0x10000, "PLUS2AROM"); - var romDataP4 = RomData.InitROM(machineType, _systemRomP4); - _machine.InitROM(romDataP4); - break; - case MachineType.ZXSpectrum128Plus3: - _machine = new ZX128Plus3(this, _cpu, borderType, files, joys); - var _systemRomP3 = GetFirmware(0x10000, "PLUS3ROM"); - var romDataP3 = RomData.InitROM(machineType, _systemRomP3); - _machine.InitROM(romDataP3); - //System.Windows.Forms.MessageBox.Show("+3 is not working at all yet :/"); - break; + // setup the emulated model based on the MachineType + switch (machineType) + { + case MachineType.ZXSpectrum16: + _machine = new ZX16(this, _cpu, borderType, files, joys); + var _systemRom16 = GetFirmware(0x4000, "48ROM"); + var romData16 = RomData.InitROM(machineType, _systemRom16); + _machine.InitROM(romData16); + break; + case MachineType.ZXSpectrum48: + _machine = new ZX48(this, _cpu, borderType, files, joys); + var _systemRom = GetFirmware(0x4000, "48ROM"); + var romData = RomData.InitROM(machineType, _systemRom); + _machine.InitROM(romData); + break; + case MachineType.ZXSpectrum128: + _machine = new ZX128(this, _cpu, borderType, files, joys); + var _systemRom128 = GetFirmware(0x8000, "128ROM"); + var romData128 = RomData.InitROM(machineType, _systemRom128); + _machine.InitROM(romData128); + break; + case MachineType.ZXSpectrum128Plus2: + _machine = new ZX128Plus2(this, _cpu, borderType, files, joys); + var _systemRomP2 = GetFirmware(0x8000, "PLUS2ROM"); + var romDataP2 = RomData.InitROM(machineType, _systemRomP2); + _machine.InitROM(romDataP2); + break; + case MachineType.ZXSpectrum128Plus2a: + _machine = new ZX128Plus2a(this, _cpu, borderType, files, joys); + var _systemRomP4 = GetFirmware(0x10000, "PLUS2AROM"); + var romDataP4 = RomData.InitROM(machineType, _systemRomP4); + _machine.InitROM(romDataP4); + break; + case MachineType.ZXSpectrum128Plus3: + _machine = new ZX128Plus3(this, _cpu, borderType, files, joys); + var _systemRomP3 = GetFirmware(0x10000, "PLUS3ROM"); + var romDataP3 = RomData.InitROM(machineType, _systemRomP3); + _machine.InitROM(romDataP3); + //System.Windows.Forms.MessageBox.Show("+3 is not working at all yet :/"); + break; case MachineType.Pentagon128: _machine = new Pentagon128(this, _cpu, borderType, files, joys); var _systemRomPen128 = GetFirmware(0x8000, "PentagonROM"); var _systemRomTrdos = GetFirmware(0x4000, "TRDOSROM"); var conc = _systemRomPen128.Concat(_systemRomTrdos).ToArray(); - var romDataPen128 = RomData.InitROM(machineType, conc); + var romDataPen128 = RomData.InitROM(machineType, conc); _machine.InitROM(romDataPen128); break; - } - } + } + } - #region IRegionable + #region IRegionable - public DisplayType Region => DisplayType.PAL; + public DisplayType Region => DisplayType.PAL; - #endregion + #endregion - #region IDriveLight + #region IDriveLight - public bool DriveLightEnabled - { - get - { - return true; - } - } + public bool DriveLightEnabled + { + get + { + return true; + } + } - public bool DriveLightOn - { - get - { - if (_machine != null && - (_machine.TapeDevice != null && _machine.TapeDevice.TapeIsPlaying) || - (_machine.UPDDiskDevice != null && _machine.UPDDiskDevice.DriveLight)) - return true; + public bool DriveLightOn + { + get + { + if (_machine != null && + (_machine.TapeDevice != null && _machine.TapeDevice.TapeIsPlaying) || + (_machine.UPDDiskDevice != null && _machine.UPDDiskDevice.DriveLight)) + return true; - return false; - } - } + return false; + } + } - #endregion + #endregion - } + } } diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.IStatable.cs index 7751a535f5..8ab93398d9 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.IStatable.cs @@ -7,10 +7,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 { public partial class Atari2600 : IStatable { - public bool BinarySaveStatesPreferred - { - get { return true; } - } + public bool BinarySaveStatesPreferred => true; public void SaveStateText(TextWriter writer) { @@ -34,8 +31,8 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 public byte[] SaveStateBinary() { - var ms = new MemoryStream(); - var bw = new BinaryWriter(ms); + using var ms = new MemoryStream(); + using var bw = new BinaryWriter(ms); SaveStateBinary(bw); bw.Flush(); return ms.ToArray(); diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.IStatable.cs index 3203b0d194..d6bf7f09a0 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.IStatable.cs @@ -31,8 +31,8 @@ namespace BizHawk.Emulation.Cores.Atari.A7800Hawk public byte[] SaveStateBinary() { - MemoryStream ms = new MemoryStream(); - BinaryWriter bw = new BinaryWriter(ms); + using var ms = new MemoryStream(); + using var bw = new BinaryWriter(ms); SaveStateBinary(bw); bw.Flush(); return ms.ToArray(); diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/lynx/Lynx.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Atari/lynx/Lynx.IStatable.cs index adad5e2c4b..e30efd4873 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/lynx/Lynx.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/lynx/Lynx.IStatable.cs @@ -74,8 +74,8 @@ namespace BizHawk.Emulation.Cores.Atari.Lynx public byte[] SaveStateBinary() { - var ms = new MemoryStream(_savebuff2, true); - var bw = new BinaryWriter(ms); + using var ms = new MemoryStream(_savebuff2, true); + using var bw = new BinaryWriter(ms); SaveStateBinary(bw); bw.Flush(); if (ms.Position != _savebuff2.Length) diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/lynx/Lynx.cs b/BizHawk.Emulation.Cores/Consoles/Atari/lynx/Lynx.cs index 24fb8a0095..72f42f4f66 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/lynx/Lynx.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/lynx/Lynx.cs @@ -27,8 +27,8 @@ namespace BizHawk.Emulation.Cores.Atari.Lynx byte[] realfile = null; { - var ms = new MemoryStream(file, false); - var br = new BinaryReader(ms); + using var ms = new MemoryStream(file, false); + using var br = new BinaryReader(ms); string header = Encoding.ASCII.GetString(br.ReadBytes(4)); int p0 = br.ReadUInt16(); int p1 = br.ReadUInt16(); diff --git a/BizHawk.Emulation.Cores/Consoles/Coleco/ColecoVision.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Coleco/ColecoVision.IStatable.cs index c5b767d73a..8770d66919 100644 --- a/BizHawk.Emulation.Cores/Consoles/Coleco/ColecoVision.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Coleco/ColecoVision.IStatable.cs @@ -7,10 +7,7 @@ namespace BizHawk.Emulation.Cores.ColecoVision { public partial class ColecoVision : IStatable { - public bool BinarySaveStatesPreferred - { - get { return true; } - } + public bool BinarySaveStatesPreferred => true; public void SaveStateText(TextWriter writer) { @@ -34,8 +31,8 @@ namespace BizHawk.Emulation.Cores.ColecoVision public byte[] SaveStateBinary() { - MemoryStream ms = new MemoryStream(); - BinaryWriter bw = new BinaryWriter(ms); + using var ms = new MemoryStream(); + using var bw = new BinaryWriter(ms); SaveStateBinary(bw); bw.Flush(); return ms.ToArray(); @@ -46,7 +43,7 @@ namespace BizHawk.Emulation.Cores.ColecoVision byte[] core = null; if (ser.IsWriter) { - var ms = new MemoryStream(); + using var ms = new MemoryStream(); ms.Close(); core = ms.ToArray(); } diff --git a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/Audio.cs b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/Audio.cs deleted file mode 100644 index b2edc7104c..0000000000 --- a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/Audio.cs +++ /dev/null @@ -1,180 +0,0 @@ -using System; - -using BizHawk.Common; -using BizHawk.Common.BufferExtensions; -using BizHawk.Emulation.Common; -using BizHawk.Common.NumberExtensions; - -namespace BizHawk.Emulation.Cores.Consoles.O2Hawk -{ - // Audio Emulation (a 24 bit shift register plus a control register) - public class Audio : ISoundProvider - { - public O2Hawk Core { get; set; } - - private BlipBuffer _blip_C = new BlipBuffer(15000); - - public byte sample; - - public byte shift_0, shift_1, shift_2, aud_ctrl; - - public uint master_audio_clock; - - public int tick_cnt, output_bit; - - public int latched_sample_C; - - public byte ReadReg(int addr) - { - byte ret = 0; - - switch (addr) - { - case 0xA7: ret = shift_0; break; - case 0xA8: ret = shift_1; break; - case 0xA9: ret = shift_2; break; - case 0xAA: ret = aud_ctrl; break; - } - - return ret; - } - - public void WriteReg(int addr, byte value) - { - switch (addr) - { - case 0xA7: shift_0 = value; break; - case 0xA8: shift_1 = value; break; - case 0xA9: shift_2 = value; break; - case 0xAA: aud_ctrl = value; break; - } - - } - - public void tick() - { - int C_final = 0; - - if (aud_ctrl.Bit(7)) - { - tick_cnt++; - if (tick_cnt > (aud_ctrl.Bit(5) ? 455 : 1820)) - { - tick_cnt = 0; - - output_bit = (shift_0 >> 1) & 1; - - shift_0 = (byte)((shift_0 >> 1) | ((shift_1 & 1) << 3)); - shift_1 = (byte)((shift_1 >> 1) | ((shift_2 & 1) << 3)); - - if (aud_ctrl.Bit(6)) - { - shift_2 = (byte)((shift_2 >> 1) | ((output_bit) << 3)); - } - else - { - shift_0 = (byte)(shift_2 >> 1); - } - } - - C_final = output_bit; - C_final *= ((aud_ctrl & 0xF) + 1) * 40; - } - - if (C_final != latched_sample_C) - { - _blip_C.AddDelta(master_audio_clock, C_final - latched_sample_C); - latched_sample_C = C_final; - } - - master_audio_clock++; - } - - public void power_off() - { - for (int i = 0; i < 0x16; i++) - { - WriteReg(0xFF10 + i, 0); - } - } - - public void Reset() - { - master_audio_clock = 0; - - sample = 0; - - _blip_C.SetRates(4194304, 44100); - } - - public void SyncState(Serializer ser) - { - ser.Sync(nameof(master_audio_clock), ref master_audio_clock); - - ser.Sync(nameof(sample), ref sample); - ser.Sync(nameof(latched_sample_C), ref latched_sample_C); - - ser.Sync(nameof(aud_ctrl), ref aud_ctrl); - ser.Sync(nameof(shift_0), ref shift_0); - ser.Sync(nameof(shift_1), ref shift_1); - ser.Sync(nameof(shift_2), ref shift_2); - ser.Sync(nameof(tick_cnt), ref tick_cnt); - ser.Sync(nameof(output_bit), ref output_bit); - } - - #region audio - - public bool CanProvideAsync => false; - - public void SetSyncMode(SyncSoundMode mode) - { - if (mode != SyncSoundMode.Sync) - { - throw new InvalidOperationException("Only Sync mode is supported_"); - } - } - - public SyncSoundMode SyncMode => SyncSoundMode.Sync; - - public void GetSamplesSync(out short[] samples, out int nsamp) - { - _blip_C.EndFrame(master_audio_clock); - - nsamp = _blip_C.SamplesAvailable(); - - samples = new short[nsamp * 2]; - - if (nsamp != 0) - { - _blip_C.ReadSamples(samples, nsamp, false); - } - - master_audio_clock = 0; - } - - public void GetSamplesAsync(short[] samples) - { - throw new NotSupportedException("Async is not available"); - } - - public void DiscardSamples() - { - _blip_C.Clear(); - master_audio_clock = 0; - } - - private void GetSamples(short[] samples) - { - - } - - public void DisposeSound() - { - _blip_C.Clear(); - _blip_C.Dispose(); - _blip_C = null; - } - - #endregion - } -} \ No newline at end of file diff --git a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/Mappers/Mapper_Default.cs b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/Mappers/Mapper_Default.cs index 8fb959c084..c3037d69a9 100644 --- a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/Mappers/Mapper_Default.cs +++ b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/Mappers/Mapper_Default.cs @@ -18,7 +18,7 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk { if (addr < 0x8000) { - return Core._rom[addr]; + return Core._rom[addr & (Core._rom.Length - 1)]; } else { diff --git a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/MemoryMap.cs b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/MemoryMap.cs index 6921955868..161f17cf7b 100644 --- a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/MemoryMap.cs +++ b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/MemoryMap.cs @@ -80,10 +80,6 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk } if (ppu_en && !copy_en) { - if ((addr_latch >= 0xA7) || (addr_latch <= 0xAA)) - { - return audio.ReadReg(addr_latch); - } return ppu.ReadReg(addr_latch); } @@ -134,14 +130,8 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk } if (ppu_en) { - if ((addr_latch >= 0xA7) || (addr_latch <= 0xAA)) - { - audio.WriteReg(addr_latch, value); - } - else - { - ppu.WriteReg(addr_latch, value); - } + ppu.WriteReg(addr_latch, value); + //Console.WriteLine((addr_latch) + " " + value); } } } @@ -155,6 +145,8 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk kybrd_en = !value.Bit(2); cart_b1 = value.Bit(1); cart_b0 = value.Bit(0); + + //Console.WriteLine("main ctrl: " + value + " " + ppu_en + " " + RAM_en); } else { diff --git a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.IEmulator.cs index 9dc8cb7f31..9a22912827 100644 --- a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.IEmulator.cs @@ -50,42 +50,42 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk public void do_frame(IController controller) { - for (int i = 0; i < 10000; i++) + // update the controller state on VBlank + GetControllerState(controller); + + // check if controller state caused interrupt + do_controller_check(); + + // send the image on VBlank + SendVideoBuffer(); + + bool frame_chk = true; + + while (frame_chk) { - audio.tick(); + ppu.tick(); ppu.tick(); ppu.DMA_tick(); serialport.serial_transfer_tick(); + ppu.Audio_tick(); cpu.ExecuteOne(); - if (in_vblank && !in_vblank_old) + if (!in_vblank && in_vblank_old) { - // update the controller state on VBlank - GetControllerState(controller); - - // check if controller state caused interrupt - do_controller_check(); - - // send the image on VBlank - SendVideoBuffer(); + frame_chk = false; } in_vblank_old = in_vblank; } - - if (ppu.clear_screen) - { - for (int j = 0; j < frame_buffer.Length; j++) { frame_buffer[j] = (int)color_palette[0]; } - ppu.clear_screen = false; - } } public void do_single_step() { - audio.tick(); + ppu.tick(); ppu.tick(); ppu.DMA_tick(); serialport.serial_transfer_tick(); + ppu.Audio_tick(); cpu.ExecuteOne(); } @@ -138,7 +138,7 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk public void Dispose() { - audio.DisposeSound(); + ppu.DisposeSound(); } #region Video provider @@ -156,13 +156,17 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk public void SendVideoBuffer() { - for (int j = 0; j < frame_buffer.Length; j++) { frame_buffer[j] = _vidbuffer[j]; } + for (int j = 0; j < frame_buffer.Length; j++) + { + frame_buffer[j] = _vidbuffer[j]; + _vidbuffer[j] = 0; + } } - public int VirtualWidth => 160; - public int VirtualHeight => 144; - public int BufferWidth => 160; - public int BufferHeight => 144; + public int VirtualWidth => 186; + public int VirtualHeight => 240; + public int BufferWidth => 186; + public int BufferHeight => 240; public int BackgroundColor => unchecked((int)0xFF000000); public int VsyncNumerator => _frameHz; public int VsyncDenominator => 1; diff --git a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.IStatable.cs index 3030adff46..cf87f77347 100644 --- a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.IStatable.cs @@ -31,8 +31,8 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk public byte[] SaveStateBinary() { - MemoryStream ms = new MemoryStream(); - BinaryWriter bw = new BinaryWriter(ms); + using var ms = new MemoryStream(); + using var bw = new BinaryWriter(ms); SaveStateBinary(bw); bw.Flush(); return ms.ToArray(); @@ -43,7 +43,7 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk byte[] core = null; if (ser.IsWriter) { - var ms = new MemoryStream(); + using var ms = new MemoryStream(); ms.Close(); core = ms.ToArray(); } @@ -51,7 +51,6 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk mapper.SyncState(ser); ppu.SyncState(ser); serialport.SyncState(ser); - audio.SyncState(ser); ser.BeginSection("Odyssey2"); ser.Sync(nameof(core), ref core, false); diff --git a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.cs b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.cs index 3db97d260d..e89da32798 100644 --- a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.cs @@ -35,7 +35,7 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk public byte[] cart_RAM; public bool has_bat; - private int _frame = 0; + public int _frame = 0; public MapperBase mapper; @@ -43,7 +43,6 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk public I8048 cpu; public PPU ppu; - public Audio audio; public SerialPort serialport; [CoreConstructor("O2")] @@ -62,7 +61,6 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk OnExecFetch = ExecFetch, }; - audio = new Audio(); serialport = new SerialPort(); CoreComm = comm; @@ -92,12 +90,12 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk _frameHz = 60; - audio.Core = this; ppu.Core = this; + cpu.Core = this; serialport.Core = this; ser.Register(this); - ser.Register(audio); + ser.Register(ppu); ServiceProvider = ser; _settings = (O2Settings)settings ?? new O2Settings(); @@ -118,6 +116,11 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk { RAM[j] = (byte)j; } + + for (int k = 0; k < 0x100; k++) + { + ppu.WriteReg(k, (byte)k); + } } public DisplayType Region => DisplayType.NTSC; @@ -132,7 +135,6 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk RAM_Bank = 1; // RAM bank always starts as 1 (even writing zero still sets 1) ppu.Reset(); - audio.Reset(); serialport.Reset(); cpu.SetCallbacks(ReadMemory, PeekMemory, PeekMemory, WriteMemory); diff --git a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2HawkControllers.cs b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2HawkControllers.cs index 5715d7ba54..28fc2c1584 100644 --- a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2HawkControllers.cs +++ b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2HawkControllers.cs @@ -65,18 +65,6 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk { result -= 128; } - if (c.IsPressed(Definition.BoolButtons[5])) - { - result -= 64; - } - if (c.IsPressed(Definition.BoolButtons[6])) - { - result -= 32; - } - if (c.IsPressed(Definition.BoolButtons[7])) - { - result -= 16; - } return result; } diff --git a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/PPU.cs b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/PPU.cs index 8589d23246..300b1a7585 100644 --- a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/PPU.cs +++ b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/PPU.cs @@ -1,9 +1,13 @@ using System; using BizHawk.Common; +using BizHawk.Common.NumberExtensions; +using BizHawk.Common.BufferExtensions; +using BizHawk.Emulation.Common; + namespace BizHawk.Emulation.Cores.Consoles.O2Hawk { - public class PPU + public class PPU : ISoundProvider { public O2Hawk Core { get; set; } @@ -11,21 +15,23 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk public byte[] Sprite_Shapes = new byte[32]; public byte[] Foreground = new byte[48]; public byte[] Quad_Chars = new byte[64]; + public byte[] Grid_H = new byte[16]; + public byte[] Grid_V = new byte[8]; - public byte VDC_ctrl, VDC_status, VDC_collision, VDC_color; + public byte VDC_ctrl, VDC_status, VDC_collision, VDC_color; + public byte Frame_Col, Pixel_Stat; public uint[] BG_palette = new uint[32]; public uint[] OBJ_palette = new uint[32]; public bool HDMA_active; - public bool clear_screen; // register variables public byte LCDC; public byte STAT; public byte scroll_y; public byte scroll_x; - public byte LY; + public int LY; public byte LY_actual; public byte LY_inc; public byte LYC; @@ -39,6 +45,9 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk public int DMA_clock; public int DMA_inc; public byte DMA_byte; + public int cycle; + public bool VBL; + public bool HBL; public byte ReadReg(int addr) { @@ -71,11 +80,28 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk else if (addr == 0xA2) { ret = VDC_collision; + //Console.WriteLine("col: " + ret + " " + Core.cpu.TotalExecutedCycles); } else if(addr == 0xA3) { ret = VDC_color; } + else if (addr <= 0xAA) + { + ret = AudioReadReg(addr); + } + else if ((addr >= 0xC0) && (addr < 0xC8)) + { + ret = Grid_H[addr - 0xC0]; + } + else if ((addr >= 0xD0) && (addr < 0xD8)) + { + ret = Grid_H[addr - 0xD0 + 8]; + } + else if ((addr >= 0xE0) && (addr < 0xE8)) + { + ret = Grid_V[addr - 0xE0]; + } return ret; } @@ -85,6 +111,7 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk if (addr < 0x10) { Sprites[addr] = value; + //Console.WriteLine("spr: " + addr + " " + value + " " + Core.cpu.TotalExecutedCycles); } else if (addr < 0x40) { @@ -101,6 +128,7 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk else if (addr == 0xA0) { VDC_ctrl = value; + //Console.WriteLine(value + " " + Core.cpu.TotalExecutedCycles); } else if (addr == 0xA1) { @@ -114,11 +142,128 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk { VDC_color = value; } + else if (addr <= 0xAA) + { + AudioWriteReg(addr, value); + } + else if ((addr >= 0xC0) && (addr < 0xC8)) + { + Grid_H[addr - 0xC0] = value; + } + else if ((addr >= 0xD0) && (addr < 0xD8)) + { + Grid_H[addr - 0xD0 + 8] = value; + } + else if ((addr >= 0xE0) && (addr < 0xE8)) + { + Grid_V[addr - 0xE0] = value; + } } public void tick() { + cycle++; + Pixel_Stat = 0; + // drawing cycles + if (cycle >= 43) + { + if (cycle == 43) + { + HBL = false; + // trigger timer tick if enabled + if (Core.cpu.counter_en) { Core.cpu.T1 = false; } + //if (VDC_ctrl.Bit(0)) { Core.cpu.IRQPending = false; } + + if (LY == 240) { VDC_status |= 0x08; } + if (LY == 241) { VDC_status &= 0xF7; } + } + // draw a pixel + if (LY < 240) + { + // sprites + for (int i = 0; i < 4; i++) + { + if ((LY >= Sprites[i * 4]) && (LY < (Sprites[i * 4] + 8))) + { + if (((cycle - 43) >= Sprites[i * 4 + 1]) && ((cycle - 43) < (Sprites[i * 4 + 1] + 8))) + { + // character is in drawing region, pick a pixel + int offset_y = LY - Sprites[i * 4]; + int offset_x = 7 - ((cycle - 43) - Sprites[i * 4 + 1]); + + int pixel_pick = (Sprite_Shapes[i * 8 + offset_y] >> offset_x) & 1; + + if (pixel_pick == 1) + { + Core._vidbuffer[LY * 186 + (cycle - 43)] = (int) Color_Palette[(Sprites[i * 4 + 2] >> 3) & 0x7]; + Pixel_Stat |= (byte)(i << 1); + } + } + } + } + + // single characters + for (int i = 0; i < 12; i++) + { + if ((LY >= Foreground[i * 4]) && (LY < (Foreground[i * 4] + 8))) + { + if (((cycle - 43) >= Foreground[i * 4 + 1]) && ((cycle - 43) < (Foreground[i * 4 + 1] + 8))) + { + // sprite is in drawing region, pick a pixel + int offset_y = LY - Foreground[i * 4]; + int offset_x = 7 - ((cycle - 43) - Foreground[i * 4 + 1]); + int char_sel = Foreground[i * 4 + 2] + ((Foreground[i * 4 + 3] & 1) << 8); + + int pixel_pick = (Internal_Graphics[(char_sel + offset_y) % 0x200] >> offset_x) & 1; + + if (pixel_pick == 1) + { + Core._vidbuffer[LY * 186 + (cycle - 43)] = (int)Color_Palette[(Foreground[i * 4 + 3] >> 1) & 0x7]; + Pixel_Stat |= 0x80; + } + } + } + } + + // quads + // background + // calculate collision + + } + } + + // end of scanline + if (cycle == 228) + { + cycle = 0; + HBL = true; + + + // trigger timer tick if enabled + if (Core.cpu.counter_en) { Core.cpu.T1 = true; } + + LY++; + if (LY == 240) + { + VBL = true; + Core.in_vblank = true; + if (!VDC_ctrl.Bit(0)) { Core.cpu.IRQPending = true; } + } + if (LY == 241) + { + if (!VDC_ctrl.Bit(0)) { Core.cpu.IRQPending = false; } + } + if (LY == 262) + { + LY = 0; + HBL = false; + VBL = false; + Core.in_vblank = false; + if (!VDC_ctrl.Bit(0)) { Core.cpu.IRQPending = false; } + Frame_Col = 0; + } + } } // might be needed, not sure yet @@ -151,91 +296,116 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk public void Reset() { - + AudioReset(); } - public static readonly byte[] Internal_Graphics = { 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, // 0 0x00 - 0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3C, // 1 0x01 - 0x3C, 0x66, 0x0C, 0x18, 0x30, 0x60, 0x7E, // 2 0x02 - 0x3C, 0x66, 0x06, 0x1C, 0x06, 0x66, 0x3C, // 3 0x03 - 0xCC, 0xCC, 0xCC, 0xFE, 0x0C, 0x0C, 0x0C, // 4 0x04 - 0x7E, 0x60, 0x60, 0x3C, 0x60, 0x66, 0x3C, // 5 0x05 - 0x3C, 0x66, 0x60, 0x7C, 0x66, 0x66, 0x3C, // 6 0x06 - 0xFE, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, // 7 0x07 - 0x3C, 0x66, 0x66, 0x3C, 0x66, 0x66, 0x3C, // 8 0x08 - 0x3C, 0x66, 0x66, 0x3E, 0x02, 0x66, 0x3C, // 9 0x09 - 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, // : 0x0A - 0x18, 0x7E, 0x58, 0x7E, 0x1A, 0x7E, 0x18, // $ 0x0B - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0C - 0x3C, 0x66, 0x0C, 0x18, 0x18, 0x00, 0x18, // ? 0x0D - 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7E, // L 0x0E - 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x60, // P 0x0F - 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, // + 0x10 - 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, // W 0x11 - 0x7E, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x7E, // E 0x12 - 0xFC, 0xC6, 0xC6, 0xFC, 0xD8, 0xCC, 0xC6, // R 0x13 - 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, // T 0x14 - 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, // U 0x15 - 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, // I 0x16 - 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, // O 0x17 - 0x7C, 0xC6, 0xC6, 0xC6, 0xD7, 0xCC, 0x76, // Q 0x18 - 0x3C, 0x66, 0x60, 0x3C, 0x06, 0x66, 0x3C, // S 0x19 - 0x7C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7C, // D 0x1A - 0xFE, 0xC0, 0xC0, 0xF8, 0xC0, 0xC0, 0xC0, // F 0x1B - 0x7C, 0xC6, 0xC0, 0xC0, 0xCE, 0xC6, 0x7E, // G 0x1C - 0xC6, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, // H 0x1D - 0x06, 0x06, 0x06, 0x06, 0x06, 0xC6, 0x7C, // J 0x1E - 0xC6, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0xC6, // K 0x1F - 0x38, 0x6C, 0xC6, 0xC6, 0xF7, 0xC6, 0xC6, // A 0x20 - 0x7E, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x7E, // Z 0x21 - 0xC6, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0xC6, // X 0x22 - 0x7C, 0xC6, 0xC0, 0xC0, 0xC0, 0xC6, 0x7C, // C 0x23 - 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, // V 0x24 - 0x7C, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x7C, // B 0x25 - 0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0xC6, // M 0x26 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, // . 0x27 - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, // - 0x28 - 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00, // x 0x29 - 0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, // (div) 0x2A - 0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, // = 0x2B - 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, // Y 0x2C - 0xC6, 0xE6, 0xF6, 0xFE, 0xDE, 0xCE, 0xC6, // N 0x2D - 0x03, 0x06, 0xC0, 0x18, 0x30, 0x60, 0xC0, // / 0x2E - 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, // (box) 0x2F - 0xCE, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xCE, // 10 0x30 - 0x00, 0x00, 0x3C, 0x7E, 0x7E, 0x7E, 0x3C, // (ball) 0x31 - 0x38, 0x38, 0x30, 0x3C, 0x30, 0x30, 0x38, // (person R) 0x32 - 0x38, 0x38, 0x30, 0x3C, 0x30, 0x68, 0x4C, // (runner R) 0x33 - 0x38, 0x38, 0x18, 0x78, 0x18, 0x2C, 0x64, // (runner L) 0x34 - 0x38, 0x38, 0x18, 0x78, 0x18, 0x18, 0x38, // (person L) 0x35 - 0x00, 0x18, 0xC0, 0xF7, 0xC0, 0x18, 0x00, // (arrow R) 0x36 - 0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x18, 0x18, // (tree) 0x37 - 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, // (ramp R) 0x38 - 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, // (ramp L) 0x39 - 0x38, 0x38, 0x12, 0xFE, 0xB8, 0x28, 0x6C, // (person F) 0x3A - 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, // \ 0x3B - 0x00, 0x00, 0x18, 0x10, 0x10, 0xF7, 0x7C, // (boat 1) 0x3C - 0x00, 0x03, 0x63, 0xFF, 0xFF, 0x18, 0x08, // (plane) 0x3D - 0x00, 0x00, 0x00, 0x01, 0x38, 0xFF, 0x7E, // (boat 2) 0x3E - 0x00, 0x00, 0x00, 0x54, 0x54, 0xFF, 0x7E, // (boat 3 unk) 0x3F + public static readonly byte[] Internal_Graphics = { 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 00, // 0 0x00 + 0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3C, 00, // 1 0x01 + 0x3C, 0x66, 0x0C, 0x18, 0x30, 0x60, 0x7E, 00, // 2 0x02 + 0x3C, 0x66, 0x06, 0x1C, 0x06, 0x66, 0x3C, 00, // 3 0x03 + 0xCC, 0xCC, 0xCC, 0xFE, 0x0C, 0x0C, 0x0C, 00, // 4 0x04 + 0x7E, 0x60, 0x60, 0x3C, 0x60, 0x66, 0x3C, 00, // 5 0x05 + 0x3C, 0x66, 0x60, 0x7C, 0x66, 0x66, 0x3C, 00, // 6 0x06 + 0xFE, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 00, // 7 0x07 + 0x3C, 0x66, 0x66, 0x3C, 0x66, 0x66, 0x3C, 00, // 8 0x08 + 0x3C, 0x66, 0x66, 0x3E, 0x02, 0x66, 0x3C, 00, // 9 0x09 + 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 00, // : 0x0A + 0x18, 0x7E, 0x58, 0x7E, 0x1A, 0x7E, 0x18, 00, // $ 0x0B + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 00, // 0x0C + 0x3C, 0x66, 0x0C, 0x18, 0x18, 0x00, 0x18, 00, // ? 0x0D + 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7E, 00, // L 0x0E + 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x60, 00, // P 0x0F + 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 00, // + 0x10 + 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 00, // W 0x11 + 0x7E, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x7E, 00, // E 0x12 + 0xFC, 0xC6, 0xC6, 0xFC, 0xD8, 0xCC, 0xC6, 00, // R 0x13 + 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 00, // T 0x14 + 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 00, // U 0x15 + 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 00, // I 0x16 + 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 00, // O 0x17 + 0x7C, 0xC6, 0xC6, 0xC6, 0xD6, 0xCC, 0x76, 00, // Q 0x18 + 0x3C, 0x66, 0x60, 0x3C, 0x06, 0x66, 0x3C, 00, // S 0x19 + 0x7C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7C, 00, // D 0x1A + 0xFE, 0xC0, 0xC0, 0xF8, 0xC0, 0xC0, 0xC0, 00, // F 0x1B + 0x7C, 0xC6, 0xC0, 0xC0, 0xCE, 0xC6, 0x7E, 00, // G 0x1C + 0xC6, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 00, // H 0x1D + 0x06, 0x06, 0x06, 0x06, 0x06, 0xC6, 0x7C, 00, // J 0x1E + 0xC6, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0xC6, 00, // K 0x1F + 0x38, 0x6C, 0xC6, 0xC6, 0xF7, 0xC6, 0xC6, 00, // A 0x20 + 0x7E, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x7E, 00, // Z 0x21 + 0xC6, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0xC6, 00, // X 0x22 + 0x7C, 0xC6, 0xC0, 0xC0, 0xC0, 0xC6, 0x7C, 00, // C 0x23 + 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 00, // V 0x24 + 0x7C, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x7C, 00, // B 0x25 + 0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0xC6, 00, // M 0x26 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 00, // . 0x27 + 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 00, // - 0x28 + 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00, 00, // x 0x29 + 0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, 00, // (div) 0x2A + 0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 00, // = 0x2B + 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 00, // Y 0x2C + 0xC6, 0xE6, 0xF6, 0xFE, 0xDE, 0xCE, 0xC6, 00, // N 0x2D + 0x03, 0x06, 0xC0, 0x18, 0x30, 0x60, 0xC0, 00, // / 0x2E + 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 00, // (box) 0x2F + 0xCE, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xCE, 00, // 10 0x30 + 0x00, 0x00, 0x3C, 0x7E, 0x7E, 0x7E, 0x3C, 00, // (ball) 0x31 + 0x38, 0x38, 0x30, 0x3C, 0x30, 0x30, 0x38, 00, // (person R) 0x32 + 0x38, 0x38, 0x30, 0x3C, 0x30, 0x68, 0x4C, 00, // (runner R) 0x33 + 0x38, 0x38, 0x18, 0x78, 0x18, 0x2C, 0x64, 00, // (runner L) 0x34 + 0x38, 0x38, 0x18, 0x78, 0x18, 0x18, 0x38, 00, // (person L) 0x35 + 0x00, 0x18, 0xC0, 0xF7, 0xC0, 0x18, 0x00, 00, // (arrow R) 0x36 + 0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x18, 0x18, 00, // (tree) 0x37 + 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 00, // (ramp R) 0x38 + 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 00, // (ramp L) 0x39 + 0x38, 0x38, 0x12, 0xFE, 0xB8, 0x28, 0x6C, 00, // (person F) 0x3A + 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 00, // \ 0x3B + 0x00, 0x00, 0x18, 0x10, 0x10, 0xF7, 0x7C, 00, // (boat 1) 0x3C + 0x00, 0x03, 0x63, 0xFF, 0xFF, 0x18, 0x08, 00, // (plane) 0x3D + 0x00, 0x00, 0x00, 0x01, 0x38, 0xFF, 0x7E, 00, // (boat 2) 0x3E + 0x00, 0x00, 0x00, 0x54, 0x54, 0xFF, 0x7E, 00 // (boat 3 unk) 0x3F }; + public static readonly uint[] Color_Palette = + { + 0xFF006D07, //green + 0xFF56C469, // light green + 0xFF2AAABE, // blue-green + 0xFF77E6EB, // light blue-green + 0xFF1A37BE, // blue + 0xFF5C80F6, // light blue + 0xFF94309F, // violet + 0xFFDC84D4, // light violet + 0xFF790000, // red + 0xFFC75151, // light red + 0xFF77670B, // yellow + 0xFFC6B869, // light yellow + 0xFF676767, // grey + 0xFFCECECE, // light grey + 0xFF000000, // black + 0xFFFFFFFF, // white + + }; + + public void SyncState(Serializer ser) { ser.Sync(nameof(Sprites), ref Sprites, false); ser.Sync(nameof(Sprite_Shapes), ref Sprite_Shapes, false); ser.Sync(nameof(Foreground), ref Foreground, false); ser.Sync(nameof(Quad_Chars), ref Quad_Chars, false); + ser.Sync(nameof(Grid_H), ref Grid_H, false); + ser.Sync(nameof(Grid_V), ref Grid_V, false); ser.Sync(nameof(VDC_ctrl), ref VDC_ctrl); ser.Sync(nameof(VDC_status), ref VDC_status); ser.Sync(nameof(VDC_collision), ref VDC_collision); ser.Sync(nameof(VDC_color), ref VDC_color); + ser.Sync(nameof(Frame_Col), ref Frame_Col); + ser.Sync(nameof(Pixel_Stat), ref Pixel_Stat); ser.Sync(nameof(BG_palette), ref BG_palette, false); ser.Sync(nameof(OBJ_palette), ref OBJ_palette, false); ser.Sync(nameof(HDMA_active), ref HDMA_active); - ser.Sync(nameof(clear_screen), ref clear_screen); ser.Sync(nameof(LCDC), ref LCDC); ser.Sync(nameof(STAT), ref STAT); @@ -255,6 +425,174 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk ser.Sync(nameof(DMA_clock), ref DMA_clock); ser.Sync(nameof(DMA_inc), ref DMA_inc); ser.Sync(nameof(DMA_byte), ref DMA_byte); + ser.Sync(nameof(cycle), ref cycle); + ser.Sync(nameof(VBL), ref VBL); + ser.Sync(nameof(HBL), ref HBL); + + AudioSyncState(ser); } + + private BlipBuffer _blip_C = new BlipBuffer(15000); + + public byte sample; + + public byte shift_0, shift_1, shift_2, aud_ctrl; + public byte shift_reg_0, shift_reg_1, shift_reg_2; + + public uint master_audio_clock; + + public int tick_cnt, output_bit; + + public int latched_sample_C; + + public byte AudioReadReg(int addr) + { + byte ret = 0; + + switch (addr) + { + case 0xA7: ret = shift_reg_0; break; + case 0xA8: ret = shift_reg_1; break; + case 0xA9: ret = shift_reg_2; break; + case 0xAA: ret = aud_ctrl; break; + } + + return ret; + } + + public void AudioWriteReg(int addr, byte value) + { + switch (addr) + { + case 0xA7: shift_0 = shift_reg_0 = value; break; + case 0xA8: shift_1 = shift_reg_1 = value; break; + case 0xA9: shift_2 = shift_reg_2 = value; break; + case 0xAA: aud_ctrl = value; break; + } + + + + } + + public void Audio_tick() + { + int C_final = 0; + + if (aud_ctrl.Bit(7)) + { + tick_cnt++; + if (tick_cnt > (aud_ctrl.Bit(5) ? 455 : 1820)) + { + tick_cnt = 0; + + output_bit = shift_2 & 1; + + shift_2 = (byte)((shift_2 >> 1) | ((shift_1 & 1) << 7)); + shift_1 = (byte)((shift_1 >> 1) | ((shift_0 & 1) << 7)); + + if (aud_ctrl.Bit(6)) + { + shift_0 = (byte)((shift_0 >> 1) | (output_bit << 7)); + } + else + { + shift_0 = (byte)(shift_0 >> 1); + } + } + + C_final = output_bit; + C_final *= ((aud_ctrl & 0xF) + 1) * 3200; + } + + if (C_final != latched_sample_C) + { + _blip_C.AddDelta(master_audio_clock, C_final - latched_sample_C); + latched_sample_C = C_final; + } + + master_audio_clock++; + } + + public void AudioReset() + { + master_audio_clock = 0; + + sample = 0; + + _blip_C.SetRates(1792000, 44100); + } + + public void AudioSyncState(Serializer ser) + { + ser.Sync(nameof(master_audio_clock), ref master_audio_clock); + + ser.Sync(nameof(sample), ref sample); + ser.Sync(nameof(latched_sample_C), ref latched_sample_C); + + ser.Sync(nameof(aud_ctrl), ref aud_ctrl); + ser.Sync(nameof(shift_0), ref shift_0); + ser.Sync(nameof(shift_1), ref shift_1); + ser.Sync(nameof(shift_2), ref shift_2); + ser.Sync(nameof(shift_reg_0), ref shift_reg_0); + ser.Sync(nameof(shift_reg_1), ref shift_reg_1); + ser.Sync(nameof(shift_reg_2), ref shift_reg_2); + ser.Sync(nameof(tick_cnt), ref tick_cnt); + ser.Sync(nameof(output_bit), ref output_bit); + } + + #region audio + + public bool CanProvideAsync => false; + + public void SetSyncMode(SyncSoundMode mode) + { + if (mode != SyncSoundMode.Sync) + { + throw new InvalidOperationException("Only Sync mode is supported_"); + } + } + + public SyncSoundMode SyncMode => SyncSoundMode.Sync; + + public void GetSamplesSync(out short[] samples, out int nsamp) + { + _blip_C.EndFrame(master_audio_clock); + + nsamp = _blip_C.SamplesAvailable(); + + samples = new short[nsamp * 2]; + + if (nsamp != 0) + { + _blip_C.ReadSamples(samples, nsamp, true); + } + + master_audio_clock = 0; + } + + public void GetSamplesAsync(short[] samples) + { + throw new NotSupportedException("Async is not available"); + } + + public void DiscardSamples() + { + _blip_C.Clear(); + master_audio_clock = 0; + } + + private void GetSamples(short[] samples) + { + + } + + public void DisposeSound() + { + _blip_C.Clear(); + _blip_C.Dispose(); + _blip_C = null; + } + + #endregion } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.IStatable.cs index 0ea979f480..e28e042b68 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.IStatable.cs @@ -84,8 +84,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA public byte[] SaveStateBinary() { StartSaveStateBinaryInternal(); - var ms = new MemoryStream(_savebuff2, true); - var bw = new BinaryWriter(ms); + using var ms = new MemoryStream(_savebuff2, true); + using var bw = new BinaryWriter(ms); FinishSaveStateBinaryInternal(bw); bw.Flush(); ms.Close(); diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IStatable.cs index 2e9128ecba..93afa3e795 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IStatable.cs @@ -31,8 +31,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk public byte[] SaveStateBinary() { - MemoryStream ms = new MemoryStream(); - BinaryWriter bw = new BinaryWriter(ms); + using var ms = new MemoryStream(); + using var bw = new BinaryWriter(ms); SaveStateBinary(bw); bw.Flush(); return ms.ToArray(); @@ -43,7 +43,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk byte[] core = null; if (ser.IsWriter) { - var ms = new MemoryStream(); + using var ms = new MemoryStream(); ms.Close(); core = ms.ToArray(); } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.IStatable.cs index 31434f2b0c..247e146f19 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.IStatable.cs @@ -9,7 +9,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64 { public partial class N64 : IStatable { - public bool BinarySaveStatesPreferred { get { return true; } } + public bool BinarySaveStatesPreferred => true; // these functions are all exact copy paste from gambatte. // if something's wrong here, it's probably wrong there too @@ -82,8 +82,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64 SaveStateBinaryPrivateBuff = new byte[lenwant]; } - var ms = new MemoryStream(SaveStateBinaryPrivateBuff); - var bw = new BinaryWriter(ms); + using var ms = new MemoryStream(SaveStateBinaryPrivateBuff); + using var bw = new BinaryWriter(ms); SaveStateBinary(bw); bw.Flush(); diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.cs index aa3eb566ba..1307db41dc 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.cs @@ -658,7 +658,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES //create the board's rom and vrom if (iNesHeaderInfo != null) { - var ms = new MemoryStream(file, false); + using var ms = new MemoryStream(file, false); ms.Seek(16, SeekOrigin.Begin); // ines header //pluck the necessary bytes out of the file if (iNesHeaderInfo.trainer_size != 0) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.IStatable.cs index 6f6ff4298d..ffb3fedfd7 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.IStatable.cs @@ -48,8 +48,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES public byte[] SaveStateBinary() { - var ms = new MemoryStream(); - var bw = new BinaryWriter(ms); + using var ms = new MemoryStream(); + using var bw = new BinaryWriter(ms); SaveStateBinary(bw); bw.Flush(); return ms.ToArray(); diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.IStatable.cs index 1ba1712d05..d83575310c 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.IStatable.cs @@ -3,15 +3,11 @@ using BizHawk.Common; using BizHawk.Emulation.Common; - namespace BizHawk.Emulation.Cores.Sega.MasterSystem { public partial class SMS : IStatable { - public bool BinarySaveStatesPreferred - { - get { return true; } - } + public bool BinarySaveStatesPreferred => true; public void SaveStateText(TextWriter writer) { @@ -35,8 +31,8 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem public byte[] SaveStateBinary() { - MemoryStream ms = new MemoryStream(); - BinaryWriter bw = new BinaryWriter(ms); + using var ms = new MemoryStream(); + using var bw = new BinaryWriter(ms); SaveStateBinary(bw); bw.Flush(); return ms.ToArray(); @@ -47,13 +43,13 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem byte[] core = null; if (ser.IsWriter) { - var ms = new MemoryStream(); + using var ms = new MemoryStream(); ms.Close(); core = ms.ToArray(); } Cpu.SyncState(ser); - ser.BeginSection(nameof(SMS)); + ser.BeginSection(nameof(SMS)); Vdp.SyncState(ser); PSG.SyncState(ser); ser.Sync("RAM", ref SystemRam, false); diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IStatable.cs index 7ea082d563..3cdd5cebca 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IStatable.cs @@ -8,10 +8,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx { public partial class GPGX : IStatable { - public bool BinarySaveStatesPreferred - { - get { return true; } - } + public bool BinarySaveStatesPreferred => true; public void SaveStateText(TextWriter writer) { @@ -59,8 +56,8 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx public byte[] SaveStateBinary() { - var ms = new MemoryStream(); - var bw = new BinaryWriter(ms); + using var ms = new MemoryStream(); + using var bw = new BinaryWriter(ms); SaveStateBinary(bw); bw.Flush(); ms.Close(); diff --git a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs index 30f3bd3cac..c92103927c 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs @@ -1181,8 +1181,8 @@ namespace BizHawk.Emulation.Cores.Sony.PSX public byte[] SaveStateBinary() { //this are objectionable shenanigans, but theyre required to get the extra info in the stream. we need a better approach. - var ms = new MemoryStream(savebuff2, true); - var bw = new BinaryWriter(ms); + using var ms = new MemoryStream(savebuff2, true); + using var bw = new BinaryWriter(ms); SaveStateBinary(bw); bw.Flush(); if (ms.Position != savebuff2.Length) @@ -1191,10 +1191,7 @@ namespace BizHawk.Emulation.Cores.Sony.PSX return savebuff2; } - public bool BinarySaveStatesPreferred - { - get { return true; } - } + public bool BinarySaveStatesPreferred => true; #endregion diff --git a/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.IStatable.cs index eb25855adf..0abf83c15c 100644 --- a/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.IStatable.cs @@ -16,7 +16,7 @@ namespace BizHawk.Emulation.Cores.WonderSwan savebuff2 = new byte[savebuff.Length + 13]; } - JsonSerializer ser = new JsonSerializer() { Formatting = Formatting.Indented }; + JsonSerializer ser = new JsonSerializer { Formatting = Formatting.Indented }; [StructLayout(LayoutKind.Sequential)] class TextStateData @@ -88,8 +88,8 @@ namespace BizHawk.Emulation.Cores.WonderSwan public byte[] SaveStateBinary() { - var ms = new MemoryStream(savebuff2, true); - var bw = new BinaryWriter(ms); + using var ms = new MemoryStream(savebuff2, true); + using var bw = new BinaryWriter(ms); SaveStateBinary(bw); bw.Flush(); if (ms.Position != savebuff2.Length) @@ -98,9 +98,6 @@ namespace BizHawk.Emulation.Cores.WonderSwan return savebuff2; } - public bool BinarySaveStatesPreferred - { - get { return true; } - } + public bool BinarySaveStatesPreferred => true; } } diff --git a/BizHawk.Emulation.Cores/Waterbox/WaterboxCore.cs b/BizHawk.Emulation.Cores/Waterbox/WaterboxCore.cs index 11031bf693..cb572e335a 100644 --- a/BizHawk.Emulation.Cores/Waterbox/WaterboxCore.cs +++ b/BizHawk.Emulation.Cores/Waterbox/WaterboxCore.cs @@ -303,8 +303,8 @@ namespace BizHawk.Emulation.Cores.Waterbox public byte[] SaveStateBinary() { - var ms = new MemoryStream(); - var bw = new BinaryWriter(ms); + using var ms = new MemoryStream(); + using var bw = new BinaryWriter(ms); SaveStateBinary(bw); bw.Flush(); ms.Close(); diff --git a/BizHawk.Emulation.Cores/packages.config b/BizHawk.Emulation.Cores/packages.config new file mode 100644 index 0000000000..a36ca0f168 --- /dev/null +++ b/BizHawk.Emulation.Cores/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/BizHawk.Emulation.DiscSystem/BizHawk.Emulation.DiscSystem.csproj b/BizHawk.Emulation.DiscSystem/BizHawk.Emulation.DiscSystem.csproj index db5e2a265a..9b41a4eb50 100644 --- a/BizHawk.Emulation.DiscSystem/BizHawk.Emulation.DiscSystem.csproj +++ b/BizHawk.Emulation.DiscSystem/BizHawk.Emulation.DiscSystem.csproj @@ -1,5 +1,6 @@  + true ..\output\dll\ diff --git a/BizHawk.sln.DotSettings b/BizHawk.sln.DotSettings index ddd4c5b89d..c34d6b748d 100644 --- a/BizHawk.sln.DotSettings +++ b/BizHawk.sln.DotSettings @@ -90,6 +90,7 @@ MGBA NES NMI + NT NTSC OBJ OR @@ -188,6 +189,7 @@ True True True + True True True True @@ -250,6 +252,7 @@ True True True + True True True True @@ -258,6 +261,7 @@ True True True + True True True True @@ -278,6 +282,7 @@ True True True + True True True True @@ -296,11 +301,13 @@ True True True + True True True True True True + True True True True @@ -312,6 +319,7 @@ True True True + True True True True diff --git a/Bizware/BizHawk.Bizware.BizwareGL.GdiPlus/BizHawk.Bizware.BizwareGL.GdiPlus.csproj b/Bizware/BizHawk.Bizware.BizwareGL.GdiPlus/BizHawk.Bizware.BizwareGL.GdiPlus.csproj index 7d1937a84c..971c651e75 100644 --- a/Bizware/BizHawk.Bizware.BizwareGL.GdiPlus/BizHawk.Bizware.BizwareGL.GdiPlus.csproj +++ b/Bizware/BizHawk.Bizware.BizwareGL.GdiPlus/BizHawk.Bizware.BizwareGL.GdiPlus.csproj @@ -1,5 +1,6 @@  + Debug x86 @@ -38,9 +39,9 @@ MinimumRecommendedRules.ruleset - - False - ..\..\References\OpenTK.dll + + ../../packages/OpenTK.3.0.1/lib/net20/OpenTK.dll + True diff --git a/Bizware/BizHawk.Bizware.BizwareGL.GdiPlus/packages.config b/Bizware/BizHawk.Bizware.BizwareGL.GdiPlus/packages.config new file mode 100644 index 0000000000..a705dc46a0 --- /dev/null +++ b/Bizware/BizHawk.Bizware.BizwareGL.GdiPlus/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Bizware/BizHawk.Bizware.BizwareGL.OpenTK/BizHawk.Bizware.BizwareGL.OpenTK.csproj b/Bizware/BizHawk.Bizware.BizwareGL.OpenTK/BizHawk.Bizware.BizwareGL.OpenTK.csproj index b26d3fba84..cbeeb93cbc 100644 --- a/Bizware/BizHawk.Bizware.BizwareGL.OpenTK/BizHawk.Bizware.BizwareGL.OpenTK.csproj +++ b/Bizware/BizHawk.Bizware.BizwareGL.OpenTK/BizHawk.Bizware.BizwareGL.OpenTK.csproj @@ -1,5 +1,6 @@  + Debug x86 @@ -42,13 +43,13 @@ false - - False - ..\..\References\OpenTK.dll + + ../../packages/OpenTK.3.0.1/lib/net20/OpenTK.dll + True - - False - ..\..\References\OpenTK.GLControl.dll + + ../../packages/OpenTK.GLControl.3.0.1/lib/net20/OpenTK.GLControl.dll + True diff --git a/Bizware/BizHawk.Bizware.BizwareGL.OpenTK/packages.config b/Bizware/BizHawk.Bizware.BizwareGL.OpenTK/packages.config new file mode 100644 index 0000000000..b41861333f --- /dev/null +++ b/Bizware/BizHawk.Bizware.BizwareGL.OpenTK/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Bizware/BizHawk.Bizware.BizwareGL.SlimDX/BizHawk.Bizware.BizwareGL.SlimDX.csproj b/Bizware/BizHawk.Bizware.BizwareGL.SlimDX/BizHawk.Bizware.BizwareGL.SlimDX.csproj index 0da773623b..0b364eac31 100644 --- a/Bizware/BizHawk.Bizware.BizwareGL.SlimDX/BizHawk.Bizware.BizwareGL.SlimDX.csproj +++ b/Bizware/BizHawk.Bizware.BizwareGL.SlimDX/BizHawk.Bizware.BizwareGL.SlimDX.csproj @@ -1,5 +1,6 @@  + Debug x86 @@ -38,9 +39,9 @@ MinimumRecommendedRules.ruleset - - False - ..\..\References\OpenTK.dll + + ../../packages/OpenTK.3.0.1/lib/net20/OpenTK.dll + True ..\..\References\x64\SlimDX.dll diff --git a/Bizware/BizHawk.Bizware.BizwareGL.SlimDX/packages.config b/Bizware/BizHawk.Bizware.BizwareGL.SlimDX/packages.config new file mode 100644 index 0000000000..a705dc46a0 --- /dev/null +++ b/Bizware/BizHawk.Bizware.BizwareGL.SlimDX/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Bizware/BizHawk.Bizware.BizwareGL/BitmapBuffer.cs b/Bizware/BizHawk.Bizware.BizwareGL/BitmapBuffer.cs index 725899ac7a..fee0a0b5d7 100644 --- a/Bizware/BizHawk.Bizware.BizwareGL/BitmapBuffer.cs +++ b/Bizware/BizHawk.Bizware.BizwareGL/BitmapBuffer.cs @@ -1,20 +1,13 @@ //TODO - introduce Trim for ArtManager //TODO - add a small buffer reuse manager.. small images can be stored in larger buffers which we happen to have held. use a timer to wait to free it until some time has passed - using System; -using System.Threading; -using System.Threading.Tasks; using System.Diagnostics; -using System.Text.RegularExpressions; using System.Runtime.InteropServices; using sd = System.Drawing; using System.Drawing.Imaging; -using System.Linq; using System.Drawing; using System.IO; -using System.Collections.Generic; -using System.Text; namespace BizHawk.Bizware.BizwareGL { @@ -34,11 +27,12 @@ namespace BizHawk.Bizware.BizwareGL /// public bool HasAlpha = true; - public Size Size { get { return new Size(Width, Height); } } + public Size Size => new Size(Width, Height); + + private readonly Bitmap WrappedBitmap; + private GCHandle CurrLockHandle; + private BitmapData CurrLock; - sd.Bitmap WrappedBitmap; - GCHandle CurrLockHandle; - BitmapData CurrLock; public BitmapData LockBits() //TODO - add read/write semantic, for wraps { if(CurrLock != null) @@ -51,11 +45,13 @@ namespace BizHawk.Bizware.BizwareGL } CurrLockHandle = GCHandle.Alloc(Pixels, GCHandleType.Pinned); - CurrLock = new BitmapData(); - CurrLock.Height = Height; - CurrLock.Width = Width; - CurrLock.Stride = Width * 4; - CurrLock.Scan0 = CurrLockHandle.AddrOfPinnedObject(); + CurrLock = new BitmapData + { + Height = Height, + Width = Width, + Stride = Width * 4, + Scan0 = CurrLockHandle.AddrOfPinnedObject() + }; return CurrLock; } @@ -170,8 +166,7 @@ namespace BizHawk.Bizware.BizwareGL /// public BitmapBuffer Trim() { - int x, y; - return Trim(out x, out y); + return Trim(out _, out _); } /// @@ -222,8 +217,8 @@ namespace BizHawk.Bizware.BizwareGL /// public void Pad() { - int widthRound = nexthigher(Width); - int heightRound = nexthigher(Height); + int widthRound = NextHigher(Width); + int heightRound = NextHigher(Height); if (widthRound == Width && heightRound == Height) return; int[] NewPixels = new int[heightRound * widthRound]; @@ -244,8 +239,8 @@ namespace BizHawk.Bizware.BizwareGL /// public BitmapBuffer(string fname, BitmapLoadOptions options) { - using (var fs = new FileStream(fname, FileMode.Open, FileAccess.Read, FileShare.Read)) - LoadInternal(fs, null, options); + using var fs = new FileStream(fname, FileMode.Open, FileAccess.Read, FileShare.Read); + LoadInternal(fs, null, options); } /// @@ -276,9 +271,9 @@ namespace BizHawk.Bizware.BizwareGL /// public BitmapBuffer(int width, int height, int[] pixels) { - this.Pixels = pixels; - this.Width = width; - this.Height = height; + Pixels = pixels; + Width = width; + Height = height; } /// @@ -335,7 +330,6 @@ namespace BizHawk.Bizware.BizwareGL BitmapData bmpdata = bmp.LockBits(new sd.Rectangle(0, 0, w, h), ImageLockMode.ReadOnly, PixelFormat.Format8bppIndexed); Color[] palette = bmp.Palette.Entries; byte* ptr = (byte*)bmpdata.Scan0.ToPointer(); - int stride = bmpdata.Stride; fixed (int* pPtr = &Pixels[0]) { for (int idx = 0, y = 0; y < h; y++) @@ -478,15 +472,6 @@ namespace BizHawk.Bizware.BizwareGL } } - /// - /// just a temporary measure while refactoring emuhawk - /// - public void AcceptIntArray(int[] arr) - { - //should these be copied? - Pixels = arr; - } - void InitSize(int width, int height) { Pixels = new int[width * height]; @@ -497,7 +482,7 @@ namespace BizHawk.Bizware.BizwareGL /// /// returns the next higher power of 2 than the provided value, for rounding up POW2 textures. /// - int nexthigher(int k) + private static int NextHigher(int k) { k--; for (int i = 1; i < 32; i <<= 1) @@ -530,13 +515,11 @@ namespace BizHawk.Bizware.BizwareGL { if (WrappedBitmap != null) { - using (var g = Graphics.FromImage(bmp)) - { - g.CompositingMode = sd.Drawing2D.CompositingMode.SourceCopy; - g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighSpeed; - g.DrawImageUnscaled(WrappedBitmap, 0, 0); - return; - } + using var g = Graphics.FromImage(bmp); + g.CompositingMode = sd.Drawing2D.CompositingMode.SourceCopy; + g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighSpeed; + g.DrawImageUnscaled(WrappedBitmap, 0, 0); + return; } //note: we lock it as 32bpp even if the bitmap is 24bpp so we can write to it more conveniently. diff --git a/Bizware/BizHawk.Bizware.BizwareGL/BizHawk.Bizware.BizwareGL.csproj b/Bizware/BizHawk.Bizware.BizwareGL/BizHawk.Bizware.BizwareGL.csproj index fec5f64335..821a7d64b4 100644 --- a/Bizware/BizHawk.Bizware.BizwareGL/BizHawk.Bizware.BizwareGL.csproj +++ b/Bizware/BizHawk.Bizware.BizwareGL/BizHawk.Bizware.BizwareGL.csproj @@ -1,5 +1,6 @@  + Debug x86 @@ -42,9 +43,9 @@ false - - False - ..\..\References\OpenTK.dll + + ../../packages/OpenTK.3.0.1/lib/net20/OpenTK.dll + True diff --git a/Bizware/BizHawk.Bizware.BizwareGL/IGL.cs b/Bizware/BizHawk.Bizware.BizwareGL/IGL.cs index 9fc2114e00..8cc33a03c0 100644 --- a/Bizware/BizHawk.Bizware.BizwareGL/IGL.cs +++ b/Bizware/BizHawk.Bizware.BizwareGL/IGL.cs @@ -100,7 +100,7 @@ namespace BizHawk.Bizware.BizwareGL void BeginScene(); /// - /// Indicates end of scene rendering; use after alldraw calls as per normal + /// Indicates end of scene rendering; use after all draw calls as per normal /// void EndScene(); @@ -173,7 +173,7 @@ namespace BizHawk.Bizware.BizwareGL void SetTextureWrapMode(Texture2d tex, bool clamp); /// - /// Loads the texture with new data. This isnt supposed to be especially versatile, it just blasts a bitmap buffer into the texture + /// Loads the texture with new data. This isn't supposed to be especially versatile, it just blasts a bitmap buffer into the texture /// void LoadTextureData(Texture2d tex, BitmapBuffer bmp); diff --git a/Bizware/BizHawk.Bizware.BizwareGL/IGraphicsControl.cs b/Bizware/BizHawk.Bizware.BizwareGL/IGraphicsControl.cs index 21d426ee8d..724544f7f3 100644 --- a/Bizware/BizHawk.Bizware.BizwareGL/IGraphicsControl.cs +++ b/Bizware/BizHawk.Bizware.BizwareGL/IGraphicsControl.cs @@ -1,5 +1,4 @@ using System; -using System.Windows.Forms; namespace BizHawk.Bizware.BizwareGL { @@ -17,7 +16,7 @@ namespace BizHawk.Bizware.BizwareGL /// /// Makes this control current for rendering operations. - /// Note that at this time, the window size shouldnt change until End() or else something bad might happen + /// Note that at this time, the window size shouldn't change until End() or else something bad might happen /// Please be aware that this might change the rendering context, meaning that some things you set without calling Begin/End might not be affected /// void Begin(); @@ -27,7 +26,7 @@ namespace BizHawk.Bizware.BizwareGL /// NOTE: DO NOT EXPECT TO SEE BEGIN/END CALLED IN PAIRS, STRICTLY. /// this is more about GL context management than anything else. /// See GLManager for details. - /// In particular, dont expect to have End() called before doing certain things. Maybe use SwapBuffers instead + /// In particular, don't expect to have End() called before doing certain things. Maybe use SwapBuffers instead /// void End(); } diff --git a/Bizware/BizHawk.Bizware.BizwareGL/packages.config b/Bizware/BizHawk.Bizware.BizwareGL/packages.config new file mode 100644 index 0000000000..a705dc46a0 --- /dev/null +++ b/Bizware/BizHawk.Bizware.BizwareGL/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Build/standin.sh b/Build/standin.sh new file mode 100755 index 0000000000..77e0659ef7 --- /dev/null +++ b/Build/standin.sh @@ -0,0 +1,2 @@ +#!/bin/sh +cd "$(dirname "$0")/../Version" && printf "static class SubWCRev\n{\n\tpublic const string SVN_REV = \"%s\";\n\tpublic const string GIT_BRANCH = \"%s\";\n\tpublic const string GIT_SHORTHASH = \"%s\";\n}" "$(git rev-list HEAD --count)" "$(git rev-parse --abbrev-ref HEAD)" "$(git log -1 --format="%h")" >svnrev.cs diff --git a/Dist/BuildDebug.sh b/Dist/BuildDebug.sh index 1a8801c496..bcb5261458 100755 --- a/Dist/BuildDebug.sh +++ b/Dist/BuildDebug.sh @@ -1,2 +1,2 @@ #!/bin/sh -cd "$(dirname "$0")/.." && nuget restore BizHawk.sln && msbuild /p:Configuration=Debug BizHawk.sln +cd "$(dirname "$0")/.." && nuget restore BizHawk.sln && CscToolExe="$(which csc)" dotnet build BizHawk.sln "$@" diff --git a/Dist/BuildRelease.sh b/Dist/BuildRelease.sh index 94ed720eef..4a1121046c 100755 --- a/Dist/BuildRelease.sh +++ b/Dist/BuildRelease.sh @@ -1,2 +1,2 @@ #!/bin/sh -cd "$(dirname "$0")/.." && nuget restore BizHawk.sln && msbuild /p:Configuration=Release BizHawk.sln +cd "$(dirname "$0")/.." && nuget restore BizHawk.sln && CscToolExe="$(which csc)" dotnet build BizHawk.sln -c Release "$@" diff --git a/DotNetBuild.Common.targets b/DotNetBuild.Common.targets new file mode 100644 index 0000000000..92a8fbefd5 --- /dev/null +++ b/DotNetBuild.Common.targets @@ -0,0 +1,5 @@ + + + + + diff --git a/DotNetBuild.Resources.targets b/DotNetBuild.Resources.targets new file mode 100644 index 0000000000..c77d058751 --- /dev/null +++ b/DotNetBuild.Resources.targets @@ -0,0 +1,24 @@ + + + true + CurrentArchitecture + CurrentRuntime + + + + ..\References\System.Buffers.dll + + + ..\References\System.Memory.dll + + + ..\References\System.Numerics.Vectors.dll + + + ..\References\System.Resources.Extensions.dll + + + ..\References\System.Runtime.CompilerServices.Unsafe.dll + + + diff --git a/References/ELFSharp.dll b/References/ELFSharp.dll deleted file mode 100644 index 0f9ee669ce..0000000000 Binary files a/References/ELFSharp.dll and /dev/null differ diff --git a/References/ICSharpCode.SharpZipLib.dll b/References/ICSharpCode.SharpZipLib.dll deleted file mode 100644 index 71dce26f6f..0000000000 Binary files a/References/ICSharpCode.SharpZipLib.dll and /dev/null differ diff --git a/References/Ionic.Zip.dll b/References/Ionic.Zip.dll deleted file mode 100644 index 95fa928855..0000000000 Binary files a/References/Ionic.Zip.dll and /dev/null differ diff --git a/References/Newtonsoft.Json.dll b/References/Newtonsoft.Json.dll deleted file mode 100644 index a04a6ca3aa..0000000000 Binary files a/References/Newtonsoft.Json.dll and /dev/null differ diff --git a/References/OpenTK.GLControl.dll b/References/OpenTK.GLControl.dll deleted file mode 100644 index 9d928cfb69..0000000000 Binary files a/References/OpenTK.GLControl.dll and /dev/null differ diff --git a/References/OpenTK.dll b/References/OpenTK.dll deleted file mode 100644 index 52feb21b25..0000000000 Binary files a/References/OpenTK.dll and /dev/null differ diff --git a/References/OpenTK.dll.config b/References/OpenTK.dll.config deleted file mode 100644 index 5620e3d9e2..0000000000 --- a/References/OpenTK.dll.config +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/References/System.Buffers.dll b/References/System.Buffers.dll new file mode 100644 index 0000000000..b6d9c7782d Binary files /dev/null and b/References/System.Buffers.dll differ diff --git a/References/System.Memory.dll b/References/System.Memory.dll new file mode 100644 index 0000000000..bdfc501e96 Binary files /dev/null and b/References/System.Memory.dll differ diff --git a/References/System.Numerics.Vectors.dll b/References/System.Numerics.Vectors.dll new file mode 100644 index 0000000000..ce46d5be85 Binary files /dev/null and b/References/System.Numerics.Vectors.dll differ diff --git a/References/System.Resources.Extensions.dll b/References/System.Resources.Extensions.dll new file mode 100644 index 0000000000..73e49c80a3 Binary files /dev/null and b/References/System.Resources.Extensions.dll differ diff --git a/References/System.Runtime.CompilerServices.Unsafe.dll b/References/System.Runtime.CompilerServices.Unsafe.dll new file mode 100644 index 0000000000..3156239266 Binary files /dev/null and b/References/System.Runtime.CompilerServices.Unsafe.dll differ diff --git a/Version/Version.csproj b/Version/Version.csproj index a09fa674e8..f161e5f79a 100644 --- a/Version/Version.csproj +++ b/Version/Version.csproj @@ -1,5 +1,6 @@  + @@ -42,7 +43,8 @@ - "$(ProjectDir)..\Build\BizHawk.Build.Tool.exe" GIT_REV --wc "$(ProjectDir).." --template "$(ProjectDir)svnrev_template" --out "$(ProjectDir)svnrev.cs" + "$(ProjectDir)..\Build\BizHawk.Build.Tool.exe" GIT_REV --wc "$(ProjectDir).." --template "$(ProjectDir)svnrev_template" --out "$(ProjectDir)svnrev.cs" + "$(ProjectDir)../Build/standin.sh"