陈嘉乐
2020-07-10 48ba446936b51fffafa7c3600c0dadc6ac0e8c20
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/TemporaryPassword.cs
@@ -6,7 +6,7 @@
namespace Shared.Phone.UserCenter.DoorLock
{
    public class TemporaryPassword : DoorLockCommonLayout, ZigBee.Common.IStatus
    public class TemporaryPassword : DoorLockCommonLayout
    {
        /// <summary>
        /// 构造函数
@@ -16,17 +16,40 @@
        {
            this.doorLock = doorLock;
            BackgroundColor = Shared.Common.ZigbeeColor.Current.GXCTopViewBackgroundColor;
            ZigBee.Device.ZbGateway.StatusList.Add(this);
        }
        #region ◆ 变量申明__________________________
        #region  变量申明
        /// <summary>
        /// 当前门锁
        /// </summary>
        ZigBee.Device.DoorLock doorLock;
        public System.Collections.Generic.List<Button> pawButtonList = new System.Collections.Generic.List<Button> { };//临时密码中的6位数字
        Button passwordText; //临时密码
        /// <summary>
        /// 临时密码中的6位数字
        /// </summary>
        public System.Collections.Generic.List<Button> pawButtonList = new System.Collections.Generic.List<Button> { };
        /// <summary>
        /// 临时密码
        /// </summary>
        Button passwordText;
        /// <summary>
        /// 中部布的顶部布局
        /// </summary>
        FrameLayout MidTopFrameLayout;
        Action<string, string> action;//接收通知
        /// <summary>
        /// 接收通知
        /// </summary>
        Action<string, string> action;
        /// <summary>
        /// 保存完成按钮
        /// </summary>
        Button btnFinifh;
        /// <summary>
        /// 当前有效日期时间
        /// </summary>
        DateTime cunVDateTime;
        /// <summary>
        /// 当前失效日期时间
        /// </summary>
        DateTime cunIVDateTime;
        #endregion
@@ -68,65 +91,7 @@
            EventHandler<MouseEventArgs> eHandler = (sender, e) =>
            {
                var dialog = new Dialog { };
                dialog.Show();
                var flMain = new FrameLayout { BackgroundColor = 0x00000000 };
                dialog.AddChidren(flMain);
                flMain.MouseUpEventHandler += (sender11, e11) =>
                {
                    dialog.Close();
                };
                var delBackgroundFrameLayout = new FrameLayout
                {
                    X = Application.GetRealWidth(596),
                    Y = Application.GetRealHeight(164),
                    Height = Application.GetRealHeight(173),
                    Width = Application.GetRealWidth(449),
                    BackgroundImagePath = "DoorLock/DelBackground.png",
                };
                flMain.AddChidren(delBackgroundFrameLayout);
                var btnDelIcon2 = new Button
                {
                    Height = Application.GetRealHeight(81),
                    Width = Application.GetRealWidth(81),
                    X = Application.GetRealWidth(81),
                    Y = Application.GetRealHeight(55),
                    UnSelectedImagePath = "DoorLock/DelIcon.png",
                };
                delBackgroundFrameLayout.AddChidren(btnDelIcon2);
                var btnDelText = new Button
                {
                    Height = Application.GetRealHeight(58),
                    Width = Application.GetRealWidth(311),
                    X = Application.GetRealWidth(173),
                    Y = Application.GetRealHeight(69),
                    TextAlignment = TextAlignment.CenterLeft,
                    Text = Language.StringByID(R.MyInternationalizationString.ClearTempPassword),
                    TextColor = Shared.Common.ZigbeeColor.Current.XMTopTitleText,
                    TextSize = 14,
                    IsBold = true,
                };
                delBackgroundFrameLayout.AddChidren(btnDelText);
                EventHandler<MouseEventArgs> eHandler2 = (sender2, e2) =>
                {
                    dialog.Close();
                    string msg = Language.StringByID(R.MyInternationalizationString.SureToDeleteTempPassword);
                    var alert = new Shared.Phone.UserCenter.ShowMsgControl(ShowMsgType.Confirm, msg, Language.StringByID(R.MyInternationalizationString.DoorlockConfirm));
                    alert.Show();
                    //使用确认型弹框时,的回调函数
                    alert.ConfirmClickEvent += () =>
                    {
                        ClearEventHandler(btnDelText);
                    };
                };
                delBackgroundFrameLayout.MouseDownEventHandler += eHandler2;
                btnDelIcon2.MouseDownEventHandler += eHandler2;
                btnDelText.MouseDownEventHandler += eHandler2;
                ClearDialog();
            };
            btnDelFrameLayout.MouseDownEventHandler += eHandler;
            btnDelIcon.MouseDownEventHandler += eHandler;
@@ -143,6 +108,9 @@
            MidFrameLayoutContent();
        }
        /// <summary>
        /// 中部布局
        /// </summary>
        public void MidFrameLayoutContent()
        {
            MidTopFrameLayout.RemoveAll();
@@ -205,6 +173,7 @@
                TextColor = Shared.Common.ZigbeeColor.Current.XMGray2,
                TextAlignment = TextAlignment.CenterRight,
                TextSize = 16,
                Text = "--:--",
            };
            MidTopFrameLayout.AddChidren(validTime);
@@ -228,6 +197,7 @@
                TextColor = Shared.Common.ZigbeeColor.Current.XMGray2,
                TextAlignment = TextAlignment.CenterLeft,
                TextSize = 16,
                Text = "--:--",
            };
            MidTopFrameLayout.AddChidren(inValidTime);
