Import Excel DY

This commit is contained in:
2025-09-05 08:54:23 +02:00
parent ef62a1dc86
commit 167c250ee8
8 changed files with 1929 additions and 705 deletions

View File

@@ -1339,6 +1339,12 @@
<Compile Include="ZOLLSYSTEM\DAKOSY\ATLAS\Verwahrung\usrCntlATLAS_AnkunftsAnzeige.vb">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="ZOLLSYSTEM\frmImportFromAVISOAnhaenge.Designer.vb">
<DependentUpon>frmImportFromAVISOAnhaenge.vb</DependentUpon>
</Compile>
<Compile Include="ZOLLSYSTEM\frmImportFromAVISOAnhaenge.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="ZOLLSYSTEM\MODALTRANS\usrCntlModaltrans_EXIM_Allg.Designer.vb">
<DependentUpon>usrCntlModaltrans_EXIM_Allg.vb</DependentUpon>
</Compile>
@@ -3684,6 +3690,9 @@
<EmbeddedResource Include="ZOLLSYSTEM\DAKOSY\ATLAS\Verwahrung\usrCntlATLAS_AnkunftsAnzeige.resx">
<DependentUpon>usrCntlATLAS_AnkunftsAnzeige.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ZOLLSYSTEM\frmImportFromAVISOAnhaenge.resx">
<DependentUpon>frmImportFromAVISOAnhaenge.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ZOLLSYSTEM\MODALTRANS\usrCntlModaltrans_EXIM_Allg.resx">
<DependentUpon>usrCntlModaltrans_EXIM_Allg.vb</DependentUpon>
</EmbeddedResource>

View File

