Lua Console - add a Registered functions dialog that shows registered lua functions registered functions (currently only supports frame and savestate events

This commit is contained in:
adelikat 2013-08-05 00:26:19 +00:00
parent 47a3413f54
commit 1b2ce4e212
10 changed files with 863 additions and 144 deletions

View File

@ -492,6 +492,12 @@
<SubType>Component</SubType>
</Compile>
<Compile Include="tools\LuaDocumentation.cs" />
<Compile Include="tools\LuaRegisteredFunctionsList.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="tools\LuaRegisteredFunctionsList.Designer.cs">
<DependentUpon>LuaRegisteredFunctionsList.cs</DependentUpon>
</Compile>
<Compile Include="tools\LuaTextBox.cs">
<SubType>Component</SubType>
</Compile>
@ -708,6 +714,9 @@
<EmbeddedResource Include="tools\LuaFunctionList.resx">
<DependentUpon>LuaFunctionList.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="tools\LuaRegisteredFunctionsList.resx">
<DependentUpon>LuaRegisteredFunctionsList.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="tools\LuaWinform.resx">
<DependentUpon>LuaWinform.cs</DependentUpon>
</EmbeddedResource>

View File

@ -494,6 +494,10 @@
<SubType>Component</SubType>
</Compile>
<Compile Include="tools\LuaDocumentation.cs" />
<Compile Include="tools\LuaRegisteredFunctionsList.cs" />
<Compile Include="tools\LuaRegisteredFunctionsList.Designer.cs">
<DependentUpon>LuaRegisteredFunctionsList.cs</DependentUpon>
</Compile>
<Compile Include="tools\LuaTextBox.cs">
<SubType>Component</SubType>
</Compile>
@ -708,6 +712,9 @@
<EmbeddedResource Include="tools\LuaFunctionList.resx">
<DependentUpon>LuaFunctionList.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="tools\LuaRegisteredFunctionsList.resx">
<DependentUpon>LuaRegisteredFunctionsList.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="tools\LuaWinform.resx">
<DependentUpon>LuaWinform.cs</DependentUpon>
</EmbeddedResource>

View File

@ -14,34 +14,6 @@ using System.Text;
namespace BizHawk.MultiClient
{
public class NamedLuaFunction
{
private LuaFunction _function;
private string _name;
public Guid GUID { get; private set; }
public NamedLuaFunction(LuaFunction function, string name = null)
{
_function = function;
_name = name ?? "Anonymous Function";
GUID = Guid.NewGuid();
}
public void Call(string name = null)
{
_function.Call(name);
}
public string Name
{
get
{
return _name;
}
}
}
public class LuaImplementation
{
public LuaDocumentation docs = new LuaDocumentation();
@ -53,20 +25,26 @@ namespace BizHawk.MultiClient
private readonly LuaConsole Caller;
private int CurrentMemoryDomain; //Main memory by default
private Lua currThread;
private List<NamedLuaFunction> on_savestate_save_events = new List<NamedLuaFunction>();
private List<NamedLuaFunction> on_savestate_load_events = new List<NamedLuaFunction>();
private List<NamedLuaFunction> on_framestart_events = new List<NamedLuaFunction>();
private List<NamedLuaFunction> on_frameend_events = new List<NamedLuaFunction>();
//private List<NamedLuaFunction> on_savestate_save_events = new List<NamedLuaFunction>();
//private List<NamedLuaFunction> on_savestate_load_events = new List<NamedLuaFunction>();
//private List<NamedLuaFunction> on_framestart_events = new List<NamedLuaFunction>();
//private List<NamedLuaFunction> on_frameend_events = new List<NamedLuaFunction>();
private LuaFunctionCollection lua_functions = new LuaFunctionCollection();
private readonly Dictionary<Color, SolidBrush> SolidBrushes = new Dictionary<Color, SolidBrush>();
private readonly Dictionary<Color, Pen> Pens = new Dictionary<Color, Pen>();
public List<NamedLuaFunction> RegisteredFunctions { get { return lua_functions.Functions; } }
public void SavestateRegisterSave(string name)
{
if (on_savestate_save_events.Any())
List<NamedLuaFunction> lfs = lua_functions.Where(x => x.Event == "OnSavestateSave").ToList();
if (lfs.Any())
{
try
{
foreach (NamedLuaFunction lf in on_savestate_save_events)
foreach (NamedLuaFunction lf in lfs)
{
lf.Call(name);
}
@ -82,11 +60,12 @@ namespace BizHawk.MultiClient
public void SavestateRegisterLoad(string name)
{
if (on_savestate_load_events.Any())
List<NamedLuaFunction> lfs = lua_functions.Where(x => x.Event == "OnSavestateLoad").ToList();
if (lfs.Any())
{
try
{
foreach (NamedLuaFunction lf in on_savestate_load_events)
foreach (NamedLuaFunction lf in lfs)
{
lf.Call(name);
}
@ -102,11 +81,12 @@ namespace BizHawk.MultiClient
public void FrameRegisterBefore()
{
if (on_framestart_events != null)
List<NamedLuaFunction> lfs = lua_functions.Where(x => x.Event == "OnFrameStart").ToList();
if (lfs.Any())
{
try
{
foreach (NamedLuaFunction lf in on_framestart_events)
foreach (NamedLuaFunction lf in lfs)
{
lf.Call();
}
@ -122,11 +102,12 @@ namespace BizHawk.MultiClient
public void FrameRegisterAfter()
{
if (on_frameend_events != null)
List<NamedLuaFunction> lfs = lua_functions.Where(x => x.Event == "OnFrameEnd").ToList();
if (lfs.Any())
{
try
{
foreach (NamedLuaFunction lf in on_frameend_events)
foreach (NamedLuaFunction lf in lfs)
{
lf.Call();
}
@ -2069,15 +2050,15 @@ namespace BizHawk.MultiClient
public string savestate_registersave(LuaFunction luaf, object name)
{
NamedLuaFunction nlf = new NamedLuaFunction(luaf, name != null ? name.ToString() : null);
on_savestate_save_events.Add(nlf);
NamedLuaFunction nlf = new NamedLuaFunction(luaf, "OnSavestateSave", name != null ? name.ToString() : null);
lua_functions.Add(nlf);
return nlf.GUID.ToString();
}
public string savestate_registerload(LuaFunction luaf, object name)
{
NamedLuaFunction nlf = new NamedLuaFunction(luaf, name != null ? name.ToString() : null);
on_savestate_load_events.Add(nlf);
NamedLuaFunction nlf = new NamedLuaFunction(luaf, "OnSavestateLoad", name != null ? name.ToString() : null);
lua_functions.Add(nlf);
return nlf.GUID.ToString();
}
@ -3162,15 +3143,15 @@ namespace BizHawk.MultiClient
public string event_onframestart(LuaFunction luaf, object name = null)
{
NamedLuaFunction nlf = new NamedLuaFunction(luaf, name != null ? name.ToString() : null);
on_framestart_events.Add(nlf);
NamedLuaFunction nlf = new NamedLuaFunction(luaf, "OnFrameStart", name != null ? name.ToString() : null);
lua_functions.Add(nlf);
return nlf.GUID.ToString();
}
public string event_onframeend(LuaFunction luaf, string name = null)
{
NamedLuaFunction nlf = new NamedLuaFunction(luaf, name != null ? name.ToString() : null);
on_frameend_events.Add(nlf);
NamedLuaFunction nlf = new NamedLuaFunction(luaf, "OnFrameEnd", name != null ? name.ToString() : null);
lua_functions.Add(nlf);
return nlf.GUID.ToString();
}
@ -3256,38 +3237,11 @@ namespace BizHawk.MultiClient
public bool event_unregisterbyid(object guid)
{
//Iterating every possible event type is not very scalable
foreach (NamedLuaFunction nlf in on_framestart_events)
foreach (NamedLuaFunction nlf in lua_functions)
{
if (nlf.GUID.ToString() == guid.ToString())
{
on_framestart_events.Remove(nlf);
return true;
}
}
foreach (NamedLuaFunction nlf in on_frameend_events)
{
if (nlf.GUID.ToString() == guid.ToString())
{
on_frameend_events.Remove(nlf);
return true;
}
}
foreach (NamedLuaFunction nlf in on_savestate_save_events)
{
if (nlf.GUID.ToString() == guid.ToString())
{
on_savestate_save_events.Remove(nlf);
return true;
}
}
foreach (NamedLuaFunction nlf in on_savestate_load_events)
{
if (nlf.GUID.ToString() == guid.ToString())
{
on_savestate_load_events.Remove(nlf);
lua_functions.Remove(nlf);
return true;
}
}
@ -3298,39 +3252,11 @@ namespace BizHawk.MultiClient
public bool event_unregisterbyname(object name)
{
//Horribly redundant to the function above!
//Iterating every possible event type is not very scalable
foreach (NamedLuaFunction nlf in on_framestart_events)
foreach (NamedLuaFunction nlf in lua_functions)
{
if (nlf.Name == name.ToString())
{
on_framestart_events.Remove(nlf);
return true;
}
}
foreach (NamedLuaFunction nlf in on_frameend_events)
{
if (nlf.Name == name.ToString())
{
on_frameend_events.Remove(nlf);
return true;
}
}
foreach (NamedLuaFunction nlf in on_savestate_save_events)
{
if (nlf.Name == name.ToString())
{
on_savestate_save_events.Remove(nlf);
return true;
}
}
foreach (NamedLuaFunction nlf in on_savestate_load_events)
{
if (nlf.Name == name.ToString())
{
on_savestate_load_events.Remove(nlf);
lua_functions.Remove(nlf);
return true;
}
}
@ -3338,4 +3264,88 @@ namespace BizHawk.MultiClient
return false;
}
}
public class NamedLuaFunction
{
private LuaFunction _function;
private string _name;
private string _event;
public Guid GUID { get; private set; }
public NamedLuaFunction(LuaFunction function, string theevent, string name = null)
{
_function = function;
_name = name ?? "Anonymous Function";
_event = theevent;
GUID = Guid.NewGuid();
}
public void Call(string name = null)
{
_function.Call(name);
}
public string Name
{
get
{
return _name;
}
}
public string Event
{
get
{
return _event;
}
}
}
public class LuaFunctionCollection : IEnumerable<NamedLuaFunction>
{
public List<NamedLuaFunction> Functions { get; private set; }
public LuaFunctionCollection()
{
Functions = new List<NamedLuaFunction>();
}
public void Add(NamedLuaFunction nlf)
{
Functions.Add(nlf);
}
public void Remove(NamedLuaFunction nlf)
{
Functions.Remove(nlf);
}
public IEnumerator<NamedLuaFunction> GetEnumerator()
{
return Functions.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public NamedLuaFunction this[int index]
{
get
{
return Functions[index];
}
}
public NamedLuaFunction this[string guid]
{
get
{
return Functions.FirstOrDefault(x => x.GUID.ToString() == guid) ?? null;
}
}
}
}

View File

@ -85,6 +85,7 @@
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.NumberOfScripts = new System.Windows.Forms.Label();
this.OutputMessages = new System.Windows.Forms.Label();
this.showRegisteredFunctionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStrip1 = new ToolStripEx();
this.newStripButton1 = new System.Windows.Forms.ToolStripButton();
this.openToolStripButton = new System.Windows.Forms.ToolStripButton();
@ -331,7 +332,8 @@
this.moveDownToolStripMenuItem,
this.selectAllToolStripMenuItem,
this.toolStripSeparator6,
this.turnOffAllScriptsToolStripMenuItem});
this.turnOffAllScriptsToolStripMenuItem,
this.showRegisteredFunctionsToolStripMenuItem});
this.scriptToolStripMenuItem.Name = "scriptToolStripMenuItem";
this.scriptToolStripMenuItem.Size = new System.Drawing.Size(49, 20);
this.scriptToolStripMenuItem.Text = "&Script";
@ -342,7 +344,7 @@
this.newScriptToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.NewFile;
this.newScriptToolStripMenuItem.Name = "newScriptToolStripMenuItem";
this.newScriptToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N)));
this.newScriptToolStripMenuItem.Size = new System.Drawing.Size(193, 22);
this.newScriptToolStripMenuItem.Size = new System.Drawing.Size(245, 22);
this.newScriptToolStripMenuItem.Text = "New Script";
this.newScriptToolStripMenuItem.Click += new System.EventHandler(this.newScriptToolStripMenuItem_Click);
//
@ -351,7 +353,7 @@
this.openToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.OpenFile;
this.openToolStripMenuItem.Name = "openToolStripMenuItem";
this.openToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)));
this.openToolStripMenuItem.Size = new System.Drawing.Size(193, 22);
this.openToolStripMenuItem.Size = new System.Drawing.Size(245, 22);
this.openToolStripMenuItem.Text = "&Open Script...";
this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click_1);
//
@ -360,7 +362,7 @@
this.toggleToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.Refresh1;
this.toggleToolStripMenuItem.Name = "toggleToolStripMenuItem";
this.toggleToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.T)));
this.toggleToolStripMenuItem.Size = new System.Drawing.Size(193, 22);
this.toggleToolStripMenuItem.Size = new System.Drawing.Size(245, 22);
this.toggleToolStripMenuItem.Text = "&Toggle";
this.toggleToolStripMenuItem.Click += new System.EventHandler(this.toggleToolStripMenuItem_Click);
//
@ -368,7 +370,7 @@
//
this.pauseResumeToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.Pause;
this.pauseResumeToolStripMenuItem.Name = "pauseResumeToolStripMenuItem";
this.pauseResumeToolStripMenuItem.Size = new System.Drawing.Size(193, 22);
this.pauseResumeToolStripMenuItem.Size = new System.Drawing.Size(245, 22);
this.pauseResumeToolStripMenuItem.Text = "Pause or Resume";
this.pauseResumeToolStripMenuItem.Click += new System.EventHandler(this.pauseResumeToolStripMenuItem_Click);
//
@ -377,7 +379,7 @@
this.editToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.CutHS;
this.editToolStripMenuItem.Name = "editToolStripMenuItem";
this.editToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.E)));
this.editToolStripMenuItem.Size = new System.Drawing.Size(193, 22);
this.editToolStripMenuItem.Size = new System.Drawing.Size(245, 22);
this.editToolStripMenuItem.Text = "&Edit Script";
this.editToolStripMenuItem.Click += new System.EventHandler(this.editToolStripMenuItem_Click);
//
@ -386,7 +388,7 @@
this.removeScriptToolStripMenuItem1.Image = global::BizHawk.MultiClient.Properties.Resources.Delete;
this.removeScriptToolStripMenuItem1.Name = "removeScriptToolStripMenuItem1";
this.removeScriptToolStripMenuItem1.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.R)));
this.removeScriptToolStripMenuItem1.Size = new System.Drawing.Size(193, 22);
this.removeScriptToolStripMenuItem1.Size = new System.Drawing.Size(245, 22);
this.removeScriptToolStripMenuItem1.Text = "&Remove Script";
this.removeScriptToolStripMenuItem1.Click += new System.EventHandler(this.removeScriptToolStripMenuItem_Click);
//
@ -395,21 +397,21 @@
this.insertSeparatorToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.InsertSeparator;
this.insertSeparatorToolStripMenuItem.Name = "insertSeparatorToolStripMenuItem";
this.insertSeparatorToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.I)));
this.insertSeparatorToolStripMenuItem.Size = new System.Drawing.Size(193, 22);
this.insertSeparatorToolStripMenuItem.Size = new System.Drawing.Size(245, 22);
this.insertSeparatorToolStripMenuItem.Text = "Insert Separator";
this.insertSeparatorToolStripMenuItem.Click += new System.EventHandler(this.insertSeperatorToolStripMenuItem_Click);
//
// toolStripSeparator7
//
this.toolStripSeparator7.Name = "toolStripSeparator7";
this.toolStripSeparator7.Size = new System.Drawing.Size(190, 6);
this.toolStripSeparator7.Size = new System.Drawing.Size(242, 6);
//
// moveUpToolStripMenuItem
//
this.moveUpToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.MoveUp;
this.moveUpToolStripMenuItem.Name = "moveUpToolStripMenuItem";
this.moveUpToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.U)));
this.moveUpToolStripMenuItem.Size = new System.Drawing.Size(193, 22);
this.moveUpToolStripMenuItem.Size = new System.Drawing.Size(245, 22);
this.moveUpToolStripMenuItem.Text = "Move &Up";
this.moveUpToolStripMenuItem.Click += new System.EventHandler(this.moveUpToolStripMenuItem_Click_1);
//
@ -418,7 +420,7 @@
this.moveDownToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.MoveDown;
this.moveDownToolStripMenuItem.Name = "moveDownToolStripMenuItem";
this.moveDownToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D)));
this.moveDownToolStripMenuItem.Size = new System.Drawing.Size(193, 22);
this.moveDownToolStripMenuItem.Size = new System.Drawing.Size(245, 22);
this.moveDownToolStripMenuItem.Text = "Move &Down";
this.moveDownToolStripMenuItem.Click += new System.EventHandler(this.moveDownToolStripMenuItem_Click_1);
//
@ -426,20 +428,20 @@
//
this.selectAllToolStripMenuItem.Name = "selectAllToolStripMenuItem";
this.selectAllToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.A)));
this.selectAllToolStripMenuItem.Size = new System.Drawing.Size(193, 22);
this.selectAllToolStripMenuItem.Size = new System.Drawing.Size(245, 22);
this.selectAllToolStripMenuItem.Text = "Select &All";
this.selectAllToolStripMenuItem.Click += new System.EventHandler(this.selectAllToolStripMenuItem_Click);
//
// toolStripSeparator6
//
this.toolStripSeparator6.Name = "toolStripSeparator6";
this.toolStripSeparator6.Size = new System.Drawing.Size(190, 6);
this.toolStripSeparator6.Size = new System.Drawing.Size(242, 6);
//
// turnOffAllScriptsToolStripMenuItem
//
this.turnOffAllScriptsToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.Stop;
this.turnOffAllScriptsToolStripMenuItem.Name = "turnOffAllScriptsToolStripMenuItem";
this.turnOffAllScriptsToolStripMenuItem.Size = new System.Drawing.Size(193, 22);
this.turnOffAllScriptsToolStripMenuItem.Size = new System.Drawing.Size(245, 22);
this.turnOffAllScriptsToolStripMenuItem.Text = "Turn Off All Scripts";
this.turnOffAllScriptsToolStripMenuItem.Click += new System.EventHandler(this.turnOffAllScriptsToolStripMenuItem_Click);
//
@ -578,6 +580,14 @@
this.OutputMessages.TabIndex = 6;
this.OutputMessages.Text = " ";
//
// showRegisteredFunctionsToolStripMenuItem
//
this.showRegisteredFunctionsToolStripMenuItem.Name = "showRegisteredFunctionsToolStripMenuItem";
this.showRegisteredFunctionsToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F12)));
this.showRegisteredFunctionsToolStripMenuItem.Size = new System.Drawing.Size(245, 22);
this.showRegisteredFunctionsToolStripMenuItem.Text = "&Registered Functions...";
this.showRegisteredFunctionsToolStripMenuItem.Click += new System.EventHandler(this.showRegisteredFunctionsToolStripMenuItem_Click);
//
// toolStrip1
//
this.toolStrip1.ClickThrough = true;
@ -830,5 +840,6 @@
private System.Windows.Forms.ToolStripMenuItem onlineDocumentationToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem newScriptToolStripMenuItem;
private System.Windows.Forms.ToolStripButton newStripButton1;
private System.Windows.Forms.ToolStripMenuItem showRegisteredFunctionsToolStripMenuItem;
}
}

