Major update - first working version

This commit is contained in:
Szymon Porwolik
2019-02-23 03:12:12 +01:00
parent f646eb4057
commit a2da2e39fc
16 changed files with 1651 additions and 214 deletions

143
01_DCS/Hooks/Perun.lua Normal file
View File

@@ -0,0 +1,143 @@
-- Perun for DCS World https://github.com/szporwolik/perun -> DCS Hook component
-- Initial init
local Perun = {}
package.path = package.path..";"..lfs.currentdir().."/LuaSocket/?.lua"
package.cpath = package.cpath..";"..lfs.currentdir().."/LuaSocket/?.dll"
-- ########### SETTINGS ###########
Perun.Refresh = 15 -- base refresh rate in secounds (values lower than 60 may affect performance!)
Perun.JsonLocation = "Scripts\\Json\\perun_export.json" -- relatve do user's SaveGames DCS folder
Perun.UDPTargetPort = 48620 -- UDP port to send data to
-- ########### END OF SETTINGS ###########
-- Variable init
Perun.Version = "v0.1.1"
Perun.StatusData = {}
Perun.MissionData = {}
Perun.VersionData = {}
Perun.lastSent =0
Perun.JsonLocation = lfs.writedir() .. Perun.JsonLocation
Perun.socket = require("socket")
Perun.UDP = assert(Perun.socket.udp())
Perun.UDP:settimeout(0)
Perun.UDP:setsockname("*", 48621)
Perun.UDP:setpeername("127.0.0.1",Perun.UDPTargetPort)
Perun.UDP:send("{'type':999,'payload':'Perun is onlne!'}") -- send welcome message
-- Function definition
Perun.AddLog = function(text)
-- Adds logs to DCS.log file
net.log("Perun : ".. text)
end
Perun.UpdateJson = function()
-- Updates main json file
TempData={}
TempData["1"]=Perun.VersionData
TempData["2"]=Perun.StatusData
TempData["3"]=Perun.MissionData
io.open(Perun.JsonLocation,"w"):close()
perun_export = io.open(Perun.JsonLocation, "w")
perun_export:write(net.lua2json(TempData) .. "\n")
perun_export:close()
end
Perun.Send = function(data_id, data_package)
-- Sends data package
TempData={}
TempData["type"]=data_id
TempData["payload"]=data_package
temp=net.lua2json(TempData)
Perun.UDP:send(temp)
Perun.AddLog("Packet send")
end
Perun.UpdateStatusPart = function(part_id, data_package)
-- Helper for status update container
Perun.StatusData[part_id] = data_package
end
Perun.UpdateVersion = function()
-- Main function for debug/version information
-- Update Mission data
Perun.VersionData['v_dcs_hook']=Perun.Version
-- Send
Perun.Send(1,Perun.VersionData)
end
Perun.UpdateStatus = function()
-- Main function for status updates
-- Update all subsections
-- 1 - Mission
temp={}
temp['name']=DCS.getMissionName()
temp['filename']=DCS.getMissionFilename()
temp['modeltime']=DCS.getModelTime()
temp['realtime']=DCS.getRealTime()
temp['pause']=DCS.getPause()
temp['multiplayer']=DCS.isMultiplayer()
Perun.UpdateStatusPart("mission",temp)
-- 2 - Players
temp = net.get_player_list()
for _, i in ipairs(temp) do
temp[i]=net.get_player_info(i)
end
Perun.UpdateStatusPart("players",temp)
-- Send
Perun.Send(2,Perun.StatusData)
end
Perun.UpdateMission = function()
-- Main function for mission information updates
-- Update Mission data
Perun.MissionData['name']=DCS.getMissionName()
Perun.MissionData['description']=DCS.getMissionDescription()
Perun.MissionData['filename']=DCS.getMissionFilename()
Perun.MissionData['modeltime']=DCS.getModelTime()
Perun.MissionData['realtime']=DCS.getRealTime()
Perun.MissionData['data']=DCS.getCurrentMission()
Perun.MissionData['coalitions']=DCS.getAvailableCoalitions()
Perun.MissionData['slots']={}
for j, i in pairs(Perun.MissionData['coalitions']) do
Perun.MissionData['slots'][j]=DCS.getAvailableSlots(j)
end
-- Send
Perun.Send(3,Perun.MissionData)
end
--- Event callbacks
Perun.onSimulationFrame = function()
local _now = DCS.getRealTime()
if _now > Perun.lastSent + Perun.Refresh then
Perun.lastSent = _now
Perun.UpdateMission()
Perun.UpdateStatus()
Perun.UpdateVersion()
Perun.UpdateJson()
end
end
Perun.onMissionLoadEnd = function()
Perun.UpdateMission()
Perun.UpdateJson()
end
-- Finalize and set callbacks
DCS.setUserCallbacks(Perun)
net.log("Loaded - Perun - VladMordock - " .. Perun.Version )

View File

View File

@@ -1,122 +0,0 @@
-- Perun hook by VladMordock
local Perun = {}
Perun.Version = "0.1"
Perun.Refresh = 15
Perun.StatusData = {}
Perun.MissionData = {}
local _lastSent = 0;
local json_path = lfs.writedir() .."Scripts\\Json\\perun_export.json"
package.path = package.path..";"..lfs.currentdir().."/LuaSocket/?.lua"
package.cpath = package.cpath..";"..lfs.currentdir().."/LuaSocket/?.dll"
socket = require("socket")
Perun.UDP = assert(socket.udp())
Perun.UDP:settimeout(0)
Perun.UDP:setsockname("*", 48621)
Perun.UDP:setpeername("127.0.0.1",48620)
Perun.UDP:send("Perun online!")
Perun.AddLog = function(text)
net.log("Perun : ".. text)
end
Perun.UpdateJson = function()
TempData={}
TempData["1"]=Perun.StatusData
TempData["2"]=Perun.MissionData
io.open(json_path,"w"):close()
perun_export = io.open(json_path, "w")
perun_export:write(net.lua2json(TempData) .. "\n")
perun_export:close()
end
Perun.Send = function(data_id, data_package)
TempData={}
TempData["type"]=data_id
TempData["payload"]=Perun.StatusData
temp=net.lua2json(TempData)
Perun.UDP:send(temp)
Perun.AddLog("Packet send")
end
Perun.UpdateStatusPart = function(part_id, data_package)
Perun.StatusData[part_id] = data_package
end
Perun.UpdateStatus = function()
-- 1 - Update time
Perun.UpdateStatusPart("updated","TODO: OS TIME")
-- 2 - Mission
temp={}
temp['name']=DCS.getMissionName()
temp['filename']=DCS.getMissionFilename()
temp['modeltime']=DCS.getModelTime()
temp['realtime']=DCS.getRealTime()
temp['pause']=DCS.getPause()
temp['multiplayer']=DCS.isMultiplayer()
Perun.UpdateStatusPart("mission",temp)
-- 3 - Players
temp = net.get_player_list()
for _, i in ipairs(temp) do
temp[i]=net.get_player_info(i)
end
Perun.UpdateStatusPart("players",temp)
-- Send
Perun.Send(1,Perun.StatusData)
end
Perun.UpdateMission = function()
-- Mission data
Perun.MissionData['updated']="TODO: OS TIME"
Perun.MissionData['name']=DCS.getMissionName()
Perun.MissionData['description']=DCS.getMissionDescription()
Perun.MissionData['filename']=DCS.getMissionFilename()
Perun.MissionData['modeltime']=DCS.getModelTime()
Perun.MissionData['realtime']=DCS.getRealTime()
Perun.MissionData['data']=DCS.getCurrentMission()
Perun.MissionData['coalitions']=DCS.getAvailableCoalitions()
Perun.MissionData['slots']={}
for j, i in pairs(Perun.MissionData['coalitions']) do
Perun.MissionData['slots'][j]=DCS.getAvailableSlots(j)
end
-- Send
Perun.Send(2,Perun.MissionData)
end
--- Event callback
Perun.onSimulationFrame = function()
local _now = DCS.getRealTime()
if _now > _lastSent + Perun.Refresh then
_lastSent = _now
Perun.UpdateMission()
Perun.UpdateStatus()
Perun.UpdateJson()
end
end
Perun.onMissionLoadEnd = function()
Perun.UpdateMission()
Perun.UpdateJson()
end
--- Finalize and set callbacks
DCS.setUserCallbacks(Perun)
net.log("Loaded - Perun - VladMordock - " .. Perun.Version )