@@ -24,8 +24,17 @@ Partial Class usrCntlATLAS_EZA
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Me.SplitContainer = New System.Windows.Forms.SplitContainer()
Me.MyFlowLayoutPanel1 = New VERAG_PROG_ALLGEMEIN.MyFlowLayoutPanel(Me.components)
Me.btnAllgemein = New System.Windows.Forms.Button()
Me.btnAdressen = New System.Windows.Forms.Button()
Me.btnAktiveVeredelung = New System.Windows.Forms.Button()
Me.btnPositionen = New System.Windows.Forms.Button()
Me.btnDV1 = New System.Windows.Forms.Button()
Me.Button5 = New System.Windows.Forms.Button()
Me.pnl = New System.Windows.Forms.Panel()
Me.Label6 = New System.Windows.Forms.Label()
Me.cboDakosyAction = New VERAG_PROG_ALLGEMEIN.MyComboBox()
Me.cboStammreferenz = New VERAG_PROG_ALLGEMEIN.MyComboBox()
Me.Button1 = New System.Windows.Forms.Button()
Me.Label4 = New System.Windows.Forms.Label()
Me.Label5 = New System.Windows.Forms.Label()
@@ -48,26 +57,18 @@ Partial Class usrCntlATLAS_EZA
Me.DynamicAutomotiveXLSToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.GEZEXLSXToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.MEYLEXLSXToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.FressnapToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.VERAGIMPORTFormatToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.ToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem()
Me.EZAIDToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.FressnapToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.MyFlowLayoutPanel1 = New VERAG_PROG_ALLGEMEIN.MyFlowLayoutPanel(Me.components)
Me.btnAllgemein = New System.Windows.Forms.Button()
Me.btnAdressen = New System.Windows.Forms.Button()
Me.btnAktiveVeredelung = New System.Windows.Forms.Button()
Me.btnPositionen = New System.Windows.Forms.Button()
Me.btnDV1 = New System.Windows.Forms.Button()
Me.Button5 = New System.Windows.Forms.Button()
Me.cboDakosyAction = New VERAG_PROG_ALLGEMEIN.MyComboBox()
Me.cboStammreferenz = New VERAG_PROG_ALLGEMEIN.MyComboBox()
CType(Me.SplitContainer, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SplitContainer.Panel1.SuspendLayout()
Me.SplitContainer.SuspendLayout()
Me.MyFlowLayoutPanel1.SuspendLayout()
Me.pnl.SuspendLayout()
Me.cntxtBezugsnr.SuspendLayout()
Me.Panel1.SuspendLayout()
Me.MenuStrip.SuspendLayout()
Me.MyFlowLayoutPanel1.SuspendLayout()
Me.SuspendLayout()
'
'SplitContainer
@@ -93,6 +94,128 @@ Partial Class usrCntlATLAS_EZA
Me.SplitContainer.SplitterWidth = 1
Me.SplitContainer.TabIndex = 0
'
'MyFlowLayoutPanel1
'
Me.MyFlowLayoutPanel1.BackColor = System.Drawing.Color.WhiteSmoke
Me.MyFlowLayoutPanel1.Controls.Add(Me.btnAllgemein)
Me.MyFlowLayoutPanel1.Controls.Add(Me.btnAdressen)
Me.MyFlowLayoutPanel1.Controls.Add(Me.btnAktiveVeredelung)
Me.MyFlowLayoutPanel1.Controls.Add(Me.btnPositionen)
Me.MyFlowLayoutPanel1.Controls.Add(Me.btnDV1)
Me.MyFlowLayoutPanel1.Controls.Add(Me.Button5)
Me.MyFlowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill
Me.MyFlowLayoutPanel1.Location = New System.Drawing.Point(0, 0)
Me.MyFlowLayoutPanel1.Margin = New System.Windows.Forms.Padding(1)
Me.MyFlowLayoutPanel1.Name = "MyFlowLayoutPanel1"
Me.MyFlowLayoutPanel1.Size = New System.Drawing.Size(573, 72)
Me.MyFlowLayoutPanel1.TabIndex = 0
'
'btnAllgemein
'
Me.btnAllgemein.BackColor = System.Drawing.Color.SteelBlue
Me.btnAllgemein.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
Me.btnAllgemein.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.btnAllgemein.ForeColor = System.Drawing.SystemColors.ControlLightLight
Me.btnAllgemein.Image = Global.SDL.My.Resources.Resources.android_note12
Me.btnAllgemein.ImageAlign = System.Drawing.ContentAlignment.TopCenter
Me.btnAllgemein.Location = New System.Drawing.Point(2, 2)
Me.btnAllgemein.Margin = New System.Windows.Forms.Padding(2)
Me.btnAllgemein.Name = "btnAllgemein"
Me.btnAllgemein.Padding = New System.Windows.Forms.Padding(0, 12, 0, 3)
Me.btnAllgemein.Size = New System.Drawing.Size(75, 67)
Me.btnAllgemein.TabIndex = 0
Me.btnAllgemein.Text = "Allgemein"
Me.btnAllgemein.TextAlign = System.Drawing.ContentAlignment.BottomCenter
Me.btnAllgemein.UseVisualStyleBackColor = False
'
'btnAdressen
'
Me.btnAdressen.BackColor = System.Drawing.Color.White
Me.btnAdressen.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
Me.btnAdressen.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.btnAdressen.Image = Global.SDL.My.Resources.Resources.house1
Me.btnAdressen.ImageAlign = System.Drawing.ContentAlignment.TopCenter
Me.btnAdressen.Location = New System.Drawing.Point(81, 2)
Me.btnAdressen.Margin = New System.Windows.Forms.Padding(2)
Me.btnAdressen.Name = "btnAdressen"
Me.btnAdressen.Padding = New System.Windows.Forms.Padding(0, 0, 0, 3)
Me.btnAdressen.Size = New System.Drawing.Size(75, 67)
Me.btnAdressen.TabIndex = 1
Me.btnAdressen.Text = "Adressen"
Me.btnAdressen.TextAlign = System.Drawing.ContentAlignment.BottomCenter
Me.btnAdressen.UseVisualStyleBackColor = False
'
'btnAktiveVeredelung
'
Me.btnAktiveVeredelung.BackColor = System.Drawing.Color.White
Me.btnAktiveVeredelung.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
Me.btnAktiveVeredelung.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.btnAktiveVeredelung.Image = Global.SDL.My.Resources.Resources.aktiveVeredelung1
Me.btnAktiveVeredelung.ImageAlign = System.Drawing.ContentAlignment.TopCenter
Me.btnAktiveVeredelung.Location = New System.Drawing.Point(160, 2)
Me.btnAktiveVeredelung.Margin = New System.Windows.Forms.Padding(2)
Me.btnAktiveVeredelung.Name = "btnAktiveVeredelung"
Me.btnAktiveVeredelung.Padding = New System.Windows.Forms.Padding(0, 6, 0, 3)
Me.btnAktiveVeredelung.Size = New System.Drawing.Size(94, 67)
Me.btnAktiveVeredelung.TabIndex = 3
Me.btnAktiveVeredelung.Text = "Pass. Veredel."
Me.btnAktiveVeredelung.TextAlign = System.Drawing.ContentAlignment.BottomCenter
Me.btnAktiveVeredelung.UseVisualStyleBackColor = False
Me.btnAktiveVeredelung.Visible = False
'
'btnPositionen
'
Me.btnPositionen.BackColor = System.Drawing.Color.White
Me.btnPositionen.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
Me.btnPositionen.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.btnPositionen.Image = Global.SDL.My.Resources.Resources.list_new_small2
Me.btnPositionen.ImageAlign = System.Drawing.ContentAlignment.TopCenter
Me.btnPositionen.Location = New System.Drawing.Point(258, 2)
Me.btnPositionen.Margin = New System.Windows.Forms.Padding(2)
Me.btnPositionen.Name = "btnPositionen"
Me.btnPositionen.Padding = New System.Windows.Forms.Padding(0, 0, 0, 3)
Me.btnPositionen.Size = New System.Drawing.Size(81, 67)
Me.btnPositionen.TabIndex = 4
Me.btnPositionen.Text = "Positionen"
Me.btnPositionen.TextAlign = System.Drawing.ContentAlignment.BottomCenter
Me.btnPositionen.UseVisualStyleBackColor = False
'
'btnDV1
'
Me.btnDV1.BackColor = System.Drawing.Color.White
Me.btnDV1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
Me.btnDV1.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.btnDV1.Image = Global.SDL.My.Resources.Resources.moneybag1
Me.btnDV1.ImageAlign = System.Drawing.ContentAlignment.TopCenter
Me.btnDV1.Location = New System.Drawing.Point(343, 2)
Me.btnDV1.Margin = New System.Windows.Forms.Padding(2)
Me.btnDV1.Name = "btnDV1"
Me.btnDV1.Padding = New System.Windows.Forms.Padding(0, 2, 0, 3)
Me.btnDV1.Size = New System.Drawing.Size(94, 67)
Me.btnDV1.TabIndex = 6
Me.btnDV1.Text = "D.V.1"
Me.btnDV1.TextAlign = System.Drawing.ContentAlignment.BottomCenter
Me.btnDV1.UseVisualStyleBackColor = False
Me.btnDV1.Visible = False
'
'Button5
'
Me.Button5.BackColor = System.Drawing.Color.White
Me.Button5.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
Me.Button5.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.Button5.Image = Global.SDL.My.Resources.Resources.android_note12
Me.Button5.ImageAlign = System.Drawing.ContentAlignment.TopCenter
Me.Button5.Location = New System.Drawing.Point(441, 2)
Me.Button5.Margin = New System.Windows.Forms.Padding(2)
Me.Button5.Name = "Button5"
Me.Button5.Padding = New System.Windows.Forms.Padding(0, 12, 0, 3)
Me.Button5.Size = New System.Drawing.Size(81, 67)
Me.Button5.TabIndex = 5
Me.Button5.Text = "Referenzen"
Me.Button5.TextAlign = System.Drawing.ContentAlignment.BottomCenter
Me.Button5.UseVisualStyleBackColor = False
Me.Button5.Visible = False
'
'pnl
'
Me.pnl.BackColor = System.Drawing.Color.WhiteSmoke
@@ -121,6 +244,35 @@ Partial Class usrCntlATLAS_EZA
Me.Label6.Text = "Stammref.:"
Me.Label6.TextAlign = System.Drawing.ContentAlignment.TopRight
'
'cboDakosyAction
'
Me.cboDakosyAction._allowedValuesFreiText = Nothing
Me.cboDakosyAction._allowFreiText = False
Me.cboDakosyAction._value = ""
Me.cboDakosyAction.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.cboDakosyAction.BackColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer))
Me.cboDakosyAction.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cboDakosyAction.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.cboDakosyAction.FormattingEnabled = True
Me.cboDakosyAction.Location = New System.Drawing.Point(200, 48)
Me.cboDakosyAction.Name = "cboDakosyAction"
Me.cboDakosyAction.Size = New System.Drawing.Size(158, 21)
Me.cboDakosyAction.TabIndex = 1
'
'cboStammreferenz
'
Me.cboStammreferenz._allowedValuesFreiText = Nothing
Me.cboStammreferenz._allowFreiText = True
Me.cboStammreferenz._value = ""
Me.cboStammreferenz.BackColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer))
Me.cboStammreferenz.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cboStammreferenz.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.cboStammreferenz.FormattingEnabled = True
Me.cboStammreferenz.Location = New System.Drawing.Point(71, 48)
Me.cboStammreferenz.Name = "cboStammreferenz"
Me.cboStammreferenz.Size = New System.Drawing.Size(129, 21)
Me.cboStammreferenz.TabIndex = 13
'
'Button1
'
Me.Button1.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
@@ -295,7 +447,7 @@ Partial Class usrCntlATLAS_EZA
'
'DateiimportToolStripMenuItem
'
Me.DateiimportToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.DynamicAutomotiveXLSToolStripMenuItem, Me.GEZEXLSXToolStripMenuItem, Me.MEYLEXLSXToolStripMenuItem, Me.FressnapToolStripMenuItem})
Me.DateiimportToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.DynamicAutomotiveXLSToolStripMenuItem, Me.GEZEXLSXToolStripMenuItem, Me.MEYLEXLSXToolStripMenuItem, Me.FressnapToolStripMenuItem, Me.VERAGIMPORTFormatToolStripMenuItem})
Me.DateiimportToolStripMenuItem.Name = "DateiimportToolStripMenuItem"
Me.DateiimportToolStripMenuItem.Size = New System.Drawing.Size(87, 20)
Me.DateiimportToolStripMenuItem.Text = "Datei-Import"
@@ -303,21 +455,33 @@ Partial Class usrCntlATLAS_EZA
'DynamicAutomotiveXLSToolStripMenuItem
'
Me.DynamicAutomotiveXLSToolStripMenuItem.Name = "DynamicAutomotiveXLSToolStripMenuItem"
Me.DynamicAutomotiveXLSToolStripMenuItem.Size = New System.Drawing.Size(224, 22)
Me.DynamicAutomotiveXLSToolStripMenuItem.Size = New System.Drawing.Size(238, 22)
Me.DynamicAutomotiveXLSToolStripMenuItem.Text = "Dynamic Automotive (XLSX)"
'
'GEZEXLSXToolStripMenuItem
'
Me.GEZEXLSXToolStripMenuItem.Name = "GEZEXLSXToolStripMenuItem"
Me.GEZEXLSXToolStripMenuItem.Size = New System.Drawing.Size(224, 22)
Me.GEZEXLSXToolStripMenuItem.Size = New System.Drawing.Size(238, 22)
Me.GEZEXLSXToolStripMenuItem.Text = "GEZE (XLSX)"
'
'MEYLEXLSXToolStripMenuItem
'
Me.MEYLEXLSXToolStripMenuItem.Name = "MEYLEXLSXToolStripMenuItem"
Me.MEYLEXLSXToolStripMenuItem.Size = New System.Drawing.Size(224, 22)
Me.MEYLEXLSXToolStripMenuItem.Size = New System.Drawing.Size(238, 22)
Me.MEYLEXLSXToolStripMenuItem.Text = "MEYLE (XLSX)"
'
'FressnapToolStripMenuItem
'
Me.FressnapToolStripMenuItem.Name = "FressnapToolStripMenuItem"
Me.FressnapToolStripMenuItem.Size = New System.Drawing.Size(238, 22)
Me.FressnapToolStripMenuItem.Text = "Fressnapf (XLSX)"
'
'VERAGIMPORTFormatToolStripMenuItem
'
Me.VERAGIMPORTFormatToolStripMenuItem.Name = "VERAGIMPORTFormatToolStripMenuItem"
Me.VERAGIMPORTFormatToolStripMenuItem.Size = New System.Drawing.Size(238, 22)
Me.VERAGIMPORTFormatToolStripMenuItem.Text = "VERAG-IMPORT-Format (XLSX)"
'
'ToolStripMenuItem1
'
Me.ToolStripMenuItem1.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.EZAIDToolStripMenuItem})
@@ -331,163 +495,6 @@ Partial Class usrCntlATLAS_EZA
Me.EZAIDToolStripMenuItem.Size = New System.Drawing.Size(109, 22)
Me.EZAIDToolStripMenuItem.Text = "EZA ID"
'
'FressnapToolStripMenuItem
'
Me.FressnapToolStripMenuItem.Name = "FressnapToolStripMenuItem"
Me.FressnapToolStripMenuItem.Size = New System.Drawing.Size(224, 22)
Me.FressnapToolStripMenuItem.Text = "Fressnapf (XLSX)"
'
'MyFlowLayoutPanel1
'
Me.MyFlowLayoutPanel1.BackColor = System.Drawing.Color.WhiteSmoke
Me.MyFlowLayoutPanel1.Controls.Add(Me.btnAllgemein)
Me.MyFlowLayoutPanel1.Controls.Add(Me.btnAdressen)
Me.MyFlowLayoutPanel1.Controls.Add(Me.btnAktiveVeredelung)
Me.MyFlowLayoutPanel1.Controls.Add(Me.btnPositionen)
Me.MyFlowLayoutPanel1.Controls.Add(Me.btnDV1)
Me.MyFlowLayoutPanel1.Controls.Add(Me.Button5)
Me.MyFlowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill
Me.MyFlowLayoutPanel1.Location = New System.Drawing.Point(0, 0)
Me.MyFlowLayoutPanel1.Margin = New System.Windows.Forms.Padding(1)
Me.MyFlowLayoutPanel1.Name = "MyFlowLayoutPanel1"
Me.MyFlowLayoutPanel1.Size = New System.Drawing.Size(573, 72)
Me.MyFlowLayoutPanel1.TabIndex = 0
'
'btnAllgemein
'
Me.btnAllgemein.BackColor = System.Drawing.Color.SteelBlue
Me.btnAllgemein.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
Me.btnAllgemein.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.btnAllgemein.ForeColor = System.Drawing.SystemColors.ControlLightLight
Me.btnAllgemein.Image = Global.SDL.My.Resources.Resources.android_note12
Me.btnAllgemein.ImageAlign = System.Drawing.ContentAlignment.TopCenter
Me.btnAllgemein.Location = New System.Drawing.Point(2, 2)
Me.btnAllgemein.Margin = New System.Windows.Forms.Padding(2)
Me.btnAllgemein.Name = "btnAllgemein"
Me.btnAllgemein.Padding = New System.Windows.Forms.Padding(0, 12, 0, 3)
Me.btnAllgemein.Size = New System.Drawing.Size(75, 67)
Me.btnAllgemein.TabIndex = 0
Me.btnAllgemein.Text = "Allgemein"
Me.btnAllgemein.TextAlign = System.Drawing.ContentAlignment.BottomCenter
Me.btnAllgemein.UseVisualStyleBackColor = False
'
'btnAdressen
'
Me.btnAdressen.BackColor = System.Drawing.Color.White
Me.btnAdressen.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
Me.btnAdressen.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.btnAdressen.Image = Global.SDL.My.Resources.Resources.house1
Me.btnAdressen.ImageAlign = System.Drawing.ContentAlignment.TopCenter
Me.btnAdressen.Location = New System.Drawing.Point(81, 2)
Me.btnAdressen.Margin = New System.Windows.Forms.Padding(2)
Me.btnAdressen.Name = "btnAdressen"
Me.btnAdressen.Padding = New System.Windows.Forms.Padding(0, 0, 0, 3)
Me.btnAdressen.Size = New System.Drawing.Size(75, 67)
Me.btnAdressen.TabIndex = 1
Me.btnAdressen.Text = "Adressen"
Me.btnAdressen.TextAlign = System.Drawing.ContentAlignment.BottomCenter
Me.btnAdressen.UseVisualStyleBackColor = False
'
'btnAktiveVeredelung
'
Me.btnAktiveVeredelung.BackColor = System.Drawing.Color.White
Me.btnAktiveVeredelung.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
Me.btnAktiveVeredelung.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.btnAktiveVeredelung.Image = Global.SDL.My.Resources.Resources.aktiveVeredelung1
Me.btnAktiveVeredelung.ImageAlign = System.Drawing.ContentAlignment.TopCenter
Me.btnAktiveVeredelung.Location = New System.Drawing.Point(160, 2)
Me.btnAktiveVeredelung.Margin = New System.Windows.Forms.Padding(2)
Me.btnAktiveVeredelung.Name = "btnAktiveVeredelung"
Me.btnAktiveVeredelung.Padding = New System.Windows.Forms.Padding(0, 6, 0, 3)
Me.btnAktiveVeredelung.Size = New System.Drawing.Size(94, 67)
Me.btnAktiveVeredelung.TabIndex = 3
Me.btnAktiveVeredelung.Text = "Pass. Veredel."
Me.btnAktiveVeredelung.TextAlign = System.Drawing.ContentAlignment.BottomCenter
Me.btnAktiveVeredelung.UseVisualStyleBackColor = False
Me.btnAktiveVeredelung.Visible = False
'
'btnPositionen
'
Me.btnPositionen.BackColor = System.Drawing.Color.White
Me.btnPositionen.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
Me.btnPositionen.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.btnPositionen.Image = Global.SDL.My.Resources.Resources.list_new_small2
Me.btnPositionen.ImageAlign = System.Drawing.ContentAlignment.TopCenter
Me.btnPositionen.Location = New System.Drawing.Point(258, 2)
Me.btnPositionen.Margin = New System.Windows.Forms.Padding(2)
Me.btnPositionen.Name = "btnPositionen"
Me.btnPositionen.Padding = New System.Windows.Forms.Padding(0, 0, 0, 3)
Me.btnPositionen.Size = New System.Drawing.Size(81, 67)
Me.btnPositionen.TabIndex = 4
Me.btnPositionen.Text = "Positionen"
Me.btnPositionen.TextAlign = System.Drawing.ContentAlignment.BottomCenter
Me.btnPositionen.UseVisualStyleBackColor = False
'
'btnDV1
'
Me.btnDV1.BackColor = System.Drawing.Color.White
Me.btnDV1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
Me.btnDV1.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.btnDV1.Image = Global.SDL.My.Resources.Resources.moneybag1
Me.btnDV1.ImageAlign = System.Drawing.ContentAlignment.TopCenter
Me.btnDV1.Location = New System.Drawing.Point(343, 2)
Me.btnDV1.Margin = New System.Windows.Forms.Padding(2)
Me.btnDV1.Name = "btnDV1"
Me.btnDV1.Padding = New System.Windows.Forms.Padding(0, 2, 0, 3)
Me.btnDV1.Size = New System.Drawing.Size(94, 67)
Me.btnDV1.TabIndex = 6
Me.btnDV1.Text = "D.V.1"
Me.btnDV1.TextAlign = System.Drawing.ContentAlignment.BottomCenter
Me.btnDV1.UseVisualStyleBackColor = False
Me.btnDV1.Visible = False
'
'Button5
'
Me.Button5.BackColor = System.Drawing.Color.White
Me.Button5.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
Me.Button5.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.Button5.Image = Global.SDL.My.Resources.Resources.android_note12
Me.Button5.ImageAlign = System.Drawing.ContentAlignment.TopCenter
Me.Button5.Location = New System.Drawing.Point(441, 2)
Me.Button5.Margin = New System.Windows.Forms.Padding(2)
Me.Button5.Name = "Button5"
Me.Button5.Padding = New System.Windows.Forms.Padding(0, 12, 0, 3)
Me.Button5.Size = New System.Drawing.Size(81, 67)
Me.Button5.TabIndex = 5
Me.Button5.Text = "Referenzen"
Me.Button5.TextAlign = System.Drawing.ContentAlignment.BottomCenter
Me.Button5.UseVisualStyleBackColor = False
Me.Button5.Visible = False
'
'cboDakosyAction
'
Me.cboDakosyAction._allowedValuesFreiText = Nothing
Me.cboDakosyAction._allowFreiText = False
Me.cboDakosyAction._value = ""
Me.cboDakosyAction.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.cboDakosyAction.BackColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer))
Me.cboDakosyAction.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cboDakosyAction.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.cboDakosyAction.FormattingEnabled = True
Me.cboDakosyAction.Location = New System.Drawing.Point(200, 48)
Me.cboDakosyAction.Name = "cboDakosyAction"
Me.cboDakosyAction.Size = New System.Drawing.Size(158, 21)
Me.cboDakosyAction.TabIndex = 1
'
'cboStammreferenz
'
Me.cboStammreferenz._allowedValuesFreiText = Nothing
Me.cboStammreferenz._allowFreiText = True
Me.cboStammreferenz._value = ""
Me.cboStammreferenz.BackColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer))
Me.cboStammreferenz.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cboStammreferenz.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.cboStammreferenz.FormattingEnabled = True
Me.cboStammreferenz.Location = New System.Drawing.Point(71, 48)
Me.cboStammreferenz.Name = "cboStammreferenz"
Me.cboStammreferenz.Size = New System.Drawing.Size(129, 21)
Me.cboStammreferenz.TabIndex = 13
'
'usrCntlATLAS_EZA
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
@@ -500,6 +507,7 @@ Partial Class usrCntlATLAS_EZA
Me.SplitContainer.Panel1.ResumeLayout(False)
CType(Me.SplitContainer, System.ComponentModel.ISupportInitialize).EndInit()
Me.SplitContainer.ResumeLayout(False)
Me.MyFlowLayoutPanel1.ResumeLayout(False)
Me.pnl.ResumeLayout(False)
Me.pnl.PerformLayout()
Me.cntxtBezugsnr.ResumeLayout(False)
@@ -507,7 +515,6 @@ Partial Class usrCntlATLAS_EZA
Me.Panel1.PerformLayout()
Me.MenuStrip.ResumeLayout(False)
Me.MenuStrip.PerformLayout()
Me.MyFlowLayoutPanel1.ResumeLayout(False)
Me.ResumeLayout(False)
End Sub
@@ -548,4 +555,5 @@ Partial Class usrCntlATLAS_EZA
Friend WithEvents GEZEXLSXToolStripMenuItem As ToolStripMenuItem
Friend WithEvents MEYLEXLSXToolStripMenuItem As ToolStripMenuItem
Friend WithEvents FressnapToolStripMenuItem As ToolStripMenuItem
Friend WithEvents VERAGIMPORTFormatToolStripMenuItem As ToolStripMenuItem
End Class