View File

@ -1140,15 +1140,16 @@ namespace BizHawk.MultiClient
scriptToolStripMenuItem.DropDownItems[8].Enabled = false;
}
if (luaList.Count > 0)
if (luaList.Any())
scriptToolStripMenuItem.DropDownItems[9].Enabled = true;
else
scriptToolStripMenuItem.DropDownItems[9].Enabled = false;
if (luaRunning)
scriptToolStripMenuItem.DropDownItems[11].Enabled = true;
else
scriptToolStripMenuItem.DropDownItems[11].Enabled = false;
turnOffAllScriptsToolStripMenuItem.Enabled = luaRunning;
showRegisteredFunctionsToolStripMenuItem.Enabled = Global.MainForm.LuaConsole1.LuaImp.RegisteredFunctions.Any();
}
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
@ -1291,5 +1292,14 @@ namespace BizHawk.MultiClient
{
NewScript();
}
private void showRegisteredFunctionsToolStripMenuItem_Click(object sender, EventArgs e)
{
if (Global.MainForm.LuaConsole1.LuaImp.RegisteredFunctions.Any())
{
LuaRegisteredFunctionsList dialog = new LuaRegisteredFunctionsList();
dialog.ShowDialog();
}
}
}
}

View File

@ -133,18 +133,17 @@
<data name="openToolStripButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAlpJREFUOE+tk21I
k1EYhif0oyA0sqIQCix/+GcQFFH9CCmiUBTLLEjShJofVBgL2fxoU9Pp5ubUlS5rU9f8rCyjsA+pUCRC
TR1ppmVFUSlmhq78unrnQF1KGHTg/nEOz30993PO+7qJFrmUeiv2n+Mij+XLRLLYULdF2pxlEVIDcw0p
AsyxD5fmI/rQ94pqi26eOlsfuZj+7BgSm01QdA4ih7m73Yx9qGpavwatjPebqCzOprPt8YKQgzFagqL0
BEjyEFWVaBkdLHMxT34uYNwWR9nVTEoL0zHlp2DMSeaSRk6eKt4VWm5WM/rVPNN5SjDTLQebZEHNA1wr
UvHjk3E6tsNcV62e1r3KLGqtKm6WplNpSsVqVFJsOM8VfSKFWjkGtcyZptSYzvC7XByx3zQoqCnTMvlG
CX1prnornPUmQJcUXsbSVhGK5bIOkcmQyveeTHiv4VZ5Nk33Nc6iuSO8CIfmECYa/bE/8ON1iRipJNh5
F0V6Bd86lfQ1JlFj1TDVq4COKCegLVIwHmGiKRB7/V6G7+5koHozymgfYRy5E1CgTWKgXcZ1i5qWp0KS
rjgBcAJawph6FszYk/2M1O1isGYLX8p9ab6wgqP+3rMvYciS01GfzA1LFvQkQ6sQ9/khxhoCGHnox1Dt
NvorxXw0b8Km8UQh2cip6GOzgNyMeKqKM7HdjqFZJ5pRk2YJ9aql3EnxoCJxNaZ4Ly6e3UDY3O6OEXRp
59ApTpIhiyDh9GHORAZyPHQPB/ZtZ/cOMVvFPvh6e7F+3SrWrHRnraf7Xz/xf/rJ/kvxb84I3U1y+9/W
AAAAAElFTkSuQmCC
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
</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">