View File

@@ -1,6 +1,39 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="Perun.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<userSettings>
<Perun.Properties.Settings>
<setting name="MYSQL_Server" serializeAs="String">
<value />
</setting>
<setting name="MYSQL_User" serializeAs="String">
<value />
</setting>
<setting name="MYSQL_Password" serializeAs="String">
<value />
</setting>
<setting name="MYSQL_DB" serializeAs="String">
<value />
</setting>
<setting name="OTHER_LOTATC_FILE" serializeAs="String">
<value />
</setting>
<setting name="OTHER_SRS_FILE" serializeAs="String">
<value />
</setting>
<setting name="OTHER_LOTATC_USE" serializeAs="String">
<value>False</value>
</setting>
<setting name="OTHER_SRS_USE" serializeAs="String">
<value>False</value>
</setting>
</Perun.Properties.Settings>
</userSettings>
</configuration>

View File

@@ -12,6 +12,22 @@
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<IsWebBootstrapper>false</IsWebBootstrapper>
<PublishUrl>C:\Users\simpo\Desktop\Perun\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>1</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<PublishWizardCompleted>true</PublishWizardCompleted>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
@@ -32,9 +48,40 @@
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>perun_logo.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup>
<ManifestCertificateThumbprint>2ACE4C8C2C325A04CA5986B1CD76744B4B03755D</ManifestCertificateThumbprint>
</PropertyGroup>
<PropertyGroup>
<ManifestKeyFile>Perun_v1_TemporaryKey.pfx</ManifestKeyFile>
</PropertyGroup>
<PropertyGroup>
<GenerateManifests>true</GenerateManifests>
</PropertyGroup>
<PropertyGroup>
<SignManifests>true</SignManifests>
</PropertyGroup>
<ItemGroup>
<Reference Include="Google.Protobuf, Version=3.5.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
<HintPath>..\packages\Google.Protobuf.3.5.1\lib\net45\Google.Protobuf.dll</HintPath>
</Reference>
<Reference Include="MySql.Data, Version=8.0.15.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
<HintPath>..\packages\MySql.Data.8.0.15\lib\net452\MySql.Data.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Configuration" />
<Reference Include="System.Configuration.Install" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing.Design" />
<Reference Include="System.Management" />
<Reference Include="System.Transactions" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
@@ -65,7 +112,10 @@
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="packages.config" />
<None Include="Perun_v1_TemporaryKey.pfx" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
@@ -79,5 +129,20 @@
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.6.1">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.6.1 %28x86 i x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<Content Include="perun_logo.ico" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -1,22 +1,32 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Perun_v1
{
static class Program
{
/// <summary>
/// Główny punkt wejścia dla aplikacji.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
void Application_ApplicationExit(object sender, EventArgs e)
{
Properties.Settings.Default.Save();
}
Application.Run(new form_Main());
}
}
}

View File

