From 14c5daff20507b52178b6c155e8d0437873ebbba Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Thu, 1 Jun 2017 08:06:20 +0000 Subject: [PATCH] Aktueller Stand Ende Mai vor Besuch in Bremen --- ENI-2/ENI2/ENI2/App.config | 9 +- ENI-2/ENI2/ENI2/Controls/EditWindowBase.cs | 6 + .../ENI2/ENI2/Controls/LocodeControl.xaml.cs | 126 ++++++++++++------ .../OverViewDetailControl.xaml.cs | 25 +++- ENI-2/ENI2/ENI2/ENI2.csproj | 2 +- .../ENI2/ENI2/EditControls/VisitIdDialog.xaml | 6 +- .../ENI2/EditControls/VisitIdDialog.xaml.cs | 45 ++++++- ENI-2/ENI2/ENI2/MainWindow.xaml.cs | 4 +- .../ENI2/Properties/Resources.Designer.cs | 18 +++ ENI-2/ENI2/ENI2/Properties/Resources.resx | 6 + .../ENI2/ENI2/Properties/Settings.Designer.cs | 29 ++-- ENI-2/ENI2/ENI2/Properties/Settings.settings | 9 +- ENI-2/ENI2/ENI2/SucheControl.xaml.cs | 3 + Stundensheet.xlsx | Bin 30705 -> 30737 bytes nsw/Source/bsmd.database/MessageCore.cs | 15 ++- nsw/Source/bsmd.database/ReportingParty.cs | 18 ++- 16 files changed, 241 insertions(+), 80 deletions(-) diff --git a/ENI-2/ENI2/ENI2/App.config b/ENI-2/ENI2/ENI2/App.config index bc6cfbfc..8c9908cc 100644 --- a/ENI-2/ENI2/ENI2/App.config +++ b/ENI-2/ENI2/ENI2/App.config @@ -16,15 +16,18 @@ - - Data Source=192.168.2.12;Initial Catalog=nsw;Uid=dfuser;Pwd=dfpasswd;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False - True http://heupferd/bsmd.LockingService/LockingService.svc + + 60 + + + Data Source=192.168.2.12;Initial Catalog=nsw;Uid=dfuser;Pwd=dfpasswd;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False + diff --git a/ENI-2/ENI2/ENI2/Controls/EditWindowBase.cs b/ENI-2/ENI2/ENI2/Controls/EditWindowBase.cs index 6d39ef86..b0a62657 100644 --- a/ENI-2/ENI2/ENI2/Controls/EditWindowBase.cs +++ b/ENI-2/ENI2/ENI2/Controls/EditWindowBase.cs @@ -45,6 +45,12 @@ namespace ENI2.Controls if (this.shouldCancel) e.Cancel = true; } + protected void EnableOK(bool enabled) + { + var okButton = (Button)Template.FindName("buttonOK", this); + okButton.IsEnabled = enabled; + } + protected override void OnSourceInitialized(EventArgs e) { base.OnSourceInitialized(e); diff --git a/ENI-2/ENI2/ENI2/Controls/LocodeControl.xaml.cs b/ENI-2/ENI2/ENI2/Controls/LocodeControl.xaml.cs index f2fc7481..f420030a 100644 --- a/ENI-2/ENI2/ENI2/Controls/LocodeControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/Controls/LocodeControl.xaml.cs @@ -21,6 +21,7 @@ namespace ENI2.Controls { private List _locodeList = new List(); public event PropertyChangedEventHandler PropertyChanged; + private bool _comboSelect; public LocodeControl() { @@ -52,9 +53,9 @@ namespace ENI2.Controls { // Get instance of current control from sender // and property value from e.NewValue - - if(e.NewValue != null) - ((LocodeControl)sender).SelectedItem = e.NewValue.ToString().Substring(0,5); + + if (e.NewValue != null) + ((LocodeControl)sender).SelectedItem = e.NewValue.ToString();//.Substring(0,5); } @@ -63,11 +64,18 @@ namespace ENI2.Controls get { return this.comboBoxLocode.SelectedItem as string; } set { this._locodeList.Clear(); - this._locodeList.Add(value); - this.comboBoxLocode.ItemsSource = this.LocodeList; - LocodeState locodeState = LocodeDB.PortNameFromLocode(value).IsNullOrEmpty() ? LocodeState.INVALID : LocodeState.OK; + + string portName = LocodeDB.PortNameFromLocode(value); + LocodeState locodeState = portName.IsNullOrEmpty() ? LocodeState.INVALID : LocodeState.OK; this.SetLocodeStateImage(this.imageLocodeState, locodeState); - this.comboBoxLocode.SelectedItem = value; + + if (locodeState == LocodeState.OK) + { + string valString = string.Format("{0} - {1}", value, portName); + this._locodeList.Add(valString); + this.comboBoxLocode.ItemsSource = this.LocodeList; + this.comboBoxLocode.SelectedItem = valString; + } } } @@ -85,46 +93,65 @@ namespace ENI2.Controls #region event handler private void ComboBox_TextChanged(object sender, RoutedEventArgs e) - { - if (this.comboBoxLocode.Text.Length > 4) - { - this.LocodeList.Clear(); + { + bool locodeFound = false; + this.comboBoxLocode.ItemsSource = null; - // check if actual locode - if (this.comboBoxLocode.Text.Length == 5) + if (this._comboSelect) + { + this._comboSelect = false; + this.SetLocodeStateImage(this.imageLocodeState, LocodeState.OK); + } + + else + { + + if (this.comboBoxLocode.Text.Length > 4) { - string directLocode = this.comboBoxLocode.Text.Trim().ToUpper(); - bool isLocode = !LocodeDB.PortNameFromLocode(directLocode).IsNullOrEmpty(); - if (isLocode) + this.LocodeList.Clear(); + this.LocodeValue = null; + + // check if actual locode + if (this.comboBoxLocode.Text.Length == 5) { - this.comboBoxLocode.Text = directLocode; - this.LocodeList.Add(directLocode); - this.SetLocodeStateImage(this.imageLocodeState, LocodeState.OK); - return; + string directLocode = this.comboBoxLocode.Text.Trim().ToUpper(); + string portname = LocodeDB.PortNameFromLocode(directLocode); + bool isLocode = !portname.IsNullOrEmpty(); + if (isLocode) + { + this.comboBoxLocode.Text = string.Format("{0} - {1}", directLocode, portname); + this.LocodeList.Add(string.Format("{0} - {1}", directLocode, portname)); + this.SetLocodeStateImage(this.imageLocodeState, LocodeState.OK); + this.LocodeValue = directLocode; + locodeFound = true; + } + } + + if (!locodeFound) + { + // assume this is a harbour name typed out.. + List locodeEntries = LocodeDB.AllLocodesForCityNameAsEntries("%" + this.comboBoxLocode.Text + "%"); + foreach (LocodeDB.LocodeEntry entry in locodeEntries) + this.LocodeList.Add(string.Format("{0} - {1}", entry.Locode, entry.Name)); + + if (this.LocodeList.Count == 1) + { + this.comboBoxLocode.SelectedItem = this.LocodeList[0]; + this.SetLocodeStateImage(this.imageLocodeState, LocodeState.OK); + this.LocodeValue = this.LocodeList[0]; + } + else if (this.LocodeList.Count == 0) + { + this.SetLocodeStateImage(this.imageLocodeState, LocodeState.INVALID); + } + else + { + this.SetLocodeStateImage(this.imageLocodeState, LocodeState.AMBIGUOUS); + } + + this.comboBoxLocode.ItemsSource = this.LocodeList; } } - - // assume this is a harbour name typed out.. - List locodeEntries = LocodeDB.AllLocodesForCityNameAsEntries(this.comboBoxLocode.Text + "%"); - foreach (LocodeDB.LocodeEntry entry in locodeEntries) - this.LocodeList.Add(string.Format("{0} - {1}", entry.Locode, entry.Name)); - - if (this.LocodeList.Count == 1) - { - this.comboBoxLocode.SelectedItem = this.LocodeList[0]; - this.SetLocodeStateImage(this.imageLocodeState, LocodeState.OK); - } - else if (this.LocodeList.Count == 0) - { - this.SetLocodeStateImage(this.imageLocodeState, LocodeState.INVALID); - } - else - { - this.SetLocodeStateImage(this.imageLocodeState, LocodeState.AMBIGUOUS); - } - - this.comboBoxLocode.ItemsSource = this.LocodeList; - } this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("LocodeList")); @@ -132,7 +159,20 @@ namespace ENI2.Controls private void comboBoxLocode_SelectionChanged(object sender, SelectionChangedEventArgs e) { - this.LocodeValue = this.SelectedItem; + if (this.SelectedItem == null) + this.LocodeValue = null; + else + { + if (this.SelectedItem.Length > 5) + { + this.LocodeValue = this.SelectedItem.Substring(0, 5); + this._comboSelect = true; + } + else + { + this.LocodeValue = this.SelectedItem; + } + } } #endregion diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/OverViewDetailControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailViewControls/OverViewDetailControl.xaml.cs index c199023c..3ca6e0e2 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/OverViewDetailControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/DetailViewControls/OverViewDetailControl.xaml.cs @@ -367,18 +367,31 @@ namespace ENI2.DetailViewControls bool? statusFlag = DBManager.Instance.GetMessageCoreQueryStatusFlag(this.Core.Id.Value); if (statusFlag ?? true) { - // not yet.. (calling ui thread async) - this.Dispatcher.BeginInvoke(new Action(() => - { - this.labelBusyTimeElapsed.Content = string.Format(Properties.Resources.textSecondsElapsed, (DateTime.Now - _startStatusCheck).TotalSeconds.ToString("N0")); - })); + double elapsedSec = (DateTime.Now - _startStatusCheck).TotalSeconds; + if (elapsedSec < Properties.Settings.Default.RequestTimeout) + { + // not yet.. (calling ui thread async) + this.Dispatcher.BeginInvoke(new Action(() => + { + this.labelBusyTimeElapsed.Content = string.Format(Properties.Resources.textSecondsElapsed, elapsedSec.ToString("N0")); + })); + } + else + { + this._checkStatusTimer.Stop(); + this.Dispatcher.BeginInvoke(new Action(() => + { + MessageBox.Show(Properties.Resources.textRequestTimedOut, Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Warning); + this.busyIndicator.IsBusy = false; + })); + } } else { this._checkStatusTimer.Stop(); this.Dispatcher.BeginInvoke(new Action(() => - { + { this.busyIndicator.IsBusy = false; this.OnRequestReload(); })); diff --git a/ENI-2/ENI2/ENI2/ENI2.csproj b/ENI-2/ENI2/ENI2/ENI2.csproj index fe581afc..479b6e41 100644 --- a/ENI-2/ENI2/ENI2/ENI2.csproj +++ b/ENI-2/ENI2/ENI2/ENI2.csproj @@ -35,7 +35,7 @@ 3.5.1.0 true publish.html - 0 + 2 3.6.3.%2a false true diff --git a/ENI-2/ENI2/ENI2/EditControls/VisitIdDialog.xaml b/ENI-2/ENI2/ENI2/EditControls/VisitIdDialog.xaml index 1b8efc25..d675b55f 100644 --- a/ENI-2/ENI2/ENI2/EditControls/VisitIdDialog.xaml +++ b/ENI-2/ENI2/ENI2/EditControls/VisitIdDialog.xaml @@ -8,7 +8,7 @@ xmlns:p="clr-namespace:ENI2.Properties" xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" mc:Ignorable="d" - Title="{x:Static p:Resources.textNewVisitTransitId}" Height="192" Width="300" WindowStyle="SingleBorderWindow" Background="AliceBlue" ResizeMode="NoResize"> + Title="{x:Static p:Resources.textNewVisitTransitId}" Height="192" Width="350" WindowStyle="SingleBorderWindow" Background="AliceBlue" ResizeMode="NoResize"> @@ -18,7 +18,7 @@ - + diff --git a/ENI-2/ENI2/ENI2/EditControls/VisitIdDialog.xaml.cs b/ENI-2/ENI2/ENI2/EditControls/VisitIdDialog.xaml.cs index 9e498a3a..38723e2d 100644 --- a/ENI-2/ENI2/ENI2/EditControls/VisitIdDialog.xaml.cs +++ b/ENI-2/ENI2/ENI2/EditControls/VisitIdDialog.xaml.cs @@ -23,9 +23,11 @@ namespace ENI2.EditControls } private void VisitIdDialog_Loaded(object sender, RoutedEventArgs e) - { + { this.OKClicked += VisitIdDialog_OKClicked; - } + this.EnableOK(false); + this.locodePoC.PropertyChanged += LocodePoC_PropertyChanged; + } private void VisitIdDialog_OKClicked() { @@ -56,16 +58,51 @@ namespace ENI2.EditControls private void doubleUpDownIMO_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) { bool hasValue = (doubleUpDownIMO.Value.HasValue && doubleUpDownIMO.Value > 0); - doubleUpDownENI.IsReadOnly = hasValue; + doubleUpDownENI.IsReadOnly = hasValue; + this.CheckComplete(); } private void doubleUpDownENI_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) { bool hasValue = (doubleUpDownENI.Value.HasValue && doubleUpDownENI.Value > 0); - doubleUpDownIMO.IsReadOnly = hasValue; + doubleUpDownIMO.IsReadOnly = hasValue; + this.CheckComplete(); + } + + private void LocodePoC_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) + { + this.CheckComplete(); + } + + private void datePickerETA_SelectedDateChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) + { + this.CheckComplete(); } #endregion + #region input validation + + private void CheckComplete() + { + bool isComplete = true; + + isComplete &= this.datePickerETA.SelectedDate.HasValue; // ETA + + bool imo_OR_eni = ((doubleUpDownIMO.Value.HasValue) && (doubleUpDownIMO.Value > 1000000) && (doubleUpDownIMO.Value < 9999999)) || + ((doubleUpDownENI.Value.HasValue) && (doubleUpDownENI.Value > 100000) && (doubleUpDownENI.Value < 99999999)); + + isComplete &= imo_OR_eni; + + string locode = this.locodePoC.LocodeValue; + bool validLocode = (locode != null) && (locode.Length == 5) && (locode.StartsWith("DE") || locode.StartsWith("DK") || locode.Equals("ZZNOK")); + + isComplete &= validLocode; + + this.EnableOK(isComplete); + } + + #endregion + } } diff --git a/ENI-2/ENI2/ENI2/MainWindow.xaml.cs b/ENI-2/ENI2/ENI2/MainWindow.xaml.cs index 53ec3840..4ec53ebb 100644 --- a/ENI-2/ENI2/ENI2/MainWindow.xaml.cs +++ b/ENI-2/ENI2/ENI2/MainWindow.xaml.cs @@ -40,7 +40,7 @@ namespace ENI2 #region Construction public MainWindow() - { + { Thread.Sleep(500); InitializeComponent(); App.SplashScreen.ShowMessage("loading.."); @@ -104,6 +104,8 @@ namespace ENI2 private void Window_Loaded(object sender, RoutedEventArgs e) { + if (Debugger.IsAttached) this.busyIndicator.IsBusy = false; // not for me :-P + this.dbConnected = DBManager.Instance.Connect(Properties.Settings.Default.ConnectionString); labelGeneralStatus.Text = dbConnected ? "DB Connected" : "DB Connect failed"; labelVersion.Text = "V. " + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; diff --git a/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs b/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs index b972d54a..f5648310 100644 --- a/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs +++ b/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs @@ -616,6 +616,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Information. + /// + public static string textCaptionInformation { + get { + return ResourceManager.GetString("textCaptionInformation", resourceCulture); + } + } + /// /// Looks up a localized string similar to Code (NST). /// @@ -1300,6 +1309,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Request timed out. + /// + public static string textRequestTimedOut { + get { + return ResourceManager.GetString("textRequestTimedOut", resourceCulture); + } + } + /// /// Looks up a localized string similar to Save. /// diff --git a/ENI-2/ENI2/ENI2/Properties/Resources.resx b/ENI-2/ENI2/ENI2/Properties/Resources.resx index 3be95025..dff364b8 100644 --- a/ENI-2/ENI2/ENI2/Properties/Resources.resx +++ b/ENI-2/ENI2/ENI2/Properties/Resources.resx @@ -628,4 +628,10 @@ Detail info for: {0} + + Information + + + Request timed out + \ No newline at end of file diff --git a/ENI-2/ENI2/ENI2/Properties/Settings.Designer.cs b/ENI-2/ENI2/ENI2/Properties/Settings.Designer.cs index 8cef7ee2..f661ccb8 100644 --- a/ENI-2/ENI2/ENI2/Properties/Settings.Designer.cs +++ b/ENI-2/ENI2/ENI2/Properties/Settings.Designer.cs @@ -23,16 +23,6 @@ namespace ENI2.Properties { } } - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("Data Source=(localdb)\\Projects;Initial Catalog=nsw;Integrated Security=True;Conne" + - "ct Timeout=30;Encrypt=False;TrustServerCertificate=False")] - public string ConnectionString { - get { - return ((string)(this["ConnectionString"])); - } - } - [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("")] @@ -62,5 +52,24 @@ namespace ENI2.Properties { return ((string)(this["LockingServerAddress"])); } } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("60")] + public int RequestTimeout { + get { + return ((int)(this["RequestTimeout"])); + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("Data Source=(localdb)\\Projects;Initial Catalog=nsw;Integrated Security=True;Conne" + + "ct Timeout=30;Encrypt=False;TrustServerCertificate=False")] + public string ConnectionString { + get { + return ((string)(this["ConnectionString"])); + } + } } } diff --git a/ENI-2/ENI2/ENI2/Properties/Settings.settings b/ENI-2/ENI2/ENI2/Properties/Settings.settings index dc433b30..e5d7c842 100644 --- a/ENI-2/ENI2/ENI2/Properties/Settings.settings +++ b/ENI-2/ENI2/ENI2/Properties/Settings.settings @@ -2,9 +2,6 @@ - - Data Source=(localdb)\Projects;Initial Catalog=nsw;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False - @@ -14,5 +11,11 @@ http://heupferd/bsmd.LockingService/LockingService.svc + + 60 + + + Data Source=(localdb)\Projects;Initial Catalog=nsw;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False + \ No newline at end of file diff --git a/ENI-2/ENI2/ENI2/SucheControl.xaml.cs b/ENI-2/ENI2/ENI2/SucheControl.xaml.cs index f000315d..24b18e8e 100644 --- a/ENI-2/ENI2/ENI2/SucheControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/SucheControl.xaml.cs @@ -97,6 +97,9 @@ namespace ENI2 } + // 31.5.17: Komische Display ETA Vorsortierung + this.anmeldungen.Sort(); + // ergebnis anzeigen this.dataGrid.ItemsSource = this.anmeldungen; this.searchResultLabel.Content = (this.anmeldungen.Count > 0) ? string.Format("{0} results found.", this.anmeldungen.Count) : "no results"; diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index 6e603dc0bca881ed7082e36f61678b09147dba42..9a1b515552893bb3c2227102d145adc7ba3df5f3 100644 GIT binary patch delta 19531 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