@@ -318,7 +288,9 @@
            };
            #endregion
        }
        //底部界面和数据处理
        /// <summary>
        /// 底部布局处理
        /// </summary>
        public void BottomFrameLayoutContent()
        {
            var bottomFrameLayout = new FrameLayout()
@@ -389,7 +361,7 @@
                var btnLine = new FrameLayout()
                {
                    Width = Application.GetRealWidth(965),
                    Height = Application.GetRealHeight(5),
                    Height = 1,
                    X = Application.GetRealWidth(58),
                    BackgroundColor = Shared.Common.ZigbeeColor.Current.XMRowLine,
                };
@@ -421,7 +393,9 @@
                                //请"点击生成"临时密码;
                                Application.RunOnMainThread(() =>
                                {
                                    new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.SetTempPasswordTip1), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinifh);
                                    var mess = Language.StringByID(R.MyInternationalizationString.SetTempPasswordTip1);
                                    ShowMassage(ShowMsgType.Tip, mess);
                                });
                                return;
                            }
@@ -441,7 +415,8 @@
                                //请"点击生成"临时密码;
                                Application.RunOnMainThread(() =>
                                {
                                    new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.SetTempPasswordTip1), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinifh);
                                    var mess = Language.StringByID(R.MyInternationalizationString.SetTempPasswordTip1);
                                    this.ShowMassage(ShowMsgType.Tip, mess);
                                });
                                return;
                            }
@@ -507,7 +482,10 @@
            };
        }
        //确定事件处理
        /// <summary>
        /// 确定事件处理
        /// </summary>
        /// <param name="btnFinifh"></param>
        void FinifhEventHandler(Button btnFinifh)
        {
            System.Threading.Tasks.Task.Run(async () =>
@@ -520,7 +498,8 @@
                        //请"点击生成"临时密码;
                        Application.RunOnMainThread(() =>
                        {
                            new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.SetTempPasswordTip1), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinifh);
                            var mess = Language.StringByID(R.MyInternationalizationString.SetTempPasswordTip1);
                            this.ShowMassage(ShowMsgType.Tip, mess);
                        });
                        return;
                    }
@@ -533,7 +512,8 @@
                        //无效的时间设置
                        Application.RunOnMainThread(() =>
                        {
                            new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.SetTempPasswordTip), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinifh);
                            var mess = Language.StringByID(R.MyInternationalizationString.SetTempPasswordTip);
                            this.ShowMassage(ShowMsgType.Tip, mess);
                        });
                        return;
                    }