@@ -1,15 +1,16 @@
using System.Reflection;
using System.Resources;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Ogólne informacje o zestawie są kontrolowane poprzez następujący
// zestaw atrybutów. Zmień wartości tych atrybutów, aby zmodyfikować informacje
// powiązane z zestawem.
[assembly: AssemblyTitle("Perun_v1")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyTitle("Perun for DCS World")]
[assembly: AssemblyDescription("https://github.com/szporwolik/perun")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Perun_v1")]
[assembly: AssemblyCompany("Szymon Porwolik")]
[assembly: AssemblyProduct("Perun for DCS World")]
[assembly: AssemblyCopyright("Copyright © 2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -32,5 +33,7 @@ using System.Runtime.InteropServices;
// Możesz określić wszystkie wartości lub użyć domyślnych numerów kompilacji i poprawki
// przy użyciu symbolu „*”, tak jak pokazano poniżej:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyVersion("0.1.0.0")]
[assembly: AssemblyFileVersion("0.1.0.0")]
[assembly: NeutralResourcesLanguage("en")]

View File

@@ -1,49 +1,44 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Ten kod został wygenerowany przez narzędzie.
// Wersja środowiska uruchomieniowego: 4.0.30319.42000
// Wersja wykonawcza:4.0.30319.42000
//
// Modyfikacje tego pliku mogą spowodować niewłaściwe zachowanie i zostaną utracone
// w przypadku ponownego wygenerowania kodu.
// Zmiany w tym pliku mogą spowodować nieprawidłowe zachowanie i zostaną utracone, jeśli
// kod zostanie ponownie wygenerowany.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Perun_v1.Properties
{
namespace Perun_v1.Properties {
using System;
/// <summary>
/// Silnie typizowana klasa zasobów do wyszukiwania zlokalizowanych ciągów itd.
/// Klasa zasobu wymagająca zdefiniowania typu do wyszukiwania zlokalizowanych ciągów itd.
/// </summary>
// Ta klasa została automatycznie wygenerowana za pomocą klasy StronglyTypedResourceBuilder
// przez narzędzie, takie jak ResGen lub Visual Studio.
// Aby dodać lub usunąć składowe, edytuj plik ResX, a następnie ponownie uruchom narzędzie ResGen
// z opcją /str lub ponownie skompiluj projekt programu VS.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
// Aby dodać lub usunąć składową, edytuj plik ResX, a następnie ponownie uruchom narzędzie ResGen
// z opcją /str lub ponownie utwórz projekt VS.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
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()
{
internal Resources() {
}
/// <summary>
/// Zwraca buforowane wystąpienie składnika ResourceManager używane przez tę klasę.
/// Zwraca buforowane wystąpienie ResourceManager używane przez tę klasę.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Perun_v1.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
@@ -53,17 +48,14 @@ namespace Perun_v1.Properties
/// <summary>
/// Przesłania właściwość CurrentUICulture bieżącego wątku dla wszystkich
/// przypadków przeszukiwania zasobów za pomocą tej silnie typizowanej klasy zasobów.
/// przypadków przeszukiwania zasobów za pomocą tej klasy zasobów wymagającej zdefiniowania typu.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set
{
set {
resourceCulture = value;
}
}

View File

@@ -1,30 +1,122 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
// Ten kod został wygenerowany przez narzędzie.
// Wersja wykonawcza:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// Zmiany w tym pliku mogą spowodować nieprawidłowe zachowanie i zostaną utracone, jeśli
// kod zostanie ponownie wygenerowany.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Perun_v1.Properties
{
namespace Perun_v1.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
public static Settings Default {
get {
return defaultInstance;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string MYSQL_Server {
get {
return ((string)(this["MYSQL_Server"]));
}
set {
this["MYSQL_Server"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string MYSQL_User {
get {
return ((string)(this["MYSQL_User"]));
}
set {
this["MYSQL_User"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string MYSQL_Password {
get {
return ((string)(this["MYSQL_Password"]));
}
set {
this["MYSQL_Password"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string MYSQL_DB {
get {
return ((string)(this["MYSQL_DB"]));
}
set {
this["MYSQL_DB"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string OTHER_LOTATC_FILE {
get {
return ((string)(this["OTHER_LOTATC_FILE"]));
}
set {
this["OTHER_LOTATC_FILE"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string OTHER_SRS_FILE {
get {
return ((string)(this["OTHER_SRS_FILE"]));
}
set {
this["OTHER_SRS_FILE"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool OTHER_LOTATC_USE {
get {
return ((bool)(this["OTHER_LOTATC_USE"]));
}
set {
this["OTHER_LOTATC_USE"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool OTHER_SRS_USE {
get {
return ((bool)(this["OTHER_SRS_USE"]));
}
set {
this["OTHER_SRS_USE"] = value;
}
}
}
}

View File

@@ -1,7 +1,30 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="Perun.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="MYSQL_Server" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="MYSQL_User" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="MYSQL_Password" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="MYSQL_DB" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="OTHER_LOTATC_FILE" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="OTHER_SRS_FILE" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="OTHER_LOTATC_USE" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="OTHER_SRS_USE" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@@ -28,46 +28,339 @@
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(form_Main));
this.con_List_Received = new System.Windows.Forms.ListBox();
this.con_Button_DEBUG = new System.Windows.Forms.Button();
this.con_Button_Listen_ON = new System.Windows.Forms.Button();
this.con_Button_Listen_OFF = new System.Windows.Forms.Button();
this.con_GroupBox_1 = new System.Windows.Forms.GroupBox();
this.tim_1000ms = new System.Windows.Forms.Timer(this.components);
this.con_GroupBox_2 = new System.Windows.Forms.GroupBox();
this.label4 = new System.Windows.Forms.Label();
this.con_txt_mysql_username = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.con_txt_mysql_database = new System.Windows.Forms.TextBox();
this.con_txt_mysql_server = new System.Windows.Forms.TextBox();
this.con_txt_mysql_password = new System.Windows.Forms.MaskedTextBox();
this.con_GroupBox_3 = new System.Windows.Forms.GroupBox();
this.con_txt_3rd_lotatc = new System.Windows.Forms.MaskedTextBox();
this.con_txt_3rd_srs = new System.Windows.Forms.MaskedTextBox();
this.con_check_3rd_lotatc = new System.Windows.Forms.CheckBox();
this.con_check_3rd_srs = new System.Windows.Forms.CheckBox();
this.con_Button_Quit = new System.Windows.Forms.Button();
this.con_lab_github = new System.Windows.Forms.LinkLabel();
this.label5 = new System.Windows.Forms.Label();
this.trayIconMain = new System.Windows.Forms.NotifyIcon(this.components);
this.openFileDialog_SRS = new System.Windows.Forms.OpenFileDialog();
this.openFileDialog_LotATC = new System.Windows.Forms.OpenFileDialog();
this.tim_10000ms = new System.Windows.Forms.Timer(this.components);
this.con_GroupBox_1.SuspendLayout();
this.con_GroupBox_2.SuspendLayout();
this.con_GroupBox_3.SuspendLayout();
this.SuspendLayout();
//
// con_List_Received
//
this.con_List_Received.Enabled = false;
this.con_List_Received.FormattingEnabled = true;
this.con_List_Received.Location = new System.Drawing.Point(12, 12);
this.con_List_Received.Items.AddRange(new object[] {
"Loading",
"Loading",
"Loading",
"Loading",
"Loading",
"Loading",
"Loading",
"Loading",
"Loading",
"Loading"});
this.con_List_Received.Location = new System.Drawing.Point(6, 19);
this.con_List_Received.Name = "con_List_Received";
this.con_List_Received.Size = new System.Drawing.Size(594, 550);
this.con_List_Received.Size = new System.Drawing.Size(307, 134);
this.con_List_Received.TabIndex = 0;
//
// con_Button_DEBUG
// con_Button_Listen_ON
//
this.con_Button_DEBUG.Location = new System.Drawing.Point(612, 21);
this.con_Button_DEBUG.Name = "con_Button_DEBUG";
this.con_Button_DEBUG.Size = new System.Drawing.Size(80, 48);
this.con_Button_DEBUG.TabIndex = 1;
this.con_Button_DEBUG.Text = "Debug";
this.con_Button_DEBUG.UseVisualStyleBackColor = true;
this.con_Button_DEBUG.Click += new System.EventHandler(this.con_Button_DEBUG_Click);
this.con_Button_Listen_ON.Location = new System.Drawing.Point(12, 405);
this.con_Button_Listen_ON.Name = "con_Button_Listen_ON";
this.con_Button_Listen_ON.Size = new System.Drawing.Size(86, 39);
this.con_Button_Listen_ON.TabIndex = 2;
this.con_Button_Listen_ON.Text = "Connect";
this.con_Button_Listen_ON.UseVisualStyleBackColor = true;
this.con_Button_Listen_ON.Click += new System.EventHandler(this.con_Button_Listen_ON_Click);
//
// con_Button_Listen_OFF
//
this.con_Button_Listen_OFF.Enabled = false;
this.con_Button_Listen_OFF.Location = new System.Drawing.Point(104, 405);
this.con_Button_Listen_OFF.Name = "con_Button_Listen_OFF";
this.con_Button_Listen_OFF.Size = new System.Drawing.Size(86, 39);
this.con_Button_Listen_OFF.TabIndex = 3;
this.con_Button_Listen_OFF.Text = "Disconnect";
this.con_Button_Listen_OFF.UseVisualStyleBackColor = true;
this.con_Button_Listen_OFF.Click += new System.EventHandler(this.con_Button_Listen_OFF_Click);
//
// con_GroupBox_1
//
this.con_GroupBox_1.Controls.Add(this.con_List_Received);
this.con_GroupBox_1.Location = new System.Drawing.Point(12, 235);
this.con_GroupBox_1.Name = "con_GroupBox_1";
this.con_GroupBox_1.Size = new System.Drawing.Size(324, 164);
this.con_GroupBox_1.TabIndex = 4;
this.con_GroupBox_1.TabStop = false;
this.con_GroupBox_1.Text = "UDP log";
//
// tim_1000ms
//
this.tim_1000ms.Interval = 1000;
this.tim_1000ms.Tick += new System.EventHandler(this.timer1_Tick);
//
// con_GroupBox_2
//
this.con_GroupBox_2.Controls.Add(this.label4);
this.con_GroupBox_2.Controls.Add(this.con_txt_mysql_username);
this.con_GroupBox_2.Controls.Add(this.label3);
this.con_GroupBox_2.Controls.Add(this.label2);
this.con_GroupBox_2.Controls.Add(this.label1);
this.con_GroupBox_2.Controls.Add(this.con_txt_mysql_database);
this.con_GroupBox_2.Controls.Add(this.con_txt_mysql_server);
this.con_GroupBox_2.Controls.Add(this.con_txt_mysql_password);
this.con_GroupBox_2.Location = new System.Drawing.Point(12, 27);
this.con_GroupBox_2.Name = "con_GroupBox_2";
this.con_GroupBox_2.Size = new System.Drawing.Size(324, 127);
this.con_GroupBox_2.TabIndex = 5;
this.con_GroupBox_2.TabStop = false;
this.con_GroupBox_2.Text = "MySQL";
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(45, 74);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(55, 13);
this.label4.TabIndex = 7;
this.label4.Text = "Username";
//
// con_txt_mysql_username
//
this.con_txt_mysql_username.Location = new System.Drawing.Point(106, 71);
this.con_txt_mysql_username.Name = "con_txt_mysql_username";
this.con_txt_mysql_username.Size = new System.Drawing.Size(207, 20);
this.con_txt_mysql_username.TabIndex = 6;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(47, 100);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(53, 13);
this.label3.TabIndex = 5;
this.label3.Text = "Password";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(47, 48);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(53, 13);
this.label2.TabIndex = 4;
this.label2.Text = "Database";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(22, 22);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(78, 13);
this.label1.TabIndex = 3;
this.label1.Text = "Server address";
//
// con_txt_mysql_database
//
this.con_txt_mysql_database.Location = new System.Drawing.Point(106, 45);
this.con_txt_mysql_database.Name = "con_txt_mysql_database";
this.con_txt_mysql_database.Size = new System.Drawing.Size(207, 20);
this.con_txt_mysql_database.TabIndex = 2;
//
// con_txt_mysql_server
//
this.con_txt_mysql_server.Location = new System.Drawing.Point(106, 19);
this.con_txt_mysql_server.Name = "con_txt_mysql_server";
this.con_txt_mysql_server.Size = new System.Drawing.Size(207, 20);
this.con_txt_mysql_server.TabIndex = 1;
//
// con_txt_mysql_password
//
this.con_txt_mysql_password.Location = new System.Drawing.Point(106, 97);
this.con_txt_mysql_password.Name = "con_txt_mysql_password";
this.con_txt_mysql_password.PasswordChar = '*';
this.con_txt_mysql_password.Size = new System.Drawing.Size(207, 20);
this.con_txt_mysql_password.TabIndex = 0;
//
// con_GroupBox_3
//
this.con_GroupBox_3.Controls.Add(this.con_txt_3rd_lotatc);
this.con_GroupBox_3.Controls.Add(this.con_txt_3rd_srs);
this.con_GroupBox_3.Controls.Add(this.con_check_3rd_lotatc);
this.con_GroupBox_3.Controls.Add(this.con_check_3rd_srs);
this.con_GroupBox_3.Location = new System.Drawing.Point(12, 160);
this.con_GroupBox_3.Name = "con_GroupBox_3";
this.con_GroupBox_3.Size = new System.Drawing.Size(324, 69);
this.con_GroupBox_3.TabIndex = 6;
this.con_GroupBox_3.TabStop = false;
this.con_GroupBox_3.Text = "3rd Party";
//
// con_txt_3rd_lotatc
//
this.con_txt_3rd_lotatc.Location = new System.Drawing.Point(123, 39);
this.con_txt_3rd_lotatc.Name = "con_txt_3rd_lotatc";
this.con_txt_3rd_lotatc.Size = new System.Drawing.Size(190, 20);
this.con_txt_3rd_lotatc.TabIndex = 4;
this.con_txt_3rd_lotatc.MouseClick += new System.Windows.Forms.MouseEventHandler(this.con_txt_3rd_lotatc_Click);
//
// con_txt_3rd_srs
//
this.con_txt_3rd_srs.Location = new System.Drawing.Point(123, 16);
this.con_txt_3rd_srs.Name = "con_txt_3rd_srs";
this.con_txt_3rd_srs.Size = new System.Drawing.Size(190, 20);
this.con_txt_3rd_srs.TabIndex = 3;
this.con_txt_3rd_srs.MouseClick += new System.Windows.Forms.MouseEventHandler(this.con_txt_3rd_srs_Click);
//
// con_check_3rd_lotatc
//
this.con_check_3rd_lotatc.AutoSize = true;
this.con_check_3rd_lotatc.Location = new System.Drawing.Point(6, 42);
this.con_check_3rd_lotatc.Name = "con_check_3rd_lotatc";
this.con_check_3rd_lotatc.Size = new System.Drawing.Size(100, 17);
this.con_check_3rd_lotatc.TabIndex = 1;
this.con_check_3rd_lotatc.Text = "LotATC json file";
this.con_check_3rd_lotatc.UseVisualStyleBackColor = true;
//
// con_check_3rd_srs
//
this.con_check_3rd_srs.AutoSize = true;
this.con_check_3rd_srs.Location = new System.Drawing.Point(6, 19);
this.con_check_3rd_srs.Name = "con_check_3rd_srs";
this.con_check_3rd_srs.Size = new System.Drawing.Size(111, 17);
this.con_check_3rd_srs.TabIndex = 0;
this.con_check_3rd_srs.Text = "DCS SRS json file";
this.con_check_3rd_srs.UseVisualStyleBackColor = true;
//
// con_Button_Quit
//
this.con_Button_Quit.Location = new System.Drawing.Point(250, 405);
this.con_Button_Quit.Name = "con_Button_Quit";
this.con_Button_Quit.Size = new System.Drawing.Size(86, 39);
this.con_Button_Quit.TabIndex = 7;
this.con_Button_Quit.Text = "Quit";
this.con_Button_Quit.UseVisualStyleBackColor = true;
this.con_Button_Quit.Click += new System.EventHandler(this.con_Button_Quit_Click);
//
// con_lab_github
//
this.con_lab_github.AutoSize = true;
this.con_lab_github.Location = new System.Drawing.Point(141, 9);
this.con_lab_github.Name = "con_lab_github";
this.con_lab_github.Size = new System.Drawing.Size(181, 13);
this.con_lab_github.TabIndex = 8;
this.con_lab_github.TabStop = true;
this.con_lab_github.Text = "https://github.com/szporwolik/perun";
this.con_lab_github.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.con_lab_github_LinkClicked);
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(15, 9);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(120, 13);
this.label5.TabIndex = 9;
this.label5.Text = "Manual and bugtracker:";
//
// trayIconMain
//
this.trayIconMain.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info;
this.trayIconMain.BalloonTipText = "Perun";
this.trayIconMain.BalloonTipTitle = "Perun for DCS World";
this.trayIconMain.Icon = ((System.Drawing.Icon)(resources.GetObject("trayIconMain.Icon")));
this.trayIconMain.Text = "Perun for DCS World";
this.trayIconMain.MouseClick += new System.Windows.Forms.MouseEventHandler(this.trayIconMain_MouseDoubleClick);
this.trayIconMain.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.trayIconMain_MouseDoubleClick);
//
// openFileDialog_SRS
//
this.openFileDialog_SRS.FileName = "openFileDialog1";
//
// openFileDialog_LotATC
//
this.openFileDialog_LotATC.FileName = "openFileDialog1";
//
// tim_10000ms
//
this.tim_10000ms.Interval = 10000;
this.tim_10000ms.Tick += new System.EventHandler(this.tim_10000ms_Tick);
//
// form_Main
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(738, 567);
this.Controls.Add(this.con_Button_DEBUG);
this.Controls.Add(this.con_List_Received);
this.ClientSize = new System.Drawing.Size(348, 456);
this.Controls.Add(this.label5);
this.Controls.Add(this.con_lab_github);
this.Controls.Add(this.con_Button_Quit);
this.Controls.Add(this.con_GroupBox_3);
this.Controls.Add(this.con_GroupBox_2);
this.Controls.Add(this.con_GroupBox_1);
this.Controls.Add(this.con_Button_Listen_OFF);
this.Controls.Add(this.con_Button_Listen_ON);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "form_Main";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Perun for DCS World";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.form_Main_FormClosing);
this.Load += new System.EventHandler(this.form_Main_Load);
this.con_GroupBox_1.ResumeLayout(false);
this.con_GroupBox_2.ResumeLayout(false);
this.con_GroupBox_2.PerformLayout();
this.con_GroupBox_3.ResumeLayout(false);
this.con_GroupBox_3.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ListBox con_List_Received;
private System.Windows.Forms.Button con_Button_DEBUG;
private System.Windows.Forms.Button con_Button_Listen_ON;
private System.Windows.Forms.Button con_Button_Listen_OFF;
private System.Windows.Forms.GroupBox con_GroupBox_1;
private System.Windows.Forms.Timer tim_1000ms;
private System.Windows.Forms.GroupBox con_GroupBox_2;
private System.Windows.Forms.GroupBox con_GroupBox_3;
private System.Windows.Forms.TextBox con_txt_mysql_database;
private System.Windows.Forms.TextBox con_txt_mysql_server;
private System.Windows.Forms.MaskedTextBox con_txt_mysql_password;
private System.Windows.Forms.Button con_Button_Quit;
private System.Windows.Forms.MaskedTextBox con_txt_3rd_lotatc;
private System.Windows.Forms.MaskedTextBox con_txt_3rd_srs;
private System.Windows.Forms.CheckBox con_check_3rd_lotatc;
private System.Windows.Forms.CheckBox con_check_3rd_srs;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox con_txt_mysql_username;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.LinkLabel con_lab_github;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.NotifyIcon trayIconMain;
private System.Windows.Forms.OpenFileDialog openFileDialog_SRS;
private System.Windows.Forms.OpenFileDialog openFileDialog_LotATC;
private System.Windows.Forms.Timer tim_10000ms;
}
}

View File

@@ -1,30 +1,347 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Diagnostics;
using System.Net;
using System.Net.Sockets;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using Newtonsoft.Json;
namespace Perun_v1
{
public partial class form_Main : Form
{
public form_Main()
// Variable definitions
public Thread thread_UDPListener; // Seperate thread for UDP
public class_UDPListener UDPListener; // Helper class for UDP comunication
public string[] LogHistory=new string[10]; // Log history for GUI
public string[] SendBuffer=new string[10]; // Mysql send buffer
public bool LetMeOut=false; // Helper to handle system tray
public string MySql_connStr; // MySQL connection string
public static void LogHistoryAdd(ref string[] LogHistory, string Comment)
{
InitializeComponent();
// Add to log history and rotate
for (int i = 0; i < LogHistory.Length - 1; i++)
{
LogHistory[i] = LogHistory[i + 1];
}
LogHistory[9] = DateTime.Now.ToString("HH:mm:ss") + " > " + Comment;
}
private void con_Button_DEBUG_Click(object sender, EventArgs e)
public void SendToMySql(string raw_udp_frame)
{
con_List_Received.Items.Add("test");
// Main function to send data to mysql
// TODO : persistent connection and error handling
dynamic udp_frame = JsonConvert.DeserializeObject(raw_udp_frame);
// Cut raw data to type and paylod for proper mysql insert
string type = udp_frame.type;
// Type specyfic
if (type == "1") // Inject app version information
{
Assembly assembly = Assembly.GetExecutingAssembly();
FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fileVersionInfo.ProductVersion;
udp_frame.payload["v_win"] = "v"+version;
}
string payload = JsonConvert.SerializeObject(udp_frame.payload);
// Connect to mysql
MySqlConnection conn = new MySqlConnection(MySql_connStr);
try
{
Console.WriteLine("Sending data to MySQL - Begin");
conn.Open();
string sql = "INSERT INTO pe_DataRaw(pe_dataraw_type,pe_dataraw_payload) VALUES (" + type+",JSON_QUOTE('" + payload + "')) ON DUPLICATE KEY UPDATE pe_dataraw_payload = JSON_QUOTE('" + payload + "')";
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Console.WriteLine(rdr[0] + " -- " + rdr[1]);
}
rdr.Close();
LogHistoryAdd(ref LogHistory, "MySQL updated, package type: "+ type);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
LogHistoryAdd(ref LogHistory, "ERROR: MySQL");
}
conn.Close();
Console.WriteLine("Sending data to MySQL - Done");
}
public class class_UDPListener
{
// Main class for UDP listener
int listenPort; // Port to listen at
public bool done; // Helper to exit main loop without killing thread
public UdpClient listener; // Listener object
public string[] LogHistory; // Log history for GUI
public string[] SendBuffer; // Mysql send buffer
public class_UDPListener(int port, ref string[] LogHistory, ref string[] SendBuffer)
{
// Create clas - NOTE that there is reference passing
this.listenPort = port;
this.LogHistory = LogHistory;
this.SendBuffer = SendBuffer;
}
public void StartListen()
{
// Start listening to UDP
this.done = false;
listener = new UdpClient(listenPort);
IPEndPoint groupEP = new IPEndPoint(IPAddress.Loopback, listenPort);
string received_data;
byte[] receive_byte_array;
Console.WriteLine("UDP Listen start");
try
{
while (!done)
{
Console.WriteLine("UDP: Waiting for packet");
receive_byte_array = listener.Receive(ref groupEP);
received_data = Encoding.ASCII.GetString(receive_byte_array, 0, receive_byte_array.Length);
Console.WriteLine("Sender: {0} Payload: {1}", groupEP.ToString(), received_data);
// Add to log history and rotate
dynamic udp_frame = JsonConvert.DeserializeObject(received_data);
string type = udp_frame.type;
LogHistoryAdd(ref LogHistory, "UDP packet received, type: "+ type);
// Add to mySQL send buffer and rotate
for (int i = 0; i < SendBuffer.Length - 1; i++)
{
SendBuffer[i] = SendBuffer[i + 1];
}
SendBuffer[9] = received_data;
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
Console.WriteLine("UDP listen stop");
listener.Close();
}
}
public form_Main()
{
// Form init
InitializeComponent();
}
private void form_Main_Load(object sender, EventArgs e)
{
// Form loaded - fill controls with default values
LogHistory[0] = DateTime.Now.ToString("HH:mm:ss") + " > " + "Perun loaded...";
// Load settings
con_txt_mysql_database.Text = Properties.Settings.Default.MYSQL_DB;
con_txt_mysql_username.Text = Properties.Settings.Default.MYSQL_User;
con_txt_mysql_password.Text = Properties.Settings.Default.MYSQL_Password;
con_txt_mysql_server.Text = Properties.Settings.Default.MYSQL_Server;
con_txt_3rd_lotatc.Text = Properties.Settings.Default.OTHER_LOTATC_FILE;
con_txt_3rd_srs.Text = Properties.Settings.Default.OTHER_SRS_FILE;
con_check_3rd_lotatc.Checked = Properties.Settings.Default.OTHER_LOTATC_USE;
con_check_3rd_srs.Checked = Properties.Settings.Default.OTHER_SRS_USE;
}
private void con_Button_Listen_ON_Click(object sender, EventArgs e)
{
// Start listening
UDPListener = new class_UDPListener(48620,ref LogHistory, ref SendBuffer);
thread_UDPListener = new Thread(UDPListener.StartListen);
thread_UDPListener.Start();
// Update form controls
con_Button_Listen_ON.Enabled = false;
con_Button_Listen_OFF.Enabled = true;
con_txt_mysql_database.Enabled = false;
con_txt_mysql_username.Enabled = false;
con_txt_mysql_password.Enabled = false;
con_txt_mysql_server.Enabled = false;
con_txt_3rd_lotatc.Enabled = false;
con_txt_3rd_srs.Enabled = false;
con_check_3rd_lotatc.Enabled = false;
con_check_3rd_srs.Enabled = false;
// Prepare connection string
MySql_connStr = "server="+con_txt_mysql_server.Text+";user="+con_txt_mysql_username.Text+";database="+con_txt_mysql_database.Text+";port=3306;password="+con_txt_mysql_password.Text;
// Start timmers
tim_1000ms.Enabled = true;
tim_10000ms.Enabled = true;
}
private void con_Button_Listen_OFF_Click(object sender, EventArgs e)
{
// Stop listening
UDPListener.listener.Close();
// Update form controls
con_Button_Listen_ON.Enabled = true;
con_Button_Listen_OFF.Enabled = false;
con_txt_mysql_database.Enabled = true;
con_txt_mysql_username.Enabled = true;
con_txt_mysql_password.Enabled = true;
con_txt_mysql_server.Enabled = true;
con_txt_3rd_lotatc.Enabled = true;
con_txt_3rd_srs.Enabled = true;
con_check_3rd_lotatc.Enabled = true;
con_check_3rd_srs.Enabled = true;
// Stop timmers
tim_1000ms.Enabled = false;
tim_10000ms.Enabled = false;
}
private void timer1_Tick(object sender, EventArgs e)
{
// Main timer to sync GUI with background tasks and flush buffers
// Refresh Log Window
con_List_Received.Items.Clear();
foreach (string i in LogHistory)
{
if (i != null)
{
con_List_Received.Items.Add(i);
}
}
// Send buffer to MySQL
for (int i = 0; i < SendBuffer.Length - 1; i++)
{
if (SendBuffer[i] != null)
{
SendToMySql(SendBuffer[i]);
SendBuffer[i] = null;
}
}
}
private void con_lab_github_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
// Open default browser with link to Perun repo
ProcessStartInfo sInfo = new ProcessStartInfo("https://github.com/szporwolik/perun");
Process.Start(sInfo);
}
private void con_Button_Quit_Click(object sender, EventArgs e)
{
// Close app
DialogResult dialogResult = MessageBox.Show("Are you sure to exit Perun?", "Question", MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Question);
if (dialogResult == DialogResult.Yes)
{
// Save settings on exit
Properties.Settings.Default.MYSQL_Server = con_txt_mysql_database.Text;
Properties.Settings.Default.MYSQL_DB = con_txt_mysql_database.Text;
Properties.Settings.Default.MYSQL_User = con_txt_mysql_username.Text;
Properties.Settings.Default.MYSQL_Password = con_txt_mysql_password.Text;
Properties.Settings.Default.MYSQL_Server = con_txt_mysql_server.Text;
Properties.Settings.Default.OTHER_LOTATC_FILE = con_txt_3rd_lotatc.Text;
Properties.Settings.Default.OTHER_SRS_FILE = con_txt_3rd_srs.Text;
Properties.Settings.Default.OTHER_LOTATC_USE = con_check_3rd_lotatc.Checked;
Properties.Settings.Default.OTHER_SRS_USE = con_check_3rd_srs.Checked;
Properties.Settings.Default.Save();
LetMeOut = true;
this.Close();
}
else if (dialogResult == DialogResult.No)
{
//do nothing
}
}
private void form_Main_FormClosing(object sender, FormClosingEventArgs e)
{
// Minimize to try
if (e.CloseReason == CloseReason.UserClosing && !LetMeOut)
{
e.Cancel = true;
trayIconMain.Visible = true;
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
//this.Hide();
}
}
private void trayIconMain_MouseDoubleClick(object sender, MouseEventArgs e)
{
// Maximize from try
trayIconMain.Visible = false;
this.WindowState = FormWindowState.Normal;
this.ShowInTaskbar = true;
}
private void con_txt_3rd_srs_Click(object sender, MouseEventArgs e)
{
// Chose SRS Json file
if (openFileDialog_SRS.ShowDialog() == DialogResult.OK)
{
con_txt_3rd_srs.Text = openFileDialog_SRS.FileName;
con_check_3rd_srs.Checked = true;
} else
{
con_txt_3rd_srs.Text = "";
con_check_3rd_srs.Checked = false;
}
}
private void con_txt_3rd_lotatc_Click(object sender, MouseEventArgs e)
{
// Chose LotATC Json file
if (openFileDialog_LotATC.ShowDialog() == DialogResult.OK)
{
con_txt_3rd_lotatc.Text = openFileDialog_LotATC.FileName;
con_check_3rd_lotatc.Checked = true;
}
else
{
con_txt_3rd_lotatc.Text = "";
con_check_3rd_lotatc.Checked = false;
}
}
private void tim_10000ms_Tick(object sender, EventArgs e)
{
// Main timer to send JSON files to MySQL
string strSRSJson = System.IO.File.ReadAllText(con_txt_3rd_srs.Text);
LogHistoryAdd(ref LogHistory, "SRS data loaded");
string strLotATCJson = System.IO.File.ReadAllText(con_txt_3rd_lotatc.Text);
LogHistoryAdd(ref LogHistory, "LotATC data loaded");
strSRSJson = "{'type':'100','payload':'" + strSRSJson + "'}";
SendToMySql(strSRSJson);
strLotATCJson = "{'type':'101','payload':'" + strLotATCJson + "'}";
SendToMySql(strLotATCJson);
}
}
}

View File

@@ -117,4 +117,586 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="tim_1000ms.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="trayIconMain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>134, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="trayIconMain.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAQD8AAAEAIAAgQQAAFgAAACgAAABAAAAAfgAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGB
gQGAgICFgICA7YCAgPaAgICfgICACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACAgIB6gICA/4CAgP+AgID/gICA/4CAgKcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICA14CAgP+AgID/gICA/4CAgP+AgID8hISEAgAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOzs
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
7P/s7Oz/7OzsogAAAAAAAAAAAAAAAOzs7AXs7OzZ7Ozs/+zs7P/s7Oy2AAAAAAAAAAAAAAAAAAAAAOzs
7MHs7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz77Ozshezs
7A8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs7Owj7OzsDgAAAAAAAAAAAAAAAAAAAADs7Oyn7Ozs/uzs
7Lvs7Ox47OzsVuzs7Evs7Oxn7Ozsnezs7Ozs7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Ow2AAAAAAAAAAAAAAAA7OzsSuzs7P/s7Oz67OzsJwAA
AAAAAAAAAAAAAOzs7Fns7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Ozz7OzsqOzs7G7s7OxW7OzsW+zs7Hjs7Oy57Ozs/ezs7IwAAAAAAAAAAAAA
AADs7Ow87Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozsxubm5gAAAAAAAAAAAAAA
AADs7Oy17OzsjAAAAAAAAAAAAAAAAOzs7Ars7Ozi7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz57OzsJQAAAADs7OwD7Ozs0ezs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7OxcAAAAAAAAAAAAAAAA7OzsJ+zs7A0AAAAAAAAAAAAAAADs7OyC7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7LQAAAAA7OzsbOzs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs5Ozs7AoAAAAAgICATYCAgLOAgIC7gICAZGRkZADs7Owi7Ozs9+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7OzsSezs7Gvs7Ox+7OzsgOzs
7ILs7OyE7Ozsh+zs7Ins7OyL7Ozsjuzs7I/s7OyP7OzskOzs7JDs7OyR7Ozskuzs7JLs7OyT7OzslOzs
7JTs7OyV7Ozsluzs7Jbs7OyX7Ozsl+zs7Jjs7OyZ7Ozsmezs7Jrs7Ow7gICAVoCAgP+AgID/gICA/4CA
gP+AgICA7OzsN+zs7G3s7Oxv7Ozscezs7HTs7Ox27Ozseezs7Hvs7Ox97Ozsf+zs7IHs7OyE7Ozshuzs
7Ins7OyL7Ozsjezs7I7s7OyP7OzskOzs7JDs7OyR7Ozskuzs7JLs7OyT7Ozsk+zs7JTs7OyV7Ozslezs
7G4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICA
gMyAgID/gICA/4CAgP+AgID/gICA8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACAgIDegICA/4CAgP+AgID/gICA/4CAgP+RkZEAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAl4CAgP+AgID/gICA/4CAgP+AgIC9AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs7Oxw7Ozsm+zs
7Jrs7Oya7Ozsmezs7Jns7OyY7Ozsl+zs7Jfs7OyW7Ozsluzs7JXs7OyU7OzslOzs7JPs7OyS7Ozskuzs
7JHs7OyR7OzskOzs7I/s7OyP7Ozsjuzs7Ivs7OyJ7Ozsh+zs7IXs7OyD7OzsQoCAgAuAgICzgICA/4CA
gP+AgIDLgICAHezs7Dns7Oye7Ozsnuzs7J3s7Oyd7OzsnOzs7Jzs7Oyb7Ozsm+zs7Jrs7Oya7Ozsmezs
7Jns7OyY7OzsmOzs7Jfs7OyW7Ozsluzs7JXs7OyV7OzslOzs7JPs7OyT7Ozskuzs7JHs7OyR7OzskOzs
7JDs7Ox67OzsRezs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs9ezs
7B4AAAAAAAAAAICAgBuAgIAjfX19AAAAAADs7OwI7Ozs3+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7OzsYAAAAADs7Oy07Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7H0AAAAAAAAAAAAAAADs7OwK7OzsHwAAAAAAAAAAAAAAAOzs7Ffs7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozsw+rq6gAAAAAA7OzsJ+zs7Pvs7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7N7s7OwIAAAAAAAAAAAAAAAA7Ozsg+zs7K0AAAAAAAAAAAAA
AADKysoA7Ozswezs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs++zs7CwAAAAAAAAAAAAA
AADs7OyS7Ozs+Ozs7Kns7Oxn7OzsPuzs7Drs7OxY7Ozsjuzs7Ofs7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7OxSAAAAAAAAAAAAAAAA7OzsIOzs
7Pbs7Oz/7OzsQwAAAAAAAAAAAAAAAOzs7DDs7Oz+7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Ozx7Ozspuzs7Gzs7OxT7OzsWuzs7Hjs7Oy57Ozs/ezs
7IwAAAAAAAAAAAAAAAAAAAAA7OzsEOzs7BYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs7OwF7Ozsaezs
7PPs7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oy8AAAAAAAA
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AADs7Owz7Ozs/+zs7P/s7Oz/7Ozs/+zs7EsAAAAAAAAAAAAAAADs7Owl7Ozs+ezs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/uzs7DEAAAAAAAAAAAAA
AADs7OxN7Ozs/+zs7P/s7Oz/7Ozs/+zs7DEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAADs7OwD7Ozsxezs7P/s7Oz/7Ozs/+zs7LUAAAAAAAAAAAAAAAAAAAAA7OzstOzs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7OzB6urqAAAAAAAAAAAAAAAAAOzs7Lrs7Oz/7Ozs/+zs7P/s7OzB7OzsAgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADr6+sA7Ozsluzs7P/s7Oz/7Ozs/+zs7Pjs7OwlAAAAAAAA
AAAAAAAA7OzsTOzs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P3s7OzT7Ozstuzs7Ljs7OzU7Ozs/uzs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7FQAAAAAAAAAAAAAAADs7Owq7Ozs/Ozs7P/s7Oz/7Ozs/+zs
7JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs7OwO7Ozspuzs7P/s7Oz/7Ozs/+zs
7P/s7OyIAAAAAAAAAAAAAAAA7OzsBuzs7Nrs7Oz/7Ozs/+zs7P/s7Oz/7Ozs6Ozs7G3s7OwSAAAAAAAA
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
gP+AgIDjAAAAAAAAAAAAAAAAAAAAAAAAAADs7OyN7Ozs/+zs7P/s7Oz/7Ozs/+zs7Obs7OwLAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAOzs7ALs7OwI7OzsCOzs7Ajs7OwI7OzsCOzs7AQAAAAAAAAAAAAAAAAAAAAAAAAAAICA
gPaAgID/gICA/4CAgP+AgID/gICA5gAAAAAAAAAAAAAAAAAAAAAAAAAA7OzsBOzs7Ajs7OwI7OzsCOzs
7Ajs7OwI6+vrAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACAgICagICA/4CAgP+AgID/gICA/4CAgIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICACoCAgJeAgID0gICA8ICAgI6AgIAFAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////4H///////
//gf////////+A///////4D4DwH/////wPgfA7////nA/B8Dn///+OB//gcf///wcD/8Dg////BwH/wO
D///4DgP8BwH///gOAPAHAf///gcAAA4H////BwAAHgf///8DgAAcD//+D4HAADgfB/wPgcAAOB8D/Ae
A4ABwHgP8B4DgAHAeA/wHgHAA4B4D/A+AeAHAHwP/HwA4AcAPj///ABwDgA////4AHAOAB////AAOBwA
D//PwAA4PAAD88AAABw4AAADgAAAHnAAAAEAAAAOcAAAAQAAAAQgAAAAAAAAAAAAAAD////4H///////
//gf////////+B////8AAAAAAAAAAAAAAAZgAAAAgAAADnAAAAGAAAAOeAAAAcAAABw4AAADz8AAPBwA
A/P/8AA4HAAP///4AHAOAB////wAcA4AP//4fADgBwA+P/A+AeAHgHwP8B4BwAOAeA/wHgPAAcB4D/Ae
A4ABwHgP8D4HAADgfA/4fgcAAOB8H//8DgAAcD////geAAB4H///+BwAADgf///gOAPAHAf//+A4D/Ac
B///4HAf+A4P///w8D/8Dg////jgf/4HH///+cD4Hgef////wPgfA/////+A+B8B/////4D4HwH/////
//gf////////+B////8=
</value>
</data>
<metadata name="openFileDialog_SRS.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>257, 17</value>
</metadata>
<metadata name="openFileDialog_LotATC.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>397, 17</value>
</metadata>
<metadata name="tim_10000ms.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>563, 19</value>
</metadata>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAQD8AAAEAIAAgQQAAFgAAACgAAABAAAAAfgAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGB
gQGAgICFgICA7YCAgPaAgICfgICACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACAgIB6gICA/4CAgP+AgID/gICA/4CAgKcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICA14CAgP+AgID/gICA/4CAgP+AgID8hISEAgAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOzs
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
7P/s7Oz/7OzsogAAAAAAAAAAAAAAAOzs7AXs7OzZ7Ozs/+zs7P/s7Oy2AAAAAAAAAAAAAAAAAAAAAOzs
7MHs7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz77Ozshezs
7A8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs7Owj7OzsDgAAAAAAAAAAAAAAAAAAAADs7Oyn7Ozs/uzs
7Lvs7Ox47OzsVuzs7Evs7Oxn7Ozsnezs7Ozs7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Ow2AAAAAAAAAAAAAAAA7OzsSuzs7P/s7Oz67OzsJwAA
AAAAAAAAAAAAAOzs7Fns7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Ozz7OzsqOzs7G7s7OxW7OzsW+zs7Hjs7Oy57Ozs/ezs7IwAAAAAAAAAAAAA
AADs7Ow87Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozsxubm5gAAAAAAAAAAAAAA
AADs7Oy17OzsjAAAAAAAAAAAAAAAAOzs7Ars7Ozi7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz57OzsJQAAAADs7OwD7Ozs0ezs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7OxcAAAAAAAAAAAAAAAA7OzsJ+zs7A0AAAAAAAAAAAAAAADs7OyC7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7LQAAAAA7OzsbOzs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs5Ozs7AoAAAAAgICATYCAgLOAgIC7gICAZGRkZADs7Owi7Ozs9+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7OzsSezs7Gvs7Ox+7OzsgOzs
7ILs7OyE7Ozsh+zs7Ins7OyL7Ozsjuzs7I/s7OyP7OzskOzs7JDs7OyR7Ozskuzs7JLs7OyT7OzslOzs
7JTs7OyV7Ozsluzs7Jbs7OyX7Ozsl+zs7Jjs7OyZ7Ozsmezs7Jrs7Ow7gICAVoCAgP+AgID/gICA/4CA
gP+AgICA7OzsN+zs7G3s7Oxv7Ozscezs7HTs7Ox27Ozseezs7Hvs7Ox97Ozsf+zs7IHs7OyE7Ozshuzs
7Ins7OyL7Ozsjezs7I7s7OyP7OzskOzs7JDs7OyR7Ozskuzs7JLs7OyT7Ozsk+zs7JTs7OyV7Ozslezs
7G4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICA
gMyAgID/gICA/4CAgP+AgID/gICA8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACAgIDegICA/4CAgP+AgID/gICA/4CAgP+RkZEAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAl4CAgP+AgID/gICA/4CAgP+AgIC9AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs7Oxw7Ozsm+zs
7Jrs7Oya7Ozsmezs7Jns7OyY7Ozsl+zs7Jfs7OyW7Ozsluzs7JXs7OyU7OzslOzs7JPs7OyS7Ozskuzs
7JHs7OyR7OzskOzs7I/s7OyP7Ozsjuzs7Ivs7OyJ7Ozsh+zs7IXs7OyD7OzsQoCAgAuAgICzgICA/4CA
gP+AgIDLgICAHezs7Dns7Oye7Ozsnuzs7J3s7Oyd7OzsnOzs7Jzs7Oyb7Ozsm+zs7Jrs7Oya7Ozsmezs
7Jns7OyY7OzsmOzs7Jfs7OyW7Ozsluzs7JXs7OyV7OzslOzs7JPs7OyT7Ozskuzs7JHs7OyR7OzskOzs
7JDs7Ox67OzsRezs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs9ezs
7B4AAAAAAAAAAICAgBuAgIAjfX19AAAAAADs7OwI7Ozs3+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7OzsYAAAAADs7Oy07Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7H0AAAAAAAAAAAAAAADs7OwK7OzsHwAAAAAAAAAAAAAAAOzs7Ffs7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozsw+rq6gAAAAAA7OzsJ+zs7Pvs7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7N7s7OwIAAAAAAAAAAAAAAAA7Ozsg+zs7K0AAAAAAAAAAAAA
AADKysoA7Ozswezs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs++zs7CwAAAAAAAAAAAAA
AADs7OyS7Ozs+Ozs7Kns7Oxn7OzsPuzs7Drs7OxY7Ozsjuzs7Ofs7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7OxSAAAAAAAAAAAAAAAA7OzsIOzs
7Pbs7Oz/7OzsQwAAAAAAAAAAAAAAAOzs7DDs7Oz+7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Ozx7Ozspuzs7Gzs7OxT7OzsWuzs7Hjs7Oy57Ozs/ezs
7IwAAAAAAAAAAAAAAAAAAAAA7OzsEOzs7BYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs7OwF7Ozsaezs
7PPs7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oy8AAAAAAAA
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AADs7Owz7Ozs/+zs7P/s7Oz/7Ozs/+zs7EsAAAAAAAAAAAAAAADs7Owl7Ozs+ezs7P/s7Oz/7Ozs/+zs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/uzs7DEAAAAAAAAAAAAA
AADs7OxN7Ozs/+zs7P/s7Oz/7Ozs/+zs7DEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAADs7OwD7Ozsxezs7P/s7Oz/7Ozs/+zs7LUAAAAAAAAAAAAAAAAAAAAA7OzstOzs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs
7P/s7OzB6urqAAAAAAAAAAAAAAAAAOzs7Lrs7Oz/7Ozs/+zs7P/s7OzB7OzsAgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADr6+sA7Ozsluzs7P/s7Oz/7Ozs/+zs7Pjs7OwlAAAAAAAA
AAAAAAAA7OzsTOzs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P3s7OzT7Ozstuzs7Ljs7OzU7Ozs/uzs
7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7FQAAAAAAAAAAAAAAADs7Owq7Ozs/Ozs7P/s7Oz/7Ozs/+zs
7JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs7OwO7Ozspuzs7P/s7Oz/7Ozs/+zs
7P/s7OyIAAAAAAAAAAAAAAAA7OzsBuzs7Nrs7Oz/7Ozs/+zs7P/s7Oz/7Ozs6Ozs7G3s7OwSAAAAAAAA
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
gP+AgIDjAAAAAAAAAAAAAAAAAAAAAAAAAADs7OyN7Ozs/+zs7P/s7Oz/7Ozs/+zs7Obs7OwLAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAOzs7ALs7OwI7OzsCOzs7Ajs7OwI7OzsCOzs7AQAAAAAAAAAAAAAAAAAAAAAAAAAAICA
gPaAgID/gICA/4CAgP+AgID/gICA5gAAAAAAAAAAAAAAAAAAAAAAAAAA7OzsBOzs7Ajs7OwI7OzsCOzs
7Ajs7OwI6+vrAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACAgICagICA/4CAgP+AgID/gICA/4CAgIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICACoCAgJeAgID0gICA8ICAgI6AgIAFAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////4H///////
//gf////////+A///////4D4DwH/////wPgfA7////nA/B8Dn///+OB//gcf///wcD/8Dg////BwH/wO
D///4DgP8BwH///gOAPAHAf///gcAAA4H////BwAAHgf///8DgAAcD//+D4HAADgfB/wPgcAAOB8D/Ae
A4ABwHgP8B4DgAHAeA/wHgHAA4B4D/A+AeAHAHwP/HwA4AcAPj///ABwDgA////4AHAOAB////AAOBwA
D//PwAA4PAAD88AAABw4AAADgAAAHnAAAAEAAAAOcAAAAQAAAAQgAAAAAAAAAAAAAAD////4H///////
//gf////////+B////8AAAAAAAAAAAAAAAZgAAAAgAAADnAAAAGAAAAOeAAAAcAAABw4AAADz8AAPBwA
A/P/8AA4HAAP///4AHAOAB////wAcA4AP//4fADgBwA+P/A+AeAHgHwP8B4BwAOAeA/wHgPAAcB4D/Ae
A4ABwHgP8D4HAADgfA/4fgcAAOB8H//8DgAAcD////geAAB4H///+BwAADgf///gOAPAHAf//+A4D/Ac
B///4HAf+A4P///w8D/8Dg////jgf/4HH///+cD4Hgef////wPgfA/////+A+B8B/////4D4HwH/////
//gf////////+B////8=
</value>
</data>
</root>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Google.Protobuf" version="3.5.1" targetFramework="net461" />
<package id="MySql.Data" version="8.0.15" targetFramework="net461" />
<package id="Newtonsoft.Json" version="12.0.1" targetFramework="net461" />
</packages>

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB