diff --git a/DDMonorepo.sln b/DDMonorepo.sln
index 45aaa2a0..30b65dc2 100644
--- a/DDMonorepo.sln
+++ b/DDMonorepo.sln
@@ -59,6 +59,10 @@ Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "GUI_EDMI", "GUI_EDMI\GUI_ED
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "EDMI_ClientSuite", "EDMI_ClientSuite\EDMI_ClientSuite.vbproj", "{406C95F4-9FEA-45B6-8385-1768CDBBF1A7}"
EndProject
+Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DDEDMService", "SERVICES\DDEDM_NetworkService\DDEDMService.vbproj", "{A8C3F298-76AB-4359-AB3C-986E313B4336}"
+EndProject
+Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "EDMIFileOps", "EDMI_FILE_OPs\EDMIFileOps.vbproj", "{5B1171DC-FFFE-4813-A20D-786AAE47B320}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -141,6 +145,14 @@ Global
{406C95F4-9FEA-45B6-8385-1768CDBBF1A7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{406C95F4-9FEA-45B6-8385-1768CDBBF1A7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{406C95F4-9FEA-45B6-8385-1768CDBBF1A7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A8C3F298-76AB-4359-AB3C-986E313B4336}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A8C3F298-76AB-4359-AB3C-986E313B4336}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A8C3F298-76AB-4359-AB3C-986E313B4336}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A8C3F298-76AB-4359-AB3C-986E313B4336}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5B1171DC-FFFE-4813-A20D-786AAE47B320}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5B1171DC-FFFE-4813-A20D-786AAE47B320}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5B1171DC-FFFE-4813-A20D-786AAE47B320}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5B1171DC-FFFE-4813-A20D-786AAE47B320}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -165,6 +177,8 @@ Global
{1FB2854F-C050-427D-9FAC-1D8F232E8025} = {7AF3F9C2-C939-4A08-95C1-0453207E298A}
{88EDAD5B-1B98-43E4-B068-1251E7AF01A0} = {8FFE925E-8B84-45F1-93CB-32B1C96F41EB}
{406C95F4-9FEA-45B6-8385-1768CDBBF1A7} = {8FFE925E-8B84-45F1-93CB-32B1C96F41EB}
+ {A8C3F298-76AB-4359-AB3C-986E313B4336} = {7AF3F9C2-C939-4A08-95C1-0453207E298A}
+ {5B1171DC-FFFE-4813-A20D-786AAE47B320} = {3E2008C8-27B1-41DD-9B1A-0C4029F6AECC}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C1BE4090-A0FD-48AF-86CB-39099D14B286}
diff --git a/EDMI_ClientSuite/App.config b/EDMI_ClientSuite/App.config
index 5534e287..2f1ad23e 100644
--- a/EDMI_ClientSuite/App.config
+++ b/EDMI_ClientSuite/App.config
@@ -1,6 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ net.tcp://172.24.12.67:9000/DigitalData/Services/Main
+
+
+
\ No newline at end of file
diff --git a/EDMI_ClientSuite/ClassInit.vb b/EDMI_ClientSuite/ClassInit.vb
index 776e5f7a..0ec64426 100644
--- a/EDMI_ClientSuite/ClassInit.vb
+++ b/EDMI_ClientSuite/ClassInit.vb
@@ -1,3 +1,61 @@
-Public Class ClassInit
+Imports DigitalData.Modules.Logging
+Imports System.ServiceModel
+Imports EDMI_ClientSuite.NetworkService_DDEDM
+Imports System.IO
+
+Public Class ClassInit
+ Private _ChannelFactory As ChannelFactory(Of IEDMServiceChannel)
+ Private _Channel As IEDMServiceChannel
+ Private _Logger As Logger
+ Private _MyLogger As LogConfig
+
+ Public Sub New()
+ Dim oUserAppdata = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Digital Data\EDMI_Client_Suite\Log")
+
+ _MyLogger = New LogConfig(LogConfig.PathType.CustomPath, oUserAppdata)
+ _Logger = _MyLogger.GetLogger()
+ MyLogger = _Logger
+ MyLogConfig = _MyLogger
+
+ Try
+ Dim binding As New NetTcpBinding()
+ binding.Security.Mode = SecurityMode.Transport
+ binding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows
+ binding.MaxReceivedMessageSize = 2147483647
+ binding.MaxBufferSize = 2147483647
+ binding.MaxBufferPoolSize = 2147483647
+ binding.MaxConnections = 10000
+ binding.ReaderQuotas.MaxArrayLength = 2147483647
+ binding.ReaderQuotas.MaxStringContentLength = 2147483647
+ 'binding.TransferMode = TransferMode.Streamed
+
+ Dim endpointAddress = New EndpointAddress(My.Settings.EDM_NetworkService_Adress)
+ _ChannelFactory = New ChannelFactory(Of IEDMServiceChannel)(binding, endpointAddress)
+ Connect2NetService()
+ Catch ex As Exception
+ _Logger.Error(ex)
+ End Try
+
+
+ End Sub
+ Private Sub Connect2NetService()
+ Try
+ _Channel = Nothing
+ _Channel = _ChannelFactory.CreateChannel()
+ _Logger.Info("Successfully connected to EDM_Network Service")
+ AddHandler _Channel.Faulted, AddressOf Reconnect
+
+ _Channel.Open()
+ Catch ex As Exception
+ _Logger.Error(ex)
+ End Try
+
+
+ End Sub
+ Private Sub Reconnect()
+ _Channel.Abort()
+
+ Connect2NetService()
+ End Sub
End Class
diff --git a/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/DigitalData.Modules.Filesystem.xsd b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/DigitalData.Modules.Filesystem.xsd
new file mode 100644
index 00000000..46469df3
--- /dev/null
+++ b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/DigitalData.Modules.Filesystem.xsd
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/DigitalData.Services.EDMService.wsdl b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/DigitalData.Services.EDMService.wsdl
new file mode 100644
index 00000000..2fd4ed52
--- /dev/null
+++ b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/DigitalData.Services.EDMService.wsdl
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/DigitalData.Services.EDMService.xsd b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/DigitalData.Services.EDMService.xsd
new file mode 100644
index 00000000..dcec368e
--- /dev/null
+++ b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/DigitalData.Services.EDMService.xsd
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/DigitalData.Services.EDMService1.xsd b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/DigitalData.Services.EDMService1.xsd
new file mode 100644
index 00000000..4fce5c2f
--- /dev/null
+++ b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/DigitalData.Services.EDMService1.xsd
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/EDMI_ClientSuite.NetworkService_DDEDM.ContainerResult.datasource b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/EDMI_ClientSuite.NetworkService_DDEDM.ContainerResult.datasource
new file mode 100644
index 00000000..e187b1c4
--- /dev/null
+++ b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/EDMI_ClientSuite.NetworkService_DDEDM.ContainerResult.datasource
@@ -0,0 +1,10 @@
+
+
+
+ EDMI_ClientSuite.NetworkService_DDEDM.ContainerResult, Connected Services.NetworkService_DDEDM.Reference.vb.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
+
\ No newline at end of file
diff --git a/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/EDMI_ClientSuite.NetworkService_DDEDM.NonQueryResult.datasource b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/EDMI_ClientSuite.NetworkService_DDEDM.NonQueryResult.datasource
new file mode 100644
index 00000000..dda8c325
--- /dev/null
+++ b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/EDMI_ClientSuite.NetworkService_DDEDM.NonQueryResult.datasource
@@ -0,0 +1,10 @@
+
+
+
+ EDMI_ClientSuite.NetworkService_DDEDM.NonQueryResult, Connected Services.NetworkService_DDEDM.Reference.vb.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
+
\ No newline at end of file
diff --git a/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/EDMI_ClientSuite.NetworkService_DDEDM.ScalarResult.datasource b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/EDMI_ClientSuite.NetworkService_DDEDM.ScalarResult.datasource
new file mode 100644
index 00000000..dd44709e
--- /dev/null
+++ b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/EDMI_ClientSuite.NetworkService_DDEDM.ScalarResult.datasource
@@ -0,0 +1,10 @@
+
+
+
+ EDMI_ClientSuite.NetworkService_DDEDM.ScalarResult, Connected Services.NetworkService_DDEDM.Reference.vb.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
+
\ No newline at end of file
diff --git a/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/EDMI_ClientSuite.NetworkService_DDEDM.TableResult.datasource b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/EDMI_ClientSuite.NetworkService_DDEDM.TableResult.datasource
new file mode 100644
index 00000000..f645aaa5
--- /dev/null
+++ b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/EDMI_ClientSuite.NetworkService_DDEDM.TableResult.datasource
@@ -0,0 +1,10 @@
+
+
+
+ EDMI_ClientSuite.NetworkService_DDEDM.TableResult, Connected Services.NetworkService_DDEDM.Reference.vb.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
+
\ No newline at end of file
diff --git a/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/Reference.svcmap b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/Reference.svcmap
new file mode 100644
index 00000000..46ef9665
--- /dev/null
+++ b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/Reference.svcmap
@@ -0,0 +1,37 @@
+
+
+
+ false
+ true
+ true
+
+ false
+ false
+ false
+
+
+ true
+ Auto
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/Reference.vb b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/Reference.vb
new file mode 100644
index 00000000..2354b9f6
--- /dev/null
+++ b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/Reference.vb
@@ -0,0 +1,588 @@
+'------------------------------------------------------------------------------
+'
+' Dieser Code wurde von einem Tool generiert.
+' Laufzeitversion:4.0.30319.42000
+'
+' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+' der Code erneut generiert wird.
+'
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+Imports System
+Imports System.Runtime.Serialization
+
+Namespace NetworkService_DDEDM
+
+ _
+ Partial Public Class TableResult
+ Inherits Object
+ Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+
+ _
+ Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject
+
+ _
+ Private ErrorMessageField As String
+
+ _
+ Private OKField As Boolean
+
+ _
+ Private TableField As System.Data.DataTable
+
+ _
+ Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData
+ Get
+ Return Me.extensionDataField
+ End Get
+ Set
+ Me.extensionDataField = value
+ End Set
+ End Property
+
+ _
+ Public Property ErrorMessage() As String
+ Get
+ Return Me.ErrorMessageField
+ End Get
+ Set
+ If (Object.ReferenceEquals(Me.ErrorMessageField, value) <> true) Then
+ Me.ErrorMessageField = value
+ Me.RaisePropertyChanged("ErrorMessage")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property OK() As Boolean
+ Get
+ Return Me.OKField
+ End Get
+ Set
+ If (Me.OKField.Equals(value) <> true) Then
+ Me.OKField = value
+ Me.RaisePropertyChanged("OK")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property Table() As System.Data.DataTable
+ Get
+ Return Me.TableField
+ End Get
+ Set
+ If (Object.ReferenceEquals(Me.TableField, value) <> true) Then
+ Me.TableField = value
+ Me.RaisePropertyChanged("Table")
+ End If
+ End Set
+ End Property
+
+ Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
+
+ Protected Sub RaisePropertyChanged(ByVal propertyName As String)
+ Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent
+ If (Not (propertyChanged) Is Nothing) Then
+ propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName))
+ End If
+ End Sub
+ End Class
+
+ _
+ Partial Public Class ScalarResult
+ Inherits Object
+ Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+
+ _
+ Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject
+
+ _
+ Private ErrorMessageField As String
+
+ _
+ Private OKField As Boolean
+
+ _
+ Private ScalarField As Object
+
+ _
+ Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData
+ Get
+ Return Me.extensionDataField
+ End Get
+ Set
+ Me.extensionDataField = value
+ End Set
+ End Property
+
+ _
+ Public Property ErrorMessage() As String
+ Get
+ Return Me.ErrorMessageField
+ End Get
+ Set
+ If (Object.ReferenceEquals(Me.ErrorMessageField, value) <> true) Then
+ Me.ErrorMessageField = value
+ Me.RaisePropertyChanged("ErrorMessage")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property OK() As Boolean
+ Get
+ Return Me.OKField
+ End Get
+ Set
+ If (Me.OKField.Equals(value) <> true) Then
+ Me.OKField = value
+ Me.RaisePropertyChanged("OK")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property Scalar() As Object
+ Get
+ Return Me.ScalarField
+ End Get
+ Set
+ If (Object.ReferenceEquals(Me.ScalarField, value) <> true) Then
+ Me.ScalarField = value
+ Me.RaisePropertyChanged("Scalar")
+ End If
+ End Set
+ End Property
+
+ Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
+
+ Protected Sub RaisePropertyChanged(ByVal propertyName As String)
+ Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent
+ If (Not (propertyChanged) Is Nothing) Then
+ propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName))
+ End If
+ End Sub
+ End Class
+
+ _
+ Partial Public Class NonQueryResult
+ Inherits Object
+ Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+
+ _
+ Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject
+
+ _
+ Private ErrorMessageField As String
+
+ _
+ Private OKField As Boolean
+
+ _
+ Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData
+ Get
+ Return Me.extensionDataField
+ End Get
+ Set
+ Me.extensionDataField = value
+ End Set
+ End Property
+
+ _
+ Public Property ErrorMessage() As String
+ Get
+ Return Me.ErrorMessageField
+ End Get
+ Set
+ If (Object.ReferenceEquals(Me.ErrorMessageField, value) <> true) Then
+ Me.ErrorMessageField = value
+ Me.RaisePropertyChanged("ErrorMessage")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property OK() As Boolean
+ Get
+ Return Me.OKField
+ End Get
+ Set
+ If (Me.OKField.Equals(value) <> true) Then
+ Me.OKField = value
+ Me.RaisePropertyChanged("OK")
+ End If
+ End Set
+ End Property
+
+ Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
+
+ Protected Sub RaisePropertyChanged(ByVal propertyName As String)
+ Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent
+ If (Not (propertyChanged) Is Nothing) Then
+ propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName))
+ End If
+ End Sub
+ End Class
+
+ _
+ Partial Public Class ContainerResult
+ Inherits Object
+ Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+
+ _
+ Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject
+
+ Private ContainerField As NetworkService_DDEDM.FileContainerInner
+
+ Private ErrorMessageField As String
+
+ Private OKField As Boolean
+
+ _
+ Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData
+ Get
+ Return Me.extensionDataField
+ End Get
+ Set
+ Me.extensionDataField = value
+ End Set
+ End Property
+
+ _
+ Public Property Container() As NetworkService_DDEDM.FileContainerInner
+ Get
+ Return Me.ContainerField
+ End Get
+ Set
+ If (Object.ReferenceEquals(Me.ContainerField, value) <> true) Then
+ Me.ContainerField = value
+ Me.RaisePropertyChanged("Container")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property ErrorMessage() As String
+ Get
+ Return Me.ErrorMessageField
+ End Get
+ Set
+ If (Object.ReferenceEquals(Me.ErrorMessageField, value) <> true) Then
+ Me.ErrorMessageField = value
+ Me.RaisePropertyChanged("ErrorMessage")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property OK() As Boolean
+ Get
+ Return Me.OKField
+ End Get
+ Set
+ If (Me.OKField.Equals(value) <> true) Then
+ Me.OKField = value
+ Me.RaisePropertyChanged("OK")
+ End If
+ End Set
+ End Property
+
+ Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
+
+ Protected Sub RaisePropertyChanged(ByVal propertyName As String)
+ Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent
+ If (Not (propertyChanged) Is Nothing) Then
+ propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName))
+ End If
+ End Sub
+ End Class
+
+ _
+ Partial Public Class FileContainerInner
+ Inherits Object
+ Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+
+ _
+ Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject
+
+ Private ContentsField() As Byte
+
+ Private CreatedAtField As Date
+
+ Private ExtensionField As String
+
+ Private FileIdField As String
+
+ Private UpdatedAtField As Date
+
+ _
+ Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData
+ Get
+ Return Me.extensionDataField
+ End Get
+ Set
+ Me.extensionDataField = value
+ End Set
+ End Property
+
+ _
+ Public Property Contents() As Byte()
+ Get
+ Return Me.ContentsField
+ End Get
+ Set
+ If (Object.ReferenceEquals(Me.ContentsField, value) <> true) Then
+ Me.ContentsField = value
+ Me.RaisePropertyChanged("Contents")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property CreatedAt() As Date
+ Get
+ Return Me.CreatedAtField
+ End Get
+ Set
+ If (Me.CreatedAtField.Equals(value) <> true) Then
+ Me.CreatedAtField = value
+ Me.RaisePropertyChanged("CreatedAt")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property Extension() As String
+ Get
+ Return Me.ExtensionField
+ End Get
+ Set
+ If (Object.ReferenceEquals(Me.ExtensionField, value) <> true) Then
+ Me.ExtensionField = value
+ Me.RaisePropertyChanged("Extension")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property FileId() As String
+ Get
+ Return Me.FileIdField
+ End Get
+ Set
+ If (Object.ReferenceEquals(Me.FileIdField, value) <> true) Then
+ Me.FileIdField = value
+ Me.RaisePropertyChanged("FileId")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property UpdatedAt() As Date
+ Get
+ Return Me.UpdatedAtField
+ End Get
+ Set
+ If (Me.UpdatedAtField.Equals(value) <> true) Then
+ Me.UpdatedAtField = value
+ Me.RaisePropertyChanged("UpdatedAt")
+ End If
+ End Set
+ End Property
+
+ Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
+
+ Protected Sub RaisePropertyChanged(ByVal propertyName As String)
+ Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent
+ If (Not (propertyChanged) Is Nothing) Then
+ propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName))
+ End If
+ End Sub
+ End Class
+
+ _
+ Public Interface IEDMService
+
+ _
+ Function CreateDatabaseRequest(ByVal Name As String, ByVal Debug As Boolean) As String
+
+ _
+ Function CreateDatabaseRequestAsync(ByVal Name As String, ByVal Debug As Boolean) As System.Threading.Tasks.Task(Of String)
+
+ _
+ Sub CloseDatabaseRequest()
+
+ _
+ Function CloseDatabaseRequestAsync() As System.Threading.Tasks.Task
+
+ _
+ Function ReturnDatatable(ByVal SQL As String) As NetworkService_DDEDM.TableResult
+
+ _
+ Function ReturnDatatableAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of NetworkService_DDEDM.TableResult)
+
+ _
+ Function ReturnScalar(ByVal SQL As String) As NetworkService_DDEDM.ScalarResult
+
+ _
+ Function ReturnScalarAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of NetworkService_DDEDM.ScalarResult)
+
+ _
+ Function ExecuteNonQuery(ByVal SQL As String) As NetworkService_DDEDM.NonQueryResult
+
+ _
+ Function ExecuteNonQueryAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of NetworkService_DDEDM.NonQueryResult)
+
+ _
+ Function CreateFile(ByVal Contents() As Byte, ByVal Extension As String) As String
+
+ _
+ Function CreateFileAsync(ByVal Contents() As Byte, ByVal Extension As String) As System.Threading.Tasks.Task(Of String)
+
+ _
+ Function UpdateFile(ByVal ContainerId As String, ByVal Contents() As Byte) As String
+
+ _
+ Function UpdateFileAsync(ByVal ContainerId As String, ByVal Contents() As Byte) As System.Threading.Tasks.Task(Of String)
+
+ _
+ Function GetFile(ByVal ContainerId As String) As NetworkService_DDEDM.ContainerResult
+
+ _
+ Function GetFileAsync(ByVal ContainerId As String) As System.Threading.Tasks.Task(Of NetworkService_DDEDM.ContainerResult)
+
+ _
+ Function DeleteFile(ByVal ContainerId As String) As Boolean
+
+ _
+ Function DeleteFileAsync(ByVal ContainerId As String) As System.Threading.Tasks.Task(Of Boolean)
+ End Interface
+
+ _
+ Public Interface IEDMServiceChannel
+ Inherits NetworkService_DDEDM.IEDMService, System.ServiceModel.IClientChannel
+ End Interface
+
+ _
+ Partial Public Class EDMServiceClient
+ Inherits System.ServiceModel.ClientBase(Of NetworkService_DDEDM.IEDMService)
+ Implements NetworkService_DDEDM.IEDMService
+
+ Public Sub New()
+ MyBase.New
+ End Sub
+
+ Public Sub New(ByVal endpointConfigurationName As String)
+ MyBase.New(endpointConfigurationName)
+ End Sub
+
+ Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As String)
+ MyBase.New(endpointConfigurationName, remoteAddress)
+ End Sub
+
+ Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As System.ServiceModel.EndpointAddress)
+ MyBase.New(endpointConfigurationName, remoteAddress)
+ End Sub
+
+ Public Sub New(ByVal binding As System.ServiceModel.Channels.Binding, ByVal remoteAddress As System.ServiceModel.EndpointAddress)
+ MyBase.New(binding, remoteAddress)
+ End Sub
+
+ Public Function CreateDatabaseRequest(ByVal Name As String, ByVal Debug As Boolean) As String Implements NetworkService_DDEDM.IEDMService.CreateDatabaseRequest
+ Return MyBase.Channel.CreateDatabaseRequest(Name, Debug)
+ End Function
+
+ Public Function CreateDatabaseRequestAsync(ByVal Name As String, ByVal Debug As Boolean) As System.Threading.Tasks.Task(Of String) Implements NetworkService_DDEDM.IEDMService.CreateDatabaseRequestAsync
+ Return MyBase.Channel.CreateDatabaseRequestAsync(Name, Debug)
+ End Function
+
+ Public Sub CloseDatabaseRequest() Implements NetworkService_DDEDM.IEDMService.CloseDatabaseRequest
+ MyBase.Channel.CloseDatabaseRequest
+ End Sub
+
+ Public Function CloseDatabaseRequestAsync() As System.Threading.Tasks.Task Implements NetworkService_DDEDM.IEDMService.CloseDatabaseRequestAsync
+ Return MyBase.Channel.CloseDatabaseRequestAsync
+ End Function
+
+ Public Function ReturnDatatable(ByVal SQL As String) As NetworkService_DDEDM.TableResult Implements NetworkService_DDEDM.IEDMService.ReturnDatatable
+ Return MyBase.Channel.ReturnDatatable(SQL)
+ End Function
+
+ Public Function ReturnDatatableAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of NetworkService_DDEDM.TableResult) Implements NetworkService_DDEDM.IEDMService.ReturnDatatableAsync
+ Return MyBase.Channel.ReturnDatatableAsync(SQL)
+ End Function
+
+ Public Function ReturnScalar(ByVal SQL As String) As NetworkService_DDEDM.ScalarResult Implements NetworkService_DDEDM.IEDMService.ReturnScalar
+ Return MyBase.Channel.ReturnScalar(SQL)
+ End Function
+
+ Public Function ReturnScalarAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of NetworkService_DDEDM.ScalarResult) Implements NetworkService_DDEDM.IEDMService.ReturnScalarAsync
+ Return MyBase.Channel.ReturnScalarAsync(SQL)
+ End Function
+
+ Public Function ExecuteNonQuery(ByVal SQL As String) As NetworkService_DDEDM.NonQueryResult Implements NetworkService_DDEDM.IEDMService.ExecuteNonQuery
+ Return MyBase.Channel.ExecuteNonQuery(SQL)
+ End Function
+
+ Public Function ExecuteNonQueryAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of NetworkService_DDEDM.NonQueryResult) Implements NetworkService_DDEDM.IEDMService.ExecuteNonQueryAsync
+ Return MyBase.Channel.ExecuteNonQueryAsync(SQL)
+ End Function
+
+ Public Function CreateFile(ByVal Contents() As Byte, ByVal Extension As String) As String Implements NetworkService_DDEDM.IEDMService.CreateFile
+ Return MyBase.Channel.CreateFile(Contents, Extension)
+ End Function
+
+ Public Function CreateFileAsync(ByVal Contents() As Byte, ByVal Extension As String) As System.Threading.Tasks.Task(Of String) Implements NetworkService_DDEDM.IEDMService.CreateFileAsync
+ Return MyBase.Channel.CreateFileAsync(Contents, Extension)
+ End Function
+
+ Public Function UpdateFile(ByVal ContainerId As String, ByVal Contents() As Byte) As String Implements NetworkService_DDEDM.IEDMService.UpdateFile
+ Return MyBase.Channel.UpdateFile(ContainerId, Contents)
+ End Function
+
+ Public Function UpdateFileAsync(ByVal ContainerId As String, ByVal Contents() As Byte) As System.Threading.Tasks.Task(Of String) Implements NetworkService_DDEDM.IEDMService.UpdateFileAsync
+ Return MyBase.Channel.UpdateFileAsync(ContainerId, Contents)
+ End Function
+
+ Public Function GetFile(ByVal ContainerId As String) As NetworkService_DDEDM.ContainerResult Implements NetworkService_DDEDM.IEDMService.GetFile
+ Return MyBase.Channel.GetFile(ContainerId)
+ End Function
+
+ Public Function GetFileAsync(ByVal ContainerId As String) As System.Threading.Tasks.Task(Of NetworkService_DDEDM.ContainerResult) Implements NetworkService_DDEDM.IEDMService.GetFileAsync
+ Return MyBase.Channel.GetFileAsync(ContainerId)
+ End Function
+
+ Public Function DeleteFile(ByVal ContainerId As String) As Boolean Implements NetworkService_DDEDM.IEDMService.DeleteFile
+ Return MyBase.Channel.DeleteFile(ContainerId)
+ End Function
+
+ Public Function DeleteFileAsync(ByVal ContainerId As String) As System.Threading.Tasks.Task(Of Boolean) Implements NetworkService_DDEDM.IEDMService.DeleteFileAsync
+ Return MyBase.Channel.DeleteFileAsync(ContainerId)
+ End Function
+ End Class
+End Namespace
diff --git a/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/System.Data.xsd b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/System.Data.xsd
new file mode 100644
index 00000000..8c8a3c0c
--- /dev/null
+++ b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/System.Data.xsd
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/configuration.svcinfo b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/configuration.svcinfo
new file mode 100644
index 00000000..3e545624
--- /dev/null
+++ b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/configuration.svcinfo
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/configuration91.svcinfo b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/configuration91.svcinfo
new file mode 100644
index 00000000..d39914e6
--- /dev/null
+++ b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/configuration91.svcinfo
@@ -0,0 +1,210 @@
+
+
+
+
+
+
+ tcpBinding
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+ Buffered
+
+
+ OleTransactions
+
+
+ StrongWildcard
+
+
+ 0
+
+
+
+
+
+ 65536
+
+
+ 0
+
+
+
+
+
+ False
+
+
+ System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement
+
+
+ True
+
+
+ 00:10:00
+
+
+ False
+
+
+ System.ServiceModel.Configuration.NetTcpSecurityElement
+
+
+ Transport
+
+
+ System.ServiceModel.Configuration.TcpTransportSecurityElement
+
+
+ Windows
+
+
+ EncryptAndSign
+
+
+ System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement
+
+
+ Never
+
+
+ TransportSelected
+
+
+ (Sammlung)
+
+
+ Tls, Tls11, Tls12
+
+
+ System.ServiceModel.Configuration.MessageSecurityOverTcpElement
+
+
+ Windows
+
+
+ Default
+
+
+
+
+
+
+
+
+ net.tcp://localhost:9000/DigitalData/Services/Main
+
+
+
+
+
+ netTcpBinding
+
+
+ tcpBinding
+
+
+ NetworkService_DDEDM.IEDMService
+
+
+ System.ServiceModel.Configuration.AddressHeaderCollectionElement
+
+
+ <Header />
+
+
+ System.ServiceModel.Configuration.IdentityElement
+
+
+ System.ServiceModel.Configuration.UserPrincipalNameElement
+
+
+
+
+
+ System.ServiceModel.Configuration.ServicePrincipalNameElement
+
+
+
+
+
+ System.ServiceModel.Configuration.DnsElement
+
+
+ localhost
+
+
+ System.ServiceModel.Configuration.RsaElement
+
+
+
+
+
+ System.ServiceModel.Configuration.CertificateElement
+
+
+
+
+
+ System.ServiceModel.Configuration.CertificateReferenceElement
+
+
+ My
+
+
+ LocalMachine
+
+
+ FindBySubjectDistinguishedName
+
+
+
+
+
+ False
+
+
+ tcpBinding
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/service.wsdl b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/service.wsdl
new file mode 100644
index 00000000..520b3f35
--- /dev/null
+++ b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/service.wsdl
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ EncryptAndSign
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ net.tcp://localhost:9000/DigitalData/Services/Main
+
+ localhost
+
+
+
+
+
\ No newline at end of file
diff --git a/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/service.xsd b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/service.xsd
new file mode 100644
index 00000000..b4d5ff0f
--- /dev/null
+++ b/EDMI_ClientSuite/Connected Services/NetworkService_DDEDM/service.xsd
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EDMI_ClientSuite/EDMI_ClientSuite.vbproj b/EDMI_ClientSuite/EDMI_ClientSuite.vbproj
index 9134448b..a30191d5 100644
--- a/EDMI_ClientSuite/EDMI_ClientSuite.vbproj
+++ b/EDMI_ClientSuite/EDMI_ClientSuite.vbproj
@@ -13,6 +13,21 @@
WindowsForms
v4.6.1
true
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
AnyCPU
@@ -54,13 +69,23 @@
..\Modules.Database\bin\Debug\DigitalData.Modules.Database.dll
-
+
+ ..\EDMI_FILE_OPs\bin\Debug\DigitalData.Modules.EDMIFileOps.dll
+
+
+ False
..\Modules.Logging\bin\Debug\DigitalData.Modules.Logging.dll
+
+ False
+ ..\Modules.Logging\bin\Debug\NLog.dll
+
+
+
@@ -83,11 +108,22 @@
-
+
+ True
+ True
+ Reference.svcmap
+
+
+ frmFileTest.vb
+
+
Form
-
- Form1.vb
+
+ Form
+
+
+ frmMain.vb
Form
@@ -96,6 +132,12 @@
Form
+
+ frmUserBasics.vb
+
+
+ Form
+
True
@@ -111,14 +153,21 @@
Settings.settings
True
+
-
- Form1.vb
+
+ frmFileTest.vb
+
+
+ frmMain.vb
frmSplash.vb
+
+ frmUserBasics.vb
+
VbMyResourcesResXFileCodeGenerator
@@ -128,6 +177,35 @@
+
+ Designer
+
+
+
+ Designer
+
+
+ Designer
+
+
+ Reference.svcmap
+
+
+ Reference.svcmap
+
+
+ Reference.svcmap
+
+
+ Reference.svcmap
+
+
+
+ Designer
+
+
+ Designer
+
MyApplicationCodeGenerator
Application.Designer.vb
@@ -145,5 +223,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WCF Proxy Generator
+ Reference.vb
+
+
+
+
+ False
+ Microsoft .NET Framework 4.6.1 %28x86 und x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EDMI_ClientSuite/My Project/Application.Designer.vb b/EDMI_ClientSuite/My Project/Application.Designer.vb
index c1819f22..318bfa0a 100644
--- a/EDMI_ClientSuite/My Project/Application.Designer.vb
+++ b/EDMI_ClientSuite/My Project/Application.Designer.vb
@@ -32,7 +32,7 @@ Namespace My
_
Protected Overrides Sub OnCreateMainForm()
- Me.MainForm = Global.EDMI_ClientSuite.Form1
+ Me.MainForm = Global.EDMI_ClientSuite.frmMain
End Sub
End Class
End Namespace
diff --git a/EDMI_ClientSuite/My Project/Resources.Designer.vb b/EDMI_ClientSuite/My Project/Resources.Designer.vb
index 108e91fc..7f496587 100644
--- a/EDMI_ClientSuite/My Project/Resources.Designer.vb
+++ b/EDMI_ClientSuite/My Project/Resources.Designer.vb
@@ -60,6 +60,26 @@ Namespace My.Resources
End Set
End Property
+ '''
+ ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
+ '''
+ Friend ReadOnly Property email_go() As System.Drawing.Bitmap
+ Get
+ Dim obj As Object = ResourceManager.GetObject("email_go", resourceCulture)
+ Return CType(obj,System.Drawing.Bitmap)
+ End Get
+ End Property
+
+ '''
+ ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
+ '''
+ Friend ReadOnly Property folder_go() As System.Drawing.Bitmap
+ Get
+ Dim obj As Object = ResourceManager.GetObject("folder_go", resourceCulture)
+ Return CType(obj,System.Drawing.Bitmap)
+ End Get
+ End Property
+
'''
''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
'''
diff --git a/EDMI_ClientSuite/My Project/Resources.resx b/EDMI_ClientSuite/My Project/Resources.resx
index f9ad61a5..ae2292dd 100644
--- a/EDMI_ClientSuite/My Project/Resources.resx
+++ b/EDMI_ClientSuite/My Project/Resources.resx
@@ -121,7 +121,13 @@
..\Resources\iconfinder_Gowalla_324477.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\email_go.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
..\Resources\user_16xLG.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\folder_go.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
\ No newline at end of file
diff --git a/EDMI_ClientSuite/My Project/Settings.Designer.vb b/EDMI_ClientSuite/My Project/Settings.Designer.vb
index fda2e297..6ec95a4e 100644
--- a/EDMI_ClientSuite/My Project/Settings.Designer.vb
+++ b/EDMI_ClientSuite/My Project/Settings.Designer.vb
@@ -1,10 +1,10 @@
'------------------------------------------------------------------------------
'
-' This code was generated by a tool.
-' Runtime Version:4.0.30319.42000
+' Dieser Code wurde von einem Tool generiert.
+' Laufzeitversion:4.0.30319.42000
'
-' Changes to this file may cause incorrect behavior and will be lost if
-' the code is regenerated.
+' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+' der Code erneut generiert wird.
'
'------------------------------------------------------------------------------
@@ -13,57 +13,66 @@ Option Explicit On
Namespace My
-
- _
+
+ _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
-
- Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings)
-
-#Region "My.Settings Auto-Save Functionality"
+
+ Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)
+
+#Region "Automatische My.Settings-Speicherfunktion"
#If _MyType = "WindowsForms" Then
- Private Shared addedHandler As Boolean
+ Private Shared addedHandler As Boolean
- Private Shared addedHandlerLockObject As New Object
+ Private Shared addedHandlerLockObject As New Object
- _
- Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
- If My.Application.SaveMySettingsOnExit Then
- My.Settings.Save()
- End If
- End Sub
+ _
+ Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs)
+ If My.Application.SaveMySettingsOnExit Then
+ My.Settings.Save()
+ End If
+ End Sub
#End If
#End Region
-
+
Public Shared ReadOnly Property [Default]() As MySettings
Get
-
+
#If _MyType = "WindowsForms" Then
- If Not addedHandler Then
- SyncLock addedHandlerLockObject
- If Not addedHandler Then
- AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
- addedHandler = True
- End If
- End SyncLock
- End If
+ If Not addedHandler Then
+ SyncLock addedHandlerLockObject
+ If Not addedHandler Then
+ AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
+ addedHandler = True
+ End If
+ End SyncLock
+ End If
#End If
Return defaultInstance
End Get
End Property
+
+ _
+ Public ReadOnly Property EDM_NetworkService_Adress() As String
+ Get
+ Return CType(Me("EDM_NetworkService_Adress"),String)
+ End Get
+ End Property
End Class
End Namespace
Namespace My
-
- _
+
+ _
Friend Module MySettingsProperty
-
- _
+
+ _
Friend ReadOnly Property Settings() As Global.EDMI_ClientSuite.My.MySettings
Get
Return Global.EDMI_ClientSuite.My.MySettings.Default
diff --git a/EDMI_ClientSuite/My Project/Settings.settings b/EDMI_ClientSuite/My Project/Settings.settings
index 85b890b3..c95acafd 100644
--- a/EDMI_ClientSuite/My Project/Settings.settings
+++ b/EDMI_ClientSuite/My Project/Settings.settings
@@ -1,7 +1,9 @@
-
-
-
-
-
-
+
+
+
+
+ net.tcp://172.24.12.67:9000/DigitalData/Services/Main
+
+
+
\ No newline at end of file
diff --git a/EDMI_ClientSuite/MyAppSettings.vb b/EDMI_ClientSuite/MyAppSettings.vb
new file mode 100644
index 00000000..e90b171e
--- /dev/null
+++ b/EDMI_ClientSuite/MyAppSettings.vb
@@ -0,0 +1,8 @@
+Imports DigitalData.Modules.Logging
+Module MyAppSettings
+ Public APP_DB_VERSION As String
+
+ Public USER_LANGUAGE As String = "de-DE"
+ Public MyLogger As Logger
+ Public MyLogConfig As LogConfig
+End Module
diff --git a/EDMI_ClientSuite/Resources/email_go.png b/EDMI_ClientSuite/Resources/email_go.png
new file mode 100644
index 00000000..4a6c5d39
Binary files /dev/null and b/EDMI_ClientSuite/Resources/email_go.png differ
diff --git a/EDMI_ClientSuite/Resources/folder_go.png b/EDMI_ClientSuite/Resources/folder_go.png
new file mode 100644
index 00000000..34a736f7
Binary files /dev/null and b/EDMI_ClientSuite/Resources/folder_go.png differ
diff --git a/EDMI_ClientSuite/frmFileTest.Designer.vb b/EDMI_ClientSuite/frmFileTest.Designer.vb
new file mode 100644
index 00000000..823a97d1
--- /dev/null
+++ b/EDMI_ClientSuite/frmFileTest.Designer.vb
@@ -0,0 +1,50 @@
+ _
+Partial Class frmFileTest
+ Inherits System.Windows.Forms.Form
+
+ 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+ _
+ Protected Overrides Sub Dispose(ByVal disposing As Boolean)
+ Try
+ If disposing AndAlso components IsNot Nothing Then
+ components.Dispose()
+ End If
+ Finally
+ MyBase.Dispose(disposing)
+ End Try
+ End Sub
+
+ 'Wird vom Windows Form-Designer benötigt.
+ Private components As System.ComponentModel.IContainer
+
+ 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+ 'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
+ 'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+ _
+ Private Sub InitializeComponent()
+ Me.Button1 = New System.Windows.Forms.Button()
+ Me.SuspendLayout()
+ '
+ 'Button1
+ '
+ Me.Button1.Location = New System.Drawing.Point(12, 12)
+ Me.Button1.Name = "Button1"
+ Me.Button1.Size = New System.Drawing.Size(102, 27)
+ Me.Button1.TabIndex = 0
+ Me.Button1.Text = "Upload file"
+ Me.Button1.UseVisualStyleBackColor = True
+ '
+ 'frmFileTest
+ '
+ Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
+ Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
+ Me.ClientSize = New System.Drawing.Size(800, 450)
+ Me.Controls.Add(Me.Button1)
+ Me.Name = "frmFileTest"
+ Me.Text = "frmFileTest"
+ Me.ResumeLayout(False)
+
+ End Sub
+
+ Friend WithEvents Button1 As Button
+End Class
diff --git a/EDMI_ClientSuite/frmFileTest.resx b/EDMI_ClientSuite/frmFileTest.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/EDMI_ClientSuite/frmFileTest.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/EDMI_ClientSuite/frmFileTest.vb b/EDMI_ClientSuite/frmFileTest.vb
new file mode 100644
index 00000000..841c9af1
--- /dev/null
+++ b/EDMI_ClientSuite/frmFileTest.vb
@@ -0,0 +1,27 @@
+Imports DigitalData.Modules.EDMIFileOps
+Public Class frmFileTest
+ Private _fileOp As FileOp
+ Private Sub frmFileTest_Load(sender As Object, e As EventArgs) Handles Me.Load
+ Try
+ _fileOp = New FileOp(MyLogConfig, My.Settings.EDM_NetworkService_Adress)
+
+ Catch ex As Exception
+ MyLogger.Warn($"Unexpected error in frmFileTest_Load: {ex.Message}")
+ End Try
+
+ End Sub
+
+ Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
+ Dim oDialog = New OpenFileDialog()
+ Dim oResult = oDialog.ShowDialog()
+
+ If oResult <> DialogResult.OK Then
+ Exit Sub
+ End If
+ Dim oFileID = _fileOp.New_EDMI_File(oDialog.FileName, Environment.UserName)
+
+
+
+
+ End Sub
+End Class
\ No newline at end of file
diff --git a/EDMI_ClientSuite/Form1.Designer.vb b/EDMI_ClientSuite/frmMain.Designer.vb
similarity index 77%
rename from EDMI_ClientSuite/Form1.Designer.vb
rename to EDMI_ClientSuite/frmMain.Designer.vb
index 8b6bdeef..127c3431 100644
--- a/EDMI_ClientSuite/Form1.Designer.vb
+++ b/EDMI_ClientSuite/frmMain.Designer.vb
@@ -1,5 +1,5 @@
_
-Partial Class Form1
+Partial Class frmMain
Inherits System.Windows.Forms.Form
'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
@@ -23,18 +23,22 @@ Partial Class Form1
_
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
- Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form1))
+ Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMain))
Me.StatusStrip1 = New System.Windows.Forms.StatusStrip()
Me.tslblUSer = New System.Windows.Forms.ToolStripStatusLabel()
Me.tslbl1 = New System.Windows.Forms.ToolStripStatusLabel()
Me.ToolStripStatusLabel3 = New System.Windows.Forms.ToolStripStatusLabel()
Me.ToolStripStatusLabel4 = New System.Windows.Forms.ToolStripStatusLabel()
Me.RibbonControl1 = New DevExpress.XtraBars.Ribbon.RibbonControl()
+ Me.MenueUser = New DevExpress.XtraBars.PopupMenu(Me.components)
Me.BarButtonItemBasicUser = New DevExpress.XtraBars.BarButtonItem()
Me.BarButtonItemApplicationExit = New DevExpress.XtraBars.BarButtonItem()
Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage()
Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
- Me.MenueUser = New DevExpress.XtraBars.PopupMenu(Me.components)
+ Me.RibbonPageUser = New DevExpress.XtraBars.Ribbon.RibbonPage()
+ Me.RibbonPageGroup2 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
+ Me.RibbonPageAdmin = New DevExpress.XtraBars.Ribbon.RibbonPage()
+ Me.RibbonPageGroup3 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.StatusStrip1.SuspendLayout()
CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.MenueUser, System.ComponentModel.ISupportInitialize).BeginInit()
@@ -82,14 +86,21 @@ Partial Class Form1
Me.RibbonControl1.Location = New System.Drawing.Point(0, 0)
Me.RibbonControl1.MaxItemId = 1
Me.RibbonControl1.Name = "RibbonControl1"
- Me.RibbonControl1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1})
- Me.RibbonControl1.Size = New System.Drawing.Size(1393, 141)
+ Me.RibbonControl1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1, Me.RibbonPageUser, Me.RibbonPageAdmin})
+ Me.RibbonControl1.Size = New System.Drawing.Size(1393, 116)
+ Me.RibbonControl1.ToolbarLocation = DevExpress.XtraBars.Ribbon.RibbonQuickAccessToolbarLocation.Hidden
+ '
+ 'MenueUser
+ '
+ Me.MenueUser.Name = "MenueUser"
+ Me.MenueUser.Ribbon = Me.RibbonControl1
'
'BarButtonItemBasicUser
'
Me.BarButtonItemBasicUser.Caption = "Grundeinstellungen"
Me.BarButtonItemBasicUser.Id = 1
Me.BarButtonItemBasicUser.ImageOptions.Image = CType(resources.GetObject("BarButtonItemBasicUser.ImageOptions.Image"), System.Drawing.Image)
+ Me.BarButtonItemBasicUser.ImageOptions.LargeImage = CType(resources.GetObject("BarButtonItemBasicUser.ImageOptions.LargeImage"), System.Drawing.Image)
Me.BarButtonItemBasicUser.Name = "BarButtonItemBasicUser"
'
'BarButtonItemApplicationExit
@@ -107,15 +118,34 @@ Partial Class Form1
'
'RibbonPageGroup1
'
+ Me.RibbonPageGroup1.ItemsLayout = DevExpress.XtraBars.Ribbon.RibbonPageGroupItemsLayout.TwoRows
Me.RibbonPageGroup1.Name = "RibbonPageGroup1"
- Me.RibbonPageGroup1.Text = "RibbonPageGroup1"
+ Me.RibbonPageGroup1.Text = "UserConfig"
'
- 'MenueUser
+ 'RibbonPageUser
'
- Me.MenueUser.Name = "MenueUser"
- Me.MenueUser.Ribbon = Me.RibbonControl1
+ Me.RibbonPageUser.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup2})
+ Me.RibbonPageUser.Name = "RibbonPageUser"
+ Me.RibbonPageUser.Text = "User Configuration"
'
- 'Form1
+ 'RibbonPageGroup2
+ '
+ Me.RibbonPageGroup2.ItemLinks.Add(Me.BarButtonItemBasicUser)
+ Me.RibbonPageGroup2.Name = "RibbonPageGroup2"
+ Me.RibbonPageGroup2.Text = "RibbonPageGroup2"
+ '
+ 'RibbonPageAdmin
+ '
+ Me.RibbonPageAdmin.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup3})
+ Me.RibbonPageAdmin.Name = "RibbonPageAdmin"
+ Me.RibbonPageAdmin.Text = "Administration"
+ '
+ 'RibbonPageGroup3
+ '
+ Me.RibbonPageGroup3.Name = "RibbonPageGroup3"
+ Me.RibbonPageGroup3.Text = "RibbonPageGroup3"
+ '
+ 'frmMain
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
@@ -124,7 +154,7 @@ Partial Class Form1
Me.Controls.Add(Me.StatusStrip1)
Me.Font = New System.Drawing.Font("Tahoma", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
- Me.Name = "Form1"
+ Me.Name = "frmMain"
Me.Text = "EDMI-ClientSuite"
Me.StatusStrip1.ResumeLayout(False)
Me.StatusStrip1.PerformLayout()
@@ -147,4 +177,8 @@ Partial Class Form1
Friend WithEvents BarButtonItemApplicationExit As DevExpress.XtraBars.BarButtonItem
Friend WithEvents PopupMenu1 As DevExpress.XtraBars.PopupMenu
Friend WithEvents MenueUser As DevExpress.XtraBars.PopupMenu
+ Friend WithEvents RibbonPageUser As DevExpress.XtraBars.Ribbon.RibbonPage
+ Friend WithEvents RibbonPageGroup2 As DevExpress.XtraBars.Ribbon.RibbonPageGroup
+ Friend WithEvents RibbonPageAdmin As DevExpress.XtraBars.Ribbon.RibbonPage
+ Friend WithEvents RibbonPageGroup3 As DevExpress.XtraBars.Ribbon.RibbonPageGroup
End Class
diff --git a/EDMI_ClientSuite/Form1.resx b/EDMI_ClientSuite/frmMain.resx
similarity index 97%
rename from EDMI_ClientSuite/Form1.resx
rename to EDMI_ClientSuite/frmMain.resx
index 867eac87..4a7685cc 100644
--- a/EDMI_ClientSuite/Form1.resx
+++ b/EDMI_ClientSuite/frmMain.resx
@@ -126,44 +126,66 @@
- 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
+ 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
+ 5MMAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAADZ0RVh0VGl0
+ bGUAUGFnZSBTZXR1cDtTZXR1cDtDdXN0b21pejtEZXNpZ247U2V0dGluZztQcm9wZXJ07jthbQAACGdJ
+ REFUWEellnlQ1OcZx0mioiYxl0mbXjPtpLf9o+avHjMdp+201XQ60yMzaZpEES8sEQQMEBAFAYlyeaES
+ QIIgcisB5Fyu5RDkWJD7hoU92AOW3QUW+PZ53t1lECn0eGe+84Nd+H0/z/O8z/O+DgAcVqxnbHrWpufW
+ 0aY1xJ/z/6+72NOu1QDPRt+SlkV/UYNLiTWIZiVIcSnB+owiWZ/ViIqvRmRcNSLoGRFXJXQmPD+Q3sEg
+ DP9MYHSJQ2BUkcNZ0sr17wCY/Dk23WjNzVkwY5qDfsoE5eQ0hka1aJCNoVTaC+/Q7CB6z2aSgOjoUawO
+ cl2ATVGJUvoIsCwuwWJZpOci5i1LQnP0O8tktsBgnIN2yowJtQF9wxpciK3A0hJwv6QDbmfSz9G7tpAE
+ xAoPsfh3u54GoJTymicjlt10bp4A5hcxa5PJPIfpmTmoNUb0D6tx7mqJADCYLMguasdRn9vB9D5H0lP7
+ gj3tWg2wOZJqyYsN58nIam41Fc+5RZipBLO2MkzqTegdnoT/xXwBYKLvGSIjrxVO7vEh9M6tpCcg2NOu
+ 1QBbwm0AKw35ZzM/beYsE2vWAg3tg95BNTyDcwQAl4r/1mBaQOr9JrzvEvMUBHvatRKA6+V4kWrJiyNk
+ 8cvM81ZTYUymds3MzkM3bUbP4CRcT6eL/2OIhUUCWWCQBaRkP8S7ztEMYd8T6wNcuGkFeCJSgrCaztuM
+ SeZ5koUAZjE4roPfhVwc/iQZzl634ex5Gwc9WElUimYqTwGbbCdxFpbXWgBbw26UWwFsUa6M1mBi0eaj
+ Dpg2zkJvMENHUmhm0DeiRUvXOB7KhlHbNITKhwMoq+1FZV2fHeBF0oYA20JjJALAHqlJRErGpCky1U4b
+ odJMUf/rSTqotNNiFigmDaQZjKsMGJHr0U9A3QNq6pBJ+IblsckOEg+p5bUWwPbga6WgMi6nmY1Z0xS5
+ dsqIO9lliIrNQkj0HURcz0Di3UK0tPdiQqklGANtSjPU1BmcFbmS4QzwDstlk5dI6wJwep4/d9nWz8LY
+ QsZkLqLnlpuBh28knI4HYmJqBiOUiaqmLkTcyEBmbgWGxpRQagxiQKkIYoJmhJa65FSwAHiZtDFAYHSx
+ baBYU87SG2bFbueeZxOPTyNx1D0UrV0jaO0eQ//4JK4nfYn45Dz6XiWiV+vNUOpMNKxm4RmUwyavkDYE
+ eOFMZKEA0Bso5bTB1NoZqvk0Jump4dRSvfuG5HDzjsBnV5Ih65FDUt+J1p5RBIQloKTyEcYUWii1RgHB
+ gXgEZbHJq6QNAV4MiCgggCURsZKMw6JvIy45nyJTQKGeIhiurQaNzR34u7M/lNMmFNe0o66lD+m5lQSV
+ QmeDAhNUe5XOTJt5Ae5nMtnkNRIfUstrLYAd3DIMwBNOrtDA+eMQXI7PwZW4LBo4YxilzwYpzU2ybvou
+ FFM0cAqr2wVEg6wfrt6R6OwdhVxFnaE1wUib+URABpvsJDHAEyN5JQCn5yUfaplFApjUGTEkV+HdA75Q
+ Gc0Iv56OsEvJaGjpQmNrFwLOxyI5pxS6+QU8qGwjydDeM4aPjgdD1jWIsQk9ZcEkhpWrfxqbvE7aEOBl
+ 7/NfYpGOYq7hAG24Dw4HiN3e1itHYkYx3Pwu42OfKCTfk1D0i+gYUiK/ohWFBFDf3IsDrsFoftyH4XGt
+ FYAOJhff/xzglVMh9wSAigCGxtXwDYqh41WK5q5RimwUE3oj9HRCamlEdwwrReR55c0olrajoPwRPjh6
+ lqZfM7oGxzFCc2CKjuxjPqls8gaJz4N1AV71OpdtzQC10KhCh/sPqrH/eBD65GqU0W4vrnmMQjJ7UCUT
+ kedJWpBb1ox7pU2QPurBhaup8Dl7DdKGdnQOTNBeMuLIqWQ2+QppXQBOz2snz2bRaWYFkKun0T00gU+D
+ rsIr4DJaumnOU5qLpY+FeQFFX0JAbJ5d3IjMokZUPOzEtVv34HX6MqrqWzEyrsIhryQ2eZO0IcBOt4BM
+ AaCiHuZJNkJZkHUOIvCzWLx/yB/xKXmob+lFZ/846pp6kF0ghbSpF1mFDcgoqEcaSVLXiejPs+DuE4n6
+ R22IvCkOo2+R+Ia0JgB/yACvn/DPsGWATzkzHS4zYkO106DJyiuHy8lQvPO3E9iz7wj2/tUVe//iCr+Q
+ G6ii9LN5an4dUu7XoJQyE0md4/bJRVyJFZPwh6QXSOJOwGtNgH/6pcFCu5vNBQDt5DEqBUP0DCkg6x5B
+ Y1sPRd+BmsY2FErqsP+YP06H3oSkthMpubXUIVIkZVehqFqG8Ji7+PBIABy3Pv8bev9XSctlWA3AX7zh
+ 4mMFYGO75AzBx6xiijpDhwG5Bv1jk+gZVqGNgCTSJnx4yBd+wTEore1AUk41ErMrcSuzgvZJK85fSsGe
+ vQebtm3fsZs8+FTkobdmBnYe9b5D1ynrDYinGA8Sq/gywscyHVLUWno6ZPR8K9ZRieRK1Da04B/Op+AT
+ eEW0ZAKZx6WXIzZVIjZsQFg8fvHr91LJ4xskkYXVAGISOrnFVxymtjnkRfKkKxbpoGeSuGI50RXL6STJ
+ /QscIO13SyTdwkcnEhB+LQ/RdD/Y92cXeJ6OEh0Sl1aGm6ml+DxNgiLKxG//eExDHt8jbWPPlQC8xJ2Q
+ xCniocFt8zWbvr6GOBK7vkn6NuknmzY7/m7X7j80e/hFoKCCIO5KBEgBzYs9+w7L6W++S1oTgLPAEJwJ
+ ThHD/Dfiqzff+97cvGXbz360+/cNx9xDaDo2Ibe4QRxcu3/+p+v0PcM/VYKVi0H+V9mzuHOL4/afvrXr
+ V3d2vf2O6sdv7xv/zg9+yeac/uXL6TLAav2fi0F4Q3MpuTTft4lLxeacYf4b8oLDvwCnrN07yt5H9wAA
+ AABJRU5ErkJggg==
diff --git a/EDMI_ClientSuite/Form1.vb b/EDMI_ClientSuite/frmMain.vb
similarity index 69%
rename from EDMI_ClientSuite/Form1.vb
rename to EDMI_ClientSuite/frmMain.vb
index 428216e3..790e1df1 100644
--- a/EDMI_ClientSuite/Form1.vb
+++ b/EDMI_ClientSuite/frmMain.vb
@@ -1,4 +1,4 @@
-Public Class Form1
+Public Class frmMain
Public Sub New()
Dim splash As New frmSplash()
Try
@@ -12,10 +12,18 @@
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
Me.MenueUser.Ribbon = RibbonControl1
+
+
+
+
Catch ex As Exception
End Try
End Sub
+
+ Private Sub BarButtonItemBasicUser_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItemBasicUser.ItemClick
+ frmUserBasics.ShowDialog()
+ End Sub
End Class
diff --git a/EDMI_ClientSuite/frmSplash.vb b/EDMI_ClientSuite/frmSplash.vb
index 2f2df915..add1e19a 100644
--- a/EDMI_ClientSuite/frmSplash.vb
+++ b/EDMI_ClientSuite/frmSplash.vb
@@ -76,10 +76,10 @@ Public NotInheritable Class frmSplash
_
Private Sub bw_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs)
- Dim Init = New ClassInit()
+
bw.ReportProgress(CalcProgress(1), "Initialize Logging")
- ' Init.InitLogger()
+ Dim Init = New ClassInit()
System.Threading.Thread.Sleep(600)
bw.ReportProgress(CalcProgress(2), "Initialize User Settings")
diff --git a/EDMI_ClientSuite/frmUserBasics.Designer.vb b/EDMI_ClientSuite/frmUserBasics.Designer.vb
new file mode 100644
index 00000000..b75661ca
--- /dev/null
+++ b/EDMI_ClientSuite/frmUserBasics.Designer.vb
@@ -0,0 +1,198 @@
+ _
+Partial Class frmUserBasics
+ Inherits System.Windows.Forms.Form
+
+ 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+ _
+ Protected Overrides Sub Dispose(ByVal disposing As Boolean)
+ Try
+ If disposing AndAlso components IsNot Nothing Then
+ components.Dispose()
+ End If
+ Finally
+ MyBase.Dispose(disposing)
+ End Try
+ End Sub
+
+ 'Wird vom Windows Form-Designer benötigt.
+ Private components As System.ComponentModel.IContainer
+
+ 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+ 'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
+ 'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+ _
+ Private Sub InitializeComponent()
+ Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmUserBasics))
+ Me.TabControl1 = New System.Windows.Forms.TabControl()
+ Me.TabPage1 = New System.Windows.Forms.TabPage()
+ Me.Button4 = New System.Windows.Forms.Button()
+ Me.btnApplicationFolder = New System.Windows.Forms.Button()
+ Me.chkLogErrorsOnly = New System.Windows.Forms.CheckBox()
+ Me.LinkLabel1 = New System.Windows.Forms.LinkLabel()
+ Me.Button1 = New System.Windows.Forms.Button()
+ Me.TabPage2 = New System.Windows.Forms.TabPage()
+ Me.Button3 = New System.Windows.Forms.Button()
+ Me.cmbLanguage = New System.Windows.Forms.ComboBox()
+ Me.Label1 = New System.Windows.Forms.Label()
+ Me.TabControl1.SuspendLayout()
+ Me.TabPage1.SuspendLayout()
+ Me.SuspendLayout()
+ '
+ 'TabControl1
+ '
+ Me.TabControl1.Controls.Add(Me.TabPage1)
+ Me.TabControl1.Controls.Add(Me.TabPage2)
+ Me.TabControl1.Dock = System.Windows.Forms.DockStyle.Fill
+ Me.TabControl1.Location = New System.Drawing.Point(0, 0)
+ Me.TabControl1.Name = "TabControl1"
+ Me.TabControl1.SelectedIndex = 0
+ Me.TabControl1.Size = New System.Drawing.Size(800, 450)
+ Me.TabControl1.TabIndex = 0
+ '
+ 'TabPage1
+ '
+ Me.TabPage1.Controls.Add(Me.Label1)
+ Me.TabPage1.Controls.Add(Me.Button3)
+ Me.TabPage1.Controls.Add(Me.cmbLanguage)
+ Me.TabPage1.Controls.Add(Me.Button4)
+ Me.TabPage1.Controls.Add(Me.btnApplicationFolder)
+ Me.TabPage1.Controls.Add(Me.chkLogErrorsOnly)
+ Me.TabPage1.Controls.Add(Me.LinkLabel1)
+ Me.TabPage1.Controls.Add(Me.Button1)
+ Me.TabPage1.Location = New System.Drawing.Point(4, 22)
+ Me.TabPage1.Name = "TabPage1"
+ Me.TabPage1.Padding = New System.Windows.Forms.Padding(3)
+ Me.TabPage1.Size = New System.Drawing.Size(792, 424)
+ Me.TabPage1.TabIndex = 0
+ Me.TabPage1.Text = "Logging und Support"
+ Me.TabPage1.UseVisualStyleBackColor = True
+ '
+ 'Button4
+ '
+ Me.Button4.Image = Global.EDMI_ClientSuite.My.Resources.Resources.email_go
+ Me.Button4.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft
+ Me.Button4.ImeMode = System.Windows.Forms.ImeMode.NoControl
+ Me.Button4.Location = New System.Drawing.Point(8, 6)
+ Me.Button4.Name = "Button4"
+ Me.Button4.Size = New System.Drawing.Size(133, 23)
+ Me.Button4.TabIndex = 19
+ Me.Button4.Text = "Create Log-Email"
+ Me.Button4.TextAlign = System.Drawing.ContentAlignment.MiddleRight
+ Me.Button4.UseVisualStyleBackColor = True
+ '
+ 'btnApplicationFolder
+ '
+ Me.btnApplicationFolder.Image = Global.EDMI_ClientSuite.My.Resources.Resources.folder_go
+ Me.btnApplicationFolder.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft
+ Me.btnApplicationFolder.ImeMode = System.Windows.Forms.ImeMode.NoControl
+ Me.btnApplicationFolder.Location = New System.Drawing.Point(265, 35)
+ Me.btnApplicationFolder.Name = "btnApplicationFolder"
+ Me.btnApplicationFolder.Size = New System.Drawing.Size(144, 23)
+ Me.btnApplicationFolder.TabIndex = 16
+ Me.btnApplicationFolder.Text = "Open AppFolder User"
+ Me.btnApplicationFolder.TextAlign = System.Drawing.ContentAlignment.MiddleRight
+ Me.btnApplicationFolder.UseVisualStyleBackColor = True
+ '
+ 'chkLogErrorsOnly
+ '
+ Me.chkLogErrorsOnly.AutoSize = True
+ Me.chkLogErrorsOnly.ImeMode = System.Windows.Forms.ImeMode.NoControl
+ Me.chkLogErrorsOnly.Location = New System.Drawing.Point(147, 10)
+ Me.chkLogErrorsOnly.Name = "chkLogErrorsOnly"
+ Me.chkLogErrorsOnly.Size = New System.Drawing.Size(100, 17)
+ Me.chkLogErrorsOnly.TabIndex = 18
+ Me.chkLogErrorsOnly.Text = "Log Errors Only"
+ Me.chkLogErrorsOnly.UseVisualStyleBackColor = True
+ '
+ 'LinkLabel1
+ '
+ Me.LinkLabel1.AutoSize = True
+ Me.LinkLabel1.Font = New System.Drawing.Font("Segoe UI", 9.75!)
+ Me.LinkLabel1.ImeMode = System.Windows.Forms.ImeMode.NoControl
+ Me.LinkLabel1.Location = New System.Drawing.Point(5, 79)
+ Me.LinkLabel1.Name = "LinkLabel1"
+ Me.LinkLabel1.Size = New System.Drawing.Size(200, 17)
+ Me.LinkLabel1.TabIndex = 15
+ Me.LinkLabel1.TabStop = True
+ Me.LinkLabel1.Text = "Link zu Support-Tool Digital Data"
+ '
+ 'Button1
+ '
+ Me.Button1.Image = Global.EDMI_ClientSuite.My.Resources.Resources.folder_go
+ Me.Button1.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft
+ Me.Button1.ImeMode = System.Windows.Forms.ImeMode.NoControl
+ Me.Button1.Location = New System.Drawing.Point(8, 35)
+ Me.Button1.Name = "Button1"
+ Me.Button1.Size = New System.Drawing.Size(133, 23)
+ Me.Button1.TabIndex = 17
+ Me.Button1.Text = "Open Log-Folder"
+ Me.Button1.TextAlign = System.Drawing.ContentAlignment.MiddleRight
+ Me.Button1.UseVisualStyleBackColor = True
+ '
+ 'TabPage2
+ '
+ Me.TabPage2.Location = New System.Drawing.Point(4, 22)
+ Me.TabPage2.Name = "TabPage2"
+ Me.TabPage2.Padding = New System.Windows.Forms.Padding(3)
+ Me.TabPage2.Size = New System.Drawing.Size(792, 424)
+ Me.TabPage2.TabIndex = 1
+ Me.TabPage2.Text = "TabPage2"
+ Me.TabPage2.UseVisualStyleBackColor = True
+ '
+ 'Button3
+ '
+ Me.Button3.ImeMode = System.Windows.Forms.ImeMode.NoControl
+ Me.Button3.Location = New System.Drawing.Point(148, 139)
+ Me.Button3.Name = "Button3"
+ Me.Button3.Size = New System.Drawing.Size(134, 23)
+ Me.Button3.TabIndex = 49
+ Me.Button3.Text = "Sprache jetzt wechseln"
+ Me.Button3.UseVisualStyleBackColor = True
+ '
+ 'cmbLanguage
+ '
+ Me.cmbLanguage.FormattingEnabled = True
+ Me.cmbLanguage.Items.AddRange(New Object() {"de-DE", "en-US"})
+ Me.cmbLanguage.Location = New System.Drawing.Point(8, 141)
+ Me.cmbLanguage.Name = "cmbLanguage"
+ Me.cmbLanguage.Size = New System.Drawing.Size(134, 21)
+ Me.cmbLanguage.TabIndex = 48
+ '
+ 'Label1
+ '
+ Me.Label1.AutoSize = True
+ Me.Label1.Location = New System.Drawing.Point(5, 125)
+ Me.Label1.Name = "Label1"
+ Me.Label1.Size = New System.Drawing.Size(91, 13)
+ Me.Label1.TabIndex = 50
+ Me.Label1.Text = "Aktuelle Sprache:"
+ '
+ 'frmUserBasics
+ '
+ Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
+ Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
+ Me.ClientSize = New System.Drawing.Size(800, 450)
+ Me.Controls.Add(Me.TabControl1)
+ Me.Font = New System.Drawing.Font("Tahoma", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
+ Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
+ Me.Name = "frmUserBasics"
+ Me.Text = "Grundeinstellungen User"
+ Me.TabControl1.ResumeLayout(False)
+ Me.TabPage1.ResumeLayout(False)
+ Me.TabPage1.PerformLayout()
+ Me.ResumeLayout(False)
+
+ End Sub
+
+ Friend WithEvents TabControl1 As TabControl
+ Friend WithEvents TabPage1 As TabPage
+ Friend WithEvents TabPage2 As TabPage
+ Friend WithEvents Button4 As Button
+ Friend WithEvents chkLogErrorsOnly As CheckBox
+ Friend WithEvents Button1 As Button
+ Friend WithEvents btnApplicationFolder As Button
+ Friend WithEvents LinkLabel1 As LinkLabel
+ Friend WithEvents Label1 As Label
+ Friend WithEvents Button3 As Button
+ Friend WithEvents cmbLanguage As ComboBox
+End Class
diff --git a/EDMI_ClientSuite/frmUserBasics.resx b/EDMI_ClientSuite/frmUserBasics.resx
new file mode 100644
index 00000000..cc0c9c2e
--- /dev/null
+++ b/EDMI_ClientSuite/frmUserBasics.resx
@@ -0,0 +1,1253 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ AAABAAoAMDAQAAEABABoBgAApgAAACAgEAABAAQA6AIAAA4HAAAQEBAAAQAEACgBAAD2CQAAMDAAAAEA
+ CACoDgAAHgsAACAgAAABAAgAqAgAAMYZAAAQEAAAAQAIAGgFAABuIgAAAAAAAAEAIADCpQAA1icAADAw
+ AAABACAAqCUAAJjNAAAgIAAAAQAgAKgQAABA8wAAEBAAAAEAIABoBAAA6AMBACgAAAAwAAAAYAAAAAEA
+ BAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDA
+ wAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAB3d3d3d3d3d3d3d3d3d3d3d3d3d3cAAAeIiIiIiIiIiIiIiIiIiIiIiI
+ iIiIhwAAeP//////////////////////////hwAAeP///////////////4//+P/4/4//hwAAeP//+IiI
+ //+P/4/4//+P//j///+PhwAAeP//+Pho/4//////+P//j//4+P//hwAAeP//+PbG////j/j///j//4//
+ //j/hwAAeP//+Gbmf///d4d3d4d3eHd3+P//hwAAeP//98eMaP//eHiHh3iHh4eH//j/hwAAeP//+I/+
+ bv+P//j///j/j/+P+P//hwAAeP//////x4j////4+P//+P////j/hwAAeP//////jm//+P////+P//j4
+ +P//hwAAeP//iIiI9+b///+P/4//j/////j/hwAAeP//+Pho/36I/////////4+P+P//hwAAeP//+PbG
+ /46Pd3d3d3d3eHh3//j/hwAAeP//+Gbmf///eHiHiIeIeHeH////hwAAeP//9seMaP////+P+P/4+P//
+ j4+PhwAAeP///4/35v//j/////j///j/////hwAAeP//////bI////////////+Pj/j/hwAAeP//////
+ jm///4/4+P/4+P//////hwAAeP//iIiI+Ob4//////////+P+Pj/hwAAeP//+Pho+OePd3d4d3d3h3h4
+ ////hwAAeP//+PbG/46PeIh3iHiHeHeH+P+PhwAAf///+Gbmf////4////+P//+P////hwAAeP//98eM
+ aP//////j///+P//j4//hwAAf/+P/4/+bv/4/////4/4//j///+P9wAAeP//////x4j///j////////4
+ /4//hwAAeP////+Pjm//////////////////hwAAf////4//9+f/////+P+P+P+P+P+P9wAAeP//////
+ /+aPj//4////////////hwAAf//4/////4jv////////////j/j/hwAAeP////////////////+P+P+P
+ ////9wAAeIiIiIiIiIiIiIiIiIiIiIiIiIiIhwAAf4iPiIiIiIiIiIiIiIj4j4j4iIiI9wAAeP+I+Pj4
+ +Pj4+Pj4+PiPiHePd/h3hwAAB3d3d3d3d3d3d3d3d3d3d3d3d3d3cAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP//
+ /////wAA////////AAD///////8AAP///////wAA////////AACAAAAAAB8AAAAAAAAADwAAAAAAAAAP
+ AAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAA
+ AAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAP
+ AAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAA
+ AAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAP
+ AAAAAAAAAA8AAAAAAAAADwAAgAAAAAAfAAD///////8AAP///////wAA////////AAD///////8AAP//
+ /////wAAKAAAACAAAABAAAAAAQAEAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACA
+ gACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh3d3d3d3
+ d3d3d3d3d3d4AH//////////////////9wB/////////////+P/4//cAf//4iI//j/j4+P/4//j3AH//
+ +IaP//////////j/9wB///hs6P/4//j/j4//+PcAf//36Gj4d3d3d3d3+P/3AH////+Gj///////////
+ 9wB///j4jn////j/+Pj4+PcAf//494/o+P//+P/////3AH//+IyPjv//j///+P+P9wB///ZuaP93d3d3
+ d3f///cAf//4j27/////////j/j3AH////+Mj/+P//j/j/+P9wB///j4+Oj///j///+P//cAf//49o/n
+ /////4////j3AH//+Gzvj3d3d3d3d///9wB///boaP/////////4//cAf////3z//4/4//j///j3AH//
+ //+Of///////+P+P9wB/////+Oj////4//////cAf/////+O////////j//3AHiIiIiIiIiIiIiIiIiI
+ hwB/j4iPiIiIiIiPiIeHh4cAB3d3d3d4d4d4d3d3d3d4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////8AAAADAAAAAwAAAAMAAAADAAAAAwAA
+ AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAA
+ AAMAAAADAAAAAwAAAAOAAAAD////////////////KAAAABAAAAAgAAAAAQAEAAAAAACAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8A
+ AAD/AP8A//8AAP///wB3d4d3eHd3h3/////////3f/j4j//4/4h/+PaP+P//93/4Zu/3h3f3f/foyP//
+ //d///92/4/493///45////3f///+Oj4//d/////jv/493iIiIiIiIiIiPj4+Ph4f3d3h3d3eHh3dwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAAoAAAAMAAAAGAAAAABAAgAAAAAAAAJAAAAAAAAAAAAAAAB
+ AAAAAQAAAAAAALNtCwC1bAoAtnYPALlxCwC6dQoAq2saALh0EACyeSgAtngpALh9NACReWgAwYcLAMaO
+ HADFiCEAzJkkAMWKNwDNoSEA1q46ALWBQQC8kl8Ay5paAMybWwDUr0QA2LJBANq2SwDbuFYA3LhWANm4
+ XADGmGAAyJphAN7BbQDhx3wA4sh9AIiEgQCmkJIAppGUAKiSlACplJcAqpWYALuigwC7ooQA2riAANy6
+ ggDBq5EAwqySAMWzoADFtKEA3sGcAODDngDhxJ4A48qdAOXMnwDRxr0A59W+AOnWvwDu4boA7+O8AL6/
+ wADLyckAzMnJAOrYwQDn2cgA6NvJAOncygDg2dMA7+XNAPHnzgDz6M8A7+TWAPHm1wDy5tkA9e7lAPXv
+ 6AD28ecA9vHpAPXx7AD39e4A+PLrAPj06gD48+8A8fHxAPTz8gDz9PMA9PTzAPPz9AD08/QA8/T0APX1
+ 9QD59vEA+Pf3APf49wD6+PEA+Pj3APf3+AD49/gA9/j4APn5+QD8+/sA+/z7APz8+wD7+/wA/Pv8APv8
+ /AD9/v4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiIiIiIiIiIiIiIiIi
+ IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIAAAAAACI1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1
+ NTU1NTU1NTU1NTU1NTU1NTUiAAAAACI1ZWVlZWVlZWVlW2VaW1paWlpaWlpaWlpaUVpRWlFaUVpRUVFR
+ UVFRZTUiAAAAACI1ZWVlZWVhYVtlWlphYVpaWlpaUVpRWlFRUVpRUVFRUVFRUVFRUVFRZTUiAAAAACI1
+ ZWVlZWU8PDw8O2VaYVpaWlpaWlFaUVFaUVFRWlFRUVFRUVFRUVFRZTUiAAAAACI1ZWVlZWU8ZT4TKFth
+ YVtaWlpRV1daWlFaUVpRUVFRUVFRUVFRUVFRZTUiAAAAACI1ZWVlZWU8UQgFBlpaYVtaWldgV2BaWlFR
+ WlFRUVpRWlFRUVFRUVFRZTUiAAAAACI1ZWVlZWUuCAIHBx1hYWFbVycmJiYjJiYmJiYmJiMmIyYmJlFR
+ UVFRZTUiAAAAACI1ZWVlZWUUAgosBwU2YWFlYSUmJiMmJiYjIyYjJiMjIyMjI1FRUVFRZTUiAAAAACI1
+ ZWVlZWVEMEhlFQwQYWFaWl9aWlpaWlFaUVFRUVFRUVFRUVFRUVFRZTUiAAAAACI1ZWVlZWVlZWVlSA4O
+ KmFhYWFaWlpRWlpRWlpRW1FRW1FRUVFRUVFRZTUiAAAAACI1ZWVlZWVlZWVlYTMREUJhYWFaWlpaWlFX
+ WlFRW1pRUVFaUVFRUVFRZTUiAAAAACI1ZWVlZWU8Ozw8PGEaEhdIYWFbWlpaUWBaUWBaUVFXW1FRUVFR
+ UVFRZTUiAAAAACI1ZWVlZWU8ZUATKGVRGRgfYWFhWldXYFdXV1pRYFFbUVFRUVFRUVFRZTUiAAAAACI1
+ ZWVlZWU8TQgFBk1lOBogYSUlJiYnJiYmJiYmJiYjJiYmJlFRUVFRZTUiAAAAACI1ZWVlZWUvCQUHBx1l
+ ZWVlYSUlJiMmIyYmJiYjJiMmJiMjI1FaUVFRZTUiAAAAACI1ZWVlZWUdAQosBwU3ZWVhZWFhW2BXZVpa
+ WlFaUVFRUVFRUVFRUVpRZTUiAAAAACI1ZWVlZWVGMlFlHQwQZWVhZWFhZWFlWlpaWlFaW1taUVdXV1dR
+ UVFRZTUiAAAAACI1ZWVlZWVlZWVlSA4OKmFlYWFhYWFaWlpaWlpRWlFaV1dRV1FbUVFaZTUiAAAAACI1
+ ZWVlZWVlZWVlZTQREUNlZWFlYWFbYFdXV2BgUWBRYFpRW1FRWlFRZTUiAAAAACI1ZWVlZWU8PDw8PGUa
+ EhdIZWVhYWFlYWVlV2BbYFtbUVtRW1pRUVFRZTUiAAAAACI1ZWVlZWU8ZUITKGVhGRgfZSUlJSUmJiMm
+ JSYmJiYmJiYmJlFRW1FRZTUiAAAAACI1ZWVlZWU8WggHBmFhOBshZSUnJyUlJSclJyYmJiYmJiYmJlFb
+ UVpRZTUiAAAAACJBZWVlZWUvCQEFBx1hZWVhZWVlZWVlZWVaZVpaWlpRWlFRUVFbUVFXZUEiAAAAACJB
+ ZWVlZWUdAQosBwU9ZWVlZWVlZWVlWmVaWlpaWlpaUVtbWlFaUVdaZUEiAAAAACJBZWVlZWVGMk1lHQwQ
+ ZWVlZWVlYWFhZVplWldXV1paWlFbWlFRYFFRZUEiAAAAACJBZWVlZWVlZWVlSA0NK2VlZWVlZWFhYWVa
+ YGVlW1paV2BaUVtaUVtaZUEiAAAAACJBZWVlZWVlZWVlZTQREURlZWVhZWVlYWFlWmFaYFpgYFpaWlFb
+ WlFRZUEiAAAAACJBZWVlZWVlZWVlZWUaEhlNYWVlYWVlYWFhYWFhW1taWlpRYFdRW1FgZUEiAAAAACJB
+ ZWVlZWVlZWVlZWVhGRgfZWVlZWVlYWVhZWFhYVtbWltgWmBaUWBaZUEiAAAAACJBZWVlZWVlZWVlZWVl
+ ORshZWVlZWVlYWVhYWFhYWFbW1paWlFgUVdRZUEiAAAAACJBZWVlZWVlZWVlZWVlZWVlZWVlZWVhZWFh
+ YWFhYWFhWlpaUWBaW1pRZUEiAAAAACJBOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6
+ Ojo6OkEiAAAAACJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiAAAAACJB
+ QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCwtBQQsLQUELC0EiAAAAAAAiIiIiIiIiIiIiIiIi
+ IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD///////8AAP//
+ /////wAA////////AAD///////8AAP///////wAAgAAAAAAfAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAP
+ AAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAA
+ AAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAP
+ AAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAA
+ AAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAP
+ AAAAAAAAAA8AAIAAAAAAHwAA////////AAD///////8AAP///////wAA////////AAD///////8AACgA
+ AAAgAAAAQAAAAAEACAAAAAAAAAQAAAAAAAAAAAAAAAEAAAABAAAAAAAAr24CALRwAAC3fQcAtnoNALl+
+ CgCzdhAAsXkUALd9IgCReWgAlXx/ALmACQC5ghsAu4UqALGAMQC/izgAw5EWAMicGwDBjiMAxJAgAMyj
+ IQDTsTAA0rA3ANW2NwDYujsAuo9IALuVXAC0lWkAv6R7AMmZQQDBkkgAw5tbAM6jTwDUskQA2LleAMqm
+ bwDNqGsAzKhvAM+rcgDTsHEA17RzANzBUADbwFsA3cNpAN/HagDeyHAA4858AJV8gACIhIEAi4eFAIuJ
+ hwCNiYYAjoqIAI+MiQCRjowAsa6tAMiuiQDJtpoA07iQAMK0pQDewpgA4cmKAOXSiwDm1JEA6dmfANbF
+ rwDZxagA1sy/AN7PugDlz6cA696lAObQrwDg0LcA6NW3AOvcugDEwcAAy8nHAMzKyADNzMoAzdjNAN7X
+ 0QDY0tYA1NzTANbf1QDb1dkA2tvZAOnZwwDh2csA6d7NAObe2ADv5sQA7OHPAPLpyQDx6c4A7uPQAO/n
+ 3ADy5dEA9e3cAPXw2gDk2uIA49ziAOfo5QDr5+oA6urqAPLr4QD28+kA+PLrAPHx8QD08/MA8/TzAPT0
+ 8wDz8/QA9PP0APP09AD19fUA+vfzAPj39wD3+PcA+vj2APf3+AD49/gA9/j4APn5+QD8+/sA+/z7APv7
+ /AD8+/wA+/z8AP7+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLMDAwMDAwMDAw
+ MDAwMDAwMDM1MzAwMDAwMDAwMDcAADB7e3t7e3V7dXV1dXV1dXV1dWt1dWtrdWtra2t2MAAAMHt7e3l7
+ dXl5dXV1dXVrdWtra2tra2tra2tra3YwAAAwe3t7e1FPO1N3d3V1a3VrdWt1a2tra2tra2trczAAADB7
+ e3t5U0gHOnt1d3V1dWt1a3VrdWtra2tra2tzMAAAMHt7e3scAQwNaHh4dXV1cHdra2tra3Vra2tra3Yw
+ AAAwe3t7eyYkQQsne3UvLy8vLy8vLy8vCgpra2trdjAAADB7e3t7e3t7JxBKeHh1dXV1a3h1a3Vra2tr
+ a2t2MAAAMHt7e3trZmVeFiFpeHh3dXVrd2t1a3VrdWtrdXMwAAAwe3t7e1RXG0RdGC17dXh1dXB4dWtr
+ a2trdWtrczAAADB7e3t7QyYCI3tGPnh4eHdzd2t4dWt4dWtra2tzMAAAMHt7e3saBhkEVnt7Ly8vLy8v
+ Ly8vLy8Ka2trdXMwAAAwe3t7e0dJXxIddnt7e3l4d3N3dWt4a3VrdWtreDAAADB7e3t7e3t7RRE9e3l7
+ eXt3eHV3d3Vra3dra3VzMAAAMHt7e3tkZFRbKxZae3t1dnt1c3d1dXN3a3Nra3gwAAAwe3t7e1VeDkJ2
+ KSp7eXt5dnd3dXVrd2t4a3dreDAAADB7e3t7OQgFHnZiXAovCi8vLy8vLy8vL3N3a3dzMAAANXt7e3sf
+ DzgDPHt7e3t7e3t5e3V4c3h3dWt3a3swAAA1e3t7e2p2eyATYXt7e3t5e3l4eHd3d3V1a3d1czAAADV7
+ e3t7e3t7YBQie3t7e3t7e3l7dXN3dWt3a2t4MAAANXt7e3t7e3t7RhY/e3t7e3l7eXh4d3V1d3V3dXMw
+ AAA1e3t7e3t7e3t7Lix7e3t7e3t7eXt1dXN3dWt4czAAADVOTk5OTk5OTk5NTU5OTkxMTk5OTk5OTExM
+ TExMMAAANVlQUFBQUFBQUFBQUFBQUFBQUFBQUFAJUAlQCVAwAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAw
+ MDAwMDAwMEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////
+ //8AAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAA
+ AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAOAAAAD////////////////KAAAABAA
+ AAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAEAAAAAAACReWgAt4MHALmECgC3gyIAsIQxAL+Q
+ OADEliAAzKkhANW7NwDAlUcAw55bAM2nTgDXvFwA3sppAOLRfACXko8AqpaZAKuYmgDIsIgAyLeaANvC
+ lQDk1Y8A6NqdANbFpgDNzMoA1tHUANra2ADn3cwA6N/MAODZ0wDw5dAA8OrXAOLa4QDk2eIA+PTqAPHx
+ 8QDz9PMA9vTyAPPz9AD08/QA9fX1APn38gD49/cA9/f4APj3+AD5+fkA/Pz7AP7+/gAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAQEBAQEBAQEBAQEBAQEBAQEDAwMDAp
+ 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
+ R4PlTQD3X/f8XgD4H+97z3c/Fwxt2qZt2le1Xdv4gR4A+MgnP//csLJpm7Zpz+t2jUeCbdqmbdqLtW0A
+ YNM27Y9xkyUAA8Cb3/jQ15CVTdu0TfsKNgbQ5v91o9pnTv8uEiDclf8O8JxmVjdt0zbta9QYwL/Ln88A
+ HOe/F2LgDZLRjwG8PP8dYrNE2LRNezG0FsAifz4EcArgHMCl3wVgAMv8wxIpAtgAwKZt2gu/tUg2fQXg
+ EgkMlgDY5wDkpFOY8W+WAJu2aS/85u17gQQCSwBtGQG0SBGAGP8GADZt0174TZJ+AgLL/DncBiMGP8TG
+ +Ddt015sjRGBIN/2FBvBvH+LDQhs2qa9GFrtftXa8U3btE3btE3btE3btE3btE3btE3btE3btE3btE3b
+ tE3btE3btE3btE3btE3btE3btE3btE3btE3btE3btE3btE3btE3btE3btE3btE3btE3btE3btE3btE3b
+ tE3btE3btE3btE3btE3btE3btE3btE3btE3btE3btE3btE3btE3btE3btE3btE177tv/A2F/Fw0eR0qc
+ AAAAAElFTkSuQmCCKAAAADAAAABgAAAAAQAgAAAAAACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAF
+ AAAACwAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAO
+ AAAADgoEBRAKBAUQCgQFEAoEBRAKBAUQCgQFEAoEBRAKBAUQCgQFEAoEBRAKBAUQCgQFEAoEBRAKBAUQ
+ CgQFEAoEBRAKBAUQCgQFEAAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAKAAAAAwAAAAAAAAAA
+ AAAAAAAAAAUAAAAVAAAAJQAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAq
+ AAAAKgAAACoAAAAqAAAAKgUCAi0FAgItBQICLQUCAi0FAgItBQICLQUCAi0FAgItBQICLQUCAi0FAgIt
+ BQICLQUCAi0FAgItBQICLQUCAi0FAgItBQICLQAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAj
+ AAAAEQAAAAMAAAAAAAAAAHh0ckWIhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/
+ iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/
+ iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/
+ iISB/4iEgf8AAAA0AAAAIwAAAAoAAAAAAAAAAIiEgf/Rxr3/0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/
+ 0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/
+ 0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/
+ 0ca9/9HGvf/Rxr3/0ca9/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3/+/v8//z7/P/7+/v/
+ +/r7//r7+//6+vr/+vr6//n5+v/5+fn/+Pn4//j4+P/4+Pf/9/j3//f39//29vf/9vb2//b29v/19fb/
+ 9fX1//T19P/09PT/9PT0//Tz9P/z9PP/8/Pz//Py8v/y8vL/8vPz//Ly8v/y8fL/8fHy//Hx8f/x8fH/
+ 8PHw//Hx8P/w8PD/8PDw//Dw8P/w8PD//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3/
+ /Pz8//v8+//7+/v/+/v7//r6+v/7+/r/+fr6//n5+f/5+fn/+fn5//n4+P/4+Pj/+Pj3//f39//39/f/
+ 9/b2//b39v/29fb/9fX1//X19P/19fX/9PX0//Tz9P/08/T/8/Pz//Pz8//z8/L/8vLy//Ly8v/y8fL/
+ 8fLy//Hx8f/x8PH/8fHx//Dw8P/w8fD/8PDw//Dw8P/w8PD//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAA
+ AAAAAIiEgf/Rxr3//Pz9//z8+//8+/z//Pz8//v7+//Lycn/y8nJ/8vJyf/Lycn/y8nJ//j4+f/4+Pj/
+ +Pj3//f39//39/f/9/f3//f29v/29vb/9fb2//X19f/19PX/9PX0//T09P/09PT/9PP0//Pz8//z8/P/
+ 8vPy//Ly8v/y8vL/8vHx//Hx8f/x8fH/8fHx//Dx8f/w8fD/8PDw//Dw8P/w8PD//f7+/9HGvf+IhIH/
+ AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//Pz9//z8/P/8+/z//Pz8//v7+//Mycn/+vr6/+fZyP+1gUH/
+ u6KD//j5+f/4+Pn/+Pj4//j4+P/39/f/9/f3//f39//29vb/9fb1//b19f/19fX/9fX1//T09P/09PT/
+ 9PTz//Pz8//z8/P/8vPz//Pz8v/y8vL/8vLy//Ly8f/x8fH/8fHx//Hx8f/x8PH/8PDw//Hw8P/w8PD/
+ /f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//P39//z9/f/8/Pz//Pv8//v7+//Mycn/
+ 9fDs/7J5KP+6dQr/q2sa//bz8f/5+Pj/+fj5//j4+P/49/f/9/f3//f39//29/f/9vb2//b29f/19fX/
+ 9fX1//X19f/09PT/9PPz//P09P/z8/P/8vPy//Ly8v/z8/L/8vLy//Ly8v/y8fH/8fHx//Dx8f/x8fD/
+ 8PHw//Dx8f/w8PD//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//fz8//38/P/8/Pz/
+ /Pv7//v8+//Fs6D/tngp/7NtC/+5dRH/uXEL/8aYYP/5+fn/+Pj5//n4+P/4+Pj/9/f3/6iSlf+okpX/
+ qJKV/6iSlf+okpX/qJKV/6iSlP+okpT/qJKU/6iSlP+okpT/p5KU/6eSlP+nkpT/p5KU/6eSlP+nkpT/
+ p5GU//Hx8f/x8fD/8PHx//Dw8P/x8fD//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3/
+ /f39//38/f/8/fz//Pz8//z8/P+8kl//tWwK/7h9NP/Bq5H/uHQQ/7Z2D//n1b7/+fn5//n5+P/4+Pj/
+ +Pj3/6iSlf+okpX/qJKV/6iSlf+okpX/qJKV/6iSlf+okpT/qJKV/6iSlP+okpT/p5KU/6eSlP+nkpT/
+ p5KU/6eSlP+nkpT/p5GU//Lx8f/x8fH/8fHx//Hx8f/w8PD//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAA
+ AAAAAIiEgf/Rxr3//f39//39/f/8/fz//fz9//z8/P/v5Nb/3sGc//Xv6P/7+vv/y5pa/8GHC//Fijf/
+ +fn5//n5+f/5+Pj/+Pf4//j3+P/49/f/9vf2//b29//29vb/9vX2//X19f/19fX/9PT1//T09P/09PT/
+ 8/Pz//Pz8//z8/P/8vPy//Pz8v/y8vL/8fLy//Hx8v/x8vH/8fHx//Dx8f/w8fD//f7+/9HGvf+IhIH/
+ AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//f3+//39/f/8/Pz//fz9//z8/P/7+/z//Pz7//v7+//7+vv/
+ 9e7k/8WIIf/Gjhz/2riA//n5+f/5+Pj/+Pj4//j49//49/j/9/f3//f29//29vb/9vb2//b19f/29fb/
+ 9fX1//X19f/09PT/8/T0//P09P/z8/P/8/Pz//Lz8v/z8vP/8vLx//Hx8v/x8fH/8fHx//Dx8f/x8fH/
+ /f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//f3+//39/v/9/f3//f39//38/f/8/Pz/
+ /Pz8//v8+//7+/v/+vr6/+PKnf/NoSH/zJkk/+/lzf/5+fn/+Pn5//j4+P/49/j/9/f3//f29//39vf/
+ 9vb2//X29v/19vX/9fX1//X19P/09PT/9PT0//Tz9P/z9PP/8/Pz//Lz8v/z8vL/8vHy//Ly8f/y8fH/
+ 8fHx//Hw8f/x8fH//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//v7+//39/f/9/f3/
+ /f39//39/f/Mysr/zMrK/8zKyf/Mycn/zMnJ//r7+v/ZuFz/1q46/9SvRP/18uf/+Pn5//n4+P/4+Pj/
+ +Pf3//f39//39/f/9vb3//b29v/29fX/9fX1//X19f/09fT/9PT0//Tz9P/z9PT/8/Pz//Pz8//y8/P/
+ 8vLy//Hy8v/y8vL/8vHx//Hy8f/x8fD//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3/
+ /f7+//7+/f/9/v3//f39//38/P/Mysr//Pz8/+jbyf+2gUH/u6KD//r6+v/39e7/2rZL/9iyQf/ewW3/
+ +Pn5//j5+P/4+Pj/+Pf3//f3+P/39/f/9vf2//b29v/29fX/9fX1//X19f/19fX/9fX0//T09P/09PT/
+ 8/Pz//Pz8//y8vP/8vPy//Ly8v/y8vL/8vLy//Hx8f/x8fH//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAA
+ AAAAAIiEgf/Rxr3//v7+//79/f/9/f3//f39//39/f/Mysr/9vPt/7N5KP+6dQr/q2sa//j18v/6+vv/
+ 7eG6/9u4Vv/hx3z/+fn5/6mTlv+ok5b/qJOW/6iSlv+okpX/qJKV/6eSlP+nkpT/p5KU/6eRlP+nkZT/
+ ppGU/6aRk/+mkZP/ppCT/6aQk/+mkJP/ppCS//Ly8//y8vL/8vLx//Lx8f/x8fH//f7+/9HGvf+IhIH/
+ AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//v7///7+/v/+/v7//f7+//39/f/FtKH/tnkp/7NtC/+5dRH/
+ uXEL/8eZYf/7+/v/+vr7//r6+v/6+vr/+fn6/6iSlf+okpX/qJKV/6iSlf+okpX/qJKV/6iSlf+okpX/
+ qJKV/6iSlf+okpX/qJKV/6iSlP+okpT/qJKU/6eSlP+nkpT/p5KU//Py8v/z8vL/8vLy//Hy8f/x8vL/
+ /f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//v/+//7+/v/9/f3//f7+//39/f+8k1//
+ tWwK/7h+NP/CrJL/uHQQ/7Z2D//p1r//+/v7//r6+//6+vr/+vn6//n5+f/5+fj/+Pn4//j5+P/4+Pf/
+ 9/j3//f39//29vb/9vb3//b29f/29vb/9fX1//T19P/19PT/9PT0//P08//z8/P/8/Pz//Py8v/z8vL/
+ 8/Ly//Ly8f/y8fL//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//v7+//7+///+/v7/
+ /v3+//3+/v/x5tf/4MOe//bw6v/8/Pz/y5tb/8GHC//Fijf/+vv7//r6+//6+vr/+vr6//n5+f/5+fn/
+ +Pn5//j5+P/4+Pj/+Pj3//f3+P/39/f/9vb2//b29v/19fX/9fb2//X19f/19PX/9PT1//P09P/09PP/
+ 8/Pz//Pz8v/y8vP/8vLz//Ly8v/y8vL//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3/
+ /v////7//v/+/v7//v7+//39/f/+/v3//f39//z8/P/8/fz/9u/m/8WIIv/Gjhz/27mB//v6+//6+/v/
+ +vr6//n6+f/5+fr/+fn5//n5+P/4+Pn/9/j4//j39//39/f/9/b3//b29v/29vb/9vX2//X29f/19PX/
+ 9PX1//T09P/z8/T/8/Tz//Pz8//z8/P/8vPy//Ly8v/y8vH//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAA
+ AAAAAIiEgf/Rxr3///////7//v///v7//v7+//7+/v/9/f7//f39//39/f/9/fz//Pz9/+XMn//NoSH/
+ zJkk//Hnzv/6+/v/+vr7//r6+v/6+vr/+fr5//n5+f/5+Pj/+Pj4//f3+P/4+Pj/9/f3//b39v/29vf/
+ 9fb2//X29v/19fX/9fT0//T09P/09PT/9PTz//Pz8//z8/P/8/Ly//Ly8v/y8vL//f7+/9HGvf+IhIH/
+ AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//v////7+/v/+/v7//v7+//7+/v/Mysr/zMrK/8zKyv/Mysr/
+ zMrK//z8/P/auV3/1q46/9WvRP/28+n/+/r6//r6+//6+vr/+fn5//n5+f/5+fn/+fn4//j4+P/39/f/
+ 9/f3//b39//29/b/9vb2//b29f/19vX/9fX1//X19P/09PT/9PT0//Tz9P/08/P/8/Pz//Pz8v/y8vL/
+ /f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3///////7///////7//v7+//7+/v/Mysr/
+ /v3+/+ncyv+2gkL/u6KE//z8/f/69/D/2rZL/9iyQf/fwW7/+/r7/6iSlf+okpX/qJKV/6iSlf+okpX/
+ qJKV/6iSlf+okpX/qJKV/6iSlf+okpX/qJKV/6iSlf+okpX/qJKV/6iSlf+okpT/qJKU//P09P/08/P/
+ 8/Pz//Lz8//y8vL//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//////////v///v7/
+ /v7+//7+/v/Mysr/+PPv/7N5Kf+6dQr/q2sa//r28//8/Pz/7+K7/9y4Vv/ix3z/+/v7/6uWmf+rlpn/
+ q5aY/6uVmP+qlpj/qpSY/6qUl/+qlJf/qpSX/6mUl/+plJf/qZSX/6iTlv+ok5b/qJOW/6iTlv+nk5X/
+ qJKV//T09P/09PP/8/Pz//Pz8//z8/P//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP/
+ ///////////+/////v///////v/FtKH/t3kp/7NtC/+5dRH/uXEL/8iaYf/8/f3//Pz8//z8+//8/Pv/
+ /Pv7//v7+//6+vv/+vr6//r6+f/5+fr/+fn5//j4+f/5+Pj/+Pj4//f49//39/f/9vf3//b29v/29vb/
+ 9fb1//X29f/19fX/9fT0//T09P/09PP/8/T0//Pz9P/z8/P//f7+/+DZ0/+IhIH/AAAAKgAAAA4AAAAA
+ AAAAAIiEgf/g2dP///////////////////7//////v+8k1//tWwK/7h+NP/CrJL/uHQQ/7Z2D//q2MH/
+ /Pz8//z8/P/8+/z/+/v7//v7+//7+/v/+vv6//r6+v/5+fr/+vn5//n5+f/5+Pn/+Pj4//j3+P/49/f/
+ 9/f3//f29//29vb/9vb2//b29f/19fX/9PX1//T09f/09PT/8/T0//P08//z8/P//f7+/+DZ0/+IhIH/
+ AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP///////////////////7////+///y5tn/4cSe//jy6//+/f7/
+ zJtb/8GHC//Gizf//f39//z9/f/8/Pz//Pz8//v8+//7+/v/+vr7//v6+v/5+vn/+fn6//r5+f/5+Pn/
+ +Pj4//j4+P/3+Pj/9/f4//f39//39/f/9vb2//X29f/29vb/9fX1//T09f/09PT/9PT0//Pz9P/z8/P/
+ /f7+/+DZ0/+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP////////////////////////////+/v//
+ /v7///7+/v/+/v7/9/Dn/8WIIv/Gjhz/3LqC//z9/f/8/P3//Pz8//v8/P/8+/v/+/v6//r6+v/6+vr/
+ +vr5//n6+v/5+fn/+Pn4//n5+P/3+Pj/+Pj3//f39//29/f/9vb3//b29v/29fX/9fX1//X19P/19PT/
+ 9PT0//Tz9P/09PT//f7+/+DZ0/+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP/////////////////
+ ///////////+/////v////7+/v/+/v7//v7+/+XNn//NoSH/zJkk//Poz//8/Pz//Pz8//z7+//8+/v/
+ +/v7//v7+//6+/v/+vr6//r5+f/6+fn/+fj5//n5+P/4+Pj/+Pj4//f39//39/f/9/f3//b29v/29vb/
+ 9fX1//X19f/19fX/9fT0//P09P/z8/P//f7+/+DZ0/+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP/
+ ///////////////////////+//////7///7+//7+///+/v///v7+//39/f/auV3/1q46/9WvRf/49Or/
+ /Pz8//z8+//8+/v/+/v7//v7+//7+vv/+vr6//n6+v/6+fn/+fn5//j5+f/5+Pj/+Pj4//j49//39/f/
+ 9/f2//f39//29vb/9fb2//X29f/19fX/9fX1//T09P/z9PT//f7+/+DZ0/+IhIH/AAAAKgAAAA4AAAAA
+ AAAAAIiEgf/g2dP//////////////////////////////v////////7+///+/v7//v7+//7+/v/6+PH/
+ 2rZL/9iyQf/fwm7//f38//z9/P/7/Pz/+/v8//v7+//7+/v/+vr6//r6+v/6+fr/+fr6//n5+f/4+fj/
+ +Pj4//j4+P/3+Pf/9/f3//b39v/39vf/9vb2//X29v/19fX/9fX0//X09P/09PT//f7+/+DZ0/+IhIH/
+ AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP////////////////////////////////////+/////v/+//7/
+ /v7+//7+/v/9/v7/7+O8/9y4Vv/iyH3//Pz9//z8/f/8/Pz//Pz8//z8+//7+/v/+/v6//v7+v/6+vr/
+ +vn5//r5+f/5+fn/+Pn4//j4+P/4+Pj/9/j3//f39v/29vb/9vb2//b29f/29fX/9fX1//T19P/09fT/
+ /f7+/+DZ0/+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP/////////////////////////////////
+ ///////+///+/v///v7////+///9/v7//v7+//39/v/9/f3//fz9//z8/P/8/Pz/+/z8//z8+//7+/v/
+ +/v7//v7+//6+vr/+vr6//r6+f/5+fn/+fn5//j4+P/4+Pf/9/f3//f39//39/f/9vb2//b19v/29fX/
+ 9vb1//X19P/09PX//f7+/+DZ0/+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP/vr/A/76/wP++v8D/
+ vr/A/76/wP++v8D/vr/A/76/wP++v8D/vr/A/76/wP++v8D/vr/A/76/wP++v8D/vr/A/76/wP++v8D/
+ vr/A/76/wP++v8D/vr/A/76/wP++v8D/vr/A/76/wP++v8D/vr/A/76/wP++v8D/vr/A/76/wP++v8D/
+ vr/A/76/wP++v8D/vr/A/76/wP++v8D/vr/A/+DZ0/+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP/
+ 4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/
+ 4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/
+ 4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0/+IhIH/AAAAJgAAAAwAAAAA
+ AAAAAIiEgf/g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/
+ 4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/
+ 4NnT/+DZ0//g2dP/kXlo/5F5aP/g2dP/4NnT/5F5aP+ReWj/4NnT/+DZ0/+ReWj/kXlo/+DZ0/+IhIH/
+ AAAAFwAAAAYAAAAAAAAAAIeDgGyIhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/
+ iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/
+ iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/
+ iISB/4iEgf9/fHlyAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD///////8AAP///////wAA
+ ////////AAAAAAAAAAcAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAA
+ AAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAA
+ AAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAA
+ AAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAA
+ AAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAA
+ AAMAAAAAAAAAAwAA////////AAD///////8AAP///////wAA////////AAD///////8AACgAAAAgAAAA
+ QAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAL
+ AAAADQAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAAN
+ AAAADQAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAALAAAABgAAAAIAAAAG
+ AAAAFgAAACMAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAm
+ AAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACMAAAAW
+ AAAABouGhIGFgX73iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/
+ iISB/4iEgf+KhoP/jImG/4+Mif+Piof/i4eF/4iEgv+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/
+ eXVzlAAAACMAAAALiISB//z7+//7+/r/+vr6//r6+f/5+vn/+fn4//j4+P/3+Pj/9/f3//f39//29vb/
+ 9vb2//X19f/09fX/9PT1//T08//08/P/8/Lz//Ly8//x8vL/8fHx//Lx8f/x8fH/8fHx//Dx8P/w8PD/
+ 8PDw//v59v+IhIH/AAAAJgAAAA2IhIH/+/z7//v7+//6+/v/+/r6//n5+f/5+fn/+Pn5//j4+P/39/f/
+ 9/f3//b29//29vb/9fX2//X19f/19fX/9PT0//Pz8//z8/P/8/Lz//Ly8v/x8vL/8fLx//Hx8f/x8fH/
+ 8fHx//Dw8P/w8PD/+/n2/4iEgf8AAAAmAAAADYiEgf/8+/v/+/z7//v7+//7+vr/2NLX/83Yzf/CtKX/
+ 1t/V//f3+P/39/j/9/f3//b29v/19vb/9fX2//X19f/09PT/9PT0//P09P/z8/L/8vLz//Py8v/y8vL/
+ 8fHx//Hx8P/x8fH/8fDw//Dw8P/7+fb/iISB/wAAACYAAAANiISB//z8/P/8+/z/+/v7//r7+v/U3NP/
+ 4NC3/7F5FP/TuJD/+Pj4//j4+P/39/j/9vf3//f29v/29fX/9fX1//X09f/09PT/9PT0//Pz8//z8/P/
+ 8vLy//Ly8v/y8vL/8vHy//Hx8f/x8PH/8PDw//v59v+IhIH/AAAAJgAAAA2IhIH//f39//z8/P/7/Pv/
+ /Pv7/7+ke/+vbgL/uYIb/7uFKv/y6+H/+fj4//j4+P/39/f/9/b3//b29v/19fb/9fX1//T09P/09PT/
+ 8/T0//Pz8//z8/P/8vLy//Ly8v/y8vL/8fHx//Dx8f/x8fD/+/n2/4iEgf8AAAAmAAAADYiEgf/9/f3/
+ /f39//z8/P/7+/v/z6ty/82oa//Wxa//uYAJ/9Owcf/4+fn/+Pj4/5Z8gP+WfID/lnyA/5Z8gP+WfID/
+ lXyA/5V8gP+VfID/lXx//5V8f/+VfH//lXx///Ly8v/x8vH/8fHx//Dx8f/7+fb/iISB/wAAACYAAAAN
+ iISB//39/f/9/f3//Pz9//z8/P/8+/v/+/v7//v6+v/XtHP/w5EW/+vcuv/4+Pj/+Pj4//f49//39/b/
+ 9/b2//X29v/19fX/9fX1//T19P/z9PT/9PTz//Lz8v/y8/L/8vLy//Hy8v/x8fH/8fHx//v59v+IhIH/
+ AAAAJgAAAA2IhIH//f39//z9/f/9/f3//Pz9/+rq6v/r5+r/5+jl/+7j0P/SsDf/1LJE//bz6f/4+Pn/
+ +Pf4//f3+P/29/f/9/b2//X29f/19fX/9PT0//T09P/09PT/8/Pz//Lz8//y8/P/8vLy//Lx8v/x8vL/
+ +/n2/4iEgf8AAAAmAAAADYiEgf/9/f7//f39//39/f/8/P3/29XZ/+HZy/+0lWn/3s+6//Hpzv/Yujv/
+ 3shw//j4+P/4+Pj/+Pj4//f39//29vb/9vb2//b19v/19fX/9PT0//T09P/08/T/8/Pz//Pz8v/y8vL/
+ 8fLy//Hx8f/7+fb/iISB/wAAACYAAAANiISB//7+/f/+/f3//f39//z9/f/WzL//zKhv/7RwAP/Kpm//
+ +/v6/+vepf/l0ov/+fn5//j4+P/4+Pj/9/j4//f29v/29/b/9fb2//X19f/09fX/9PX0//T09P/z9PP/
+ 8vPz//Py8//y8vL/8fLy//v59v+IhIH/AAAAJgAAAA2IhIH//v7+//7+/v/+/v3//f39/7uVXP+zdhD/
+ uo9I/7Z6Df/p2cP/+/r6//r6+v+WfID/lnyA/5Z8gP+WfID/lnyA/5Z8gP+WfID/lXyA/5V8gP+VfID/
+ lXyA/5V8f//z8/T/8/Pz//Lz8//y8vL/+/n2/4iEgf8AAAAmAAAADYiEgf/+/v7//v7+//3+/v/+/f3/
+ 5tCv/+jVt//v59z/wY4j/8mZQf/5+Pf/+vr7//r6+v/5+fn/+fn5//j4+P/3+Pj/9/f3//b29v/29vb/
+ 9fX2//X19f/09fX/9PT0//Tz9P/z8/P/8/Lz//Py8//7+fb/iISB/wAAACYAAAANiISB///+/v/+/v7/
+ /v7+//7+/f/9/f3//f39//38/P/lz6f/yJwb/+HJiv/7+/r/+vr6//n6+f/5+fn/+fj4//j4+P/4+Pf/
+ 9/f3//b29//19vb/9vb1//X19P/09PT/9PT0//T08//z8/P/8vLz//v59v+IhIH/AAAAJgAAAA2IhIH/
+ //////7+///+/v7//f7+/+Ta4v/j3OL/2NPV/+zhz//dw2n/07Ew/+/mxP/6+vr/+vn6//n5+f/5+fj/
+ +fj5//j4+P/49/f/9vb3//b39v/29fb/9fX1//X19f/19PT/9PT0//Tz8//z8vP/+/n2/4iEgf8AAAAm
+ AAAADYiEgf////////7///7////+/v7/2tvZ/+nezf+xgDH/2cWo//v59v/cwVD/28Bb//r7+//6+vr/
+ +fr5//n5+f/5+fj/+Pj4//f4+P/39/f/9/f3//b29v/19vX/9fX1//X19P/09PX/8/T0//Pz8//7+fb/
+ iISB/wAAACYAAAANiISB//////////7///7+//7+/v/Jtpr/t30i/7l+Cv/Bkkj/+vj1//Xw2v/y6cn/
+ ln2A/5Z9gP+WfID/lnyA/5Z8gP+WfID/lnyA/5Z8gP+WfID/lnyA/5Z8gP+VfID/9fX1//T19f/09PT/
+ 8/T0//v59v+IhIH/AAAAJgAAAA2KhoT2/////////////////////8ObW/+/izj/yK6J/7d9B//ewpj/
+ /fz8//v7/P/7+/v/+/v7//r7+v/6+vr/+fn6//n5+f/5+fj/+Pj4//f3+P/39/b/9vb3//X29v/19fX/
+ 9PX1//T09P/08/T/+/n2/4iEgf8AAAAmAAAADYqGhPb///////////////////7/+PLr//r38//+/v3/
+ zqNP/8SQIP/17dz//Pz8//v8+//7+/v/+/r6//r6+v/6+fr/+fn5//n4+f/4+Pj/9/f4//f39//39/f/
+ 9vb3//X29f/19fX/9fT0//T19P/7+fb/iISB/wAAACYAAAANioaE9v/////////////////////+////
+ /v7+//7+/f/y5dH/zKMh/9i5Xv/8/P3//Pz8//z7+//7+/v/+/v7//r6+v/6+vn/+fn5//n4+f/4+Pj/
+ +Pj3//f39//39/f/9vb2//X19f/19fX/9PT1//v59v+IhIH/AAAAJgAAAA2KhoT2////////////////
+ //////////////7//v/+//79/f/p2Z//1bY3/+bUkf/9/fz//Pz8//v8/P/7+/v/+/r6//r6+v/5+vn/
+ +fj5//j4+P/4+Pj/9/j3//b39v/29vf/9vX1//X19f/09fX/+/n2/4iEgf8AAAAmAAAADYuGhPb/////
+ //////////////////7//////v/+/////v7+//39/v/jznz/38dq//39/f/8/Pz//Pv8//z7+//7+/r/
+ +vr7//r6+f/5+vn/+fn5//j5+P/3+Pf/+Pf3//f39v/39vb/9vb1//X19f/7+fb/iISB/wAAACYAAAAN
+ joqI9svJx//Lycf/y8nH/8vJx//Lycf/y8nH/8vJx//Lycf/y8nH/8vJx//Lycf/y8nH/8vJx//Lycf/
+ y8nH/8vJx//Mysn/zcvK/83Myv/NzMr/zcvJ/8zKyP/Mysj/y8nH/8vJx//Lycf/y8nH/8vJx/+IhIH/
+ AAAAIwAAAAuLiYf+5t7Y/9/X0f/e19H/3tfR/97X0f/e19H/3tfR/97X0f/e19H/3tfR/97X0f/e19H/
+ 3tfR/97X0f/e19H/3tfR/97X0f/e19H/3tfR/97X0f/e19H/3tfR/5F5aP/e19H/kXlo/97X0f+ReWj/
+ 3tfR/4iEgf8AAAAWAAAABpGMiXyIhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/
+ iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/
+ iISB/4iEgf+IhIH/i4aEgQAAAAYAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////8AAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////8oAAAA
+ EAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAAAAAAAAAAl5KP/5eSj/+Xko//l5KP/5eSj/+Xko//
+ l5KP/5eSj/+Xko//l5KP/5eSj/+Xko//l5KP/5eSj/+Xko//l5KP/5eSj//+/f7//fz9//v7+//6+vn/
+ +Pn4//f39//19vb/9fT0//Pz8//y8vL/8fHx//Dw8P/w8PD/8PDw/5eSj/+Xko///v7+//39/f/k2eL/
+ 4trh/9bR1P/o38z/9/f3//X19f/09PT/8vLz//Hx8f/x8fH/8PDw//Dw8P+Xko//l5KP///+///+/v7/
+ 2trY/+fdzP+whDH/1sWm//f3+P/29vX/9fT0//Pz9P/y8vL/8fHx//Hw8f/w8PD/l5KP/5eSj///////
+ /v7+/8i3mv+3gyL/uYQK/8CVR//29PL/9vf2/6uYmv+rl5r/qpea/6qXmf+qlpn/8PDw/5eSj/+Xko//
+ /////////v/Dnlv/v5A4/8iwiP+3gwf/28KV//j3+P/29/b/9fX1//Pz9P/y8vP/8vHx//Dw8f+Xko//
+ l5KP////////////+PTq//n38v/9/Pz/zadO/8SWIP/w6tf/9/f3//b19f/09PT/8/Pz//Ly8v/x8fH/
+ l5KP/5eSj/////////////7//v/+/v7//f39//Dl0P/MqSH/17xc//f3+P/29/b/9fX1//Tz9P/z8vL/
+ 8fHy/5eSj/+Xko///////////////////v/+//7+/v/8/P3/6Nqd/9W7N//k1Y//+Pf3//b29v/09fX/
+ 8/Tz//Lz8v+Xko//l5KP//////////////////7//v/+/v7//f39//z8+//i0Xz/3spp//j4+P/39vf/
+ 9fX1//T09P/z8/P/l5KP/5eSj//NzMr/zczK/83Myv/NzMr/zczK/83Myv/NzMr/zczK/83Myv/NzMr/
+ zczK/83Myv/NzMr/zczK/5eSj/+Xko//4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/
+ kXlo/+DZ0/+ReWj/4NnT/5F5aP+Xko//l5KP/5eSj/+Xko//l5KP/5eSj/+Xko//l5KP/5eSj/+Xko//
+ l5KP/5eSj/+Xko//l5KP/5eSj/+Xko//l5KP/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAA=
+
+
+
\ No newline at end of file
diff --git a/EDMI_ClientSuite/frmUserBasics.vb b/EDMI_ClientSuite/frmUserBasics.vb
new file mode 100644
index 00000000..bbcfe1a8
--- /dev/null
+++ b/EDMI_ClientSuite/frmUserBasics.vb
@@ -0,0 +1,27 @@
+Imports System.IO
+Imports DigitalData.Modules.Logging
+Public Class frmUserBasics
+ Private _Logger As Logger
+ Private _MyLogger As LogConfig
+ Private Sub LinkLabel1_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
+ ' Specify that the link was visited.
+ Me.LinkLabel1.LinkVisited = True
+ ' Navigate to a URL.
+ System.Diagnostics.Process.Start("http://www.didalog.de/Support")
+ End Sub
+
+ Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
+
+ End Sub
+
+ Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
+ Process.Start(_MyLogger.LogDirectory)
+ End Sub
+
+ Private Sub frmUserBasics_Load(sender As Object, e As EventArgs) Handles Me.Load
+ Dim oUserAppdata = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Digital Data\EDMI_Client_Suite\Log")
+
+ _MyLogger = New LogConfig(LogConfig.PathType.CustomPath, oUserAppdata)
+ _Logger = _MyLogger.GetLogger()
+ End Sub
+End Class
\ No newline at end of file
diff --git a/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMIFileOps.EDMIServiceReference.ContainerResult.datasource b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMIFileOps.EDMIServiceReference.ContainerResult.datasource
new file mode 100644
index 00000000..92381800
--- /dev/null
+++ b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMIFileOps.EDMIServiceReference.ContainerResult.datasource
@@ -0,0 +1,10 @@
+
+
+
+ DigitalData.Modules.EDMIFileOps.EDMIServiceReference.ContainerResult
+
\ No newline at end of file
diff --git a/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMIFileOps.EDMIServiceReference.NonQueryResult.datasource b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMIFileOps.EDMIServiceReference.NonQueryResult.datasource
new file mode 100644
index 00000000..1ded1ec6
--- /dev/null
+++ b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMIFileOps.EDMIServiceReference.NonQueryResult.datasource
@@ -0,0 +1,10 @@
+
+
+
+ DigitalData.Modules.EDMIFileOps.EDMIServiceReference.NonQueryResult
+
\ No newline at end of file
diff --git a/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMIFileOps.EDMIServiceReference.ScalarResult.datasource b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMIFileOps.EDMIServiceReference.ScalarResult.datasource
new file mode 100644
index 00000000..972a9621
--- /dev/null
+++ b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMIFileOps.EDMIServiceReference.ScalarResult.datasource
@@ -0,0 +1,10 @@
+
+
+
+ DigitalData.Modules.EDMIFileOps.EDMIServiceReference.ScalarResult
+
\ No newline at end of file
diff --git a/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMIFileOps.EDMIServiceReference.TableResult.datasource b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMIFileOps.EDMIServiceReference.TableResult.datasource
new file mode 100644
index 00000000..21ec4794
--- /dev/null
+++ b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Modules.EDMIFileOps.EDMIServiceReference.TableResult.datasource
@@ -0,0 +1,10 @@
+
+
+
+ DigitalData.Modules.EDMIFileOps.EDMIServiceReference.TableResult
+
\ No newline at end of file
diff --git a/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Modules.Filesystem.xsd b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Modules.Filesystem.xsd
new file mode 100644
index 00000000..46469df3
--- /dev/null
+++ b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Modules.Filesystem.xsd
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Services.EDMService.wsdl b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Services.EDMService.wsdl
new file mode 100644
index 00000000..2fd4ed52
--- /dev/null
+++ b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Services.EDMService.wsdl
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Services.EDMService.xsd b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Services.EDMService.xsd
new file mode 100644
index 00000000..dcec368e
--- /dev/null
+++ b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Services.EDMService.xsd
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Services.EDMService1.xsd b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Services.EDMService1.xsd
new file mode 100644
index 00000000..4fce5c2f
--- /dev/null
+++ b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/DigitalData.Services.EDMService1.xsd
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/Reference.svcmap b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/Reference.svcmap
new file mode 100644
index 00000000..8b273439
--- /dev/null
+++ b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/Reference.svcmap
@@ -0,0 +1,37 @@
+
+
+
+ false
+ true
+ true
+
+ false
+ false
+ false
+
+
+ true
+ Auto
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/Reference.vb b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/Reference.vb
new file mode 100644
index 00000000..9d037d69
--- /dev/null
+++ b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/Reference.vb
@@ -0,0 +1,588 @@
+'------------------------------------------------------------------------------
+'
+' Dieser Code wurde von einem Tool generiert.
+' Laufzeitversion:4.0.30319.42000
+'
+' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+' der Code erneut generiert wird.
+'
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+Imports System
+Imports System.Runtime.Serialization
+
+Namespace EDMIServiceReference
+
+ _
+ Partial Public Class TableResult
+ Inherits Object
+ Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+
+ _
+ Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject
+
+ _
+ Private ErrorMessageField As String
+
+ _
+ Private OKField As Boolean
+
+ _
+ Private TableField As System.Data.DataTable
+
+ _
+ Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData
+ Get
+ Return Me.extensionDataField
+ End Get
+ Set
+ Me.extensionDataField = value
+ End Set
+ End Property
+
+ _
+ Public Property ErrorMessage() As String
+ Get
+ Return Me.ErrorMessageField
+ End Get
+ Set
+ If (Object.ReferenceEquals(Me.ErrorMessageField, value) <> true) Then
+ Me.ErrorMessageField = value
+ Me.RaisePropertyChanged("ErrorMessage")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property OK() As Boolean
+ Get
+ Return Me.OKField
+ End Get
+ Set
+ If (Me.OKField.Equals(value) <> true) Then
+ Me.OKField = value
+ Me.RaisePropertyChanged("OK")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property Table() As System.Data.DataTable
+ Get
+ Return Me.TableField
+ End Get
+ Set
+ If (Object.ReferenceEquals(Me.TableField, value) <> true) Then
+ Me.TableField = value
+ Me.RaisePropertyChanged("Table")
+ End If
+ End Set
+ End Property
+
+ Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
+
+ Protected Sub RaisePropertyChanged(ByVal propertyName As String)
+ Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent
+ If (Not (propertyChanged) Is Nothing) Then
+ propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName))
+ End If
+ End Sub
+ End Class
+
+ _
+ Partial Public Class ScalarResult
+ Inherits Object
+ Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+
+ _
+ Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject
+
+ _
+ Private ErrorMessageField As String
+
+ _
+ Private OKField As Boolean
+
+ _
+ Private ScalarField As Object
+
+ _
+ Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData
+ Get
+ Return Me.extensionDataField
+ End Get
+ Set
+ Me.extensionDataField = value
+ End Set
+ End Property
+
+ _
+ Public Property ErrorMessage() As String
+ Get
+ Return Me.ErrorMessageField
+ End Get
+ Set
+ If (Object.ReferenceEquals(Me.ErrorMessageField, value) <> true) Then
+ Me.ErrorMessageField = value
+ Me.RaisePropertyChanged("ErrorMessage")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property OK() As Boolean
+ Get
+ Return Me.OKField
+ End Get
+ Set
+ If (Me.OKField.Equals(value) <> true) Then
+ Me.OKField = value
+ Me.RaisePropertyChanged("OK")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property Scalar() As Object
+ Get
+ Return Me.ScalarField
+ End Get
+ Set
+ If (Object.ReferenceEquals(Me.ScalarField, value) <> true) Then
+ Me.ScalarField = value
+ Me.RaisePropertyChanged("Scalar")
+ End If
+ End Set
+ End Property
+
+ Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
+
+ Protected Sub RaisePropertyChanged(ByVal propertyName As String)
+ Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent
+ If (Not (propertyChanged) Is Nothing) Then
+ propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName))
+ End If
+ End Sub
+ End Class
+
+ _
+ Partial Public Class NonQueryResult
+ Inherits Object
+ Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+
+ _
+ Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject
+
+ _
+ Private ErrorMessageField As String
+
+ _
+ Private OKField As Boolean
+
+ _
+ Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData
+ Get
+ Return Me.extensionDataField
+ End Get
+ Set
+ Me.extensionDataField = value
+ End Set
+ End Property
+
+ _
+ Public Property ErrorMessage() As String
+ Get
+ Return Me.ErrorMessageField
+ End Get
+ Set
+ If (Object.ReferenceEquals(Me.ErrorMessageField, value) <> true) Then
+ Me.ErrorMessageField = value
+ Me.RaisePropertyChanged("ErrorMessage")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property OK() As Boolean
+ Get
+ Return Me.OKField
+ End Get
+ Set
+ If (Me.OKField.Equals(value) <> true) Then
+ Me.OKField = value
+ Me.RaisePropertyChanged("OK")
+ End If
+ End Set
+ End Property
+
+ Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
+
+ Protected Sub RaisePropertyChanged(ByVal propertyName As String)
+ Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent
+ If (Not (propertyChanged) Is Nothing) Then
+ propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName))
+ End If
+ End Sub
+ End Class
+
+ _
+ Partial Public Class ContainerResult
+ Inherits Object
+ Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+
+ _
+ Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject
+
+ Private ContainerField As EDMIServiceReference.FileContainerInner
+
+ Private ErrorMessageField As String
+
+ Private OKField As Boolean
+
+ _
+ Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData
+ Get
+ Return Me.extensionDataField
+ End Get
+ Set
+ Me.extensionDataField = value
+ End Set
+ End Property
+
+ _
+ Public Property Container() As EDMIServiceReference.FileContainerInner
+ Get
+ Return Me.ContainerField
+ End Get
+ Set
+ If (Object.ReferenceEquals(Me.ContainerField, value) <> true) Then
+ Me.ContainerField = value
+ Me.RaisePropertyChanged("Container")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property ErrorMessage() As String
+ Get
+ Return Me.ErrorMessageField
+ End Get
+ Set
+ If (Object.ReferenceEquals(Me.ErrorMessageField, value) <> true) Then
+ Me.ErrorMessageField = value
+ Me.RaisePropertyChanged("ErrorMessage")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property OK() As Boolean
+ Get
+ Return Me.OKField
+ End Get
+ Set
+ If (Me.OKField.Equals(value) <> true) Then
+ Me.OKField = value
+ Me.RaisePropertyChanged("OK")
+ End If
+ End Set
+ End Property
+
+ Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
+
+ Protected Sub RaisePropertyChanged(ByVal propertyName As String)
+ Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent
+ If (Not (propertyChanged) Is Nothing) Then
+ propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName))
+ End If
+ End Sub
+ End Class
+
+ _
+ Partial Public Class FileContainerInner
+ Inherits Object
+ Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+
+ _
+ Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject
+
+ Private ContentsField() As Byte
+
+ Private CreatedAtField As Date
+
+ Private ExtensionField As String
+
+ Private FileIdField As String
+
+ Private UpdatedAtField As Date
+
+ _
+ Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData
+ Get
+ Return Me.extensionDataField
+ End Get
+ Set
+ Me.extensionDataField = value
+ End Set
+ End Property
+
+ _
+ Public Property Contents() As Byte()
+ Get
+ Return Me.ContentsField
+ End Get
+ Set
+ If (Object.ReferenceEquals(Me.ContentsField, value) <> true) Then
+ Me.ContentsField = value
+ Me.RaisePropertyChanged("Contents")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property CreatedAt() As Date
+ Get
+ Return Me.CreatedAtField
+ End Get
+ Set
+ If (Me.CreatedAtField.Equals(value) <> true) Then
+ Me.CreatedAtField = value
+ Me.RaisePropertyChanged("CreatedAt")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property Extension() As String
+ Get
+ Return Me.ExtensionField
+ End Get
+ Set
+ If (Object.ReferenceEquals(Me.ExtensionField, value) <> true) Then
+ Me.ExtensionField = value
+ Me.RaisePropertyChanged("Extension")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property FileId() As String
+ Get
+ Return Me.FileIdField
+ End Get
+ Set
+ If (Object.ReferenceEquals(Me.FileIdField, value) <> true) Then
+ Me.FileIdField = value
+ Me.RaisePropertyChanged("FileId")
+ End If
+ End Set
+ End Property
+
+ _
+ Public Property UpdatedAt() As Date
+ Get
+ Return Me.UpdatedAtField
+ End Get
+ Set
+ If (Me.UpdatedAtField.Equals(value) <> true) Then
+ Me.UpdatedAtField = value
+ Me.RaisePropertyChanged("UpdatedAt")
+ End If
+ End Set
+ End Property
+
+ Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
+
+ Protected Sub RaisePropertyChanged(ByVal propertyName As String)
+ Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent
+ If (Not (propertyChanged) Is Nothing) Then
+ propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName))
+ End If
+ End Sub
+ End Class
+
+ _
+ Public Interface IEDMService
+
+ _
+ Function CreateDatabaseRequest(ByVal Name As String, ByVal Debug As Boolean) As String
+
+ _
+ Function CreateDatabaseRequestAsync(ByVal Name As String, ByVal Debug As Boolean) As System.Threading.Tasks.Task(Of String)
+
+ _
+ Sub CloseDatabaseRequest()
+
+ _
+ Function CloseDatabaseRequestAsync() As System.Threading.Tasks.Task
+
+ _
+ Function ReturnDatatable(ByVal SQL As String) As EDMIServiceReference.TableResult
+
+ _
+ Function ReturnDatatableAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult)
+
+ _
+ Function ReturnScalar(ByVal SQL As String) As EDMIServiceReference.ScalarResult
+
+ _
+ Function ReturnScalarAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.ScalarResult)
+
+ _
+ Function ExecuteNonQuery(ByVal SQL As String) As EDMIServiceReference.NonQueryResult
+
+ _
+ Function ExecuteNonQueryAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.NonQueryResult)
+
+ _
+ Function CreateFile(ByVal Contents() As Byte, ByVal Extension As String) As String
+
+ _
+ Function CreateFileAsync(ByVal Contents() As Byte, ByVal Extension As String) As System.Threading.Tasks.Task(Of String)
+
+ _
+ Function UpdateFile(ByVal ContainerId As String, ByVal Contents() As Byte) As String
+
+ _
+ Function UpdateFileAsync(ByVal ContainerId As String, ByVal Contents() As Byte) As System.Threading.Tasks.Task(Of String)
+
+ _
+ Function GetFile(ByVal ContainerId As String) As EDMIServiceReference.ContainerResult
+
+ _
+ Function GetFileAsync(ByVal ContainerId As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.ContainerResult)
+
+ _
+ Function DeleteFile(ByVal ContainerId As String) As Boolean
+
+ _
+ Function DeleteFileAsync(ByVal ContainerId As String) As System.Threading.Tasks.Task(Of Boolean)
+ End Interface
+
+ _
+ Public Interface IEDMServiceChannel
+ Inherits EDMIServiceReference.IEDMService, System.ServiceModel.IClientChannel
+ End Interface
+
+ _
+ Partial Public Class EDMServiceClient
+ Inherits System.ServiceModel.ClientBase(Of EDMIServiceReference.IEDMService)
+ Implements EDMIServiceReference.IEDMService
+
+ Public Sub New()
+ MyBase.New
+ End Sub
+
+ Public Sub New(ByVal endpointConfigurationName As String)
+ MyBase.New(endpointConfigurationName)
+ End Sub
+
+ Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As String)
+ MyBase.New(endpointConfigurationName, remoteAddress)
+ End Sub
+
+ Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As System.ServiceModel.EndpointAddress)
+ MyBase.New(endpointConfigurationName, remoteAddress)
+ End Sub
+
+ Public Sub New(ByVal binding As System.ServiceModel.Channels.Binding, ByVal remoteAddress As System.ServiceModel.EndpointAddress)
+ MyBase.New(binding, remoteAddress)
+ End Sub
+
+ Public Function CreateDatabaseRequest(ByVal Name As String, ByVal Debug As Boolean) As String Implements EDMIServiceReference.IEDMService.CreateDatabaseRequest
+ Return MyBase.Channel.CreateDatabaseRequest(Name, Debug)
+ End Function
+
+ Public Function CreateDatabaseRequestAsync(ByVal Name As String, ByVal Debug As Boolean) As System.Threading.Tasks.Task(Of String) Implements EDMIServiceReference.IEDMService.CreateDatabaseRequestAsync
+ Return MyBase.Channel.CreateDatabaseRequestAsync(Name, Debug)
+ End Function
+
+ Public Sub CloseDatabaseRequest() Implements EDMIServiceReference.IEDMService.CloseDatabaseRequest
+ MyBase.Channel.CloseDatabaseRequest
+ End Sub
+
+ Public Function CloseDatabaseRequestAsync() As System.Threading.Tasks.Task Implements EDMIServiceReference.IEDMService.CloseDatabaseRequestAsync
+ Return MyBase.Channel.CloseDatabaseRequestAsync
+ End Function
+
+ Public Function ReturnDatatable(ByVal SQL As String) As EDMIServiceReference.TableResult Implements EDMIServiceReference.IEDMService.ReturnDatatable
+ Return MyBase.Channel.ReturnDatatable(SQL)
+ End Function
+
+ Public Function ReturnDatatableAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult) Implements EDMIServiceReference.IEDMService.ReturnDatatableAsync
+ Return MyBase.Channel.ReturnDatatableAsync(SQL)
+ End Function
+
+ Public Function ReturnScalar(ByVal SQL As String) As EDMIServiceReference.ScalarResult Implements EDMIServiceReference.IEDMService.ReturnScalar
+ Return MyBase.Channel.ReturnScalar(SQL)
+ End Function
+
+ Public Function ReturnScalarAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.ScalarResult) Implements EDMIServiceReference.IEDMService.ReturnScalarAsync
+ Return MyBase.Channel.ReturnScalarAsync(SQL)
+ End Function
+
+ Public Function ExecuteNonQuery(ByVal SQL As String) As EDMIServiceReference.NonQueryResult Implements EDMIServiceReference.IEDMService.ExecuteNonQuery
+ Return MyBase.Channel.ExecuteNonQuery(SQL)
+ End Function
+
+ Public Function ExecuteNonQueryAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.NonQueryResult) Implements EDMIServiceReference.IEDMService.ExecuteNonQueryAsync
+ Return MyBase.Channel.ExecuteNonQueryAsync(SQL)
+ End Function
+
+ Public Function CreateFile(ByVal Contents() As Byte, ByVal Extension As String) As String Implements EDMIServiceReference.IEDMService.CreateFile
+ Return MyBase.Channel.CreateFile(Contents, Extension)
+ End Function
+
+ Public Function CreateFileAsync(ByVal Contents() As Byte, ByVal Extension As String) As System.Threading.Tasks.Task(Of String) Implements EDMIServiceReference.IEDMService.CreateFileAsync
+ Return MyBase.Channel.CreateFileAsync(Contents, Extension)
+ End Function
+
+ Public Function UpdateFile(ByVal ContainerId As String, ByVal Contents() As Byte) As String Implements EDMIServiceReference.IEDMService.UpdateFile
+ Return MyBase.Channel.UpdateFile(ContainerId, Contents)
+ End Function
+
+ Public Function UpdateFileAsync(ByVal ContainerId As String, ByVal Contents() As Byte) As System.Threading.Tasks.Task(Of String) Implements EDMIServiceReference.IEDMService.UpdateFileAsync
+ Return MyBase.Channel.UpdateFileAsync(ContainerId, Contents)
+ End Function
+
+ Public Function GetFile(ByVal ContainerId As String) As EDMIServiceReference.ContainerResult Implements EDMIServiceReference.IEDMService.GetFile
+ Return MyBase.Channel.GetFile(ContainerId)
+ End Function
+
+ Public Function GetFileAsync(ByVal ContainerId As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.ContainerResult) Implements EDMIServiceReference.IEDMService.GetFileAsync
+ Return MyBase.Channel.GetFileAsync(ContainerId)
+ End Function
+
+ Public Function DeleteFile(ByVal ContainerId As String) As Boolean Implements EDMIServiceReference.IEDMService.DeleteFile
+ Return MyBase.Channel.DeleteFile(ContainerId)
+ End Function
+
+ Public Function DeleteFileAsync(ByVal ContainerId As String) As System.Threading.Tasks.Task(Of Boolean) Implements EDMIServiceReference.IEDMService.DeleteFileAsync
+ Return MyBase.Channel.DeleteFileAsync(ContainerId)
+ End Function
+ End Class
+End Namespace
diff --git a/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/System.Data.xsd b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/System.Data.xsd
new file mode 100644
index 00000000..8c8a3c0c
--- /dev/null
+++ b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/System.Data.xsd
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/configuration.svcinfo b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/configuration.svcinfo
new file mode 100644
index 00000000..58ccbec4
--- /dev/null
+++ b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/configuration.svcinfo
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/configuration91.svcinfo b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/configuration91.svcinfo
new file mode 100644
index 00000000..de0da329
--- /dev/null
+++ b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/configuration91.svcinfo
@@ -0,0 +1,210 @@
+
+
+
+
+
+
+ tcpBinding
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+ Buffered
+
+
+ OleTransactions
+
+
+ StrongWildcard
+
+
+ 0
+
+
+
+
+
+ 65536
+
+
+ 0
+
+
+
+
+
+ False
+
+
+ System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement
+
+
+ True
+
+
+ 00:10:00
+
+
+ False
+
+
+ System.ServiceModel.Configuration.NetTcpSecurityElement
+
+
+ Transport
+
+
+ System.ServiceModel.Configuration.TcpTransportSecurityElement
+
+
+ Windows
+
+
+ EncryptAndSign
+
+
+ System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement
+
+
+ Never
+
+
+ TransportSelected
+
+
+ (Sammlung)
+
+
+ Tls, Tls11, Tls12
+
+
+ System.ServiceModel.Configuration.MessageSecurityOverTcpElement
+
+
+ Windows
+
+
+ Default
+
+
+
+
+
+
+
+
+ net.tcp://localhost:9000/DigitalData/Services/Main
+
+
+
+
+
+ netTcpBinding
+
+
+ tcpBinding
+
+
+ EDMIServiceReference.IEDMService
+
+
+ System.ServiceModel.Configuration.AddressHeaderCollectionElement
+
+
+ <Header />
+
+
+ System.ServiceModel.Configuration.IdentityElement
+
+
+ System.ServiceModel.Configuration.UserPrincipalNameElement
+
+
+
+
+
+ System.ServiceModel.Configuration.ServicePrincipalNameElement
+
+
+
+
+
+ System.ServiceModel.Configuration.DnsElement
+
+
+ localhost
+
+
+ System.ServiceModel.Configuration.RsaElement
+
+
+
+
+
+ System.ServiceModel.Configuration.CertificateElement
+
+
+
+
+
+ System.ServiceModel.Configuration.CertificateReferenceElement
+
+
+ My
+
+
+ LocalMachine
+
+
+ FindBySubjectDistinguishedName
+
+
+
+
+
+ False
+
+
+ tcpBinding
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/service.wsdl b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/service.wsdl
new file mode 100644
index 00000000..520b3f35
--- /dev/null
+++ b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/service.wsdl
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ EncryptAndSign
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ net.tcp://localhost:9000/DigitalData/Services/Main
+
+ localhost
+
+
+
+
+
\ No newline at end of file
diff --git a/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/service.xsd b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/service.xsd
new file mode 100644
index 00000000..b4d5ff0f
--- /dev/null
+++ b/EDMI_FILE_OPs/Connected Services/EDMIServiceReference/service.xsd
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EDMI_FILE_OPs/EDMIFileOps.vbproj b/EDMI_FILE_OPs/EDMIFileOps.vbproj
new file mode 100644
index 00000000..25274ec9
--- /dev/null
+++ b/EDMI_FILE_OPs/EDMIFileOps.vbproj
@@ -0,0 +1,164 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {5B1171DC-FFFE-4813-A20D-786AAE47B320}
+ Library
+ DigitalData.Modules.EDMIFileOps
+ DigitalData.Modules.EDMIFileOps
+ 512
+ Windows
+ v4.6.1
+
+
+ true
+ full
+ true
+ true
+ bin\Debug\
+ DigitalData.Modules.EDMIFileOps.xml
+ 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022
+
+
+ pdbonly
+ false
+ true
+ true
+ bin\Release\
+ DigitalData.Modules.EDMIFileOps.xml
+ 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022
+
+
+ On
+
+
+ Binary
+
+
+ Off
+
+
+ On
+
+
+
+ ..\Modules.Logging\bin\Debug\DigitalData.Modules.Logging.dll
+
+
+ ..\Modules.Logging\bin\Debug\NLog.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ Reference.svcmap
+
+
+
+
+ True
+ Application.myapp
+
+
+ True
+ True
+ Resources.resx
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+ VbMyResourcesResXFileCodeGenerator
+ Resources.Designer.vb
+ My.Resources
+ Designer
+
+
+
+
+
+ Reference.svcmap
+
+
+ Reference.svcmap
+
+
+ Reference.svcmap
+
+
+ Reference.svcmap
+
+
+ Designer
+
+
+
+ Designer
+
+
+ Designer
+
+
+
+ Designer
+
+
+ Designer
+
+
+ MyApplicationCodeGenerator
+ Application.Designer.vb
+
+
+ SettingsSingleFileGenerator
+ My
+ Settings.Designer.vb
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WCF Proxy Generator
+ Reference.vb
+
+
+
+
\ No newline at end of file
diff --git a/EDMI_FILE_OPs/FileOp.vb b/EDMI_FILE_OPs/FileOp.vb
new file mode 100644
index 00000000..0de70e41
--- /dev/null
+++ b/EDMI_FILE_OPs/FileOp.vb
@@ -0,0 +1,119 @@
+Imports DigitalData.Modules.Logging
+Imports System.ServiceModel
+Imports System.IO
+
+Public Class FileOp
+ Private _logger As DigitalData.Modules.Logging.Logger
+ Private _logConfig As LogConfig
+ Private _channelFactory As ChannelFactory(Of EDMIServiceReference.IEDMServiceChannel)
+ Private _channel As EDMIServiceReference.IEDMServiceChannel
+ Public Sub New(LogConfig As LogConfig, EDMI_ServiceAdress As String)
+ _logger = LogConfig.GetLogger()
+ _logConfig = LogConfig
+
+ Try
+ Dim binding As New NetTcpBinding()
+ binding.Security.Mode = SecurityMode.Transport
+ binding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows
+ binding.MaxReceivedMessageSize = 2147483647
+ binding.MaxBufferSize = 2147483647
+ binding.MaxBufferPoolSize = 2147483647
+ binding.MaxConnections = 10000
+ binding.ReaderQuotas.MaxArrayLength = 2147483647
+ binding.ReaderQuotas.MaxStringContentLength = 2147483647
+ Dim endpointAddress = New EndpointAddress(EDMI_ServiceAdress)
+ _channelFactory = New ChannelFactory(Of EDMIServiceReference.IEDMServiceChannel)(binding, endpointAddress)
+
+ Catch ex As Exception
+ _logger.Error(ex)
+ End Try
+
+ End Sub
+ Private Function Connect2NetService()
+ Try
+ _channel = Nothing
+ _channel = _channelFactory.CreateChannel()
+ _logger.Info("Successfully connected to EDM_Network Service")
+ AddHandler _channel.Faulted, AddressOf Reconnect
+ _channel.Open()
+ Return True
+ Catch ex As Exception
+ _logger.Error(ex)
+ Return True
+ End Try
+ End Function
+ Private Sub Reconnect()
+ _channel.Abort()
+ Connect2NetService()
+ End Sub
+
+ Public Async Function New_EDMI_File(oFILENAME As String, oUserName As String) As Task(Of String)
+ Try
+ Dim oFileGUID = Await New_EDMIFile_CreateContainer(oFILENAME)
+ Dim oFileRecordID = Nothing
+ If Not IsNothing(oFileGUID) Then
+ Dim oSQL = $"Select Case FNEDMI_SET_RECORD('TBEDMI_ADRESSE','{oUserName}',FALSE,NULL,'','{oFileGUID}') From rdb$database;"
+ oFileRecordID = New_EDMIFile_CreateDB_Record(oSQL)
+ End If
+ Return oFileRecordID
+ Catch ex As Exception
+ _logger.Error(ex)
+ Return Nothing
+ End Try
+ End Function
+ Private Async Function New_EDMIFile_CreateContainer(oFILENAME As String) As Task(Of String)
+ Try
+ Dim sw As New Stopwatch()
+ sw.Start()
+ Dim oFileContents = File.ReadAllBytes(oFILENAME)
+ Dim oExtension As String = New FileInfo(oFILENAME).Extension.Substring(1)
+ Dim oFileGUID = Await _channel.CreateFileAsync(oFileContents, oExtension)
+ sw.Stop()
+ _logger.Info($"File successfully transferred - stopwatch: {sw.Elapsed.ToString}")
+ Return oFileGUID
+ Catch ex As Exception
+ _logger.Error(ex)
+ Return Nothing
+ End Try
+ End Function
+ Private Async Function New_EDMIFile_CreateDB_Record(FBCommand As String) As Task(Of String)
+ Try
+ Dim oTimeTotal As TimeSpan
+ Dim oStopwatch As New Stopwatch()
+ oStopwatch.Start()
+ Dim oRecord_ID As String
+ Dim oRequestName = Await _channel.CreateDatabaseRequestAsync("CreateEDMFileRecord", True)
+ Dim oResult = Await _channel.ReturnScalarAsync(FBCommand)
+
+ oTimeTotal = oStopwatch.Elapsed
+ oStopwatch.Reset()
+
+ Await _channel.CloseDatabaseRequestAsync()
+
+ If Not oResult.OK Then
+ _logger.Warn($"Unexpected error while executing command: {oResult.ErrorMessage}")
+ Else
+ oRecord_ID = oResult.Scalar
+ _logger.Debug($"SCALAR (SERVICE) {FBCommand} - TIME: {(oTimeTotal.ToString)}")
+ End If
+ Return oRecord_ID
+ Catch ex As Exception
+ _logger.Error(ex)
+ Return Nothing
+ End Try
+ End Function
+ Public Async Function Load_EDMIFile_2TempPath(oEDMIFile_GUID As String) As Task(Of String)
+ Try
+ Dim oResult As EDMIServiceReference.ContainerResult = Await _channel.GetFileAsync(oEDMIFile_GUID)
+ Dim oTempPath = Path.Combine(Path.GetTempPath(), "EDMI_FileContainer")
+ Directory.CreateDirectory(oTempPath)
+ Dim oFilePath = Path.Combine(oTempPath, $"{oResult.Container.FileId}.{oResult.Container.Extension}")
+ File.WriteAllBytes(oFilePath, oResult.Container.Contents)
+ ' Process.Start(oTempPath)
+ Return oTempPath
+ Catch ex As Exception
+ _logger.Error(ex)
+ Return Nothing
+ End Try
+ End Function
+End Class
diff --git a/EDMI_FILE_OPs/My Project/Application.Designer.vb b/EDMI_FILE_OPs/My Project/Application.Designer.vb
new file mode 100644
index 00000000..8ab460ba
--- /dev/null
+++ b/EDMI_FILE_OPs/My Project/Application.Designer.vb
@@ -0,0 +1,13 @@
+'------------------------------------------------------------------------------
+'
+' Dieser Code wurde von einem Tool generiert.
+' Laufzeitversion:4.0.30319.42000
+'
+' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+' der Code erneut generiert wird.
+'
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
diff --git a/EDMI_FILE_OPs/My Project/Application.myapp b/EDMI_FILE_OPs/My Project/Application.myapp
new file mode 100644
index 00000000..758895de
--- /dev/null
+++ b/EDMI_FILE_OPs/My Project/Application.myapp
@@ -0,0 +1,10 @@
+
+
+ false
+ false
+ 0
+ true
+ 0
+ 1
+ true
+
diff --git a/EDMI_FILE_OPs/My Project/AssemblyInfo.vb b/EDMI_FILE_OPs/My Project/AssemblyInfo.vb
new file mode 100644
index 00000000..24a1da3c
--- /dev/null
+++ b/EDMI_FILE_OPs/My Project/AssemblyInfo.vb
@@ -0,0 +1,35 @@
+Imports System
+Imports System.Reflection
+Imports System.Runtime.InteropServices
+
+' Allgemeine Informationen über eine Assembly werden über die folgenden
+' Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
+' die einer Assembly zugeordnet sind.
+
+' Werte der Assemblyattribute überprüfen
+
+
+
+
+
+
+
+
+
+
+'Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird.
+
+
+' Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
+'
+' Hauptversion
+' Nebenversion
+' Buildnummer
+' Revision
+'
+' Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
+' übernehmen, indem Sie "*" eingeben:
+'
+
+
+
diff --git a/EDMI_FILE_OPs/My Project/Resources.Designer.vb b/EDMI_FILE_OPs/My Project/Resources.Designer.vb
new file mode 100644
index 00000000..89eb3db3
--- /dev/null
+++ b/EDMI_FILE_OPs/My Project/Resources.Designer.vb
@@ -0,0 +1,63 @@
+'------------------------------------------------------------------------------
+'
+' Dieser Code wurde von einem Tool generiert.
+' Laufzeitversion:4.0.30319.42000
+'
+' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+' der Code erneut generiert wird.
+'
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+Imports System
+
+Namespace My.Resources
+
+ 'Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
+ '-Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
+ 'Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
+ 'mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
+ '''
+ ''' Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
+ '''
+ _
+ Friend Module Resources
+
+ Private resourceMan As Global.System.Resources.ResourceManager
+
+ Private resourceCulture As Global.System.Globalization.CultureInfo
+
+ '''
+ ''' Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
+ '''
+ _
+ Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
+ Get
+ If Object.ReferenceEquals(resourceMan, Nothing) Then
+ Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("DigitalData.Modules.EDMIFileOps.Resources", GetType(Resources).Assembly)
+ resourceMan = temp
+ End If
+ Return resourceMan
+ End Get
+ End Property
+
+ '''
+ ''' Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
+ ''' Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
+ '''
+ _
+ Friend Property Culture() As Global.System.Globalization.CultureInfo
+ Get
+ Return resourceCulture
+ End Get
+ Set
+ resourceCulture = value
+ End Set
+ End Property
+ End Module
+End Namespace
diff --git a/EDMI_FILE_OPs/My Project/Resources.resx b/EDMI_FILE_OPs/My Project/Resources.resx
new file mode 100644
index 00000000..af7dbebb
--- /dev/null
+++ b/EDMI_FILE_OPs/My Project/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/EDMI_FILE_OPs/My Project/Settings.Designer.vb b/EDMI_FILE_OPs/My Project/Settings.Designer.vb
new file mode 100644
index 00000000..b45a0ad8
--- /dev/null
+++ b/EDMI_FILE_OPs/My Project/Settings.Designer.vb
@@ -0,0 +1,73 @@
+'------------------------------------------------------------------------------
+'
+' Dieser Code wurde von einem Tool generiert.
+' Laufzeitversion:4.0.30319.42000
+'
+' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+' der Code erneut generiert wird.
+'
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+
+Namespace My
+
+ _
+ Partial Friend NotInheritable Class MySettings
+ Inherits Global.System.Configuration.ApplicationSettingsBase
+
+ Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)
+
+#Region "Automatische My.Settings-Speicherfunktion"
+#If _MyType = "WindowsForms" Then
+ Private Shared addedHandler As Boolean
+
+ Private Shared addedHandlerLockObject As New Object
+
+ _
+ Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs)
+ If My.Application.SaveMySettingsOnExit Then
+ My.Settings.Save()
+ End If
+ End Sub
+#End If
+#End Region
+
+ Public Shared ReadOnly Property [Default]() As MySettings
+ Get
+
+#If _MyType = "WindowsForms" Then
+ If Not addedHandler Then
+ SyncLock addedHandlerLockObject
+ If Not addedHandler Then
+ AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
+ addedHandler = True
+ End If
+ End SyncLock
+ End If
+#End If
+ Return defaultInstance
+ End Get
+ End Property
+ End Class
+End Namespace
+
+Namespace My
+
+ _
+ Friend Module MySettingsProperty
+
+ _
+ Friend ReadOnly Property Settings() As Global.DigitalData.Modules.EDMIFileOps.My.MySettings
+ Get
+ Return Global.DigitalData.Modules.EDMIFileOps.My.MySettings.Default
+ End Get
+ End Property
+ End Module
+End Namespace
diff --git a/EDMI_FILE_OPs/My Project/Settings.settings b/EDMI_FILE_OPs/My Project/Settings.settings
new file mode 100644
index 00000000..85b890b3
--- /dev/null
+++ b/EDMI_FILE_OPs/My Project/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/EDMI_FILE_OPs/app.config b/EDMI_FILE_OPs/app.config
new file mode 100644
index 00000000..a3784cbd
--- /dev/null
+++ b/EDMI_FILE_OPs/app.config
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/GUI_EDMI/frmEmailAccount.vb b/GUI_EDMI/frmEmailAccount.vb
index b2d74d01..9ac55d31 100644
--- a/GUI_EDMI/frmEmailAccount.vb
+++ b/GUI_EDMI/frmEmailAccount.vb
@@ -57,12 +57,8 @@ Public Class frmEmailAccount
.DeleteCommand = New FbCommand(),
.ContinueUpdateOnError = True
}
-
_tableAdapter.Fill(_dataSet, _tableName)
oTable = _dataSet.Tables.Item(_tableName)
- GridControl1.DataSource = BindingSourceForm
- BindingNavigator1.BindingSource = BindingSourceForm
- GridView1.BestFitColumns(True)
txtGUID.DataBindings.Add(New Binding("Text", BindingSourceForm, "GUID"))
txtPROFILE_NAME.DataBindings.Add(New Binding("Text", BindingSourceForm, "PROFILE_NAME"))
@@ -71,7 +67,7 @@ Public Class frmEmailAccount
txtSERVER_OUT.DataBindings.Add(New Binding("Text", BindingSourceForm, "SERVER_OUT"))
txtEMAIL_USER.DataBindings.Add(New Binding("Text", BindingSourceForm, "EMAIL_USER"))
txtEMAIL_PW.DataBindings.Add(New Binding("Text", BindingSourceForm, "EMAIL_PW"))
- txtPORT_IN.DataBindings.Add(New Binding("Text", BindingSourceForm, "PORT_IN"))
+ ' txtPORT_IN.DataBindings.Add(New Binding("Text", BindingSourceForm, "PORT_IN"))
txtPORT_OUT.DataBindings.Add(New Binding("Text", BindingSourceForm, "PORT_OUT"))
cmbAUTH_TYPE.DataBindings.Add(New Binding("Text", BindingSourceForm, "AUTH_TYPE"))
cmbPOP_IMAP.DataBindings.Add(New Binding("Text", BindingSourceForm, "POP_IMAP"))
@@ -80,6 +76,11 @@ Public Class frmEmailAccount
CHANGED_WHOTextBox.DataBindings.Add(New Binding("Text", BindingSourceForm, "CHANGEDWHO"))
CHANGED_WHENTextBox.DataBindings.Add(New Binding("Text", BindingSourceForm, "CHANGEDWHEN"))
+
+
+ GridControl1.DataSource = BindingSourceForm
+ BindingNavigator1.BindingSource = BindingSourceForm
+ GridView1.BestFitColumns(True)
oConnection.Close()
End Sub
Private Function GetSelectCommand(Connection As FbConnection) As FbCommand
@@ -172,13 +173,16 @@ Public Class frmEmailAccount
End Sub
Private Sub tsbtnSaveEmailAccount_Click(sender As Object, e As EventArgs) Handles tsbtnSaveEmailAccount.Click
+ Me.Validate()
Me.BindingSourceForm.EndEdit()
oTable.AcceptChanges()
If Not IsNothing(oTable.GetChanges) Then
_tableAdapter.Update(oTable)
MsgBox("DONE!")
+ Else
+ MsgBox("No changes")
End If
-
+ _tableAdapter.Update(oTable)
End Sub
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
diff --git a/Message/Email.vb b/Message/Email.vb
index eaf65f6c..56c57bf6 100644
--- a/Message/Email.vb
+++ b/Message/Email.vb
@@ -12,6 +12,7 @@ Public Class Email
Public Sub New(LogConfig As LogConfig)
_logger = LogConfig.GetLogger()
_logConfig = LogConfig
+
End Sub
Public Function IMAP_COLLECT(INBOXNAME As String, MYMAIL_SERVER As String, MYMAIL_PORT As Integer, MYMAIL_USER As String, MYMAIL_USER_PW As String)
Try
diff --git a/Modules.Windream/Windream2.vb b/Modules.Windream/Windream2.vb
index 692a8395..5e3a23ed 100644
--- a/Modules.Windream/Windream2.vb
+++ b/Modules.Windream/Windream2.vb
@@ -402,6 +402,75 @@ Public Class Windream2
End Function
#Region "Public Methods"
+ '''
+ ''' changes the archive end date
+ '''
+ ''' WM Filepath
+ ''' number/count of period (if
+ ''' date_unity (d,m,y or day(s),month(s),years(s)
+ ''' dateFrom_value
+ ''' Returns true when date was set, false if not
+ '''
+ Public Function NewLifecycle_Period(ByVal wmfilepath As String, ByVal dateFrom_value As Date, ByVal date_period As Double, ByVal date_unit As String)
+ Dim oWMObject As WMObject
+ Try
+ oWMObject = GetFileByPath(wmfilepath)
+ _logger.Info($"Changing the archive end-date for file ' & oWMObject.aName & ' Items: {dateFrom_value},{date_period} {date_unit} ")
+ Try
+ ' die Datei sperren
+ oWMObject.LockFor(WMObjectEditModeLifeCycleEdit)
+ _logger.Debug(">> object locked")
+
+ Catch ex As Exception
+ _logger.Error(ex)
+ ' nichts tun (Datei ist bereits gesperrt)
+ End Try
+
+ Dim oObjectLifecycle = oWMObject.aWMLifeCycle
+
+ Dim oIntervalType As DateInterval
+ If date_unit.ToLower = "d" Or date_unit.ToLower = "day(s)" Then
+ oIntervalType = DateInterval.Day
+ ElseIf date_unit.ToLower = "m" Or date_unit.ToLower = "month(s)" Then
+ oIntervalType = DateInterval.Month
+ ElseIf date_unit.ToLower = "y" Or date_unit.ToLower = "year(s)" Then
+ oIntervalType = DateInterval.Year
+ End If
+
+ Dim oArchUntil = DateAdd(oIntervalType, date_period, dateFrom_value)
+ _logger.Debug("New date shall be: " & oArchUntil.ToString)
+ oObjectLifecycle.SetPeriodEndDate(2, oArchUntil)
+ _logger.Info("Archive end-date has been changed!")
+ oWMObject.Save()
+ oWMObject.unlock()
+ Return SetArchive_Active(oWMObject)
+
+ Catch ex As Exception
+ _logger.Warn($"Unexpected Error in NewLifecycle_Period {ex.Message}")
+ If Not IsNothing(oWMObject) Then
+ If oWMObject.aLocked = True Then
+ oWMObject.unlock()
+ End If
+ End If
+ Return False
+ End Try
+ End Function
+ '''
+ ''' Archives windream object immediately
+ '''
+ ''' Returns true when archiving was set, false if not
+ '''
+ Private Function SetArchive_Active(oWMObject As WMObject)
+ Try
+ oWMObject.MoveToArchivePool()
+ _logger.Info("oWMObject has been archived!")
+ Return True
+ Catch ex As Exception
+ _logger.Warn($"Unexpected Error in SetArchive_Active {ex.Message}")
+ Return False
+ End Try
+ End Function
+
Public Function NewFolder(Path As String) As Boolean
If Not TestSessionLoggedIn() Then
Return False
diff --git a/SERVICES/DDEDM_NetworkService/App.config b/SERVICES/DDEDM_NetworkService/App.config
new file mode 100644
index 00000000..203b962c
--- /dev/null
+++ b/SERVICES/DDEDM_NetworkService/App.config
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SERVICES/DDEDM_NetworkService/AppConfig.vb b/SERVICES/DDEDM_NetworkService/AppConfig.vb
new file mode 100644
index 00000000..f308f89b
--- /dev/null
+++ b/SERVICES/DDEDM_NetworkService/AppConfig.vb
@@ -0,0 +1,21 @@
+Imports System.Configuration
+
+Public Class AppConfig
+ Public Shared FirebirdDataSource As String
+ Public Shared FirebirdDatabase As String
+ Public Shared FirebirdUser As String
+ Public Shared FirebirdPassword As String
+ Public Shared ContainerPath As String
+ Public Shared ContainerPassword As String
+
+ Public Shared Sub Load()
+ With ConfigurationManager.AppSettings
+ FirebirdDataSource = .Item("FIREBIRD_DATASOURCE")
+ FirebirdDatabase = .Item("FIREBIRD_DATABASE_NAME")
+ FirebirdUser = .Item("FIREBIRD_DATABASE_USER")
+ FirebirdPassword = .Item("FIREBIRD_DATABASE_PASS")
+ ContainerPath = .Item("CONTAINER_PATH")
+ ContainerPassword = .Item("CONTAINER_PASSWORD")
+ End With
+ End Sub
+End Class
diff --git a/SERVICES/DDEDM_NetworkService/ContainerResult.vb b/SERVICES/DDEDM_NetworkService/ContainerResult.vb
new file mode 100644
index 00000000..5b5b17fa
--- /dev/null
+++ b/SERVICES/DDEDM_NetworkService/ContainerResult.vb
@@ -0,0 +1,18 @@
+Imports DigitalData.Modules.Filesystem
+
+
+Public Class ContainerResult
+ Public ReadOnly OK As Boolean
+ Public ReadOnly ErrorMessage As String
+ Public Container As FileContainerInner
+
+ Public Sub New()
+ OK = True
+ ErrorMessage = Nothing
+ End Sub
+
+ Public Sub New(ErrorMessage As String)
+ OK = False
+ Me.ErrorMessage = ErrorMessage
+ End Sub
+End Class
diff --git a/SERVICES/DDEDM_NetworkService/DDEDMService.vbproj b/SERVICES/DDEDM_NetworkService/DDEDMService.vbproj
new file mode 100644
index 00000000..f2c98f78
--- /dev/null
+++ b/SERVICES/DDEDM_NetworkService/DDEDMService.vbproj
@@ -0,0 +1,150 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {A8C3F298-76AB-4359-AB3C-986E313B4336}
+ Exe
+ DigitalData.Services.EDMService.EDMWindowsService
+ DigitalData.Services.EDMService
+ EDMService
+ 512
+ Console
+ v4.6.1
+ true
+
+
+ AnyCPU
+ true
+ full
+ true
+ true
+ bin\Debug\
+ EDMService.xml
+ 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022
+
+
+ AnyCPU
+ pdbonly
+ false
+ true
+ true
+ bin\Release\
+ EDMService.xml
+ 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022
+
+
+ On
+
+
+ Binary
+
+
+ Off
+
+
+ On
+
+
+
+ ..\..\DDMonorepo\Modules.Database\bin\Debug\DigitalData.Modules.Database.dll
+
+
+ ..\..\DDMonorepo\Filesystem\bin\Debug\DigitalData.Modules.Filesystem.dll
+
+
+ ..\..\DDMonorepo\Modules.Logging\bin\Debug\DigitalData.Modules.Logging.dll
+
+
+ ..\..\DDMonorepo\Modules.Database\bin\Debug\FirebirdSql.Data.FirebirdClient.dll
+
+
+ ..\..\DDMonorepo\Modules.Logging\bin\Debug\NLog.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Component
+
+
+
+
+ True
+ Application.myapp
+
+
+ True
+ True
+ Resources.resx
+
+
+ True
+ Settings.settings
+ True
+
+
+ Component
+
+
+
+
+
+
+ VbMyResourcesResXFileCodeGenerator
+ Resources.Designer.vb
+ My.Resources
+ Designer
+
+
+ ProjectInstaller.vb
+
+
+
+
+ MyApplicationCodeGenerator
+ Application.Designer.vb
+
+
+ SettingsSingleFileGenerator
+ My
+ Settings.Designer.vb
+
+
+ PreserveNewest
+ Designer
+
+
+
+
\ No newline at end of file
diff --git a/SERVICES/DDEDM_NetworkService/DatabaseResult.vb b/SERVICES/DDEDM_NetworkService/DatabaseResult.vb
new file mode 100644
index 00000000..625fc335
--- /dev/null
+++ b/SERVICES/DDEDM_NetworkService/DatabaseResult.vb
@@ -0,0 +1,51 @@
+Imports System.Runtime.Serialization
+
+
+
+Public Class TableResult
+
+ Public Property OK As Boolean
+
+ Public Property ErrorMessage As String
+
+ Public Property Table As DataTable
+
+ Public Sub New(OK As Boolean, Table As DataTable, ErrorMessage As String)
+ Me.OK = OK
+ Me.ErrorMessage = ErrorMessage
+ Me.Table = Table
+ End Sub
+End Class
+
+
+
+Public Class ScalarResult
+
+ Public Property OK As Boolean
+
+ Public Property ErrorMessage As String
+
+ Public Property Scalar As Object
+
+ Public Sub New(OK As Boolean, Scalar As Object, ErrorMessage As String)
+ Me.OK = OK
+ Me.ErrorMessage = ErrorMessage
+ Me.Scalar = Scalar
+ End Sub
+End Class
+
+
+
+Public Class NonQueryResult
+
+ Public Property OK As Boolean
+
+ Public Property ErrorMessage As String
+
+ Public Sub New(OK As Boolean, ErrorMessage As String)
+ Me.OK = OK
+ Me.ErrorMessage = ErrorMessage
+ End Sub
+End Class
+
+
diff --git a/SERVICES/DDEDM_NetworkService/EDMService.vb b/SERVICES/DDEDM_NetworkService/EDMService.vb
new file mode 100644
index 00000000..84d6cf13
--- /dev/null
+++ b/SERVICES/DDEDM_NetworkService/EDMService.vb
@@ -0,0 +1,195 @@
+Imports System.ServiceModel
+Imports DigitalData.Modules.Database
+Imports DigitalData.Modules.Logging
+Imports DigitalData.Modules.Filesystem
+Imports System.IO
+Imports DigitalData.Services.EDMService
+
+
+Public Class EDMService
+ Implements IEDMService
+ Implements IDisposable
+
+ Public Shared Event ClientConnectedEvent As EventHandler(Of Session)
+ Public Shared Event ClientDisconnectedEvent As EventHandler(Of Session)
+
+ Public Shared LogConfig As LogConfig
+ Public Shared Database As Firebird
+ Public Shared AppConfig As AppConfig
+
+ Private ReadOnly _session As Session
+ Private ReadOnly _logger As Logger
+
+ Private _request As Request = Nothing
+ Private _debug As Boolean = False
+
+ Public Sub New()
+ Dim oOperationContext As OperationContext = OperationContext.Current
+ Dim oInstanceContext As InstanceContext = oOperationContext.InstanceContext
+ Dim oUsername = oOperationContext.ServiceSecurityContext.WindowsIdentity.Name
+
+ _logger = LogConfig.GetLogger()
+ _session = New Session(oUsername)
+
+ RaiseEvent ClientConnectedEvent(Me, _session)
+ End Sub
+
+ Public Sub Dispose() Implements IDisposable.Dispose
+ RaiseEvent ClientDisconnectedEvent(Me, _session)
+ End Sub
+
+#Region "Request"
+ Public Function CreateDatabaseRequest(Name As String, Optional Debug As Boolean = False) As String Implements IEDMService.CreateDatabaseRequest
+ _request = New Request(Name, _session.Username, Database, Debug)
+ _debug = Debug
+
+ _logger.Info("Creating request {0}/{1}", _request.Name, _request.RequestId)
+
+ Return _request.Name
+ End Function
+
+ Public Sub CloseDatabaseRequest() Implements IEDMService.CloseDatabaseRequest
+ If IsNothing(_request) Then
+ Exit Sub
+ End If
+
+ _logger.Info("Closing request {0}", _request.ToString)
+ _request.Connection.Close()
+ _request = Nothing
+ End Sub
+
+#End Region
+#Region "Database"
+ Private Sub TestRequestCreated()
+ If IsNothing(_request) Then
+ Throw New Exceptions.NoRequestException()
+ End If
+ End Sub
+
+ Public Function ReturnDatatable(SQL As String) As TableResult Implements IEDMService.ReturnDatatable
+ Try
+ TestRequestCreated()
+
+ _logger.Info($"ReturnDatatable, SQL: {SQL}")
+ _request.LogDebug($"ReturnDatatable, SQL: {SQL}")
+
+ Dim oResult As DataTable = Database.GetDatatableWithConnection(SQL, _request.Connection)
+ Return New TableResult(True, oResult, Nothing)
+ Catch ex As Exception
+ _logger.Error(ex)
+ _request.LogError(ex.Message)
+ Return New TableResult(False, Nothing, ex.Message)
+ End Try
+ End Function
+
+ Public Function ReturnScalar(SQL As String) As ScalarResult Implements IEDMService.ReturnScalar
+ Try
+ TestRequestCreated()
+
+ _logger.Info($"ReturnScalar, SQL: {SQL}")
+ _request.LogDebug($"ReturnScalar, SQL: {SQL}")
+
+ Dim oResult As Object = Database.GetScalarValueWithConnection(SQL, _request.Connection)
+ Return New ScalarResult(True, oResult, Nothing)
+ Catch ex As Exception
+ _logger.Error(ex)
+ _request.LogError(ex.Message)
+ Return New ScalarResult(False, Nothing, ex.Message)
+ End Try
+ End Function
+
+ Public Function ExecuteNonQuery(SQL As String) As NonQueryResult Implements IEDMService.ExecuteNonQuery
+ Try
+ TestRequestCreated()
+
+ _logger.Info($"ExecuteNonQuery, SQL: {SQL}")
+ _request.LogDebug($"ExecuteNonQuery, SQL: {SQL}")
+
+ Dim oResult As Boolean = Database.ExecuteNonQueryWithConnection(SQL, _request.Connection)
+ Return New NonQueryResult(True, Nothing)
+ Catch ex As Exception
+ _logger.Error(ex)
+ _request.LogError(ex.Message)
+ Return New NonQueryResult(False, ex.Message)
+ End Try
+ End Function
+
+
+#End Region
+#Region "FileContainer"
+ Private Function GetFilePath(ContainerId As String) As String
+ Return Path.Combine(AppConfig.ContainerPath, ContainerId & ".enc")
+ End Function
+ Private Sub TestFileExists(ContainerId)
+ Dim oContainerPath = GetFilePath(ContainerId)
+
+ If Not IO.File.Exists(oContainerPath) Then
+ Throw New FileNotFoundException("Container existiert nicht", oContainerPath)
+ End If
+ End Sub
+
+ Public Function GetFile(ContainerId As String) As ContainerResult Implements IEDMService.GetFile
+ Try
+ TestFileExists(ContainerId)
+
+ Dim oContainerPath = GetFilePath(ContainerId)
+ Dim oContainer As FileContainer = FileContainer.Load(LogConfig, AppConfig.ContainerPassword, oContainerPath)
+
+ Dim oResult As New ContainerResult With {
+ .Container = oContainer.GetFile()
+ }
+
+ Return oResult
+ Catch ex As Exception
+ _logger.Error(ex)
+ Return New ContainerResult(ex.Message)
+ End Try
+ End Function
+
+ Public Function CreateFile(Contents() As Byte, Extension As String) As String Implements IEDMService.CreateFile
+ Try
+ Dim oContainer As FileContainer = FileContainer.Create(LogConfig, AppConfig.ContainerPassword)
+ Dim oContainerId As String = oContainer.FileId
+
+ oContainer.SetFile(Contents, Extension)
+ oContainer.SaveAs(GetFilePath(oContainerId))
+
+ Return oContainerId
+ Catch ex As Exception
+ _logger.Error(ex)
+ Return Nothing
+ End Try
+ End Function
+
+ Public Function UpdateFile(FileId As String, Contents() As Byte) As String Implements IEDMService.UpdateFile
+ Try
+ TestFileExists(FileId)
+
+ Dim oFilePath = GetFilePath(FileId)
+ Dim oFileContainer As FileContainer = FileContainer.Load(LogConfig, AppConfig.ContainerPassword, oFilePath)
+
+ oFileContainer.SetFile(Contents, oFileContainer.Extension)
+ oFileContainer.Save()
+
+ Return oFileContainer.FileId
+ Catch ex As Exception
+ _logger.Error(ex)
+ Return Nothing
+ End Try
+ End Function
+
+ Public Function DeleteFile(FileId As String) As Boolean Implements IEDMService.DeleteFile
+ Try
+ TestFileExists(FileId)
+
+ Dim oFilePath = GetFilePath(FileId)
+ IO.File.Delete(oFilePath)
+
+ Return True
+ Catch ex As Exception
+ _logger.Error(ex)
+ Return False
+ End Try
+ End Function
+#End Region
+End Class
\ No newline at end of file
diff --git a/SERVICES/DDEDM_NetworkService/EDMWindowsService.vb b/SERVICES/DDEDM_NetworkService/EDMWindowsService.vb
new file mode 100644
index 00000000..67b30681
--- /dev/null
+++ b/SERVICES/DDEDM_NetworkService/EDMWindowsService.vb
@@ -0,0 +1,89 @@
+Imports System.ServiceModel
+Imports System.ServiceProcess
+Imports System.Configuration
+Imports DigitalData.Modules.Logging
+Imports DigitalData.Modules.Database
+Imports DigitalData.Modules.Database.Exceptions
+
+Public Class EDMWindowsService
+ Inherits ServiceBase
+
+ Private _serviceHost As ServiceHost = Nothing
+ Private _edmService As EDMService = Nothing
+
+ Private _logConfig As LogConfig
+ Private _logger As Logger
+ Private _db As Firebird
+ Private _clientsConnected As Integer = 0
+ Private _clients As New List(Of Session)
+ Private _config As AppConfig
+
+ Public Sub New()
+ ServiceName = SERVICE_NAME
+ End Sub
+
+ Public Shared Sub Main()
+ Run(New EDMWindowsService())
+ End Sub
+
+ Protected Overrides Sub OnStart(ByVal args As String())
+ Try
+ AppConfig.Load()
+
+ _logConfig = New LogConfig(LogConfig.PathType.CustomPath, "E:\EDMService")
+ _logger = _logConfig.GetLogger()
+
+ _logger.Info("Service {0} is starting", SERVICE_DISPLAY_NAME)
+ _logger.Info("Connecting to database")
+
+ _db = New Firebird(
+ _logConfig,
+ AppConfig.FirebirdDataSource,
+ AppConfig.FirebirdDatabase,
+ AppConfig.FirebirdUser,
+ AppConfig.FirebirdPassword
+ )
+
+ _logger.Info("Successfully connected to database!")
+
+ AddHandler EDMService.ClientConnectedEvent, AddressOf EDMService_ClientConnected
+ AddHandler EDMService.ClientDisconnectedEvent, AddressOf EDMService_ClientDisonnected
+
+ EDMService.Database = _db
+ EDMService.LogConfig = _logConfig
+ EDMService.AppConfig = _config
+
+ _logger.Info("Starting the WCF Service")
+
+ _serviceHost = New ServiceHost(GetType(EDMService))
+ _serviceHost.Open()
+
+ _logger.Info("Successfully started the WCF Service!")
+
+ _logger.Info("Service {0} successfully started!", SERVICE_DISPLAY_NAME)
+ Catch ex As Exception
+ _logger.Error(ex, "Failed to start the service host!")
+ End Try
+ End Sub
+
+ Private Sub EDMService_ClientDisonnected(sender As Object, e As Session)
+ _clientsConnected -= 1
+ _clients.Remove(e)
+ _logger.Info("Client {0}/{1} disconnected! Total {2}", e.Username, e.SessionId, _clientsConnected)
+ End Sub
+
+ Private Sub EDMService_ClientConnected(sender As Object, e As Session)
+ _clientsConnected += 1
+ _clients.Add(e)
+ _logger.Info("Client {0}/{1} connected! Total {2}", e.Username, e.SessionId, _clientsConnected)
+ End Sub
+
+ Protected Overrides Sub OnStop()
+ If _serviceHost IsNot Nothing Then
+ _serviceHost.Close()
+ _serviceHost = Nothing
+ End If
+ _logger.Info("Service {0} is stopping!", SERVICE_DISPLAY_NAME)
+ End Sub
+End Class
+
diff --git a/SERVICES/DDEDM_NetworkService/Exceptions.vb b/SERVICES/DDEDM_NetworkService/Exceptions.vb
new file mode 100644
index 00000000..e1effc7e
--- /dev/null
+++ b/SERVICES/DDEDM_NetworkService/Exceptions.vb
@@ -0,0 +1,7 @@
+Public Class Exceptions
+
+ Public Class NoRequestException
+ Inherits ApplicationException
+ End Class
+
+End Class
diff --git a/SERVICES/DDEDM_NetworkService/IEDMService.vb b/SERVICES/DDEDM_NetworkService/IEDMService.vb
new file mode 100644
index 00000000..00aecbae
--- /dev/null
+++ b/SERVICES/DDEDM_NetworkService/IEDMService.vb
@@ -0,0 +1,38 @@
+Imports System.ServiceModel
+Imports DigitalData.Modules.Filesystem
+
+
+Interface IEDMService
+
+#Region "Database"
+
+ Function CreateDatabaseRequest(Name As String, Optional Debug As Boolean = False) As String
+
+
+ Sub CloseDatabaseRequest()
+
+
+ Function ReturnDatatable(SQL As String) As TableResult
+
+
+ Function ReturnScalar(SQL As String) As ScalarResult
+
+
+ Function ExecuteNonQuery(SQL As String) As NonQueryResult
+#End Region
+
+#Region "FileContainer"
+
+ Function CreateFile(Contents As Byte(), Extension As String) As String
+
+
+ Function UpdateFile(ContainerId As String, Contents As Byte()) As String
+
+
+ Function GetFile(ContainerId As String) As ContainerResult
+
+
+ Function DeleteFile(ContainerId As String) As Boolean
+#End Region
+
+End Interface
\ No newline at end of file
diff --git a/SERVICES/DDEDM_NetworkService/My Project/Application.Designer.vb b/SERVICES/DDEDM_NetworkService/My Project/Application.Designer.vb
new file mode 100644
index 00000000..8ab460ba
--- /dev/null
+++ b/SERVICES/DDEDM_NetworkService/My Project/Application.Designer.vb
@@ -0,0 +1,13 @@
+'------------------------------------------------------------------------------
+'
+' Dieser Code wurde von einem Tool generiert.
+' Laufzeitversion:4.0.30319.42000
+'
+' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+' der Code erneut generiert wird.
+'
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
diff --git a/SERVICES/DDEDM_NetworkService/My Project/Application.myapp b/SERVICES/DDEDM_NetworkService/My Project/Application.myapp
new file mode 100644
index 00000000..e62f1a53
--- /dev/null
+++ b/SERVICES/DDEDM_NetworkService/My Project/Application.myapp
@@ -0,0 +1,10 @@
+
+
+ false
+ false
+ 0
+ true
+ 0
+ 2
+ true
+
diff --git a/SERVICES/DDEDM_NetworkService/My Project/AssemblyInfo.vb b/SERVICES/DDEDM_NetworkService/My Project/AssemblyInfo.vb
new file mode 100644
index 00000000..41bda7d0
--- /dev/null
+++ b/SERVICES/DDEDM_NetworkService/My Project/AssemblyInfo.vb
@@ -0,0 +1,35 @@
+Imports System
+Imports System.Reflection
+Imports System.Runtime.InteropServices
+
+' Allgemeine Informationen über eine Assembly werden über die folgenden
+' Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
+' die einer Assembly zugeordnet sind.
+
+' Werte der Assemblyattribute überprüfen
+
+
+
+
+
+
+
+
+
+
+'Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird.
+
+
+' Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
+'
+' Hauptversion
+' Nebenversion
+' Buildnummer
+' Revision
+'
+' Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
+' übernehmen, indem Sie "*" eingeben:
+'
+
+
+
diff --git a/SERVICES/DDEDM_NetworkService/My Project/Resources.Designer.vb b/SERVICES/DDEDM_NetworkService/My Project/Resources.Designer.vb
new file mode 100644
index 00000000..d72b5069
--- /dev/null
+++ b/SERVICES/DDEDM_NetworkService/My Project/Resources.Designer.vb
@@ -0,0 +1,63 @@
+'------------------------------------------------------------------------------
+'
+' Dieser Code wurde von einem Tool generiert.
+' Laufzeitversion:4.0.30319.42000
+'
+' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+' der Code erneut generiert wird.
+'
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+Imports System
+
+Namespace My.Resources
+
+ 'Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
+ '-Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
+ 'Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
+ 'mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
+ '''
+ ''' Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
+ '''
+ _
+ Friend Module Resources
+
+ Private resourceMan As Global.System.Resources.ResourceManager
+
+ Private resourceCulture As Global.System.Globalization.CultureInfo
+
+ '''
+ ''' Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
+ '''
+ _
+ Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
+ Get
+ If Object.ReferenceEquals(resourceMan, Nothing) Then
+ Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("DigitalData.Services.EDMService.Resources", GetType(Resources).Assembly)
+ resourceMan = temp
+ End If
+ Return resourceMan
+ End Get
+ End Property
+
+ '''
+ ''' Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
+ ''' Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
+ '''
+ _
+ Friend Property Culture() As Global.System.Globalization.CultureInfo
+ Get
+ Return resourceCulture
+ End Get
+ Set
+ resourceCulture = value
+ End Set
+ End Property
+ End Module
+End Namespace
diff --git a/SERVICES/DDEDM_NetworkService/My Project/Resources.resx b/SERVICES/DDEDM_NetworkService/My Project/Resources.resx
new file mode 100644
index 00000000..af7dbebb
--- /dev/null
+++ b/SERVICES/DDEDM_NetworkService/My Project/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SERVICES/DDEDM_NetworkService/My Project/Settings.Designer.vb b/SERVICES/DDEDM_NetworkService/My Project/Settings.Designer.vb
new file mode 100644
index 00000000..079ac05f
--- /dev/null
+++ b/SERVICES/DDEDM_NetworkService/My Project/Settings.Designer.vb
@@ -0,0 +1,73 @@
+'------------------------------------------------------------------------------
+'
+' Dieser Code wurde von einem Tool generiert.
+' Laufzeitversion:4.0.30319.42000
+'
+' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+' der Code erneut generiert wird.
+'
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+
+Namespace My
+
+ _
+ Partial Friend NotInheritable Class MySettings
+ Inherits Global.System.Configuration.ApplicationSettingsBase
+
+ Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)
+
+#Region "Automatische My.Settings-Speicherfunktion"
+#If _MyType = "WindowsForms" Then
+ Private Shared addedHandler As Boolean
+
+ Private Shared addedHandlerLockObject As New Object
+
+ _
+ Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs)
+ If My.Application.SaveMySettingsOnExit Then
+ My.Settings.Save()
+ End If
+ End Sub
+#End If
+#End Region
+
+ Public Shared ReadOnly Property [Default]() As MySettings
+ Get
+
+#If _MyType = "WindowsForms" Then
+ If Not addedHandler Then
+ SyncLock addedHandlerLockObject
+ If Not addedHandler Then
+ AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
+ addedHandler = True
+ End If
+ End SyncLock
+ End If
+#End If
+ Return defaultInstance
+ End Get
+ End Property
+ End Class
+End Namespace
+
+Namespace My
+
+ _
+ Friend Module MySettingsProperty
+
+ _
+ Friend ReadOnly Property Settings() As Global.DigitalData.Services.EDMService.My.MySettings
+ Get
+ Return Global.DigitalData.Services.EDMService.My.MySettings.Default
+ End Get
+ End Property
+ End Module
+End Namespace
diff --git a/SERVICES/DDEDM_NetworkService/My Project/Settings.settings b/SERVICES/DDEDM_NetworkService/My Project/Settings.settings
new file mode 100644
index 00000000..85b890b3
--- /dev/null
+++ b/SERVICES/DDEDM_NetworkService/My Project/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/SERVICES/DDEDM_NetworkService/ProjectInstaller.resx b/SERVICES/DDEDM_NetworkService/ProjectInstaller.resx
new file mode 100644
index 00000000..e5858cc2
--- /dev/null
+++ b/SERVICES/DDEDM_NetworkService/ProjectInstaller.resx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ False
+
+
\ No newline at end of file
diff --git a/SERVICES/DDEDM_NetworkService/ProjectInstaller.vb b/SERVICES/DDEDM_NetworkService/ProjectInstaller.vb
new file mode 100644
index 00000000..0576459b
--- /dev/null
+++ b/SERVICES/DDEDM_NetworkService/ProjectInstaller.vb
@@ -0,0 +1,24 @@
+Imports System.ComponentModel
+Imports System.Configuration.Install
+Imports System.ServiceProcess
+
+
+Public Class ProjectInstaller
+ Inherits Installer
+
+ Private ReadOnly process As ServiceProcessInstaller
+ Private ReadOnly components As IContainer
+ Private ReadOnly service As ServiceInstaller
+
+ Public Sub New()
+ process = New ServiceProcessInstaller With {
+ .Account = ServiceAccount.NetworkService
+ }
+ service = New ServiceInstaller With {
+ .ServiceName = SERVICE_NAME,
+ .DisplayName = SERVICE_DISPLAY_NAME
+ }
+ Installers.Add(process)
+ Installers.Add(service)
+ End Sub
+End Class
diff --git a/SERVICES/DDEDM_NetworkService/Request.vb b/SERVICES/DDEDM_NetworkService/Request.vb
new file mode 100644
index 00000000..7f24b152
--- /dev/null
+++ b/SERVICES/DDEDM_NetworkService/Request.vb
@@ -0,0 +1,40 @@
+Imports DigitalData.Modules.Database
+Imports FirebirdSql.Data.FirebirdClient
+
+Public Class Request
+ Public Name As String
+ Public Username As String
+ Public RequestId As String
+ Public Connection As FbConnection
+ Public Database As Firebird
+ Public Debug As Boolean
+
+ Public Sub New(Name As String, Username As String, Database As Firebird, Debug As Boolean)
+ Me.Username = Username
+ Me.Name = Name
+ Me.RequestId = Guid.NewGuid().ToString()
+ Me.Connection = Database.GetConnection()
+ Me.Database = Database
+ Me.Debug = Debug
+
+ Dim oSql = $"INSERT INTO TBEDM_REQUEST_USER (REQUEST_GUID, USER_NAME) VALUES ('{RequestId}', '{Username}')"
+
+ Database.ExecuteNonQueryWithConnection(oSql, Connection)
+ End Sub
+
+ Public Sub LogDebug(Message As String)
+ If Debug Then
+ Dim oSqlCommand = $"INSERT INTO TBEDM_REQUEST_LOG (REQUEST_GUID, LOG_MSG, DEBUG) VALUES ('{RequestId}','{Message}', True)"
+ Database.ExecuteNonQueryWithConnection(oSqlCommand, Connection)
+ End If
+ End Sub
+
+ Public Sub LogError(Message As String)
+ Dim oSqlCommand = $"INSERT INTO TBEDM_REQUEST_LOG (REQUEST_GUID, LOG_MSG, ERROR) VALUES ('{RequestId}','{Message}', True)"
+ Database.ExecuteNonQueryWithConnection(oSqlCommand, Connection)
+ End Sub
+
+ Public Overrides Function ToString() As String
+ Return $""
+ End Function
+End Class
\ No newline at end of file
diff --git a/SERVICES/DDEDM_NetworkService/Session.vb b/SERVICES/DDEDM_NetworkService/Session.vb
new file mode 100644
index 00000000..436cff81
--- /dev/null
+++ b/SERVICES/DDEDM_NetworkService/Session.vb
@@ -0,0 +1,9 @@
+Public Class Session
+ Public Username As String
+ Public SessionId As String
+
+ Public Sub New(username As String)
+ Me.Username = username
+ Me.SessionId = Guid.NewGuid.ToString
+ End Sub
+End Class
\ No newline at end of file
diff --git a/SERVICES/DDEDM_NetworkService/SettingsModule.vb b/SERVICES/DDEDM_NetworkService/SettingsModule.vb
new file mode 100644
index 00000000..be327b36
--- /dev/null
+++ b/SERVICES/DDEDM_NetworkService/SettingsModule.vb
@@ -0,0 +1,4 @@
+Module SettingsModule
+ Public Const SERVICE_NAME As String = "DDEDMSvc"
+ Public Const SERVICE_DISPLAY_NAME As String = "Digital Data EDM Service"
+End Module