JwF`Q<3r+n4#UHZZcy=>FfS&j7qMeWo^YfY77 z*^)rp5d!r`{~<1aiGdQteiE(nKE(d^=<&aZw~DrFd$UkaW9F@fqN&KV8mXZ}6~iAW z!5P@DrsKxb;47)YjX;)bzAskH*%}3J&WnpPa6punZpT5cZ*!>>`b4WSz#Dc_lE603~m z-oYf~LNfk1Q1aBHtW~b=ahT;GIJ^i>YRITpByv%33LzDIA1%wY@YC;*eT{q}Ip#~FUYw+`iLH@3O)fV5 z!0z($rgN3nRtHS+gfs6HILFrN^zsH8(X7f@82~Kh1ngiud}lpl%4z>H{+XrGVK}^% zN@4QcnpzeHu=EowUiMcfyX><#?MD`ql~3l-;3KS71|K1=xy>YDM3SSis0BMcv8hd) zf21$0#v)}jlvQmHN$>eKr_*&R-i!bnJ+ZM(n`q>}pxK}YpHgPVhG8hFhOyqG9zf?T zcujZGc#g>07_{VJBk-S(L$^FQ?i;55jWo1rgZj@ARp<0qcoc)d!=&>Pg0Vs)0g`UyC3YTbW`&zVKY&QHr zD=%Wn9QEgdlI`7mtx{EmH#W7eOtDOZi;i$i4oea4TXf}mkps}PKTmW?2U3j-x$i+E z7CY%`(oy5iGz%5?(QQoUxRcUYJM54gVfk*(=R~2ODs|lXfP@LW{9&VMOU*hx6!vzg zNO4wEOyvX`-cd%BZet08qHoa%9PT3!y>BpfM@#osH01{!MGSOn0n&knu-?jDLQR+ zq+v<)j+gGfct+Y|Bk39L%RFOn2$aRxQ2V zG7c5=44XbYGoCU@-6tgm)WW$Y502j;`4SFU6#1ffL76|-v^9

RWP$$PjT{#?jn4iad%U1!x$yypsXo4OZ zGc@8dgZK1lhjKIqTz?6eFSXT*>GbnwqQ7gl*E5$J<;wAc*TC8-6i|c>OG2D-234wj zVweK@!3xkd6Z%i$z>eHz+t#aPr%aXKPDhPS3x!#Ym#(>mxTlJ@#r;F%hvou4uWk<^ z14Df|Ev1kQkdN9+EMYTYYFq6i=&DI|T#6@=ZxYp8nxict*RgQbb5>iK?twkzMD9%Q z>{@woE?Q(vMYy79IQ2yEp8F*<$x&@=0Vpn_!=YLJ8(X-xCxZ&36rKmxQCL2ZsX@r; zll`H3m^^WmC(Sfj|M&yc2OM0LK_csa+Q<|H?*;#NnOBTL`D`X~4p-k2y7l%`Y=!+r z?FiJ4Sog{q3k$Y#9mM1c5%>pvlIMMg2Giut;}4|U^*s+%n2EMt5^$efJ^(yWaVa8_ z5Ko;!XL~O;>5YP>*1tzki4lF=L#`vCtfnP}PV}L%=##p~o{d_BXZ{W{&blsO4dk%| zZCSE|jVNY8dB_f3EfeL_%dyU||7CeB*4WtQA17wS+dHFQt=tt{OYc;LFkC@_**7+_ zBuX{THQ#qjD%Wo9xud*z2*hZQs|b%h4ICmXt;*YP@}q3@Mjm?m6;+^WFYAdcQoO6_L(w?d$9eWW)TeuSApa_t zqs|KF9voU8aS*$t91qFVAm+5}z-ZD5JsM{7#@c_1O9!IQX=hVirB88eVQ6O&do!T* zW>K*Hvxc6L9uOD;C4K11TXbd1Q-paIsP@?nQi{xs7dJss7kM)Ht7ZvX@7`2t%wt+Y z?~wqZL2+rqmhyLZ@3hhE$PzCZ3NrB`rGus{A??#l+%7`hFZkU&i9e*yWlj^<^&gW; zjpp_y$O)Ej*AEq73hW!L9S#e;ELhhn;&UyQ8G@Qux;gU za}b7if!7%G675sPwf8r?O~Q8w$IZl)y@i0#-OurKy7k#te7B4UP`T&@c-4!v4i)a0I9lUvR*0xs^QW4E;W(3e*3lz^ zhZ`GuPc;Xt-SJ_94Bpf(>rUY@#78h-qi1^Uw$`iX$po8iRW9aIJMNz!=FvL33 zw^2muD+WLb7*Nq0x#XO>}0GXjT3-8?$af-?%{h@?uBw#T^!(ymB1 zI1Gmgv!c2sLpOTk)JM)qKdE(;8_wDFThwHhtCckEXb?s`p5zku`Vz}PDc9PzJehmS z*leH{aV{UH(Yx2&tH$;_xhE%>CnQ(-cnX+#K|3RKcrKsS-h2j{r=UblqSncWXZ0g# z2cSnzJ9l)8H7{KRCS$lE20vRGW#J6&BAR1G8D?{VDLzjX@+Rm5r39a@K>^g}$2vWT z)T?bt8ajwZOs~$WchMgDl+?clO74Rlfm~gztQW?AGMyR^O?r;|f9=^Nb;l@W)EF?a z-u#Ndz5GQ@_`9<@((l+-{W;QVCL}0w$`+87ceT2CRh4Y*o2=R&HZfSm+0=TrYZX(r zeX7o7ZH)>KSfs5o7_!uP_E8{DqrH9YXs-I{(|muE(g(7kL-lFCkpXS=f!1#?GsV{H z-4#<(m#YRrBGc6cmpI#ky4HmQofKy#vH9nL$Nh>Gm&Gs`99Ligt6JG>2Txo)kWNHz1P=qj~2;!Obj=GAhHtnX#RUl9seF(QI5fi%bk zU)<%1{c({jt96s6H?!mdKF3dQTKd{b7Vbm`oF=cTtR>7X<`+y2X1~C4*AkF>JcgPt(Wx>S$)XyrYx6G-Jj#%T zN?up9v`qX_anULb7tb!H(1SP!sf{K=_ff9h)z(a!&4!_xjG@ zD^h;k`-y+JQzTl&*6~CfgQv-bMv$NZf@)tVBsX}o?X$ue{6L~07x_20;OvNMn7N|C z8KkuAbC(l#E0<#G^@8zi$_465DFf-q!vfNM?2j;W6x2_i$d1OvqKfnD zlK3?&{g`JuDN1^#2wNaqRl>;wuU3?F4!Bau{}4${7R$^T z)zmW>U^EV~kKHjWQb6fRwA}L|Tq&K)L{ZBZC%b9wV3C+bv~6=HE$Ui6AyG`zuw&9b z5qD+knLP>>dx1Q8B4|;)D2S1$q1Ql|5$}O=&Jnsyc?_<|Sx@{$VU(^>0!JRK)>Gej z1Qn9>?oX`iRJ4)G3{<#=WQZvMF7Q_FBVxAb6LoWu89>2Yld)}M()3SDhbS#OP0PM- zW%eD#$9W)QPyqa;wkuNtnpPb;yL64yHI#AjfFj?3zwyQ-^%Bk&+RR7#6xq;q{R~3x zfgunf=UU}|V!I8rn@iqrR2H+1XS&slWnQ+f2e?_$o`832rrf4xMu8!5aWl-V;M0|y zWHV5HQ^)@8qa^x5-HUD)V>PFcbF^ZBHyWRd z&$0ma>`QR&?}aJe0=YU;t`2jzNR15wt|@^hTiN`NTE||zQ89?XyujVi6LS8sh1CSe zk+*xf0f6&(2{Z`cq2%LmeTr~|vF#+KxpbK&+@DL%LTZuNs2W3=en9BF7Cy1TGdS?# zjf)8f8tZDl<^BoKpi3(9??Z+AxO%8g46lqz z85tNWbG0mS`<(c2MxOwb&IA{@lu;^{;>jVTSqFpVKg$l++1W1w7u^!JP(Z<(rh%&w z+SpsaSqcJDz%W~@;<6Q+nC?JT!-07@v6uP&EbE=P0qlwHY@?Z0h90z;D@~Ka$s#!9 z?;-+kPoCn9lN&#{GMQt7h0dM|uIQ>2e5aoZP;zb4+B(i#;T}S)N5+9-Z9@gukE$n` znpk`_XYD^JhoH+U_AcRoi{p$f^Dx29{URBdqQ^%L5lLEqJBLqVtK1;10vMk7AO6RSviXPNVUEnj-Wa&d$5l$Acb%m5z5Dyd8PU% z6#7H6hBxymAuOou91bxd3ADUX7h9?o3~gOmvoudu)g!@KIdcuH!fbVt9_+i+j~yiX zWg)F-CE2fEX}fuWZCx#^{HHVIEplWJFY8Ena$~KPFIsF+w>T|TR`O@s8arsAdbbv9 zDL48LkKkO$G1k(_iM3Wn%|$v)#-6n~KH9R);FdXfK#480NCm%Vn%jES!^QE)@l49~ z%yo)a8Cx09+~mpnZ1d_*c)Zk~B)DGKJ2<-^ZVwkjE^4DRVUTLF`K4=b;+!10eoZR$ z<$CXO-{HiTEVJ=QGx2*T5mOsu+#tR(vAyV5WGeyhwqZV56^NMq4MZzzD+>%>JDHqoK`Dq{a40?@O**2>XW0M6{Q_$f_MY+YiDMcl~!pSGmSgiy&UR3`GlS zK|&Yc=G(-KpRmZ39sDp@12JO~?*4S)`)$R-xmLa6T-FF%daLU!n+u6@Yz_V$sO||e zx`1jNo~U4sYpI*+8lesiPxBiy4hG*T<__wC8^{TVA>85%m1SocK8MFqr$E_7W=FdK zCr?eHh@Ga&M-m@T4WTy(A5b06Gp?+b4-8P%1ui4ma}zJCl6Wn875j%vNIjl8%J61? zl{z}nea+%TI6mxkVDOo4bxYD@OTg|t)VgluD!GO;iz*WyX-7Wv&Kt!Z=?He9>3WY@ zDhrK24HCZl^4*S6$9815Vk#y6V#H{BoI3(7t3`+7HU)gYlj-Xm5YV|9ow5mkKm}Z- z9#Nd2$;>NL8HL+{+~0US7Qq+?85P)tJnTBBf=Ybw{m@9?_g>s~T^i=~!Td2qU%gqXcL zo+d1Fa4CB_%y=6YxAsUua9DYMdSyLmWF*ogBe>UXK`o@xipcS;RqAr7RjXC2{Qc-` zJSY^Ygd4!11IMSht8m&fQ7HM#{=^Dh*__MxF8*ZJ${sesi1QQBu+orlGW%GX7VtUh zxBbbCcfww$ahLxrSJ5B2>I^(pOY(33Bw(!1m+pK2cc(7f#HJhu%w*uF) zIR@PskYz4Usb(iL))5YxUbu0TS{cLx45|C*LTx(hjGJQ+{S#7*J7x4%VGe_+CbiJk z*S#fXeG>7e#q$8~*I70b(DBLD@eZArDxHq&D4hYX{Q2Pnr!DP9GvnT2St9FJ-;_2< zJnNMGHOiUK&Vux2`cm+Us$jYOygmI~+=bbMYZ$!Sr)VQ9e-3)x`c>7E9nO48K6KTC z>ThGVl5KRTwKgMbg(b~PkO&{GL5Kx&e{%#6a#^-X18pm{WCmZ(J)tOAWB^D z_1X7E5&EYx0=WN;PlE&mmcmXh_O2i6jWr#TL>wv#&SdSA@;a7&n0{{hD>nc&oQLAG z^qdIB0uMeT-rs8In}_ozzQQ&id*B8qL|T?_yRPN^ayC#^a-|bvT$8M!=ax;+I$sRt zfaR`rA_i6!syX?b6Bm0*&ms$MUKQJ9dY)7YCltc5vp;{mC>Wb%!)e!~%3Wn!OKD9Y zByu-=v=FQ~s@$Xs$kvnU+*xuO84udbk6)`*NaaH@B4zt|7vimYg?E2M&2hl&ZM`^}D||B3Y`@1IoCHSo z+c#U&r*uRyb_I){RG)K`8od)HxN!k0n2nMLS8Qp-4yj4Mwe17X{~F?*piKiF>a0VK z0hTR$U43*}*5HpY=yc!d?dxUQE=s;Vn2yK#vMqmu6HIP=IVg)8|4#!2a#-Vi8s__) z6oo5uikUKu70u-J)p0RgRJP}0Xjm3aW{)Wi0 z4JlT*SWSS}sc_PlHhA0a#ocVa>;>U-cc-5$YS?8dD$p;LR+A&OoNc4>+1(8lN0qCX zb4g+?GA=SvH)8SW#>)UrziMW(S?Ss!+bYK#cltcqKWihNVA~{P>V#)mr#ZG+O_2MR z{T8L#puXXxvu&7p`5;s!6CJAi{-tPb$V=#&Dur@C27hSWn1|=x($;)^UWfTF#KI_N z*Rwrmy^fK3PH2gZ9_};NEExg2>AmGKwDo{zc}z07_Ps})X>ltsiS9D9P1W=Hbg*EF zn3334Vt%x*7B`Pzkdn>{O7?~G?3i;%ky16L$Fiq#lm1zKb^yYyVgCxvufZC%_D_@! zgwlUIs3pngg#BF?-D-mK{djzjR8D<%yF#Ww-*GoehYVZ#D}^0w$z=(60_WL*_~_-$ zj;~pUW6NTsKtmK}rL-#@JHa<;+kw{X1?r!i$$_&6bFz^;$uy;56}nyzyz8`UOtti* zhrd$j&dlrg7a9(&BjfciDWe`kuBk9BOQ)m0t&1~Z+Kbv(Zr0<8#dB$|sMj7SoN!op zw!W8g9jaa8Y3Epv3tY+lK9gHRn75mHd2;l2u@q>n1@e0KQc90pD%nT;V{t%G#UmNj zu{ak_En!{DFWdDDhwJ@}1^CqP=sD5rOl8+IEoLGk)*r33N2GMI7iwQt-7*WldRB6F zrgGEyFm)uYe0>ROk;{FP;7&o!a|ImuO8mRO@m{_DHtV0Btu->ED? zz(R}y4rQk=u_Zqe1!dUE)I*S^TB_r&g^UlWZow;5p)Oaw=40&Jug4(UjpPD|K^gjc zy=4`{Q%*>oXim5k)6gtg65(PeTpU0cbkA5(dz8GkxFskjw-NSj^Hv;}L4o{R%S0(P z-yDk~ZPeP>cboy+=XOuuwq>UkN9g%VfyInAp5}yi0eryaJTUqnNnx(QRv$WW($Pa; z83}~sOELb(VcIX}e-Gj0M5oJAibRT<68Ph&4-MoJ7fo-N<;X{;v|t}$AZt)t+gBJX zhx0YjH}OcF%xWEdY0g#Tyemx@yU6@rLTmy03r37_4Dde~a}-i_%$+3GHsYdYxNr7yu+J)XF6)u%VfzVBTkg#WZ3PbsX< z{m=qBg0glcf!!Nt zGwZR_806VQ%aWyE!!fGv^?Vg|SXTIT{tQobxKQr-ZHqbfMJ;Fo)Z%~zMn_JC+NOs2ho7IK%fU_{YVO*Li9Gnuh4r=6EcS8L=;49%CXDOuT%O zR9t;^kOwow#w00hEOKs2zNFyCLJ#(8f@?yCvfYEc6f3p>aYIT2>3{3 zMkcXa--r%Ety1>(dyK)!)cq_6=uk@#Y%2s@SaOU-9C~>YCPPacoTm12`YthKH{LHEPFRp1gS^n4EVAmSYzLXLX}VC_Qf1 zBl*uRh&_7s-uUOzItHp}(ac#{F!6t5?sPB%i5r7lV0==)09ci*z=n09lEvEhFtOve zfFm_2>L^9zvL%?}e9E~>bLZGM362`Ia&x*FQ_>0YVOD{d@6nL&f;e<+>W%nqn_mrW z-ws4C`^l|T`N{Qmau{gdg3?T<`sujy1O`TfYx7^Le z`OdsKECTX3S~}&I$JDK=81M#i4B{!swXrnc<$(2X<~klMU27BS@3wxZbbeS|B^a9~ zMbI~_G>}^6THH&tp2o|Jv4P?AVU#1tHgZXU88Z-%Y@J=nwk7eKT*V492PVoGpgJPT zFm_elAC%Rm8IUWgl$(SfR!X@CY(y@ZZP?IsEg4QSaA?DFQ7`>%Q60UvKcx z76C=@c(;LH>hd3sPoeqOD4Q|fc^bbF;U=3-OAGd2?myI=BC)XC*gtEh)%Rp_eX!B( za#cW`9F#{*efl|I?mmpZ-GFs!A@UhfgI0?BWNw`tXYA*QYP@f3oiK$=?uP62l&4pL zASd4OXQuS1F7;PCuV!rpt7jFvAIda(q)-58YEfw@vP8>WzFMOWE%pezc{uYVF$Bhp z)Fr}Mo&(YA5fA{jsk8g${(X30Qf06trcSL#3(}g)CbL|E0BO}qH6}mv4Y~9Ne5J%KHO^*Q8 zk|mZ1TfV0sDoUT~R?t|fk_wPDK@Xm5vDhjkvs zUzM9AJ%qr=M9lIrVjP7#Tmo;9(fMV+npph9F%MQHx%et)TD#_p9;5=^96Zc8qXDE{OX@OC?U5*hamk) zYG$q)ip(sQ?!7y3D9b_Y?YX8}WyWVM!miT9GVWrN3_26D4B8MMV1Ca?q`(s(oDkiG zh|7<@zgF9aK<6AUvZml&H6n4rmJUaOYlHa_@p*_)msO{0(joVJ;TP~4VkLqcUcmf? z#xgt3`%|!_+?NR|*uqJNeTq&P)pb~xUkoLGH}_F6DrX6ww*BMj@GQUaydnMlNYz;Q zu;ZC6OqWrc1k>M%hV>^)_NC4IV^O>vUa3A<#r$KRMnY#6tAi8Oa4?;ps8-j6o+AQi z*(xD4D@~hxbxY*Kwm%%t2gp*4F6IOWaWWK?6%6D`n_@g{mM(4yo`hWS&p^wXXu@ix zK9rA)3=`<_vO+ssids>;` z_Y?Qj-RU1&P^SDLKxlXOm_^wj1~Jgv;VzA3#&89ltSWYz z7VAgI=1AB{s@XtQ)Y}i48&iL`ngVG!Vt_%}lWs9Y+=;l)gX@s@H~$L0H}Eq9emeU7 zrO;uJ-4Cz^A;X^&&XSF|6D;zwYwv_sNn%Lzgk?#5fJ^QHu70#bB0gSn^FR=in{f&r zOF8(i@2+b*_E~wI=+$YucMqg6g4czWB*0b)$+cL$Swc7-H>=A z-yI+hW}!^32pV8KoPpbBqiag#Y9*i~#q@)7a9%G*a#MX8o`O)aoX?MADNl0K?pRWx zM(q+n_(tyF^M$MO#u8eQGDX#RLWB$k!Cgsbnmi^GtJ=s7O$z3x4qI zup=PV@RUw+Fw`+#J#(J5RkPDvn8*h)-d7FCp)d^O^RdHAqJ&)OMGd&x4Bxixt7_== zO%HI5f)VK|RYGIwA>?ZUe1l%r4dI^QTuVNPow#@B&5JacFu+48ia6R|&UeGRo#;*u zi2B%9_x>c}5DLxu5jiPda#nA`@CQ;6?Zie<0WOJj>P8UurM0i@2zSX%o z1v@G@62bXq_S-lT;kTKecb1`Oj$(JYed#C@w0&Bo?l${LRrDs&U8P%i=Uq&MQiRa(taye`>Ej=Shz`M95$i)!+Frw`sVP*5arG@BVloemz?kRp2 z!i{oM)Xc9zj)eEyRjx{h>v;#PU|5zG6w5mL|8K7^&(m5O&jHw*{$QZ>C?%EoxMRxE zpdHKtbY3v~62vRVY)8l=fSV!|sFdl~s|Z4~ua4me8y|KWAAt-fKOu8sam-RF2C0SA~fFNf7 zpO%DwIRk=i*PbGjbqa)}fAeQwSzpo`Xhg3b7{g^@Qfw?;OM-(47;P;K*)FpW|C9#& zeF9PzxAZp$x=lqId_^f}%w=Dm$wZQ~q2HKrz;C>SB>fc?tugrG0HJW&pEE^oNI!B@ zX)n&FRrnPk?bZ{121cqL*?KBD()ImvOrn^3M(-423RYA7T~{T8^4x%<<`*%3gMVf9 z6v(Joq@OT)-|(Tk(mqGW*F^SU*NWPYBg4-(p539<1kCjbhOr&FVof|rzJSjwhut(x zVg>om&R^{xQ2h8Ui*1R*)#@by+^#ke`{hgVZ(2mLjlgCSfUA~Jt7!45#Q9@zmgyIE zfeE~a7!nF!BKTdh8K|SmYNb!{(Ba$UX})O1Twor?1nC@Bqp@A;xkougy&eF~u|R^Y)R$lsLRo8)5ciI45t zfPsdxz8(xi?+lSYnU(VInGMx7mGpm_m7Yw{&Bm*Jp-A-2Ai~mWgLbeoJ*67#0|N-e z1aikXTEC}V>73}jzU2gEC_7JO!!Zm1O*tHP{;UGdPhG9ohWuHKr%0}gpzcywIYDT5Mjujg>%TiO*~PT^0N`U^#erZX_{3L zZu$cmet<)$KM=~g2{ICatAysue@VQ!S~ODxb8ryDg%^>A@!l~M2cji&w(3X#wPk-y%p%rT;w?P1z%n%<| z!4KOif#Ekh*d@w9gOi4>90Sv~E2)%F;!2kkxK%Nx z`7qLo-`hFqXiE>5=_qMytImVwU67bgH16+|9ve>qUJQ{yx~FqfJA-4w*3@k)6hFUw z7=tbURGzX!78mewi@Lc44h=l_^7nW{X&Zja8#qJ|k-RD1SV5b(og@d5z!UE6fgM-- zAMRkO31lRq-xH6aJ^7wr;*tAozp2S()bDpMoG#@yGy}Ga z*S$of zz{`%ahexw_;d7Pw*O2p0q?-2}aspyP%w%8igq=dMBZOS+e{A!AmDS(5pk-q*w{1>o zi*zOOG7Z2LL`m(R<~>gRSmqH-a$hUio!D!VO{V73S&w0c8%Yy^$EFwd1I@(*^Qge4*{I7#Bg+#yeLC!bj-QRbnrs~dE zsbZ8UWAr_6Ol@azarj&Bi+?)7k$bT$yF1?$du=E*2=%K1_g5o(SDvlF@AtPh`+FgS zx6`-B{lO|`%^c>Oo@!CS^T*459$~Gu(e+EWs;W{lprZy_R)Kc@ z32Lt1Y6IKd&RYToZ%9?Pr&F=*7;7dF& zS5G+pug_HmK8VScRoU6ZmWJ&B$ouJO>uF`?`uO^F=lFK6iaDi|U&yEMIg2Uh3}AYF zkrfEDc@@3r6heQyK3p;3zFOIPyp1~}=>*^Q5zvQnUmtq=ci%{?8}zpj45jjZia zOq`*!hKzOq`<)u;dC^qp*YS^Ijmxn%C6zyC9%KPp?Y5^k`i;0ab?!v)@3zNxf197h zB8Fx$otPtGfECZ(+S{|uD!_x>Y?wv!Pg8|idgc8yh(`yw`jhb6eGH~UyH94f@WFoj zevfx+U6+YRsi3;^`D*X}^$(JG#Mrj{PkWt>_v#hnG^Szjg04_Fe_XMI< zkN8I|&qn!;o0$ME(32M6f*p|vI0|-L2Udrm{EnnP-9vi54r-FEqu30q3*WTFTj~8! zgXndl!CL@SB|PAC$fi+y6FCZx{ZeKbj zfzNBDg*pYveqgDz%PBA~WxIP8h2JQ_<$H%+`d@f*IdeJYv@4Q5e&ESYd^h<>v9Her$_?ty3`~F@4B||CYgk?)>Nxz!^0Yvqekdq)& zPvLD$vHg2GWru(d#dHXRc6D9|xspIlyk-2CujnN;p^Vf@e?b>Nk#cYN# z-ygYv%iZtDVe1D&f_(RXaXn)~ey7JXwTR+hd&FL751&bL?aUw?zl|vY#tBFa*N!1S zGI5?@__oF+d&M}@7$sth*b2!{aju$ivxPP7VY%*34{S`B7HVQ~-$;X7DU@+5pi)?* z8a@q8rprVd8C2#~+Urz%%b?Ei(paKdN_fQsg71o`lFPFucYl+5YcUlwo=Gc6tSh>_qhKJ0(n(kiIhPF<;M<7 zPgnJ55VY~}FIf~YA)D5*`2MabX6Ol|(5dE;_kduGNk~s2Cd$T&iL;J$rJKkhO#Sdk-Un z!EER{Lrt0C;9V8;eM4-5Je%=KF{Rl|;2nxJb`^2$MnGxvF4|Dafk71;2kTZ#-KcQkehv(ybccPQWG>&aHE8j3{O&-6z^0;-A|f;7UZzpli0Q43xfAoq z)|bati_qYYhcu@ormAdWa_3_T{8ar6&v{&ZMdlVD^ZK2`@sns@sER7#tS}ia?#oaE zbqp2pq5?t4NpU6S#{-S}ieIw3Ggh5tePV5ssL~wkf*Mi@ z(&^o0-J!GW&swY(%hQ*gElINhqThqOVXu7=Wb+yZF_1kOJ$Z;db7*Th0DX);^+kFv z05QS7C#*GmXdTp0d?dCVmk6SDUKBxtt)_%m#LE*i!IfVtwHC&YQXXJ>#xj~rcE4PJs>>Z7EU*3CEfmC7)Nsb|Pal)CI{JI|f z_56$~)OL{HPlBI|SNzTUfYnuEvGnI6x+<;M{g6(SKFnPS?g_uS$8kwmhR{DehlR+~ zW@=}HqRmc(7T@iRB3&pCyBMSJ_LS`GSM>j(f0QlI z7IU`HGklB=Vdru4Z3TH$9iHfOH#gFwG{iX%T!m>q><_m^ZFw2vYE^{T0`3P4^sr`JPhU@rcY;M_1HM2EjXjzy7uBb!Y-O6v@w%|dp-<&g=?z_OuIVAs@ge$t zS7Ye{oIk~71?I;qO~|*d?Gd+QeaN`d0|F7x_Q+#J)Qfwhu&gX_F@DDE5@E)gnA=KW zqI5U@tK)MjZnNLa9!GG9GIH(4Q2GH9%jd@O zFQih*amB$a`Koc`TWrY$gw)kxwoyct?U|%Zz=;_hpFWWR&ql(MYuI#NdqRv_|QQ`%9qCDvLE>&f8QZjaz`3YzdfdnuD_pca=}I~g){v`M}(V> zEH_p1N+q^g@*ag9K=+>RKqvb~a}`Dy0vPJ5UDVQ_O=d_aDo@(2%x?(daYAztIMG-r zoT7ihDDV&AypstmCB~B1W5hc6RGC;@p$uEAyRH*0{NLHmG=IyYg^SZ~&(I zbiCu;B=|Cz750~(YG>wv%E11RlpkUW5}u$rMkL;>+;x4FozXVqL!eg*f$m%yCV{h0KXKg9V(_ch&xnB{7QCo~yL2HAa}<*&q+ODRAckOlq5 z)<>M*NZ_UZ({ZN*y8KAX$u_TVPE}oHj=b{0+r%;;?daJda=}}#X}6Sxzl6jXKP+8# z*hO$g-D9cxGa6rZ^NGEiS9I@d=nI7wno|(PC;{I1%j11n@%kwbtkATx3jQzrQE{FxeTpnVk~J8#wa{=3e5 zG!J#m_%IC8r^4e_&#>#5?opg@O$^eL+v2Q#oA+MXqc*s+eBWK?nN_Z;N%sx8Ps&u8 z_R3j)LkcPWQ6dvF;6tjGI@UhSP=Cl@W^)9nMF^V6hPP5&_-5;2H`U0gIw58hjHDM7|-<(Zlg@yb9*_5y7_{OcrbVA+M(c8kE$#wU7 zj`!4L4Btc<>UYy2g4zfmntzX=YwrEfVerb9r-=c?i0v-7T-qq6Y)e@?tagf{nz`#M z7Ik#6(pUwi?@3`fqzRiel9-bEid^280Y=G$jh;3@nyhxe&FK z0T0jift#pnjQCY-LC6bE)Lv1!!()_L&tg<26PJc4JLyJ6)!( zVtd5B>tYw(sOF+N*@CU4ar(Hn4_y?!Am>s!vCqH>qi3;h!75_`#07t$iA$$L^q@Sp zU#1ofxXgO$eQF3Z-Rr~+qq~jIEoq=4ic9PzNyjm}FN}9Auqwb#ej@sKXJeMOVDrA` z8n8Z&k)F<0&I~A`>wn?`r!^fbW=;v}5P>XN)iAn9Thq+d?`Ta;CKA3gef}*)E3*N+ zrZGbI80b2?uewo8XBVszt*e~Opg^alP5_8p{ZJ>-$|pL3K5vFxae?Mo30_}kjwOT{&){(NtH`yJzSUU}scjXQ);%LH#sHXMaJ1-^Y>CK6IlbOvYgd zj+uIn&?PC@0}e*_Cq6k?plg?ERp91@S!?n9+Y*6|e8C)xW9BDx2FgYt8|qmkMuHC0ke%hFysdN5 zHLaVIU9pzB+ker>Y-$>7?)=btmhkHmJV5swPQi2kM#&}vY zbER)+7Sd=c4&2Z;N6!009vvc9LTF{ZLowktPB~pp@f6dwpcn;7! zEW8gv!Y_bqL8yxt4hLSG%wN&#qv4BVJiQp0NeN>+rk1Sp80qqwpuGGQ6pnGZ^g}NP zPb*oQ{Ko|ZTDYdA6QwpPYo_dPUbOxR(0>FK!kSzh_rZ?X zGbc3F?XQ!ZI%@p|KA__l3Gfi{2S2WK9H1%;S8LXJxPRbId-Pz6UKn3@3!0c|vS532 zs=9Xb;d%L}@6;6fY<%HNMf9NrqybwD2WK zYB2$S2PZ+aB}#(SB2GoB1gKSSuDyUu;#jtM{e3qM1W>EqygTF3?9OJRLsbSlFjm$o zCvh(#0VrMzsa82z%qQU!39MsEu(DQ=lOtF%D(>$xu2Wtccr&#I<0RMsm6T1n&dJ(2 zol{eIuu_q`4DAJdQN>&%ZD zO4aO&11U1WQzu;sMMf`AeA(^SH*nXsy8;1jfVtYVKvy6jz;YwC!-QJ!rhz$>%(^Lm zMz)k7o{z|h3_l%9gy$0U^^j671E2f%nP&+fQZ{f;wJ)B?Y@1zt1_dU zsc(?-o$>MUcp%4@KYf>dhH1WzL#6anp|UWv3|Jti;UYgr@mR@&*>wdZ&PT_^Cg6( z?{ZTVW!^^vbvm}$RH@n?;_la&LS@~*XZ|gC7FOgWs_ibdoCIF}1KOJJ-FaU^Sv(*I zs%=7Wc4LJJAv8${&YDt~5JHoL;H;L%e<6e>3BlQ7Z7KJJ5Sk4|_tg8Pkl%ZWf* zQR$4B1tK`pYb8tqz7_Qfuv0uQIsJ{EzO!j`;{gf@c^FkAHUI#RN0U}|RsoZft#%+B zPLx^?91{Ql4m$t<6aWAK0000000000008+`lj(LQ8z)%{7={4=0O public string Logon { get; set; } + /// + /// Personal / OTRS / User Email + /// + [MaxLength(100)] + public string UserEMail { get; set; } + /// /// SHA 512 /// @@ -124,24 +130,25 @@ namespace bsmd.database scmd.Parameters.AddWithNullableValue("@P9", this.Phone); scmd.Parameters.AddWithNullableValue("@P10", this.Fax); scmd.Parameters.AddWithNullableValue("@P11", this.EMail); - scmd.Parameters.AddWithNullableValue("@P12", this.Logon); + scmd.Parameters.AddWithNullableValue("@P12", this.Logon); scmd.Parameters.AddWithNullableValue("@P13", this.PasswordHash); scmd.Parameters.AddWithNullableValue("@P14", this.Salt); scmd.Parameters.AddWithNullableValue("@P15", this.Flags); scmd.Parameters.AddWithNullableValue("@P16", this.Deleted); + scmd.Parameters.AddWithNullableValue("@P17", this.UserEMail); if (this.IsNew) { scmd.CommandText = string.Format("INSERT INTO {0} (RPName, RPStreetAndNumber, RPPostalCode, RPCity, RPCountry " + - "RPLastName, RPFirstName, RPPhone, RPFax, RPEMail, Logon, PasswordHash, Salt, Flags) VALUES " + - "( @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12, @P13, @P14, @P15 )", this.Tablename); + "RPLastName, RPFirstName, RPPhone, RPFax, RPEMail, Logon, PasswordHash, Salt, Flags, EMail) VALUES " + + "( @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12, @P13, @P14, @P15, @P17 )", this.Tablename); } else { scmd.Parameters.AddWithValue(@"ID", this.Id); scmd.CommandText = string.Format("UPDATE {0} SET RPName = @P2, RPStreetAndNumber = @P3, RPPostalCode = @P4, " + "RPCity = @P5, RPCountry = @P6, RPLastName = @P7, RPFirstName = @P8, RPPhone = @P9, RPFax = @P10, " + - "RPEMail = @P11, Logon = @P12, PasswordHash = @P13, Salt= @P14, Flags = @P15, Deleted = @P16 WHERE Id = @ID", this.Tablename); + "RPEMail = @P11, Logon = @P12, PasswordHash = @P13, Salt= @P14, Flags = @P15, Deleted = @P16, EMail = @P17 WHERE Id = @ID", this.Tablename); } } @@ -149,7 +156,7 @@ namespace bsmd.database { string query = string.Format("SELECT Id, RPName, RPStreetAndNumber, RPPostalCode, RPCity, RPCountry, RPLastName, " + - "RPFirstName, RPPhone, RPFax, RPEMail, Logon, PasswordHash, Salt, Created, Changed, Flags, Deleted FROM {0} ", this.Tablename); + "RPFirstName, RPPhone, RPFax, RPEMail, Logon, PasswordHash, Salt, Created, Changed, Flags, Deleted, EMail FROM {0} ", this.Tablename); switch (filter) { @@ -191,6 +198,7 @@ namespace bsmd.database if (!reader.IsDBNull(15)) rp._changed = reader.GetDateTime(15); if (!reader.IsDBNull(16)) rp.Flags = reader.GetInt32(16); if (!reader.IsDBNull(17)) rp.Deleted = reader.GetInt32(17); + if (!reader.IsDBNull(18)) rp.UserEMail = reader.GetString(18); result.Add(rp); } reader.Close();