@@ -595,7 +575,10 @@
                                    addDoorLockTempPasswordData.LoginAccessToken = UserCenterLogic.GetConnectMainToken();
                                    addDoorLockTempPasswordData.IsOtherAccountCtrl = true;
                                }
                                addDoorLockTempPasswordData.TempPwd = doorLock.tempPasswordObject.TempPassword;
                                //对密码进行加密处理
                                string hdlKey = "hD1(La3o";
                                var enPsw = UserCenterLogic.EncryptPassword(hdlKey, doorLock.tempPasswordObject.TempPassword);
                                addDoorLockTempPasswordData.TempPwd = enPsw;
                                if (doorLock.DeviceAddr != null)
                                {
                                    addDoorLockTempPasswordData.LocalDoorLockId = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint;
@@ -609,7 +592,8 @@
                                {
                                    Application.RunOnMainThread(() =>
                                    {
                                        new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.CloudServerResponseOvertime), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinish);
                                        var mess = Language.StringByID(R.MyInternationalizationString.CloudServerResponseOvertime);
                                        this.ShowMassage(ShowMsgType.Tip, mess);
                                    });
                                    return;
                                }
@@ -617,7 +601,8 @@
                                {
                                    Application.RunOnMainThread(() =>
                                    {
                                        new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.SetFailedXm1), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinish);
                                        var mess = Language.StringByID(R.MyInternationalizationString.SetFailedXm1);
                                        this.ShowMassage(ShowMsgType.Tip, mess);
                                    });
                                    return;
                                }
@@ -629,7 +614,8 @@
                            {
                                Application.RunOnMainThread(() =>
                                {
                                    new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.SetFailedXm), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinifh);
                                    var mess = Language.StringByID(R.MyInternationalizationString.SetFailedXm);
                                    this.ShowMassage(ShowMsgType.Tip, mess);
                                });
                                return;
                            }
@@ -638,7 +624,8 @@
                        {
                            Application.RunOnMainThread(() =>
                            {
                                new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.SetFailedXm), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinifh);
                                var mess = Language.StringByID(R.MyInternationalizationString.SetFailedXm);
                                this.ShowMassage(ShowMsgType.Tip, mess);
                            });
                            return;
                        }
@@ -647,7 +634,8 @@
                    {
                        Application.RunOnMainThread(() =>
                        {
                            new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinifh);
                            var mess = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime);
                            this.ShowMassage(ShowMsgType.Tip, mess);
                        });
                        return;
                    }
@@ -667,7 +655,76 @@
            });
        }
        //清除事件处理
        /// <summary>
        /// 清除UI
        /// </summary>
        void ClearDialog()
        {
            var dialog = new Dialog { };
            dialog.Show();
            var flMain = new FrameLayout { BackgroundColor = 0x00000000 };
            dialog.AddChidren(flMain);
            flMain.MouseUpEventHandler += (sender11, e11) =>
            {
                dialog.Close();
            };
            var delBackgroundFrameLayout = new FrameLayout
            {
                X = Application.GetRealWidth(596),
                Y = Application.GetRealHeight(164),
                Height = Application.GetRealHeight(173),
                Width = Application.GetRealWidth(449),
                BackgroundImagePath = "DoorLock/DelBackground.png",
            };
            flMain.AddChidren(delBackgroundFrameLayout);
            var btnDelIcon2 = new Button
            {
                Height = Application.GetRealHeight(81),
                Width = Application.GetRealWidth(81),
                X = Application.GetRealWidth(81),
                Y = Application.GetRealHeight(55),
                UnSelectedImagePath = "DoorLock/DelIcon.png",
            };
            delBackgroundFrameLayout.AddChidren(btnDelIcon2);
            var btnDelText = new Button
            {
                Height = Application.GetRealHeight(58),
                Width = Application.GetRealWidth(311),
                X = Application.GetRealWidth(173),
                Y = Application.GetRealHeight(69),
                TextAlignment = TextAlignment.CenterLeft,
                Text = Language.StringByID(R.MyInternationalizationString.ClearTempPassword),
                TextColor = Shared.Common.ZigbeeColor.Current.XMTopTitleText,
                TextSize = 14,
                IsBold = true,
            };
            delBackgroundFrameLayout.AddChidren(btnDelText);
            EventHandler<MouseEventArgs> eHandler2 = (sender2, e2) =>
            {
                dialog.Close();
                string msg = Language.StringByID(R.MyInternationalizationString.SureToDeleteTempPassword);
                var alert = new Shared.Phone.UserCenter.ShowMsgControl(ShowMsgType.Confirm, msg, Language.StringByID(R.MyInternationalizationString.DoorlockConfirm));
                alert.Show();
                //使用确认型弹框时,的回调函数
                alert.ConfirmClickEvent += () =>
                {
                    ClearEventHandler(btnDelText);
                };
            };
            delBackgroundFrameLayout.MouseDownEventHandler += eHandler2;
            btnDelIcon2.MouseDownEventHandler += eHandler2;
            btnDelText.MouseDownEventHandler += eHandler2;
        }
        /// <summary>
        /// 清除事件处理
        /// </summary>
        /// <param name="btnDelText"></param>
        async void ClearEventHandler(Button btnDelText = null)
        {
            if (btnDelText == null)
@@ -683,7 +740,7 @@
                    var resultData = await doorLock.DefaultControlAsync(passData);
                    if (resultData != null && resultData.defaultControlResponseData != null)
                    {
                        if (resultData.defaultControlResponseData.status == 0)
                        if (resultData.defaultControlResponseData.status == 0 || resultData.defaultControlResponseData.status == 2)
                        {
                            var delDoorLockTempPasswordData = new ZigBee.Device.DoorLock.DelDoorLockTempPasswordData();
                            if (UserCenterResourse.UserInfo.AuthorityNo != 1)
@@ -710,7 +767,8 @@
                                {
                                    Application.RunOnMainThread(() =>
                                    {
                                        new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.ClearFailedXm1) + ".", Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinish);
                                        var mess = Language.StringByID(R.MyInternationalizationString.ClearFailedXm1);
                                        this.ShowMassage(ShowMsgType.Tip, mess);
                                    });
                                }
                            }