View File

@ -41,7 +41,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(423, 284);
this.OK.Location = new System.Drawing.Point(434, 284);
this.OK.Name = "OK";
this.OK.Size = new System.Drawing.Size(75, 23);
this.OK.TabIndex = 0;
@ -63,7 +63,7 @@
this.FunctionView.GridLines = true;
this.FunctionView.Location = new System.Drawing.Point(12, 12);
this.FunctionView.Name = "FunctionView";
this.FunctionView.Size = new System.Drawing.Size(486, 266);
this.FunctionView.Size = new System.Drawing.Size(497, 266);
this.FunctionView.TabIndex = 1;
this.FunctionView.UseCompatibleStateImageBehavior = false;
this.FunctionView.View = System.Windows.Forms.View.Details;
@ -79,27 +79,28 @@
//
this.LibraryHead.Text = "Library";
this.LibraryHead.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
this.LibraryHead.Width = 75;
this.LibraryHead.Width = 85;
//
// LibraryName
//
this.LibraryName.Text = "Name";
this.LibraryName.Width = 135;
this.LibraryName.Width = 131;
//
// LibraryParameters
//
this.LibraryParameters.Text = "Parameters";
this.LibraryParameters.Width = 210;
this.LibraryParameters.Width = 217;
//
// LuaFunctionList
//
this.AcceptButton = this.OK;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(510, 319);
this.ClientSize = new System.Drawing.Size(521, 319);
this.Controls.Add(this.FunctionView);
this.Controls.Add(this.OK);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MinimumSize = new System.Drawing.Size(200, 50);
this.Name = "LuaFunctionList";
this.Text = "Lua Functions";
this.Load += new System.EventHandler(this.LuaFunctionList_Load);