View File

@@ -1135,236 +1135,228 @@ Public Class usrCntlATLAS_EZA
Private Function importExcel_MEYLE() As Boolean
Dim fd As New OpenFileDialog With {
.Filter = "Excel Dateien|*.xls;*.xlsx",
.Multiselect = True,
.Title = "Bitte eine oder mehrere Excel-Dateien auswählen"
}
Dim result As DialogResult = fd.ShowDialog()
If result <> DialogResult.OK Then
Me.Cursor = Cursors.Default
MsgBox("Keine Datei ausgewählt!")
Return False
Else
Dim cnt = 0
Dim f As New frmImportFromAVISOAnhaenge(AVISO, SENDUNG)
f.ShowDialog(Me)
Dim LIST_FILES = f.LIST_FILES
If Not f.DialogResult = DialogResult.OK Then Return False
If LIST_FILES.Count = 0 Then Return False
If EZA.eza_WARENPOS.Count > 0 Then
If vbYes = MsgBox("Sollten die aktuellen Einträge gelöscht werden?", vbYesNo) Then
EZA.eza_WARENPOS.Clear() 'Zurücksetzen
End If
Dim cnt = 0
If EZA.eza_WARENPOS.Count > 0 Then
If vbYes = MsgBox("Sollten die aktuellen Einträge gelöscht werden?", vbYesNo) Then
EZA.eza_WARENPOS.Clear() 'Zurücksetzen
End If
End If
Me.Cursor = Cursors.WaitCursor
For Each filePath As String In LIST_FILES
If Not filePath.ToLower.EndsWith(".xls") AndAlso Not filePath.ToLower.EndsWith(".xlsx") Then
' Ungültige Datei überspringen oder abbrechen
Continue For
End If
Me.Cursor = Cursors.WaitCursor
For Each filePath As String In fd.FileNames
If Not filePath.ToLower.EndsWith(".xls") AndAlso Not filePath.ToLower.EndsWith(".xlsx") Then
' Ungültige Datei überspringen oder abbrechen
Continue For
End If
Dim exclApp As New Excel.Application 'Object 'as Application
Dim Datei As Excel.Workbook ' 'as WorkBook
Dim Blatt As Excel.Worksheet 'Object 'as WorkSheet
Dim exclApp As New Excel.Application 'Object 'as Application
Dim Datei As Excel.Workbook ' 'as WorkBook
Dim Blatt As Excel.Worksheet 'Object 'as WorkSheet
With exclApp
Try
.CutCopyMode = False
.DisplayAlerts = False
Datei = .Workbooks.Open(filePath)
Blatt = Datei.Worksheets(1)
Datei.Activate()
With exclApp
Try
Blatt.ShowAllData() 'Falls Filter ausgewählt wurde
Catch ex As Exception
.CutCopyMode = False
.DisplayAlerts = False
End Try
Dim startFound As Boolean = False
Dim endFound As Boolean = False
If Not checkExcel_MEYLE(Blatt) Then 'VALIDIERUNG
Me.Cursor = Cursors.Default
Return False
End If
Datei = .Workbooks.Open(fd.FileName)
Blatt = Datei.Worksheets(1)
Dim startRows As Integer = 6
Datei.Activate()
Try
Blatt.ShowAllData() 'Falls Filter ausgewählt wurde
Catch ex As Exception
End Try
Dim startFound As Boolean = False
Dim endFound As Boolean = False
If Not checkExcel_MEYLE(Blatt) Then 'VALIDIERUNG
Me.Cursor = Cursors.Default
Return False
Dim endRows As Integer = startRows
While endRows < Blatt.UsedRange.Rows.Count
If Not Blatt.Range("A" & endRows) Is Nothing AndAlso Not Blatt.Range("A" & endRows).Value Is Nothing AndAlso Not Blatt.Range("A" & endRows).Value.ToString.Trim = "" Then
endFound = True
Else
Exit While
End If
endRows += 1
End While
endRows -= 1
If Not endFound Then
MsgBox("Keine Daten vorhanden!")
Me.Cursor = Cursors.Default
Return False
End If
Dim startRows As Integer = 6
' Neue DataTable erstellen
Dim DATA As New DataTable()
Dim endRows As Integer = startRows
While endRows < Blatt.UsedRange.Rows.Count
If Not Blatt.Range("A" & endRows) Is Nothing AndAlso Not Blatt.Range("A" & endRows).Value Is Nothing AndAlso Not Blatt.Range("A" & endRows).Value.ToString.Trim = "" Then
endFound = True
Else
Exit While
End If
endRows += 1
End While
endRows -= 1
' Spalten anhand der Anzahl im Range anlegen
Dim colCount As Integer = Blatt.Range("A1:M1").Columns.Count
For c As Integer = 1 To colCount
DATA.Columns.Add("Spalte" & c, GetType(String))
Next
If Not endFound Then
MsgBox("Keine Daten vorhanden!")
Me.Cursor = Cursors.Default
Return False
End If
' Neue DataTable erstellen
Dim DATA As New DataTable()
' Spalten anhand der Anzahl im Range anlegen
Dim colCount As Integer = Blatt.Range("A1:M1").Columns.Count
' Range direkt durchlaufen
For r As Integer = startRows To endRows
Dim newRow As DataRow = DATA.NewRow()
For c As Integer = 1 To colCount
DATA.Columns.Add("Spalte" & c, GetType(String))
Dim value = Blatt.Cells(r, c).Value
newRow(c - 1) = If(value IsNot Nothing, value.ToString(), "")
Next
DATA.Rows.Add(newRow)
Next
' Range direkt durchlaufen
For r As Integer = startRows To endRows
Dim newRow As DataRow = DATA.NewRow()
For c As Integer = 1 To colCount
Dim value = Blatt.Cells(r, c).Value
newRow(c - 1) = If(value IsNot Nothing, value.ToString(), "")
Next
DATA.Rows.Add(newRow)
Next
' DataTable durchlaufen und Zeilen löschen, bei denen Spalte 6 "summe" enthält
For i As Integer = DATA.Rows.Count - 1 To 0 Step -1
Dim cellValue As String = DATA.Rows(i)(6).ToString().ToLower() ' Spalte 6 = Index 5
If cellValue.Contains("summe") Then
DATA.Rows.RemoveAt(i)
End If
Next
' DataTable durchlaufen und Zeilen löschen, bei denen Spalte 6 "summe" enthält
For i As Integer = DATA.Rows.Count - 1 To 0 Step -1
Dim cellValue As String = DATA.Rows(i)(6).ToString().ToLower() ' Spalte 6 = Index 5
If cellValue.Contains("summe") Then
DATA.Rows.RemoveAt(i)
End If
Next
'--------------------------------------------------------------------------------------------------------------
'--------------------------------------------------------------------------------------------------------------
' Spaltenüberschriften ausgeben
' Spaltenüberschriften ausgeben
For Each col As DataColumn In DATA.Columns
Console.Write(col.ColumnName & vbTab)
Next
Console.WriteLine()
' Alle Zeilen ausgeben
For Each row As DataRow In DATA.Rows
For Each col As DataColumn In DATA.Columns
Console.Write(col.ColumnName & vbTab)
Console.Write(row(col).ToString() & vbTab)
Next
Console.WriteLine()
Next
' Alle Zeilen ausgeben
For Each row As DataRow In DATA.Rows
For Each col As DataColumn In DATA.Columns
Console.Write(row(col).ToString() & vbTab)
Next
Console.WriteLine()
Next
'--------------------------------------------------------------------------------------------------------------
'-------------HIER WERDEN DIE Zeilen kommuliert---------------------------------------------------------
'--------------------------------------------------------------------------------------------------------------
'--------------------------------------------------------------------------------------------------------------
'-------------HIER WERDEN DIE Zeilen kommuliert---------------------------------------------------------
'--------------------------------------------------------------------------------------------------------------
' Neue Tabelle mit gleicher Struktur
Dim resultDATA As DataTable = DATA.Clone()
'0 = Wartentarifnummer
'6 = Wartenbeschreibung
'12 = Währung (immer gleich)?
' Gruppieren nach den Schlüsseln Spalte 0, 6 und 12
Dim groups = From row In DATA.AsEnumerable()
Group row By key1 = row(0), key2 = row(6), key3 = row(12) Into grp = Group
Select key1, key2, key3, grp
' Neue Tabelle mit gleicher Struktur
Dim resultDATA As DataTable = DATA.Clone()
'0 = Wartentarifnummer
'6 = Wartenbeschreibung
'12 = Währung (immer gleich)?
' Gruppieren nach den Schlüsseln Spalte 0, 6 und 12
Dim groups = From row In DATA.AsEnumerable()
Group row By key1 = row(0), key2 = row(6), key3 = row(12) Into grp = Group
Select key1, key2, key3, grp
' Gruppen durchlaufen und kumulierte Zeilen erstellen
For Each g In groups
Dim newRow As DataRow = resultDATA.NewRow()
' Gruppen durchlaufen und kumulierte Zeilen erstellen
For Each g In groups
Dim newRow As DataRow = resultDATA.NewRow()
' Gruppierungsspalten setzen
newRow(0) = g.key1
newRow(6) = g.key2
newRow(12) = g.key3
' Gruppierungsspalten setzen
newRow(0) = g.key1
newRow(6) = g.key2
newRow(12) = g.key3
' Summen berechnen
newRow(7) = g.grp.Sum(Function(r) ToDoubleSafe(r(7)))
newRow(9) = g.grp.Sum(Function(r) ToDoubleSafe(r(9)))
newRow(11) = g.grp.Sum(Function(r) ToDoubleSafe(r(11)))
' Summen berechnen
newRow(7) = g.grp.Sum(Function(r) ToDoubleSafe(r(7)))
newRow(9) = g.grp.Sum(Function(r) ToDoubleSafe(r(9)))
newRow(11) = g.grp.Sum(Function(r) ToDoubleSafe(r(11)))
' Restliche Spalten Nothing lassen (bleibt automatisch so)
' Restliche Spalten Nothing lassen (bleibt automatisch so)
resultDATA.Rows.Add(newRow)
Next
resultDATA.Rows.Add(newRow)
Next
' Falls du das Ergebnis in DATA zurückschreiben willst:
DATA = resultDATA
' Falls du das Ergebnis in DATA zurückschreiben willst:
DATA = resultDATA
'--------------------------------------------------------------------------------------------------------------
'--------------------------------------------------------------------------------------------------------------
'--------------------------------------------------------------------------------------------------------------
'--------------------------------------------------------------------------------------------------------------
' Spaltenüberschriften ausgeben
For Each col As DataColumn In DATA.Columns
Console.Write(col.ColumnName & vbTab)
Next
Console.WriteLine()
' Spaltenüberschriften ausgeben
' Alle Zeilen ausgeben
For Each row As DataRow In DATA.Rows
For Each col As DataColumn In DATA.Columns
Console.Write(col.ColumnName & vbTab)
Console.Write(row(col).ToString() & vbTab)
Next
Console.WriteLine()
Next
' Alle Zeilen ausgeben
'--------------------------------------------------------------------------------------------------------------
Dim HandlesRgNr = ""
If Blatt.Range("B3") IsNot Nothing AndAlso Blatt.Range("B3").Value IsNot Nothing Then
HandlesRgNr = Blatt.Range("B3").Value.ToString().Trim()
End If
Dim HandlesRgDat = ""
If Blatt.Range("B1") IsNot Nothing AndAlso Blatt.Range("B1").Value IsNot Nothing Then
HandlesRgDat = Blatt.Range("B1").Value.ToString().Trim()
End If
' MsgBox("A" & startRows & ":I" & endRows & "")
Try
For Each row As DataRow In DATA.Rows
For Each col As DataColumn In DATA.Columns
Console.Write(row(col).ToString() & vbTab)
Next
Console.WriteLine()
Next
' Prüfen, ob Spalte 1 (Index 0) gefüllt ist
If row(0) IsNot Nothing AndAlso row(0).ToString().Trim() <> "" Then
'--------------------------------------------------------------------------------------------------------------
Dim POSITION As New DAKOSY_Worker.cDakosy_EZA_Warenposition
POSITION.ezaWP_WarennummerEZT = row(0).ToString()
POSITION.ezaWP_PackstueckAnzahl = "0" ' row(5).ToString()
POSITION.ezaWP_PackstueckArt = "PK"
' Sicher konvertieren, falls leer oder ungültig
Dim preis As Double
Double.TryParse(row(11).ToString(), preis)
POSITION.ezaWP_Artikelpreis = preis.ToString("N2")
Dim HandlesRgNr = ""
If Blatt.Range("B3") IsNot Nothing AndAlso Blatt.Range("B3").Value IsNot Nothing Then
HandlesRgNr = Blatt.Range("B3").Value.ToString().Trim()
End If
Dim HandlesRgDat = ""
If Blatt.Range("B1") IsNot Nothing AndAlso Blatt.Range("B1").Value IsNot Nothing Then
HandlesRgDat = Blatt.Range("B1").Value.ToString().Trim()
End If
POSITION.ezaWP_ArtikelpreisWaehrung = row(12).ToString()
POSITION.ezaWP_Warenbezeichnung = row(6).ToString()
' MsgBox("A" & startRows & ":I" & endRows & "")
Dim masse As Double
Double.TryParse(row(9).ToString(), masse)
POSITION.ezaWP_Eigenmasse = masse.ToString("N1")
' Ursprungsland ggf. per Select Case setzen
'Select Case row(3).ToString()
' Case "TURKEY" : POSITION.ezaWP_UrsprungslandCode = "TR"
' Case "ITALY" : POSITION.ezaWP_UrsprungslandCode = "IT"
' ...
'End Select
Try
For Each row As DataRow In DATA.Rows
' Prüfen, ob Spalte 1 (Index 0) gefüllt ist
If row(0) IsNot Nothing AndAlso row(0).ToString().Trim() <> "" Then
Dim POSITION As New DAKOSY_Worker.cDakosy_EZA_Warenposition
POSITION.ezaWP_WarennummerEZT = row(0).ToString()
POSITION.ezaWP_PackstueckAnzahl = "0" ' row(5).ToString()
POSITION.ezaWP_PackstueckArt = "PK"
' Sicher konvertieren, falls leer oder ungültig
Dim preis As Double
Double.TryParse(row(11).ToString(), preis)
POSITION.ezaWP_Artikelpreis = preis.ToString("N2")
POSITION.ezaWP_ArtikelpreisWaehrung = row(12).ToString()
POSITION.ezaWP_Warenbezeichnung = row(6).ToString()
Dim masse As Double
Double.TryParse(row(9).ToString(), masse)
POSITION.ezaWP_Eigenmasse = masse.ToString("N1")
' Ursprungsland ggf. per Select Case setzen
'Select Case row(3).ToString()
' Case "TURKEY" : POSITION.ezaWP_UrsprungslandCode = "TR"
' Case "ITALY" : POSITION.ezaWP_UrsprungslandCode = "IT"
' ...
'End Select
POSITION.ezaWP_UNTERLAGEN.Add(New DAKOSY_Worker.cDakosy_EZA_WarenpositionVorgelegteUnterlagen With {
POSITION.ezaWP_UNTERLAGEN.Add(New DAKOSY_Worker.cDakosy_EZA_WarenpositionVorgelegteUnterlagen With {
.ezaWpUl_Art = "N380",
.ezaWpUl_Bereich = "4",
.ezaWpUl_VorlageKz = "J",
@@ -1372,55 +1364,54 @@ Public Class usrCntlATLAS_EZA
.ezaWpUl_DatumAusstellung = Nothing
})
EZA.eza_WARENPOS.Add(POSITION)
cnt += 1
End If
Next
Catch ex As Exception
MsgBox("Fehler beim Einlesen der Excel-Datei!" & vbNewLine & vbNewLine & ex.Message & ex.StackTrace)
Me.Cursor = Cursors.Default
Return False
End Try
.Visible = False
' AddHandler exclApp.WorkbookBeforeClose, AddressOf BeforeBookClose
'Excelobjekte freistellten
' For Each obj In New Object() {exclApp, Datei, Datei, Blatt, Blatt}
' System.Runtime.InteropServices.Marshal.FinalReleaseComObject(obj)
' Next
Datei.Close()
EZA.eza_WARENPOS.Add(POSITION)
cnt += 1
End If
Next
Catch ex As Exception
'
MsgBox("Fehler beim Einlesen der Excel-Datei!" & vbNewLine & vbNewLine & ex.Message & ex.StackTrace)
Me.Cursor = Cursors.Default
MsgBox("FEHLER! Datei im richtigen Format?" & vbNewLine & vbNewLine & ex.Message & ex.StackTrace)
' Return False
Return False
End Try
End With
.Visible = False
' AddHandler exclApp.WorkbookBeforeClose, AddressOf BeforeBookClose
'Excelobjekte freistellten
' For Each obj In New Object() {exclApp, Datei, Datei, Blatt, Blatt}
' System.Runtime.InteropServices.Marshal.FinalReleaseComObject(obj)
' Next
Datei.Close()
' >>> Hier kannst du jede gültige Excel-Datei weiterverarbeiten:
Console.WriteLine("Verarbeite Datei: " & filePath)
' z.B. Excel öffnen, Range lesen etc.
Next
Me.FindForm.SuspendLayout()
POSITIONEN.setValues(EZA, True)
btnPositionen.PerformClick()
Me.FindForm.ResumeLayout()
Catch ex As Exception
'
Me.Cursor = Cursors.Default
MsgBox("FEHLER! Datei im richtigen Format?" & vbNewLine & vbNewLine & ex.Message & ex.StackTrace)
' Return False
End Try
End With
MsgBox(cnt & " Datensätze wurden eingelesen. ")
Me.Cursor = Cursors.Default
Return True
End If
' >>> Hier kannst du jede gültige Excel-Datei weiterverarbeiten:
Console.WriteLine("Verarbeite Datei: " & filePath)
' z.B. Excel öffnen, Range lesen etc.
Next
Me.FindForm.SuspendLayout()
POSITIONEN.setValues(EZA, True)
btnPositionen.PerformClick()
Me.FindForm.ResumeLayout()
MsgBox(cnt & " Datensätze wurden eingelesen. ")
Me.Cursor = Cursors.Default
Return True
Me.Cursor = Cursors.Default
Return False
@@ -1487,17 +1478,15 @@ Public Class usrCntlATLAS_EZA
End Sub
Private Function importExcel_Fressnapf() As Boolean
Dim fd As New OpenFileDialog With {
.Filter = "Excel Dateien|*.xls;*.xlsx",
.Multiselect = True,
.Title = "Bitte eine oder mehrere Excel-Dateien auswählen"
}
If fd.ShowDialog() <> DialogResult.OK Then
Me.Cursor = Cursors.Default
MsgBox("Keine Datei ausgewählt!")
Return False
End If
Dim f As New frmImportFromAVISOAnhaenge(AVISO, SENDUNG)
f.ShowDialog(Me)
Dim LIST_FILES = f.LIST_FILES
If Not f.DialogResult = DialogResult.OK Then Return False
If LIST_FILES.Count = 0 Then Return False
Dim cnt As Integer = 0
@@ -1509,7 +1498,7 @@ Public Class usrCntlATLAS_EZA
Me.Cursor = Cursors.WaitCursor
For Each filePath As String In fd.FileNames
For Each filePath As String In LIST_FILES
If Not (filePath.ToLower().EndsWith(".xls") OrElse filePath.ToLower().EndsWith(".xlsx")) Then
Continue For
End If
@@ -1783,6 +1772,8 @@ Public Class usrCntlATLAS_EZA
End Try
End Function
Private Sub VERAGIMPORTFormatToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles VERAGIMPORTFormatToolStripMenuItem.Click
End Sub
End Class

View File

@@ -0,0 +1,122 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmImportFromAVISOAnhaenge
Inherits System.Windows.Forms.Form
'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
<System.Diagnostics.DebuggerNonUserCode()> _
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.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmImportFromAVISOAnhaenge))
Me.Panel1 = New System.Windows.Forms.Panel()
Me.Button2 = New System.Windows.Forms.Button()
Me.Button1 = New System.Windows.Forms.Button()
Me.Panel2 = New System.Windows.Forms.Panel()
Me.dgvAnhang = New VERAG_PROG_ALLGEMEIN.MyDatagridview(Me.components)
Me.Button3 = New System.Windows.Forms.Button()
Me.Panel1.SuspendLayout()
CType(Me.dgvAnhang, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'Panel1
'
Me.Panel1.Controls.Add(Me.Button3)
Me.Panel1.Controls.Add(Me.Button2)
Me.Panel1.Controls.Add(Me.Button1)
Me.Panel1.Dock = System.Windows.Forms.DockStyle.Bottom
Me.Panel1.Location = New System.Drawing.Point(0, 381)
Me.Panel1.Name = "Panel1"
Me.Panel1.Size = New System.Drawing.Size(800, 69)
Me.Panel1.TabIndex = 0
'
'Button2
'
Me.Button2.Location = New System.Drawing.Point(633, 15)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(155, 42)
Me.Button2.TabIndex = 1
Me.Button2.Text = "OK"
Me.Button2.UseVisualStyleBackColor = True
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(29, 16)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(155, 42)
Me.Button1.TabIndex = 0
Me.Button1.Text = "Aus Datei-Explorer ..."
Me.Button1.UseVisualStyleBackColor = True
'
'Panel2
'
Me.Panel2.Dock = System.Windows.Forms.DockStyle.Top
Me.Panel2.Location = New System.Drawing.Point(0, 0)
Me.Panel2.Name = "Panel2"
Me.Panel2.Size = New System.Drawing.Size(800, 36)
Me.Panel2.TabIndex = 1
'
'dgvAnhang
'
Me.dgvAnhang.AKTUALISIERUNGS_INTERVALL = -1
Me.dgvAnhang.AllowUserToAddRows = False
Me.dgvAnhang.AllowUserToDeleteRows = False
Me.dgvAnhang.AllowUserToResizeRows = False
Me.dgvAnhang.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
Me.dgvAnhang.Dock = System.Windows.Forms.DockStyle.Fill
Me.dgvAnhang.Location = New System.Drawing.Point(0, 36)
Me.dgvAnhang.Name = "dgvAnhang"
Me.dgvAnhang.ReadOnly = True
Me.dgvAnhang.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect
Me.dgvAnhang.Size = New System.Drawing.Size(800, 345)
Me.dgvAnhang.TabIndex = 3
'
'Button3
'
Me.Button3.Location = New System.Drawing.Point(205, 16)
Me.Button3.Name = "Button3"
Me.Button3.Size = New System.Drawing.Size(155, 42)
Me.Button3.TabIndex = 2
Me.Button3.Text = "Aus Zwischenablage verwenden"
Me.Button3.UseVisualStyleBackColor = True
'
'frmImportFromAVISOAnhaenge
'
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.dgvAnhang)
Me.Controls.Add(Me.Panel2)
Me.Controls.Add(Me.Panel1)
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.Name = "frmImportFromAVISOAnhaenge"
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Anhang laden"
Me.Panel1.ResumeLayout(False)
CType(Me.dgvAnhang, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
End Sub
Friend WithEvents Panel1 As Panel
Friend WithEvents Panel2 As Panel
Friend WithEvents Button1 As Button
Friend WithEvents dgvAnhang As VERAG_PROG_ALLGEMEIN.MyDatagridview
Friend WithEvents Button2 As Button
Friend WithEvents Button3 As Button
End Class

View File

@@ -0,0 +1,980 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAgIAAAAEAGAAoyAAAFgAAACgAAACAAAAAAAEAAAEAGAAAAAAAAMgAAMQOAADEDgAAAAAAAAAA
AACRbEd5TB+CWC59USZ8USV9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
USZ9USZ9USZ9USZ8USV9USaCWC55TB+RbEd4Sx5mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB4Sx5/VClmMwBuPg5r
OglrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
OQhrOgluPg5mMwB/VCl0RhhmMwBmMwBnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFmMwBmMwB0RhhzRBVmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBz
RBV3Sh1mMwBnNQJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBnNQJmMwB3Sh18UCRmMwBqOQdnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFqOQdmMwB8UCR9USZmMwBrOQhn
NAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9
USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwDm4N3/////////
///////39fR0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL/////////////////
//////////////////////////////////////////////90SSZmMwBmMwBmMwBmMwBmMwB0SSb39fT/
//////////////9mMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////////////////+YfWtmMwBmMwBm
MwBmMwB0SSbu6+n////////////39fR0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT/////
///////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5zUy8X////////////////L
v7itmo1mMwBmMwCYfWv///////90SSZmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhn
NAFmMwBmMwBmMwB0SSb////////////////////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwDu6+n///////////////////////////////////////////////////////////+j
jH1mMwBmMwBmMwBmMwBmMwBmMwDm4N3///////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwC3p5z/
///////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwCYfWv////////////////Bs6pmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwB0SSb///////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCt
mo3////////////////////////////////////m4N2Mbli3p5z///////+jjH1mMwBmMwBmMwBmMwBm
MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwCMblj///////////////////////////+M
blhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X/////////////////////////////
///////////////////////////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwDBs6r///////////////+3
p5xmMwBmMwBmMwBmMwBmMwBmMwDm4N3///////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwDU
y8X///////////////+AXUJmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv///////////////////90SSZm
MwBmMwBmMwBmMwBmMwBmMwBmMwDLv7j////////////////////////////////////////////39fTm
4N3///////+3p5xmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwC3
p5z////////////////////////////d1tFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3
p5z////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwCjjH3////////////////Lv7hmMwBmMwBmMwBmMwBmMwCAXUL///////////////////90
SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL39fT////////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwBm
MwC3p5z////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z////////////////////U
y8WAXUJmMwBmMwC3p5z39fT////////////////////Uy8VmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9
USZ9USZmMwBrOQhnNAFmMwBmMwBmMwDBs6r////////////////u6+n///////////+tmo1mMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj///////////////////90SSZmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj////////////////m4N1mMwBmMwBmMwBm
MwBmMwC3p5z////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z/////////
///////////////////////////////////////////////////////Uy8VmMwBmMwBmMwBmMwBmMwBm
MwBmMwD39fT////////////////Lv7hmMwBmMwBmMwBmMwBmMwCAXULu6+n////////////////39fRm
MwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwDm4N3/////////////
//+jjH3////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb/////////////
//////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD3
9fT///////////////90SSZmMwBmMwBmMwBmMwDm4N3///////////////+jjH1mMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwDu6+n/////////////////////////////////////////////////////
//////+3p5xmMwBmMwBmMwBmMwBmMwBmMwCjjH3///////////////////+MblhmMwBmMwBmMwBmMwBm
MwBmMwCMblj///////////////////90SSZmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhn
NAFmMwBmMwBmMwD39fT///////////////9mMwDLv7j///////////+3p5xmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwDm4N3////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////+YfWtmMwBmMwBmMwCAXUL/////////
///////39fR0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv/////////////////////
//////////////////////////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwC3p5z/////////
//////////9mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////+jjH1mMwBmMwBmMwBm
MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwCMblj////////////////m4N1mMwCAXUL39fT/
///////39fSAXUJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r////////////////Uy8VmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z/////////////
///////////////////////////////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwDUy8X////////////u6+lmMwBmMwBmMwBmMwCMblj///////////////////90SSZmMwBm
MwBmMwBmMwBmMwBmMwC3p5z///////////////////9mMwBmMwBmMwB0SSb/////////////////////
//////////////+3p5xmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwCjjH3/
///////////////Uy8VmMwBmMwC3p5z////////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwC3p5z////////////////////////////////////////////////////m4N1mMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwCjjH3////////////////////////////////////////////////////////////d
1tGMblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////////////+tmo1mMwBmMwBmMwCt
mo3////////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z///////////////////90SSZm
MwBmMwBmMwDm4N3////////////////////////////////Uy8VmMwBmMwBmMwBmMwBnNAFrOQhmMwB9
USZ9USZmMwBrOQhnNAFmMwBmMwC3p5z///////////////+3p5xmMwBmMwB0SSb39fT///////////+Y
fWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj/////////////////////////////////////////
//////////////9mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb/////////////////////////////
//////////////////////////////////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3
p5z////////////39fR0SSZmMwBmMwDBs6r////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBm
MwCjjH3///////////////////+jjH1mMwBmMwBmMwDBs6r////////////////////////////////3
9fRmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwDUy8X///////////////+t
mo1mMwBmMwBmMwCtmo3////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT/////
//////////////////////////////////////////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwDu6+n///////////////90SSZmMwBmMwBmMwBmMwBmMwCjjH3m4N3////////////////39fR0SSZm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDu6+n///////////+3p5xmMwBmMwDUy8X/////////////
//+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb////////////////////Bs6pmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhn
NAFmMwBmMwDu6+n///////////////+MblhmMwBmMwBmMwBmMwDu6+n///////////+tmo1mMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwDd1tH////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////+YfWtmMwBmMwBmMwBmMwBmMwBm
MwB0SSbu6+n///////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3/////////
///39fSAXUJmMwD39fT///////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X/////
///////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r////Uy8W3p5y3p5yYfWtmMwBmMwBm
MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwB0SSb///////////////////90SSZmMwBmMwBmMwBm
MwCtmo3////////////u6+l0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r////////////////m4N1m
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z/////////
//////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwDLv7j////////////////Bs6pmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwDUy8X////////////Lv7h0SSb///////////////////90SSZmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwCYfWv///////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwDu
6+n///////////////+jjH1mMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwCYfWv/////
///////////u6+lmMwBmMwBmMwBmMwBmMwBmMwDd1tH///////////+3p5xmMwBmMwBmMwBmMwBmMwBm
MwBmMwCjjH3///////////////////90SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwCYfWv////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwDm4N3/////
//////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////////////+tmo3/
///////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r/////////////////
//+YfWtmMwBmMwBmMwBmMwBmMwCtmo3////////////////u6+lmMwBmMwBmMwBmMwBnNAFrOQhmMwB9
USZ9USZmMwBrOQhnNAFmMwC3p5z////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwCYfWv/////
//////////+AXUJmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////////////////+MblhmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb////////////////u6+lmMwBm
MwBmMwBmMwBmMwCAXULLv7j///////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwC3p5z////////////////////////////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwDd1tH///////////////////+3p5x0SSZmMwBmMwC3p5z///////////////////+t
mo1mMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwDLv7j////////////////Bs6pm
MwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT/
//////////////////////////////////////////////////////////90SSZmMwBmMwBmMwBmMwBm
MwBmMwDm4N3////////////////////////////////////////////////////////////Bs6pmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDu6+n///////////////////////////+3
p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X/////////////////////////
///////////////////////////Lv7hmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhn
NAFmMwDm4N3///////////////+tmo1mMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////////////+Y
fWtmMwBmMwBmMwBmMwBmMwBmMwDUy8X/////////////////////////////////////////////////
//////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwDLv7j/////////////////////////////////////
///////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCj
jH3///////////////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwCtmo339fT///////////////////////////////////////+tmo1mMwBmMwBmMwBmMwBmMwBm
MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAF0SSb///////////////////+MblhmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwDLv7j////////////u6+l0SSZmMwBmMwBmMwBmMwBmMwC3p5z/////////////////
//////////////////////////////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwC3p5z/////
///////////////////////////////////////m4N23p5yMblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH///////////////////////9mMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH23p5z39fT////////////////Uy8W3
p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9
USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhn
NAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9
USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ8UCRmMwBqOQdn
NAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBnNAFqOQdmMwB8UCR3Sh1mMwBnNQJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNQJmMwB3Sh1zRBVmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBz
RBV0RhhmMwBmMwBnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn
NAFnNAFnNAFnNAFnNAFnNAFmMwBmMwB0Rhh/VClmMwBuPg5rOglrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr
OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOgluPg5mMwB/VCl4Sx5mMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwB4Sx6RbEd5TB+CWC59USZ8USV9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9
USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ8USV9USaCWC55TB+RbEf/////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////Bs6rBs6qYfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWvBs6rBs6r/////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////Uy8WYfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWvUy8X////////////////////////////////////////B
s6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwCjjH3Bs6rBs6r39fT/////////////////////////////////////////////////////////
///Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDm4N3/////////////////////////////////////////////
///////////////////////////////////////////////////////////////d1tGMblhmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWvm4N3/
///////////////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMbljLv7j/////////////////
///////////////////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X/////////////
////////////////////////////////////////////////////////////////////////////////
///////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X////////////////////////////d1tFmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwCMbljm4N3////////////////////////////////////////////m4N1mMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwC3p5z/////////////////////////////////////////////////////////////
//////////////////////////////////////+tmo1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDLv7j/////////
///////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r/////////////////////
///////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3/////////////////////////////
///////////////////////////////////////////////////////////////////Bs6pmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwDm4N3///////////////////////90SSZmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwCtmo3///////////////////////////////////////+MblhmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCA
XUL/////////////////////////////////////////////////////////////////////////////
///////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL39fT/////////////////
//+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCtmo3/////////////////////////////
//////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT/////////////////////////////////////////
//////////////////////////////////////////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwDBs6r///////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwDBs6r////////////////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X/////////
///////////////////////////////////////////////////////////////////////////d1tFm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6rd1tH////////39fTBs6qAXUJm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb////////////////////Lv7hmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH////////////////////////////Uy8VmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwDLv7j/////////////////////////////////////////////////////////
//////////////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3/
//////////////////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd
1tH////////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r/////////////
///////Uy8XBs6qMblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL/////
///////////////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj/////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////+AXUJmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwCtmo3///////////////////////////////////////+AXUJmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwC3p5z////////////////////////////////d1tGMblhmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r///////////////////////////9mMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwB0SSb/////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL39fT/////////////////////
///////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCtmo3/////////////
//////+AXUJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj/////////////////////////////
//////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb39fT/////////////
//////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDm4N3/////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwDBs6r////////////////////////////////////////////d1tFmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwCYfWv///////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0
SSb///////////////////////////////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwDBs6r///////////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwDUy8X/////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///u6+nBs6rBs6rBs6qYfWtmMwBmMwBmMwDu6+n/////////////////////////////////////////
///Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv///////////////////+3p5xmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDu6+n////////////////////////////////////////u
6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj////////////////////////Bs6pm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r/////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////u6+l0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCY
fWv////////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X/////////
//////////////////////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwDm4N3////////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3/////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////u6+m3p5xmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3////////////////////m4N1mMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwDBs6r////////////////////////////////////////////d1tFmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r////////////////////u6+lmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwCMblj/////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////Uy8XB
s6p0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z/////////////
//////////9mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCtmo3/////////////////////////
//////////////////////+AXUJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3/////////
//////////////90SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD/////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////m4N3Bs6qMblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwDUy8X///////////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwCMblj///////////////////////////////////////////////+3p5xmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwB0SSb///////////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwDm4N3/////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////Bs6qAXUJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb39fT///////////////////////+jjH1m
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb/////////////////////////////////////////
///////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT///////////////////+t
mo1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X/////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////Lv7hmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r/
///////////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDm4N3/////
///////////////////////////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwDm4N3////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r/
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwCAXUL39fT////////////////////////////Uy8VmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////////////////////////////////////90SSZm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH////////////////////Uy8VmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3/////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSbm4N3/////////////////////
///////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r/////////////////////
//////////////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X/////
///////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj/////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////Bs6pmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCM
bljm4N3///////////////////////////////////////90SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwCjjH3///////////////////////////////////////////////+YfWtmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwDLv7j///////////////////////90SSZmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwD39fT/////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////39fR0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r///////////////////////////////////////////////+M
blhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj/////////////////////////////////////
//////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDLv7j/////////////////////
//+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDm4N3/////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWvBs6r/////////////////////////
//////////////////////////////+tmo1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD/////
//////////////////////////////////////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwDd1tH///////////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDL
v7j/////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////+Mblhm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCtmo3Bs6r/////
///////////////////////////////////////////////////////////////Bs6pmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwDm4N3///////////////////////////////////////////+AXUJm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH////////////////////////Bs6pmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z/////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////9mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwCtmo3Bs6r39fT/////////////////////////////////////////////////////////////////
///////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X/////////////////
///////////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDu6+n/////
///////////////////d1tFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3/////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////u6+lmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwB0SSbLv7j/////////////////////////////////////////////////
///////////////////////////////////////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwC3p5z////////////////////////////////////////Uy8VmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwB0SSb////////////////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwCAXUL/////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSbu6+n/////////////////////
////////////////////////////////////////////////////////////////////////////////
//90SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3/////////////////////////////////
//////+tmo1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3/////////////////////////
//////90SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT/////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwC3p5z////////////////////////////////////39fRmMwBmMwB0SSbBs6rBs6r39fT/////////
//////////////////////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL/
///////////////////////////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwDBs6r///////////////////////////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwDm4N3/////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////39fRmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z////////////////////////////////////Bs6pm
MwBmMwBmMwBmMwBmMwBmMwBmMwCtmo3Bs6rBs6r///////////////////////////+3p5xmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT////////////////////////////39fSMblhmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDu6+n///////////////////////////////+3p5xmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDLv7j/////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////90SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL/////////
///////////////////////u6+l0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD/////////
///////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDm4N3/////////////
///////////u6+mMblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv/////////////
///////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z/////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////+jjH1mMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwCjjH3////////////////////////u6+mAXUJmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwCYfWv////////////////////////////d1tFmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwDLv7j////////////////Uy8W3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwDd1tH////////////////////////////////////d1tFmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwCYfWv/////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMbljBs6r////////d1tG3
p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH/////////////////////////
///39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv/////////////////////////////////
///////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb/////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////39fR0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCM
blj///////////////////////////////////90SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSbu6+n/
//////////////////////////////////////////+AXUJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwD39fT/////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////L
v7hmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH///////////////////////////////////+YfWtmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwDLv7j///////////////////////////////////////////////+jjH1m
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH/////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z/////////////////
//////////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r/////////////////////////
//////////////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r/////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////39fSAXUJmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwCYfWv////////////////////////////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDB
s6r////////////////////////////////////////////////////////Lv7hmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwC3p5z/////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////u6+mMblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv/////////////////////////////////////////
///////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwB0SSbUy8X/////////////////////////////////////////////////
///////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv/////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////+jjH1mMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDLv7j/////////////
///////////////////////////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSbBs6r/////////////////////////
///////////////////////////////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwB0SSb/////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////d1tGYfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm
MwBmMwDBs6r39fT///////////////////////////////////////////////////////////+AXUJm
MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXULBs6rBs6rm4N3/
//////////////////////////////////////////////////////////////////////////////+A
XUJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD/////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////39fTBs6rBs6pmMwBmMwBm
MwBmMwBmMwBmMwBmMwBmMwCjjH3Bs6rUy8X/////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
</value>
</data>
</root>

View File

@@ -0,0 +1,161 @@
Imports System.IO
Imports DocumentFormat.OpenXml.Drawing.Charts
Imports VERAG_PROG_ALLGEMEIN
Public Class frmImportFromAVISOAnhaenge
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
Dim AvisoId As Integer = -1
Dim SendungID As Integer = -1
Public LIST_FILES As New List(Of String)
Sub New(avisoId, sendungId)
' Dieser Aufruf ist für den Designer erforderlich.
InitializeComponent()
Me.AvisoId = avisoId
Me.SendungID = sendungId
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
End Sub
Sub New(aviso As VERAG_PROG_ALLGEMEIN.cAviso, sendung As cSendungen)
' Dieser Aufruf ist für den Designer erforderlich.
InitializeComponent()
If aviso IsNot Nothing Then
Me.AvisoId = aviso.AvisoID
End If
If sendung IsNot Nothing Then
Me.SendungID = sendung.tblSnd_SendungID
End If
Me.SendungID = SendungID
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
End Sub
Private Sub frmImportFromAVISOAnhaenge_Load(sender As Object, e As EventArgs) Handles Me.Load
initAnhang()
End Sub
Sub initAnhang()
If AvisoId <= 0 Then Exit Sub
If SendungID <= 0 Then Exit Sub
Dim hSQL As String = " SELECT [anh_id],[anh_Name],anh_Datum,[anh_docId],CASE WHEN (anh_SendungsId is null OR anh_SendungsId <=0) AND isnull(aa_name,'')='' THEN '***' ELSE [aa_name] END as [anh_Art],[anh_Typ]
FROM [tblAvisoAnhaenge]
left join tblAvisoAnhangsArten on aa_bezeichnung = anh_Art
WHERE anh_AvisoId=" & AvisoId & " AND (anh_SendungsId is null OR anh_SendungsId <=0 OR anh_SendungsId=" & SendungID & ")
ORDER BY anh_SendungsId desc, case when aa_sort = NULL THEN 15 else aa_sort END, [anh_Reihenfolge],[anh_id]"
dgvAnhang.DataSource = SQL.loadDgvBySql(hSQL, "AVISO")
If dgvAnhang.RowCount = 0 Then dgvAnhang.Columns.Clear() : Exit Sub
With dgvAnhang
.RowTemplate.Height = 35
'.RowTemplate.MinimumHeight = 30
.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
.Columns("anh_id").Visible = False 'VermerkID nicht anzeigen
.Columns("anh_docId").Visible = False 'AvisoID nicht anzeigen
.Columns("anh_Name").MinimumWidth = 150
.Columns("anh_Name").HeaderText = "Name"
.Columns("anh_Name").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
.Columns("anh_Datum").Width = 120
.Columns("anh_Datum").HeaderText = "Datum"
.Columns("anh_Art").MinimumWidth = 100
.Columns("anh_Art").HeaderText = "Art"
.Columns("anh_Art").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter
.Columns("anh_Typ").Width = 150
.Columns("anh_Typ").HeaderText = "Typ"
.Columns("anh_Typ").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter
.ClearSelection()
End With
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
If dgvAnhang.SelectedRows.Count = 0 Then Exit Sub
LIST_FILES.Clear()
For Each r In dgvAnhang.SelectedRows
Dim docId As Integer = CInt(r.cells("anh_docId").value)
If docId > 0 Then
Dim tempFile As String = VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(docId)
If tempFile <> "" Then
LIST_FILES.Add(tempFile)
End If
End If
Next
If LIST_FILES.Count > 0 Then
Me.DialogResult = DialogResult.OK
Me.Close()
Else
Me.DialogResult = DialogResult.None
End If
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim fd As New OpenFileDialog With {
.Filter = "Excel Dateien|*.xls;*.xlsx",
.Multiselect = True,
.Title = "Bitte eine oder mehrere Excel-Dateien auswählen"
}
Dim result As DialogResult = fd.ShowDialog()
If result <> DialogResult.OK Then
Me.Cursor = Cursors.Default
MsgBox("Keine Datei ausgewählt!")
Me.DialogResult = DialogResult.None
Exit Sub
Else
For Each filePath As String In fd.FileNames
If Not filePath.ToLower.EndsWith(".xls") AndAlso Not filePath.ToLower.EndsWith(".xlsx") Then
' Ungültige Datei überspringen oder abbrechen
Continue For
End If
LIST_FILES.Add(filePath)
Next
If LIST_FILES.Count > 0 Then
Me.DialogResult = DialogResult.OK
Me.Close()
Else
Me.DialogResult = DialogResult.None
End If
End If
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Dim data As IDataObject = Clipboard.GetDataObject
For Each s As String In My.Computer.Clipboard.GetFileDropList() 'GetData(DataFormats.) 'data.GetData(DataFormats.FileDrop) 'DataFormats.FileDrop)
If System.IO.File.Exists(s) Then
LIST_FILES.Add(s)
End If
Next
If LIST_FILES.Count > 0 Then
Me.DialogResult = DialogResult.OK
Me.Close()
Else
Me.DialogResult = DialogResult.None
End If
End Sub
End Class

View File

@@ -44,11 +44,10 @@ Public Class cRelayHub
Public Class cRelayHubHeaderData
Public Property agentContact As cRelayHubAgentContact
Public Property declarantIsConsignee As Boolean
Public Property representationRelationshipCode As String
Public Property inputTaxDeduction As String
Public Property representationRelationshipCode As Integer ' <- war String
Public Property inputTaxDeduction As Boolean ' <- war String
Public Property procedureCodeRequested As String
Public Property goodsStatus As String
Public Property costs As List(Of cRelayHubCost)
' Entfernt: goodsStatus, costs (nicht im Schema an dieser Stelle)
Public Property transportMeansArrivalIdentity As String
Public Property transportMeansNationalityCode As String
Public Property previousAdministrativeReferenceType As String
@@ -57,7 +56,7 @@ Public Class cRelayHub
Public Property destinationCountry As String
Public Property departureCountry As String
Public Property addressedCustomsOffice As String
Public Property dv1CostAllocation As cRelayHubDv1CostAllocation ' <--- NEU
Public Property dv1CostAllocation As cRelayHubDv1CostAllocation
End Class
Public Class cRelayHubAddress
@@ -87,9 +86,12 @@ Public Class cRelayHub
Public Property dispatchCountry As String
Public Property destinationCountry As String
Public Property regimeType As String
Public Property customer As String
' Entfernt: customer (vom Schema abgelehnt)
Public Property documents As List(Of cRelayHubDocument)
Public Property additionalData As cRelayHubAdditionalData
' Neu: Pflichtfeld lt. Fehlermeldung
Public Property outputApplication As String ' "test" | "dakosy/sftp/vera" | "evrim/excel" | "sec/import/integration"
End Class
Public Class cRelayHubJobOrderResponse
@@ -117,9 +119,9 @@ Public Class cRelayHub
http.SetRequestHeader("Accept", "application/json")
' *** Token aus der separaten Token-Klasse beziehen ***
Dim token As String = cRelayHubToken.GetValidAccessToken()
Dim token As String = cRelayHubToken.GetAccessToken()
http.AuthToken = token ' -> setzt Authorization: Bearer <token>
Console.WriteLine("Using Token: " & token)
Return http.PostJson2(API_URL & "/job-orders/init", "application/json", jsonPayload)
End Function
@@ -140,29 +142,29 @@ Public Class cRelayHub
}
End If
' 401 → Token-Cache invalidieren und genau 1x erneut probieren
If response.StatusCode = 401 Then
' WICHTIG:
' Diese Methode sollte in cRelayHubToken als Public verfügbar sein:
' Public Shared Sub ResetTokenCache() : ClearToken() : End Sub
' → Falls noch nicht vorhanden, bitte dort ergänzen.
Try
cRelayHubToken.ResetTokenCache()
Catch
' Falls die Methode (noch) nicht existiert, kann man als Fallback
' hier eine kurze Wartezeit einbauen und anschließend erneut GetValidAccessToken() aufrufen.
' Threading.Thread.Sleep(100)
End Try
'' 401 → Token-Cache invalidieren und genau 1x erneut probieren
'If response.StatusCode = 401 Then
' ' WICHTIG:
' ' Diese Methode sollte in cRelayHubToken als Public verfügbar sein:
' ' Public Shared Sub ResetTokenCache() : ClearToken() : End Sub
' ' → Falls noch nicht vorhanden, bitte dort ergänzen.
' Try
' cRelayHubToken.ResetTokenCache()
' Catch
' ' Falls die Methode (noch) nicht existiert, kann man als Fallback
' ' hier eine kurze Wartezeit einbauen und anschließend erneut GetValidAccessToken() aufrufen.
' ' Threading.Thread.Sleep(100)
' End Try
' Retry
response = SendJobOrder(jsonPayload)
If response Is Nothing Then
Return New cRelayHubApiResult With {
.Success = False, .StatusCode = 0, .Message = "Verbindungsfehler (nach Refresh)",
.Details = "Keine Antwort erhalten."
}
End If
End If
' ' Retry
' response = SendJobOrder(jsonPayload)
' If response Is Nothing Then
' Return New cRelayHubApiResult With {
' .Success = False, .StatusCode = 0, .Message = "Verbindungsfehler (nach Refresh)",
' .Details = "Keine Antwort erhalten."
' }
' End If
'End If
' Auswertung
result.StatusCode = response.StatusCode
@@ -208,61 +210,58 @@ Public Class cRelayHub
' Beispielfall
Function CreateSampleJobOrderRequest() As cRelayHubJobOrderRequest
Dim request As New cRelayHubJobOrderRequest With {
.referenceNo = "1001K",
.dispatchCountry = "TR",
.destinationCountry = "EN",
.regimeType = "IM",
.customer = "AVISO",
.documents = New List(Of cRelayHubDocument) From {
New cRelayHubDocument With {.type = "base64", .base64String = "SGVsbG8sIHRoaXMgaXMgYSBzYW1wbGUgYmFzZTY0IHN0cmluZy4=", .filename = "test.txt", .fileType = "invoice"},
New cRelayHubDocument With {.type = "base64", .base64String = "SGVsbG8sIHRoaXMgaXMgYSBzYW1wbGUgYmFzZTY0IHN0cmluZy4=", .filename = "test2.txt", .fileType = "atr"},
New cRelayHubDocument With {.type = "base64", .base64String = "SGVsbG8sIHRoaXMgaXMgYSBzYW1wbGUgYmFzZTY0IHN0cmluZy4=", .filename = "test3.txt", .fileType = "cmr"}
},
.additionalData = New cRelayHubAdditionalData With {
.transaction = New cRelayHubTransaction With {
.ioPartner = "VERA",
.ioDivision3 = "SUB",
.ioReference = "4803/25001763_1301250935SS/samimx"
Dim req As New cRelayHubJobOrderRequest With {
.referenceNo = "1001K",
.dispatchCountry = "TR", ' ISO-2
.destinationCountry = "DE", ' ISO-2 (nicht "EN")
.regimeType = "IMPORT", ' "IMPORT" | "EXPORT"
.outputApplication = "test", ' Pflichtfeld lt. Validator
.documents = New List(Of cRelayHubDocument) From {
New cRelayHubDocument With {.type = "base64", .base64String = "SGVsbG8sIHRoaXMgaXMgYSBzYW1wbGUgYmFzZTY0IHN0cmluZy4=", .filename = "test.txt", .fileType = "invoice"},
New cRelayHubDocument With {.type = "base64", .base64String = "SGVsbG8sIHRoaXMgaXMgYSBzYW1wbGUgYmFzZTY0IHN0cmluZy4=", .filename = "test2.txt", .fileType = "atr"},
New cRelayHubDocument With {.type = "base64", .base64String = "SGVsbG8sIHRoaXMgaXMgYSBzYW1wbGUgYmFzZTY0IHN0cmluZy4=", .filename = "test3.txt", .fileType = "cmr"}
},
.additionalData = New cRelayHubAdditionalData With {
.transaction = New cRelayHubTransaction With {
.ioPartner = "VERA",
.ioDivision3 = "SUB",
.ioReference = "4803/25001763_1301250935SS/samimx"
},
.declaration = New List(Of cRelayHubDeclaration) From {
New cRelayHubDeclaration With {
.objectIdentification = New cRelayHubObjectIdentification With {
.objectName = "4803/25001763",
.objectAlias = "1349846",
.declarationType = "EZA-D"
},
.declaration = New List(Of cRelayHubDeclaration) From {
New cRelayHubDeclaration With {
.objectIdentification = New cRelayHubObjectIdentification With {
.objectName = "4803/25001763",
.objectAlias = "1349846",
.declarationType = "EZA-D"
},
.headerData = New cRelayHubHeaderData With {
.agentContact = New cRelayHubAgentContact With {
.contactPersonName = "AMANN",
.contactPersonPhoneNumber = "+49 123 456 789",
.contactPersonPosition = "Manager"
},
.declarantIsConsignee = True,
.representationRelationshipCode = "1",
.inputTaxDeduction = "true",
.procedureCodeRequested = "42",
.goodsStatus = "EU",
.costs = New List(Of cRelayHubCost) From {
New cRelayHubCost With {.costAmount = "25909.92", .costCurrency = "EUR"}
},
.transportMeansArrivalIdentity = "PB1552EC",
.transportMeansNationalityCode = "BG",
.previousAdministrativeReferenceType = "T1",
.previousAdministrativeReferenceNumber = "25TR160100001472M0",
.destinationFederalState = "07",
.destinationCountry = "DE",
.departureCountry = "TR"
},
.addresses = New List(Of cRelayHubAddress) From {
New cRelayHubAddress With {.addressType = "CZ", .participantEORI = "EORI12345", .participantSubsidiaryNumber = "001", .companyName = "SISECAM DIS TIC.A.S.", .streetAndNumber = "D-100 KARAYOLU CD.YAYLA MH.NO.70/C", .countryCode = "TR", .postalCode = "34949", .city = "TUZLA ISTANBUL"},
New cRelayHubAddress With {.addressType = "CN", .participantEORI = "EORI67890", .participantSubsidiaryNumber = "002", .companyName = "POLYNT COMPOSITES GERMANY GMBH", .streetAndNumber = "KIESELSTRASSE 2", .countryCode = "DE", .postalCode = "56357", .city = "MIEHLEN"}
}
}
.headerData = New cRelayHubHeaderData With {
.agentContact = New cRelayHubAgentContact With {
.contactPersonName = "AMANN",
.contactPersonPhoneNumber = "+49 123 456 789",
.contactPersonPosition = "Manager",
.contactPersonEmail = "a@example.com"
},
.declarantIsConsignee = True,
.representationRelationshipCode = 1, ' Integer
.inputTaxDeduction = True, ' Boolean
.procedureCodeRequested = "42", ' goodsStatus/costs entfernt
.transportMeansArrivalIdentity = "PB1552EC",
.transportMeansNationalityCode = "BG",
.previousAdministrativeReferenceType = "T1",
.previousAdministrativeReferenceNumber = "25TR160100001472M0",
.destinationFederalState = "07",
.destinationCountry = "DE",
.departureCountry = "TR"
},
.addresses = New List(Of cRelayHubAddress) From {
New cRelayHubAddress With {.addressType = "CZ", .participantEORI = "EORI12345", .participantSubsidiaryNumber = "001", .companyName = "SISECAM DIS TIC.A.S.", .streetAndNumber = "D-100 KARAYOLU CD.YAYLA MH.NO.70/C", .countryCode = "TR", .postalCode = "34949", .city = "TUZLA ISTANBUL"},
New cRelayHubAddress With {.addressType = "CN", .participantEORI = "EORI67890", .participantSubsidiaryNumber = "002", .companyName = "POLYNT COMPOSITES GERMANY GMBH", .streetAndNumber = "KIESELSTRASSE 2", .countryCode = "DE", .postalCode = "56357", .city = "MIEHLEN"}
}
}
}
Return request
}
}
Return req
End Function
End Class

View File

@@ -1,245 +1,199 @@
Imports Newtonsoft.Json
Imports System
Imports System.IO
Imports System.Net.Http
Imports System.Text
Imports System.Web
Imports Newtonsoft.Json
' NuGet: Newtonsoft.Json (>= 13.x)
Public Class cRelayHubToken
' === Token-Datenmodell ===
Private Class TokenState
Public AccessToken As String
Public RefreshToken As String
Public AccessExpiryUtc As DateTime
Public RefreshExpiryUtc As DateTime
End Class
' ======= KONFIG =======
Private Shared ReadOnly TOKEN_ENDPOINT As String =
"https://dev-kc.singlewindow.io/auth/realms/agsw/protocol/openid-connect/token"
' === Keycloak-Config ===
Private Shared ReadOnly KC_BASE As String = "https://dev-kc.singlewindow.io"
Private Shared ReadOnly KC_TOKEN_PATH As String = "/auth/realms/agsw/protocol/openid-connect/token"
Private Shared ReadOnly KC_CLIENT_ID As String = "agsw-admin"
Private Shared ReadOnly KC_USERNAME As String = "andreas.test@test.com"
Private Shared ReadOnly KC_PASSWORD As String = "Password.123"
Private Shared ReadOnly SKEW As TimeSpan = TimeSpan.FromSeconds(30)
Private Shared ReadOnly CLIENT_ID As String = "agsw-admin"
' === Cache/Persistenz ===
Private Shared _ts As TokenState = Nothing
Private Shared ReadOnly TOKEN_FILE As String = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"RelayHub", "token.cache"
)
Private Shared ReadOnly _lockObj As New Object()
' Gewünscht: Zugangsdaten in der Klasse definieren
Private Shared ReadOnly USERNAME As String = "andreas.test@test.com"
Private Shared ReadOnly PASSWORD As String = "Password.123"
' -------------- DPAPI via Reflection (keine Compile-Abhängigkeit!) --------------
Private Shared Function TryProtect(plain As Byte()) As Byte()
Try
' Versuche: Typen aus Assembly "System.Security" oder aus aktuellen Laufzeit-Assemblys laden
Dim dpType As Type = Type.GetType("System.Security.Cryptography.ProtectedData, System.Security", throwOnError:=False)
If dpType Is Nothing Then
dpType = Type.GetType("System.Security.Cryptography.ProtectedData", throwOnError:=False)
' Token-File pro Benutzer unter %AppData%
Private Shared ReadOnly StorePath As String =
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"RelayHub", "token.json")
' Sicherheitspuffer, bevor wir erneuern (Sekunden)
Private Const ExpirySkewSeconds As Integer = 60
' ======= ÖFFENTLICHE API =======
''' <summary>
''' Liefert einen gültigen Access Token (nie Leerstring).
''' </summary>
Public Shared Function GetAccessToken() As String
Dim store = LoadStore()
' 1) Wenn wir einen (noch) gültigen Token haben
If store IsNot Nothing AndAlso Not String.IsNullOrWhiteSpace(store.AccessToken) Then
If store.ExpiresAtUtc > DateTimeOffset.UtcNow.AddSeconds(ExpirySkewSeconds) Then
Return store.AccessToken
End If
Dim scopeType As Type = Type.GetType("System.Security.Cryptography.DataProtectionScope, System.Security", throwOnError:=False)
If dpType Is Nothing OrElse scopeType Is Nothing Then Return Nothing
Dim scopeObj As Object = [Enum].Parse(scopeType, "CurrentUser")
Dim mi = dpType.GetMethod("Protect", New Type() {GetType(Byte()), GetType(Byte()), scopeType})
If mi Is Nothing Then Return Nothing
Dim res = mi.Invoke(Nothing, New Object() {plain, Nothing, scopeObj})
Return TryCast(res, Byte())
Catch
Return Nothing
End Try
End Function
Private Shared Function TryUnprotect(protectedBytes As Byte()) As Byte()
Try
Dim dpType As Type = Type.GetType("System.Security.Cryptography.ProtectedData, System.Security", throwOnError:=False)
If dpType Is Nothing Then
dpType = Type.GetType("System.Security.Cryptography.ProtectedData", throwOnError:=False)
End If
Dim scopeType As Type = Type.GetType("System.Security.Cryptography.DataProtectionScope, System.Security", throwOnError:=False)
If dpType Is Nothing OrElse scopeType Is Nothing Then Return Nothing
Dim scopeObj As Object = [Enum].Parse(scopeType, "CurrentUser")
Dim mi = dpType.GetMethod("Unprotect", New Type() {GetType(Byte()), GetType(Byte()), scopeType})
If mi Is Nothing Then Return Nothing
Dim res = mi.Invoke(Nothing, New Object() {protectedBytes, Nothing, scopeObj})
Return TryCast(res, Byte())
Catch
Return Nothing
End Try
End Function
' -------------- Persistenz: bevorzugt DPAPI, Fallback Plain-File --------------
Private Shared Sub SaveTokenSecure(ts As TokenState)
Try
Dim dir = Path.GetDirectoryName(TOKEN_FILE)
If Not Directory.Exists(dir) Then Directory.CreateDirectory(dir)
Dim payload As String = String.Join(vbLf, {
ts.AccessToken,
ts.RefreshToken,
ts.AccessExpiryUtc.Ticks.ToString(),
ts.RefreshExpiryUtc.Ticks.ToString()
})
Dim plain = Encoding.UTF8.GetBytes(payload)
Dim protectedBytes = TryProtect(plain)
If protectedBytes IsNot Nothing Then
File.WriteAllBytes(TOKEN_FILE, protectedBytes)
Else
' Fallback (nur zu Testzwecken!)
File.WriteAllText(TOKEN_FILE, payload, Encoding.UTF8)
End If
Catch
' optional loggen
End Try
End Sub
Private Shared Function LoadTokenSecure() As TokenState
Try
If Not File.Exists(TOKEN_FILE) Then Return Nothing
' Zuerst versuchen wir, als DPAPI-Bytes zu lesen und zu entschlüsseln
Dim raw = File.ReadAllBytes(TOKEN_FILE)
Dim plain = TryUnprotect(raw)
Dim content As String
If plain Is Nothing Then
' Fallback: als Text lesen (falls zuvor ohne DPAPI gespeichert)
content = File.ReadAllText(TOKEN_FILE, Encoding.UTF8)
Else
content = Encoding.UTF8.GetString(plain)
End If
Dim s = content.Split({vbLf}, StringSplitOptions.None)
If s.Length < 4 Then Return Nothing
Return New TokenState With {
.AccessToken = s(0),
.RefreshToken = s(1),
.AccessExpiryUtc = New DateTime(Long.Parse(s(2)), DateTimeKind.Utc),
.RefreshExpiryUtc = New DateTime(Long.Parse(s(3)), DateTimeKind.Utc)
}
Catch
Return Nothing
End Try
End Function
Private Shared Sub ClearToken()
SyncLock _lockObj
_ts = Nothing
Try
If File.Exists(TOKEN_FILE) Then File.Delete(TOKEN_FILE)
Catch
End Try
End SyncLock
End Sub
' -------------- Utilities --------------
Private Shared Function UtcNow() As DateTime
Return DateTime.UtcNow
End Function
Private Shared Function IsAccessValid(ts As TokenState) As Boolean
Return ts IsNot Nothing AndAlso Not String.IsNullOrEmpty(ts.AccessToken) AndAlso UtcNow() < ts.AccessExpiryUtc - SKEW
End Function
Private Shared Function IsRefreshValid(ts As TokenState) As Boolean
Return ts IsNot Nothing AndAlso Not String.IsNullOrEmpty(ts.RefreshToken) AndAlso UtcNow() < ts.RefreshExpiryUtc - SKEW
End Function
' -------------- OAuth Flows --------------
Private Shared Function PasswordLogin() As TokenState
Dim http As New Chilkat.Http
Dim req As New Chilkat.HttpRequest
req.HttpVerb = "POST"
req.Path = KC_TOKEN_PATH
req.AddParam("grant_type", "password")
req.AddParam("username", KC_USERNAME)
req.AddParam("password", KC_PASSWORD)
req.AddParam("client_id", KC_CLIENT_ID)
req.AddParam("scope", "openid offline_access")
req.AddHeader("Content-Type", "application/x-www-form-urlencoded")
Dim resp = http.PostUrlEncoded(KC_BASE, req)
If resp Is Nothing Then Throw New Exception("Token-Request fehlgeschlagen: " & http.LastErrorText)
If resp.StatusCode <> 200 Then Throw New Exception("Password-Grant fehlgeschlagen: " & resp.StatusCode & " - " & resp.BodyStr)
Dim json As New Chilkat.JsonObject : json.Load(resp.BodyStr)
Dim access = json.StringOf("access_token")
Dim refresh = json.StringOf("refresh_token")
Dim exp = Math.Max(60, json.IntOf("expires_in"))
Dim rexp = Math.Max(300, json.IntOf("refresh_expires_in"))
Dim ts = New TokenState With {
.AccessToken = access,
.RefreshToken = refresh,
.AccessExpiryUtc = UtcNow().AddSeconds(exp),
.RefreshExpiryUtc = UtcNow().AddSeconds(rexp)
}
SaveTokenSecure(ts)
Return ts
End Function
Private Shared Function RefreshLogin(oldTs As TokenState) As TokenState
If oldTs Is Nothing OrElse String.IsNullOrEmpty(oldTs.RefreshToken) Then
Throw New Exception("Kein gültiger Refresh-Token vorhanden.")
End If
Dim http As New Chilkat.Http
Dim req As New Chilkat.HttpRequest
req.HttpVerb = "POST"
req.Path = KC_TOKEN_PATH
req.AddParam("grant_type", "refresh_token")
req.AddParam("refresh_token", oldTs.RefreshToken)
req.AddParam("client_id", KC_CLIENT_ID)
req.AddHeader("Content-Type", "application/x-www-form-urlencoded")
' 2) Versuche Refresh, falls vorhanden
If store IsNot Nothing AndAlso Not String.IsNullOrWhiteSpace(store.RefreshToken) Then
store = TryRefresh(store.RefreshToken)
End If
Dim resp = http.PostUrlEncoded(KC_BASE, req)
If resp Is Nothing Then Throw New Exception("Refresh-Request fehlgeschlagen: " & http.LastErrorText)
If resp.StatusCode <> 200 Then Throw New Exception("Refresh fehlgeschlagen: " & resp.StatusCode & " - " & resp.BodyStr)
' 3) Fallback: Password-Grant Login
If store Is Nothing OrElse String.IsNullOrWhiteSpace(store.AccessToken) Then
store = PasswordLogin()
End If
Dim json As New Chilkat.JsonObject : json.Load(resp.BodyStr)
Dim access = json.StringOf("access_token")
Dim refresh = json.StringOf("refresh_token") ' Rotation beachten
Dim exp = Math.Max(60, json.IntOf("expires_in"))
Dim rexp = Math.Max(300, json.IntOf("refresh_expires_in"))
' Validierung
If store Is Nothing OrElse String.IsNullOrWhiteSpace(store.AccessToken) Then
Throw New ApplicationException("Konnte keinen gültigen Access Token erhalten (leer).")
End If
Dim ts = New TokenState With {
.AccessToken = access,
.RefreshToken = refresh,
.AccessExpiryUtc = UtcNow().AddSeconds(exp),
.RefreshExpiryUtc = UtcNow().AddSeconds(rexp)
' Persistieren & zurück
SaveStore(store)
Return store.AccessToken
End Function
' ======= INTERNES =======
Private Shared Function PasswordLogin() As TokenStore
Dim form = New Dictionary(Of String, String) From {
{"grant_type", "password"},
{"username", USERNAME},
{"password", PASSWORD},
{"client_id", CLIENT_ID}
}
SaveTokenSecure(ts)
Return ts
Dim resp = PostForm(form)
Dim token = ParseTokenResponse(resp)
Return token
End Function
' -------------- Public API --------------
Public Shared Function GetValidAccessToken() As String
SyncLock _lockObj
If _ts Is Nothing Then _ts = LoadTokenSecure()
Private Shared Function TryRefresh(refreshToken As String) As TokenStore
Try
Dim form = New Dictionary(Of String, String) From {
{"grant_type", "refresh_token"},
{"refresh_token", refreshToken},
{"client_id", CLIENT_ID}
}
Dim resp = PostForm(form)
Dim token = ParseTokenResponse(resp)
If IsAccessValid(_ts) Then
Return _ts.AccessToken
' Nur speichern, wenn ein Access Token vorhanden ist
If Not String.IsNullOrWhiteSpace(token.AccessToken) Then
SaveStore(token)
Return token
End If
Catch ex As Exception
' Ignorieren -> fällt auf PasswordLogin zurück
End Try
If IsRefreshValid(_ts) Then
Try
_ts = RefreshLogin(_ts)
Return _ts.AccessToken
Catch
' fällt durch auf PasswordLogin
End Try
End If
_ts = PasswordLogin()
Return _ts.AccessToken
End SyncLock
Return Nothing
End Function
Public Shared Sub ResetTokenCache()
ClearToken()
Private Shared Function PostForm(formFields As Dictionary(Of String, String)) As String
Using client As New HttpClient()
Using content As New FormUrlEncodedContent(formFields)
Dim response = client.PostAsync(TOKEN_ENDPOINT, content).Result
Dim body = response.Content.ReadAsStringAsync().Result
If Not response.IsSuccessStatusCode Then
Throw New ApplicationException(
$"Token-Endpoint Fehler ({CInt(response.StatusCode)}): {body}")
End If
Return body
End Using
End Using
End Function
Private Shared Function ParseTokenResponse(json As String) As TokenStore
Dim r = JsonConvert.DeserializeObject(Of TokenResponse)(json)
If r Is Nothing OrElse String.IsNullOrWhiteSpace(r.access_token) Then
Throw New ApplicationException("Token-Antwort ungültig oder ohne access_token.")
End If
Dim now = DateTimeOffset.UtcNow
Dim expiresIn = If(r.expires_in <= 0, 3600, r.expires_in) ' Fallback 1h
Dim store = New TokenStore With {
.AccessToken = r.access_token.Trim(),
.RefreshToken = If(r.refresh_token, String.Empty),
.ExpiresAtUtc = now.AddSeconds(expiresIn)
}
' === Konsolen-Ausgabe ===
Console.WriteLine("== Neuer Token erhalten ==")
Console.WriteLine("Access Token: " & store.AccessToken)
Console.WriteLine("Refresh Token: " & store.RefreshToken)
Console.WriteLine("Gültig bis UTC: " & store.ExpiresAtUtc.ToString("yyyy-MM-dd HH:mm:ss"))
Return store
End Function
' ======= PERSISTENZ =======
Private Shared Function LoadStore() As TokenStore
Try
If File.Exists(StorePath) Then
Dim json = File.ReadAllText(StorePath, Encoding.UTF8)
Dim s = JsonConvert.DeserializeObject(Of TokenStore)(json)
' Ausgabe in Konsole
If s IsNot Nothing Then
Console.WriteLine("== Token aus Datei geladen ==")
Console.WriteLine("Access Token: " & (If(String.IsNullOrWhiteSpace(s.AccessToken), "<leer>", s.AccessToken)))
Console.WriteLine("Refresh Token: " & (If(String.IsNullOrWhiteSpace(s.RefreshToken), "<leer>", s.RefreshToken)))
Console.WriteLine("Gültig bis UTC: " & s.ExpiresAtUtc.ToString("yyyy-MM-dd HH:mm:ss"))
End If
Return s
Else
' Datei existiert nicht -> Info ausgeben
Console.WriteLine("Keine Token-Datei vorhanden, neuer Login erforderlich.")
End If
Catch ex As Exception
Console.WriteLine("Fehler beim Laden der Token-Datei: " & ex.Message)
' Datei defekt? -> Ignorieren, neu holen
End Try
Return Nothing
End Function
Private Shared Sub SaveStore(store As TokenStore)
Try
Dim dir = Path.GetDirectoryName(StorePath)
If Not Directory.Exists(dir) Then Directory.CreateDirectory(dir)
' Datei immer neu schreiben/überschreiben
Dim json = JsonConvert.SerializeObject(store, Formatting.Indented)
File.WriteAllText(StorePath, json, Encoding.UTF8)
Console.WriteLine("Token-Datei gespeichert: " & StorePath)
Catch ex As Exception
Console.WriteLine("Fehler beim Speichern der Token-Datei: " & ex.Message)
End Try
End Sub
End Class
' ======= DTOs =======
Private Class TokenResponse
Public Property access_token As String
Public Property expires_in As Integer
Public Property refresh_expires_in As Integer
Public Property refresh_token As String
Public Property token_type As String
Public Property scope As String
' … weitere Felder bei Bedarf
End Class
Private Class TokenStore
Public Property AccessToken As String
Public Property RefreshToken As String
Public Property ExpiresAtUtc As DateTimeOffset
End Class
End Class