@@ -718,7 +776,8 @@
                            {
                                Application.RunOnMainThread(() =>
                                {
                                    new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.CloudServerResponseOvertime), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinish);
                                    var mess = Language.StringByID(R.MyInternationalizationString.CloudServerResponseOvertime);
                                    this.ShowMassage(ShowMsgType.Tip, mess);
                                });
                            }
                        }
@@ -726,14 +785,15 @@
                        {
                            Application.RunOnMainThread(() =>
                            {
                                new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.ClearFailedXm1), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinish);
                                var mess = Language.StringByID(R.MyInternationalizationString.ClearFailedXm1);
                                this.ShowMassage(ShowMsgType.Tip, mess);
                            });
                        }
                    }
                    else
                    {
                        new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime), Direction = AMPopTipDirection.Up, CloseTime = 2 }.Show(btnDelText);
                        var mess = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime);
                        this.ShowMassage(ShowMsgType.Tip, mess);
                    }
                }
            }
@@ -749,7 +809,9 @@
            }
        }
        //读取云端存储数据
        /// <summary>
        /// 读取云端存储数据
        /// </summary>
        void ReadTempPasswordData()
        {
            System.Threading.Tasks.Task.Run(async () =>
@@ -778,7 +840,10 @@
                                tpObj.UserId = int.Parse(curDoorLockTempPaw.TempPwdId);
                                tpObj.ValidTime = curDoorLockTempPaw.ValidBeginTime;
                                tpObj.InValidTime = curDoorLockTempPaw.ValidEndTime;
                                doorLock.LocalTempPassword = tpObj.TempPassword = curDoorLockTempPaw.TempPwd;
                                //解密密码
                                string hdlKey = "hD1(La3o";
                                var desPsw = UserCenterLogic.DecryptPassword(hdlKey, curDoorLockTempPaw.TempPwd);
                                doorLock.LocalTempPassword = tpObj.TempPassword = desPsw;
                                doorLock.tempPasswordObject = tpObj;
                                TimeDateData(doorLock.tempPasswordObject.ValidTime, doorLock.tempPasswordObject.InValidTime);
                            }
@@ -794,7 +859,8 @@
                    }
                    else
                    {
                        new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.CloudServerResponseOvertime), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance);
                        var mess = Language.StringByID(R.MyInternationalizationString.CloudServerResponseOvertime);
                        this.ShowMassage(ShowMsgType.Tip, mess);
                    }
                }
                catch { }