View File

@ -0,0 +1,111 @@
namespace BizHawk.MultiClient
{
partial class LuaRegisteredFunctionsList
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
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()));
this.FunctionsGUID = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.OK = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// FunctionView
//
this.FunctionView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.FunctionView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.FunctionsEvent,
this.FunctionsName,
this.FunctionsGUID});
this.FunctionView.FullRowSelect = true;
this.FunctionView.GridLines = true;
this.FunctionView.Location = new System.Drawing.Point(12, 12);
this.FunctionView.Name = "FunctionView";
this.FunctionView.Size = new System.Drawing.Size(498, 266);
this.FunctionView.TabIndex = 3;
this.FunctionView.UseCompatibleStateImageBehavior = false;
this.FunctionView.View = System.Windows.Forms.View.Details;
//
// FunctionsEvent
//
this.FunctionsEvent.Text = "Event";
this.FunctionsEvent.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
this.FunctionsEvent.Width = 111;
//
// FunctionsName
//
this.FunctionsName.Text = "Name";
this.FunctionsName.Width = 99;
//
// FunctionsGUID
//
this.FunctionsGUID.Text = "Guid";
this.FunctionsGUID.Width = 284;
//
// OK
//
this.OK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.OK.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.OK.Location = new System.Drawing.Point(435, 284);
this.OK.Name = "OK";
this.OK.Size = new System.Drawing.Size(75, 23);
this.OK.TabIndex = 2;
this.OK.Text = "&Ok";
this.OK.UseVisualStyleBackColor = true;
this.OK.Click += new System.EventHandler(this.OK_Click);
//
// LuaRegisteredFunctionsList
//
this.AcceptButton = this.OK;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.OK;
this.ClientSize = new System.Drawing.Size(521, 319);
this.Controls.Add(this.FunctionView);
this.Controls.Add(this.OK);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MinimumSize = new System.Drawing.Size(200, 50);
this.Name = "LuaRegisteredFunctionsList";
this.Text = "Actively Registered Functions";
this.Load += new System.EventHandler(this.LuaRegisteredFunctionsList_Load);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ListView FunctionView;
private System.Windows.Forms.ColumnHeader FunctionsName;
private System.Windows.Forms.ColumnHeader FunctionsEvent;
private System.Windows.Forms.ColumnHeader FunctionsGUID;
private System.Windows.Forms.Button OK;
}
}

View File

@ -0,0 +1,43 @@
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.MultiClient
{
public partial class LuaRegisteredFunctionsList : Form
{
public LuaRegisteredFunctionsList()
{
InitializeComponent();
}
private void LuaRegisteredFunctionsList_Load(object sender, EventArgs e)
{
PopulateListView();
}
private void OK_Click(object sender, EventArgs e)
{
Close();
}
private void PopulateListView()
{
FunctionView.Items.Clear();
List<NamedLuaFunction> nlfs = Global.MainForm.LuaConsole1.LuaImp.RegisteredFunctions.OrderBy(x => x.Event).ThenBy(x => x.Name).ToList();
foreach (NamedLuaFunction nlf in nlfs)
{
ListViewItem item = new ListViewItem { Text = nlf.Event };
item.SubItems.Add(nlf.Name);
item.SubItems.Add(nlf.GUID.ToString());
FunctionView.Items.Add(item);
}
}
}
}

View File

@ -0,0 +1,518 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
wfI+iafGWX2OtwC10f9mfY+1Woih5oKcrN26kJDeNaS8/0iOpu6jiZT0rX2D/8SEhPc8iJ74AHyXzgAA
AEEAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGKTMgCsxIUAcpdsAAAADwAAAAQAYpMyAK3KwgCa
urgARmlGAAAADAB2oWQAsc3wAK3L/wCAoqEAAAAZAHWdVwC10f8Ass3yAKfF8wAvRkYAfaOKALHM8QCB
na8AtdH/ADpYcAAAABkAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjlCEAYJBEAEdqFwAA
AAQAAAABAI6xcwCnwbUAbo5hAAAADwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD/wP////8AAP/AAf///wAA/4AAA///
AAD/gAAAB/8AAP+AAAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+AAAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+A
AAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+AAAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+AAAAB/wAA/4AAAAH/
AAD/gAAAAf8AAP+AAAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+AAAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+A
AAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+AAAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+AAAAB/wAA/4AAAAH/
AAD/gAAAAf8AAP+AAAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+AAAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+A
AAAB/wAA/4AAAAH/AAD/wAAAA/8AAP/gAAAD/wAA////4Af/AAD///////8AACgAAAAgAAAAQAAAAAEA
IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAFAAAADQAAAA0AAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAABQAAACAAAABDAAAASQAAADsAAAAwAAAAKAAAACEAAAAZAAAAEgAAAAsAAAAEAAAAAQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAWo5qToFtbVaouLyyoAAAAlQAAAIwAAACAAAAAcwAAAGIAAABTAAAARgAA
ADgAAAAuAAAAJQAAAB8AAAAYAAAAEgAAAAsAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqGhovp39P/8fLk//Hy5P/y8+b/zs/F88PFu+2QkIvYdHVwyVRV
UbkZGRigAAAAlAAAAIoAAAB8AAAAbgAAAGEAAABTAAAARgAAACwAAAANAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxouL8+nf1P/x8uT/8vPm//Lz5v/y9Oj/8/Tp//P0
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=
</value>
</data>
</root>