@@ -809,7 +875,12 @@
            });
        }
        //本地时间数据处理
        /// <summary>
        /// 本地时间数据处理
        /// </summary>
        /// <param name="validTimeDateTime"></param>
        /// <param name="inValidTime"></param>
        /// <param name="isClearLocalTime"></param>
        void TimeDateData(DateTime validTimeDateTime, DateTime inValidTime, bool isClearLocalTime = false)
        {
            if (doorLock.tempPasswordObject != null)
@@ -844,7 +915,14 @@
            }
        }
        //时间显示数据处理
        /// <summary>
        /// 时间显示数据处理
        /// </summary>
        /// <param name="validTime"></param>
        /// <param name="validTimeDate"></param>
        /// <param name="inValidTime"></param>
        /// <param name="inValidTimeDate"></param>
        /// <param name="isDefaultTime"></param>
        void TimeDisplay(Button validTime, Button validTimeDate, Button inValidTime, Button inValidTimeDate, bool isDefaultTime)
        {
            string hour = "";
@@ -858,12 +936,14 @@
                Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateMinute = cur.Minute;
                Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateSecond = cur.Second;
                Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateSecond = cur.Second;
                var InValidTime = cur.AddDays(1);
                Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateYear = cur.Year;
                Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateYear = cur.Year;
                Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateYear = InValidTime.Year;
                Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateMonth = cur.Month;
                Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateMonth = cur.Month;
                Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateMonth = InValidTime.Month;
                Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateDay = cur.Day;
                Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateDay = cur.Day + 1;
                Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateDay = InValidTime.Day;
                //doorLock.ReSave();
            }
            if (Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateHour < 10)
@@ -885,7 +965,7 @@
            //有效时间
            if (Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateHour == 100)
            {
                validTime.Text = "00:00";
                validTime.Text = "--:--";
            }
            else
            {
@@ -911,48 +991,30 @@
            if (Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateHour == 100)
            {
                inValidTime.Text = "00:00";
                inValidTime.Text = "--:--";
            }
            else
            {
                inValidTime.Text = hour + ":" + minute;
            }
            validTimeDate.Text = Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateMonth + Language.StringByID(R.MyInternationalizationString.Month) + Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateDay + Language.StringByID(R.MyInternationalizationString.Day);
            inValidTimeDate.Text = Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateMonth + Language.StringByID(R.MyInternationalizationString.Month) + Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateDay + Language.StringByID(R.MyInternationalizationString.Day);
        }
        #region ◆ 接口实现__________________________
        /// <summary>
        /// 处理变化事件 --将弃用 改用DeviceInfoChange()
        /// </summary>
        /// <returns>The changed.</returns>
        /// <param name="common">Common.</param>
        public void Changed(CommonDevice common)
        {
            if (Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateMonth == 0)
            {
                validTimeDate.Text = "-" + Language.StringByID(R.MyInternationalizationString.Month) + "-" + Language.StringByID(R.MyInternationalizationString.Day);
            }
            else
            {
                validTimeDate.Text = Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateMonth + Language.StringByID(R.MyInternationalizationString.Month) + Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.ValidDateDay + Language.StringByID(R.MyInternationalizationString.Day);
            }
            if (Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateMonth == 0)
            {
                inValidTimeDate.Text = "-" + Language.StringByID(R.MyInternationalizationString.Month) + "-" + Language.StringByID(R.MyInternationalizationString.Day);
            }
            else
            {
                inValidTimeDate.Text = Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateMonth + Language.StringByID(R.MyInternationalizationString.Month) + Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.InValidDateDay + Language.StringByID(R.MyInternationalizationString.Day);
            }
        }
        /// <summary>
        /// 处理变化事件
        /// </summary>
        /// <param name="common"></param>
        /// <param name="typeTag"></param>
        public void DeviceInfoChange(CommonDevice common, string typeTag)
        {
        }
        /// <summary>
        /// Changeds the IL ogic status.
        /// </summary>
        /// <param name="logic">Logic.</param>
        public void ChangedILogicStatus(ZigBee.Device.Logic logic)
        {
        }
        /// <summary>
        /// Changeds the IS cene status.
        /// </summary>
        /// <param name="scene">Scene.</param>
        public void ChangedISceneStatus(Scene scene)
        {
        }
        #endregion
    }
}