From 231534125aedecd66084b1b449d179a82dd3aca5 Mon Sep 17 00:00:00 2001 From: iioter <535915157@qq.com> Date: Mon, 8 Jan 2024 22:18:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E8=AF=AD=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IoTGateway.Model/Common.cs | 12 +- IoTGateway.Model/Device.cs | 22 +- IoTGateway.Model/DeviceConfig.cs | 6 +- IoTGateway.Model/DeviceVariable.cs | 15 +- IoTGateway.Model/Driver.cs | 4 +- IoTGateway.Model/IVariable.cs | 4 +- IoTGateway.Model/RpcLog.cs | 16 +- IoTGateway.Model/SystemConfig.cs | 22 +- .../DeviceConfigVMs/DeviceConfigListVM.cs | 2 +- .../BasicData/DeviceVMs/DeviceListVM.cs | 16 +- .../DeviceVariableVMs/DeviceVariableListVM.cs | 4 +- .../MqttClientVMs/MqttClientListVM.cs | 18 +- .../Rpc/RpcLogVMs/RpcLogListVM.cs | 6 +- IoTGateway/Resources/Program.zh.resx | 222 ++++++++++++++++++ IoTGateway/iotgateway.db | Bin 319488 -> 360448 bytes Plugins/Plugin/MyMqttClient.cs | 2 +- Plugins/PluginInterface/DataTypeEnum.cs | 8 +- 17 files changed, 301 insertions(+), 78 deletions(-) diff --git a/IoTGateway.Model/Common.cs b/IoTGateway.Model/Common.cs index 06d8265..783a5d6 100644 --- a/IoTGateway.Model/Common.cs +++ b/IoTGateway.Model/Common.cs @@ -4,26 +4,26 @@ namespace IoTGateway.Model { public enum DeviceTypeEnum { - [Display(Name = "Collection Group")] + [Display(Name = "Group")] Group = 0, - [Display(Name = "Collection Device")] + [Display(Name = "Device")] Device = 1 } public enum AccessEnum { - [Display(Name = "Read Only")] + [Display(Name = "ReadOnly")] ReadOnly = 0, - [Display(Name = "Read and write")] + [Display(Name = "ReadWrite")] ReadAndWrite = 1 } public enum DataSide { - [Display(Name = "Shared Properties")] + [Display(Name = "AnySide")] AnySide=0, //ServerSide=1, - [Display(Name = "Client Properties")] + [Display(Name = "ClientSide")] ClientSide =2, } } \ No newline at end of file diff --git a/IoTGateway.Model/Device.cs b/IoTGateway.Model/Device.cs index 8795544..65a5b3e 100644 --- a/IoTGateway.Model/Device.cs +++ b/IoTGateway.Model/Device.cs @@ -7,7 +7,7 @@ namespace IoTGateway.Model { public class Device : TreePoco, IBasePoco { - [Display(Name = "Device Name")] + [Display(Name = "DeviceName")] public string DeviceName { get; set; } [Display(Name = "Sort")] @@ -17,31 +17,31 @@ namespace IoTGateway.Model public string Description { get; set; } public Driver Driver { get; set; } - [Display(Name = "Device PLC")] + [Display(Name = "Driver")] public Guid? DriverId { get; set; } - [Display(Name = "Start up")] + [Display(Name = "AutoStart")] public bool AutoStart { get; set; } - [Display(Name = "Change upload")] + [Display(Name = "ChangeUpload")] public bool CgUpload { get; set; } - [Display(Name = "Archiving cycle ms")] + [Display(Name = "EnforcePeriodms")] public uint EnforcePeriod { get; set; } - [Display(Name = "Command interval ms")] + [Display(Name = "CmdPeriodms")] public uint CmdPeriod { get; set; } - [Display(Name = "Device Type")] + [Display(Name = "Type")] public DeviceTypeEnum DeviceTypeEnum { get; set; } - [Display(Name = "Creation time")] + [Display(Name = "CreateTime")] public DateTime? CreateTime { get; set; } - [Display(Name = "Founder")] + [Display(Name = "CreateBy")] public string CreateBy { get; set; } - [Display(Name = "Update time")] + [Display(Name = "UpdateTime")] public DateTime? UpdateTime { get; set; } - [Display(Name = "updater")] + [Display(Name = "UpdateBy")] public string UpdateBy { get; set; } public List DeviceConfigs { get; set; } diff --git a/IoTGateway.Model/DeviceConfig.cs b/IoTGateway.Model/DeviceConfig.cs index f2acdbb..2821689 100644 --- a/IoTGateway.Model/DeviceConfig.cs +++ b/IoTGateway.Model/DeviceConfig.cs @@ -6,9 +6,9 @@ namespace IoTGateway.Model { public class DeviceConfig : BasePoco { - [Display(Name = "Name")] + [Display(Name = "ConfigName")] public string DeviceConfigName { get; set; } - [Display(Name = "attribute side")] + [Display(Name = "DataSide")] public DataSide DataSide { get; set; } [Display(Name = "Description")] public string Description { get; set; } @@ -17,7 +17,7 @@ namespace IoTGateway.Model [Display(Name = "Remark")] public string EnumInfo { get; set; } public Device Device { get; set; } - [Display(Name = "ID")] + [Display(Name = "Device")] public Guid? DeviceId { get; set; } } } diff --git a/IoTGateway.Model/DeviceVariable.cs b/IoTGateway.Model/DeviceVariable.cs index a619aec..41ea56e 100644 --- a/IoTGateway.Model/DeviceVariable.cs +++ b/IoTGateway.Model/DeviceVariable.cs @@ -10,7 +10,7 @@ namespace IoTGateway.Model { public class DeviceVariable : TopBasePoco, IVariable { - [Display(Name = "Tag Name")] + [Display(Name = "VariableName")] public string Name { get; set; } [Display(Name = "Description")] @@ -37,34 +37,35 @@ namespace IoTGateway.Model [Display(Name = "Permissions")] public ProtectTypeEnum ProtectType { get; set; } - [Display(Name = "sort")] + [Display(Name = "Sort")] public uint Index { get; set; } [Newtonsoft.Json.JsonIgnore] public Device Device { get; set; } - [Display(Name = "Device Name")] + [Display(Name = "Device")] public Guid? DeviceId { get; set; } [Display(Name = "Alias")] public string Alias { get; set; } [NotMapped] - [Display(Name = "Value")] + [Display(Name = "RawValue")] public object Value { get; set; } [NotMapped] [Display(Name = "CookedValue")] public object CookedValue { get; set; } [NotMapped] + [Display(Name = "Message")] public string Message { get; set; } [NotMapped] - [Display(Name = "Update time")] + [Display(Name = "Timestamp")] public DateTime Timestamp { get; set; } [NotMapped] - [Display(Name = "State")] + [Display(Name = "Status")] [JsonConverter(typeof(StringEnumConverter))] public VaribaleStatusTypeEnum StatusType { get; set; } = VaribaleStatusTypeEnum.UnKnow; - [NotMapped][Display(Name = "The Most Recent Values")] public object[] Values { get; set; } = new object[3]; + [NotMapped][Display(Name = "MostRecentValues")] public object[] Values { get; set; } = new object[3]; public void EnqueueVariable(object value) { Values[2] = Values[1]; diff --git a/IoTGateway.Model/Driver.cs b/IoTGateway.Model/Driver.cs index 9271c5b..24a80db 100644 --- a/IoTGateway.Model/Driver.cs +++ b/IoTGateway.Model/Driver.cs @@ -6,13 +6,13 @@ namespace IoTGateway.Model { public class Driver : BasePoco { - [Display(Name = "Name")] + [Display(Name = "DriverName")] public string DriverName { get; set; } [Display(Name = "FileName")] public string FileName { get; set; } [Display(Name = "AssembleName")] public string AssembleName { get; set; } - [Display(Name = "Number of licenses remaining")] + [Display(Name = "Remains")] public int AuthorizesNum { get; set; } } } \ No newline at end of file diff --git a/IoTGateway.Model/IVariable.cs b/IoTGateway.Model/IVariable.cs index 8e7cc14..f4d9657 100644 --- a/IoTGateway.Model/IVariable.cs +++ b/IoTGateway.Model/IVariable.cs @@ -5,7 +5,7 @@ namespace IoTGateway.Model { public interface IVariable { - [Display(Name = "Variable Name")] + [Display(Name = "VariableName")] public string Name { get; set; } [Display(Name = "Description")] @@ -20,7 +20,7 @@ namespace IoTGateway.Model [Display(Name = "Expressions")] public string Expressions { get; set; } - [Display(Name = "Permissions")] + [Display(Name = "Permission")] public ProtectTypeEnum ProtectType { get; set; } } } \ No newline at end of file diff --git a/IoTGateway.Model/RpcLog.cs b/IoTGateway.Model/RpcLog.cs index 9406ac2..a2a3e32 100644 --- a/IoTGateway.Model/RpcLog.cs +++ b/IoTGateway.Model/RpcLog.cs @@ -10,27 +10,27 @@ namespace IoTGateway.Model { public class RpcLog:TopBasePoco { - [Display(Name = "Initiator")] + [Display(Name = "RpcSide")] public RpcSide RpcSide { get; set; } - [Display(Name = "Starting Time")] + [Display(Name = "StartTime")] public DateTime StartTime { get; set; } public Device Device { get; set; } - [Display(Name = "ID")] + [Display(Name = "Device")] public Guid? DeviceId { get; set; } [Display(Name = "Method")] public string Method { get; set; } - [Display(Name = "Request Parameters")] + [Display(Name = "Parameters")] public string Params { get; set; } - [Display(Name = "End Time")] + [Display(Name = "EndTime")] public DateTime EndTime { get; set; } - [Display(Name = "Result")] + [Display(Name = "IsSuccess")] public bool IsSuccess { get; set; } [Display(Name = "Description")] @@ -39,9 +39,9 @@ namespace IoTGateway.Model public enum RpcSide { - [Display(Name = "Server Request")] + [Display(Name = "ServerSide")] ServerSide=1, - [Display(Name = "Client Request")] + [Display(Name = "ClientSide")] ClientSide =1 } } diff --git a/IoTGateway.Model/SystemConfig.cs b/IoTGateway.Model/SystemConfig.cs index 8ce666f..0d6f2c9 100644 --- a/IoTGateway.Model/SystemConfig.cs +++ b/IoTGateway.Model/SystemConfig.cs @@ -5,19 +5,19 @@ namespace IoTGateway.Model { public class SystemConfig : BasePoco { - [Display(Name = "Gateway Name")] + [Display(Name = "GatewayName")] public string GatewayName { get; set; } [Display(Name = "ClientId")] public string ClientId { get; set; } - [Display(Name = "Mqtt Server ")] + [Display(Name = "MqttServer ")] public string MqttIp { get; set; } - [Display(Name = "Mqtt Port")] + [Display(Name = "MqttPort")] public int MqttPort { get; set; } - [Display(Name = "Mqtt UserName")] + [Display(Name = "UserName")] public string MqttUName { get; set; } - [Display(Name = "Mqtt Password")] + [Display(Name = "Password")] public string MqttUPwd { get; set; } - [Display(Name = "Output platform")] + [Display(Name = "OutputPlatform")] public IoTPlatformType IoTPlatformType { get; set; } } public enum IoTPlatformType @@ -26,17 +26,17 @@ namespace IoTGateway.Model ThingsBoard =0, [Display(Name = "IoTSharp")] IoTSharp =1, - [Display(Name = "Alibaba Internet of Things Platform")] + [Display(Name = "AliIoT")] AliCloudIoT=2, - [Display(Name = "Tencent Intelligent Cloud")] + [Display(Name = "TencentIoTHub")] TencentIoTHub =3, - [Display(Name = "Baidu Internet of Things Communication")] + [Display(Name = "BaiduIoTCore")] BaiduIoTCore =4, - [Display(Name = "中移OneNet")] + [Display(Name = "OneNet")] OneNET = 5, [Display(Name = "ThingsCloud")] ThingsCloud = 6, - [Display(Name = "Huawei Cloud")] + [Display(Name = "HuaWeiCloud")] HuaWei = 7, [Display(Name = "IoTGateway")] IoTGateway = 8 diff --git a/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigListVM.cs b/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigListVM.cs index e8f8d45..5b0be18 100644 --- a/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigListVM.cs +++ b/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigListVM.cs @@ -93,7 +93,7 @@ namespace IoTGateway.ViewModel.BasicData.DeviceConfigVMs public class DeviceConfig_View : DeviceConfig { - [Display(Name = "设备名")] + [Display(Name = "DeviceName")] public String DeviceName_view { get; set; } } diff --git a/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceListVM.cs b/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceListVM.cs index d59c266..e4b9e48 100644 --- a/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceListVM.cs +++ b/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceListVM.cs @@ -18,10 +18,10 @@ namespace IoTGateway.ViewModel.BasicData.DeviceVMs { return new List { - this.MakeAction("Device","Copy","设备复制","设备复制", GridActionParameterTypesEnum.SingleId,"BasicData",600).SetIconCls("layui-icon layui-icon-template-1").SetPromptMessage("你确定复制设备,包括配置参数和变量?").SetDialogTitle("复制设备确认").SetHideOnToolBar(true).SetShowInRow(true).SetBindVisiableColName("copy"), - this.MakeAction("Device","Attribute","请求属性","请求属性", GridActionParameterTypesEnum.SingleId,"BasicData",600).SetIconCls("layui-icon layui-icon-download-circle").SetPromptMessage("你确定请求客户端属性和共享属性吗?").SetDialogTitle("请求属性确认").SetHideOnToolBar(true).SetShowInRow(true).SetBindVisiableColName("attribute"), - this.MakeAction("Device","CreateGroup","创建组","创建组", GridActionParameterTypesEnum.NoId,"BasicData",600).SetIconCls("_wtmicon _wtmicon-zuzhiqunzu").SetDialogTitle("创建组").SetShowInRow(false), - this.MakeStandardAction("Device", GridActionStandardTypesEnum.Create, "创建设备","BasicData", dialogWidth: 800,name:"创建设备").SetIconCls("layui-icon layui-icon-senior"), + this.MakeAction("Device","Copy",Localizer["CopyDevice"],Localizer["CopyDevice"], GridActionParameterTypesEnum.SingleId,"BasicData",600).SetIconCls("layui-icon layui-icon-template-1").SetPromptMessage("你确定复制设备,包括配置参数和变量?").SetDialogTitle(Localizer["CopyDevice"]).SetHideOnToolBar(true).SetShowInRow(true).SetBindVisiableColName("copy"), + this.MakeAction("Device","Attribute",Localizer["RequestAttribute"],Localizer["RequestAttribute"], GridActionParameterTypesEnum.SingleId,"BasicData",600).SetIconCls("layui-icon layui-icon-download-circle").SetPromptMessage("你确定请求客户端属性和共享属性吗?").SetDialogTitle(Localizer["RequestAttribute"]).SetHideOnToolBar(true).SetShowInRow(true).SetBindVisiableColName("attribute"), + this.MakeAction("Device",Localizer["CreateGroup"],Localizer["CreateGroup"],Localizer["CreateGroup"], GridActionParameterTypesEnum.NoId,"BasicData",600).SetIconCls("_wtmicon _wtmicon-zuzhiqunzu").SetDialogTitle(Localizer["CreateGroup"]).SetShowInRow(false), + this.MakeStandardAction("Device", GridActionStandardTypesEnum.Create, Localizer["CreateDevice"],"BasicData", dialogWidth: 800,name:Localizer["CreateDevice"]).SetIconCls("layui-icon layui-icon-senior"), this.MakeStandardAction("Device", GridActionStandardTypesEnum.Edit, Localizer["Sys.Edit"], "BasicData", dialogWidth: 800), this.MakeStandardAction("Device", GridActionStandardTypesEnum.Delete, Localizer["Sys.Delete"], "BasicData", dialogWidth: 800), this.MakeStandardAction("Device", GridActionStandardTypesEnum.Details, Localizer["Sys.Details"], "BasicData", dialogWidth: 800), @@ -29,7 +29,7 @@ namespace IoTGateway.ViewModel.BasicData.DeviceVMs this.MakeStandardAction("Device", GridActionStandardTypesEnum.BatchDelete, Localizer["Sys.BatchDelete"], "BasicData", dialogWidth: 800), //this.MakeStandardAction("Device", GridActionStandardTypesEnum.Import, Localizer["Sys.Import"], "BasicData", dialogWidth: 800), this.MakeStandardAction("Device", GridActionStandardTypesEnum.ExportExcel, Localizer["Sys.Export"], "BasicData"), - this.MakeAction("Device","ImportExcel","导入Excel","导入Excel", GridActionParameterTypesEnum.NoId,"BasicData",600).SetIconCls("layui-icon layui-icon-upload-circle").SetDialogTitle("导入Excel模板").SetHideOnToolBar(false).SetShowInRow(false), + this.MakeAction("Device","ImportExcel",Localizer["ImportExcel"],Localizer["ImportExcel"], GridActionParameterTypesEnum.NoId,"BasicData",600).SetIconCls("layui-icon layui-icon-upload-circle").SetDialogTitle(Localizer["ImportExcel"]).SetHideOnToolBar(false).SetShowInRow(false), }; } @@ -103,7 +103,7 @@ namespace IoTGateway.ViewModel.BasicData.DeviceVMs AutoStart = y.AutoStart, CgUpload = y.CgUpload, EnforcePeriod = y.EnforcePeriod, - CmdPeriod=y.CmdPeriod, + CmdPeriod = y.CmdPeriod, Description = y.Description, DeviceTypeEnum = y.DeviceTypeEnum, DriverName_view = y.Driver?.DriverName, @@ -122,9 +122,9 @@ namespace IoTGateway.ViewModel.BasicData.DeviceVMs public class Device_View : Device { - [Display(Name = "驱动名")] + [Display(Name = "DriverName")] public String DriverName_view { get; set; } - [Display(Name = "父级名")] + [Display(Name = "GroupName")] public String DeviceName_view { get; set; } public int ExtraOrder { get; set; } } diff --git a/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableListVM.cs b/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableListVM.cs index b56e9d3..8e04437 100644 --- a/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableListVM.cs +++ b/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableListVM.cs @@ -21,7 +21,7 @@ namespace IoTGateway.ViewModel.BasicData.DeviceVariableVMs { return new List { - this.MakeAction("DeviceVariable","SetValue","写入值","写入值", GridActionParameterTypesEnum.MultiIds,"BasicData",600).SetIconCls("_wtmicon _wtmicon-xiayibu").SetHideOnToolBar(false).SetShowInRow(false).SetBindVisiableColName("setValue"), + this.MakeAction("DeviceVariable","SetValue",Localizer["WriteValue"],Localizer["WriteValue"], GridActionParameterTypesEnum.MultiIds,"BasicData",600).SetIconCls("_wtmicon _wtmicon-xiayibu").SetHideOnToolBar(false).SetShowInRow(false).SetBindVisiableColName("setValue"), this.MakeStandardAction("DeviceVariable", GridActionStandardTypesEnum.Create, Localizer["Sys.Create"],"BasicData", dialogWidth: 800), this.MakeStandardAction("DeviceVariable", GridActionStandardTypesEnum.Edit, Localizer["Sys.Edit"], "BasicData", dialogWidth: 800), this.MakeStandardAction("DeviceVariable", GridActionStandardTypesEnum.Delete, Localizer["Sys.Delete"], "BasicData", dialogWidth: 800), @@ -210,7 +210,7 @@ namespace IoTGateway.ViewModel.BasicData.DeviceVariableVMs public class DeviceVariable_View : DeviceVariable { - [Display(Name = "设备名")] + [Display(Name = "DeviceName")] public string DeviceName_view { get; set; } } } diff --git a/IoTGateway.ViewModel/MqttServer/MqttClientVMs/MqttClientListVM.cs b/IoTGateway.ViewModel/MqttServer/MqttClientVMs/MqttClientListVM.cs index b9ea43e..aa57221 100644 --- a/IoTGateway.ViewModel/MqttServer/MqttClientVMs/MqttClientListVM.cs +++ b/IoTGateway.ViewModel/MqttServer/MqttClientVMs/MqttClientListVM.cs @@ -67,34 +67,34 @@ namespace IoTGateway.ViewModel.MqttClient.MqttServerVMs } public class MqttClient_View : TopBasePoco { - [Display(Name = "客户端Id")] + [Display(Name = "ClientId")] public string ClientId { get; set; } [Display(Name = "Endpoint")] public string Endpoint { get; set; } - [Display(Name = "收消息数")] + [Display(Name = "RxMessages")] public long ReceivedApplicationMessagesCount { get; set; } - [Display(Name = "收发消息数")] + [Display(Name = "TxMessages")] public long SentApplicationMessagesCount { get; set; } - [Display(Name = "收包数")] + [Display(Name = "RxPackets")] public long ReceivedPacketsCount { get; set; } - [Display(Name = "发包数")] + [Display(Name = "TxPackets")] public long SentPacketsCount { get; set; } - [Display(Name = "发字节数")] + [Display(Name = "TxBytes")] public long BytesSent { get; set; } - [Display(Name = "收字节数")] + [Display(Name = "RxBytes")] public long BytesReceived { get; set; } - [Display(Name = "未决消息数")] + [Display(Name = "PendingMessage")] public long PendingApplicationMessagesCount { get; set; } - [Display(Name = "协议版本")] + [Display(Name = "ProtocolVersion")] public MqttProtocolVersion MqttProtocolVersion { get; set; } } diff --git a/IoTGateway.ViewModel/Rpc/RpcLogVMs/RpcLogListVM.cs b/IoTGateway.ViewModel/Rpc/RpcLogVMs/RpcLogListVM.cs index 8e6d762..18a728e 100644 --- a/IoTGateway.ViewModel/Rpc/RpcLogVMs/RpcLogListVM.cs +++ b/IoTGateway.ViewModel/Rpc/RpcLogVMs/RpcLogListVM.cs @@ -38,7 +38,7 @@ namespace IoTGateway.ViewModel.Rpc.RpcLogVMs this.MakeGridHeader(x => x.DeviceName_view), this.MakeGridHeader(x => x.Method), this.MakeGridHeader(x => x.Params), - this.MakeGridHeader(x => x.IsSuccess).SetHeader("是否成功"), + this.MakeGridHeader(x => x.IsSuccess), this.MakeGridHeader(x => x.Description), this.MakeGridHeaderAction(width: 200) }; @@ -92,9 +92,9 @@ namespace IoTGateway.ViewModel.Rpc.RpcLogVMs public class RpcLog_View : RpcLog { - [Display(Name = "设备名")] + [Display(Name = "DeviceName")] public String DeviceName_view { get; set; } - [Display(Name = "持续时间(ms)")] + [Display(Name = "Duration(ms)")] public double Duration { get; set; } } diff --git a/IoTGateway/Resources/Program.zh.resx b/IoTGateway/Resources/Program.zh.resx index 13cd764..8d9caf1 100644 --- a/IoTGateway/Resources/Program.zh.resx +++ b/IoTGateway/Resources/Program.zh.resx @@ -117,6 +117,36 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 地址 + + + 别名 + + + 共享属性 + + + 程序集名 + + + 启动 + + + 变化上传 + + + 客户端状态 + + + 客户端Id + + + 客户端属性 + + + 指令间隔ms + 勾选此项将只生成api,而没有前端代码 @@ -207,6 +237,87 @@ VM命名空间 + + 通讯配置 + + + 名称 + + + + + + 复制设备 + + + 创建设备 + + + 创建组 + + + 采集配置 + + + 属性侧 + + + 类型 + + + 描述 + + + 设备 + + + 设备名 + + + 设备维护 + + + 驱动 + + + 驱动名 + + + 驱动管理 + + + 持续时间(ms) + + + 大小端 + + + 结束时间 + + + 归档周期ms + + + 表达式 + + + 文件名 + + + 网关配置 + + + 网关名称 + + + + + + 导入Excel + + + 是否成功 + 修改密码 @@ -288,9 +399,81 @@ 菜单管理 + + 方法 + + + Mqtt端口 + + + Mqtt服务器 + + + 输出平台 + + + 参数 + + + 密码 + + + 未决消息数 + + + 权限 + + + 协议版本 + + + 原值 + + + 只读 + + + 读写 + 注册成功 + + 剩余授权数量 + + + 备注 + + + 请求属性 + + + Rpc日志 + + + 发起方 + + + 收字节数 + + + 收消息数 + + + 收包数 + + + 服务端 + + + 排序 + + + 开始时间 + + + 状态 + 账号 @@ -672,6 +855,33 @@ {0}输入的值不在允许的数据类型范围内 + + 更新时间 + + + 传输配置 + + + 教程文档 + + + 发字节数 + + + 收发消息数 + + + 发包数 + + + 类型 + + + 上传 + + + 用户名 + {0}格式错误 @@ -693,6 +903,18 @@ {0}最多输入{1}个字符 + + + + + 变量名 + + + 变量配置 + + + 写入值 + 账号 diff --git a/IoTGateway/iotgateway.db b/IoTGateway/iotgateway.db index aee9041224031e7792aef1cb2405b5866924b8fe..48a370eceb5778f66fdc192bb8521848e029bfb8 100644 GIT binary patch delta 40206 zcmeIb2b3Je)jvAb-ILP_5hOs771|Yyw&QfS06~Wtk_bXtOa_6-0*N3ptafEGh#;U$ zFu{N^21I7b!HJw~vav9HMnr>+ZEQ^X|8DhYdinf5Prvh>^UizcSsb=&d+T;pSGaY< z@7`YW=;$R&);@o|vYtw%cESJR-vvE3({JDBx`ku%xkseRefixA!(}P=NMWPmABzW6 zHp+kR&Pfxm&E5IPaWBcs)rkwsgGHs#zfoU<1?!|z%jccfz1%o?A9nfjNfY^<8=dkx z8twnav+|weTDU+;*>kjUp9MoMn(sWg?GO9)`Z)X zda7E#bJP|aSGxwcWaa)1CP>?rgLQ&+^4sw@Z)M&5;H%iKpFGQt^KG!_YP?-)Yo5BdFI*&G2iU>#H>{a6DV{Ej0{`_g6gp z?scbYwP4|*<29YnzK_*L7oF6p{p+w4otFpl zr912SwH;>#>E+KHH-*2mOxj?L!L)*!`BZ;CdY!z)Z{Jp$lG$$I{CyW6wfxQVq9?9B zwW~0gmb>~VCT&uwQ9)&@7@1MyY}coN$UFVgEVP>sXK!~>i6X3XSE)? z#%2tUM9aCHSe!JN^a4|(k$>-j?-y{tSeco^^1`B`C58odAC}l_l>;j?`NT(QiXUaA z3Lk&4)RQju$o-6Wy{2@h3!><4BXy_qqWGAHF@5_vHjO{FKdNTLO&S%J=5HT@I||*Q zS4zv`Z`9+oG*#};i%#A10#hcgo3B1YUHxA5%j)OVKUF`h{-L_E`danZ)n|ss|B0=r zZiPSgFCB}YbA}e+=Z-_0a@E>UGs)?p{;MR0nWpvtGGhs)xR#VM*3Z#|vwwZRj<}@x7Ya44t6v1*&N_QvX2h zO{unF)(xZC3~QPd+BLJ`hBdF*Xw)p%>fI%cqE!8y?rcZHR(_?tZRx*C3rd;d)y3Yz9ffW4Z{`=|%ehN(YWA`0?98c| zwbDB&A1Ws*MfrMpru3F{tTc-Kn2k%FNDrZZZ0FQ+aFz|KgA*o~`q!H<_Sk;9o#V@= zN!{EzUD=igxNTdVZ&Q`yEREt6Z!i^Bm>C%KY_EZ^G!+_3og@?zr&Cqu;yf)_2dl z_TBS_E!E)a@02P0igT2O+F@hS&)&6K)h+NbRkOUB5rPMqZd0xK4Xa-BbyL;rn%~qy zzUT~PUD2=bfHBn6I;&}|dSF>bP^)KpjV-G=3Bwq5^DM@-Yv98OE! z9^3*?!Eg=Q(P&tPZ-ky!uX&B8Q#0!gujbc1ucp^sC$v@1ur)ncw3u&lx-wzwSql$b zsQR8Wd4{&}HF<^+l`Sfp>d9ghhl}Sb zn=<|IHB0>y#!YCwo6!s#UfsjXG#w3#OLJ>}*syAW7dmy<4_x1B@Mq7#z|hXt4;wvl zPz~QyJ|F!(5tzgQ*Y{;Y#>*Hl?s>|TP4?^>x!?@LGL68rYliJ(Wtf^@b4?d><2IW{;9B*j>CIWN z@M!u!T8{eR)$a@;?S36CHarX*$o!hGYK@v3S`Ev!P;Lfd2(d$^XqE2_plUTO4OB*8 z`!&-uEUe1VtU0Dt*UZ2QL)VA~kVZe)zf8+=^^5BbjFaiRMJg79Q^EtX)R9rGb**Dl2N;4H z76%5$SFzua+)LmQgwhK?8f_l{`MYaNKwU$D5Xqb-ZUZ0Zfys@XPvm@2r2+rVmV zsIF<7x`|n`v1R8Tzi5A)_3z#Oz`IwTJ^S!^dmD`tCvU&-@ck#xz-ILJ)*50PM}NU? zJz4B1-hG~OfWBB6`SNPR5AcFo%?niwVqjxIxPeyl9jB=^jj(Bj&WNd?r4b$=ALMSYt4p+E^C%ibDDU9(J&xs8F;$mg!7J`=O29ZQL8S#ZPmFe{_xPbj#!`4 z$n~juz8cn5y=Hqje@rt3!}RKIO~)Hsf#u-U!)Sf_bl9JDp0Z$FoC@0q__6h5I&j1E zxD<|SAx&J|B`q1gLzOROcd8TrDv9HtPnsf4iAvkFOP9O|nZOq^!4*@a?V~?`(*E-{ zzrmkpia*~@#mz+V;0;$l=#H0ga}#lM{L3iL5XEz;=!)W3RCGk~z*kVTMRD(`s~@oB zRot}1%~e!1MbRfI#}LI8RMbUrS^XkEcoW3a z1o6H&BGSF0IN?kbdqmM+iQ-gIe3gnDisIETpg2Voy=kl4Tyhp}ZXj;rAU-x~83%4_ z%y5>rN;oZh`Hkl&-2>}V?F7f6I#yInaQ2N66%!n6>rh3;$DWH$uT5osHi`plQ8CFu zw5F(-;LsT@DkeB!)WSikxh-%sfbMo1+2v;wrQ~mK^t)iK`>bm@ZTRIO%o+HA-ar@ z9yE@Im1y`a+qPGeQYMv<6>`U9f z(!tL^YX2(UORU?7?ttxA(}|Z7i%v8uR+XrerganPkkPsj@Ap6Gm!e;heo3q;jU4a^*7Ci`u6_ss7z z`)4+#c`IS^GsESNbI+tdOh1-hSh)`~O|yS#`H1p_(oV%aas%DC6humNbSTnr@JIK@+&o5__2x7N zVmR2$Xd*X@CUVpE;6$gPP`+nGe-kI67|rM)6s_3N-|FIlV$h>gP$>A~6eJ2}MAf1L zQ2b46cYz;&(1`WHpI-f&PyzV3gGch(uG;`*Vh7Z1G||NiP<#e>(2A0QTXWWf*zo{((Q;z)~zbe*W_wWFrR zStTU5v^b5#YmHd!X*yA&1u0I9XqAdHL9{HGzMy9nF?*~WSyG~PFJ`D1-H8k;v`1P7 z74gE++81Lc)_(M?Ow>EU5ToA3OhfQA(Rj4>Uz{a%kB{s;`=+X2Rram?uDVO*uIf*# zgVjv6ulk$H*?i(633i@El3IyYu)K($`Q^8s*Td5T(zNC0FKZch zVCCvgi!P95Dl+d-iOI`PJFjO0NtRRjxZUb+M2owi#Z2XQFejc}*|*j1l6JdfoN5`F zL@^o@Q55We3`H#oN8F5|A&SvEh@uz_VP2|={*)o3rn*w8>eS)F`I26>A=@{h zFzA*FEv(+C1Yu`I08Q!LGcJGkf%_xt4qr7Ytn6d&pDR zxyyI_Lv8ryj(ng*!!?axjl08hHj!^tG9RRNWv4Kn+d{r2yIwXYA0r#6Fi)fLt6S9hzb>|1sd`=0b= zHH+PGXXQ+(m(}Dc^0k$HDt4t({zLix^7(9#$?^`V*UJZ%XO`D2eOP+5bP4QyerZhc zlj1LmmluyLZY7;8|GhY&@Ok0c!gYlc3$qJT^IzwGlmDswY<@8Rz5MiiI`^h@gP*%I zcUEqnTs>Ek=CGHg7v7S*4kUl&e zrq@;etURGyr7Tt^UEr<5&$&|Wk=XZJ*Q2<075%=5-?BMf7q;#n*82U>OD?C|2e*FR zw^eEdP#KqlveGNTD4DTJ@okK&u6r5pU$t`l&H9PN`{@KEXJhG zn;~~gtjYhhhuo84m%*-iO>{5y34iNS`9!6?-!e=XU&Y?bu=4c)kblS|wmI(- z^EIV)-Jo?{kFLG!t?2SQapBb~{}Y_UiN3YoW#DQndxPJ7Z-lZ zRr2=+=1M!JluMO`N<&#s{Q~0Fti^64vMTKTz z{rq3@Pvx)9A0s`N-!9*s`!e@p?uOjSxjDJbdm*U3oV_VKl-)I}X0w^!W$wzHo!K|z zN;_t{((k1oN-s|zoZce6j`Bz4=TZ;*hP{McH^g>feJqoD^8#;uNq&z{x{y}Q#eCd_ z@^jG&@t%Tnh5b~FXjHzgUFKKmG_m*dTXv)Co&0T=u6Gbi!=k%YRHTKNVZt3C7GQ=o z+xMma^5GY!tLM>h&mK|UvR#%^AMkT7m1k#|@ci(vCR5!_#NVTGU%M=^5|yjQt4?}+$*Z5R`;mt)qLgmm3yRm<=o2r%8W`^`MvVP<%`OPls&1$ z-YJhMeOmfu>59^krLEb$Y?*SiGL%l0CKmr*e6DzX@x``7Rd|P-~*`;uE zVW~2`up66SP^Ene+5F1s{tTz@ zrP)QW6UG|fh>VX0_d_0SOmMsYpRb;ng3@UEF`uc)S~H>?Ki<)#M@ zbTbTUo^HFfdOc_aS`(fO-C=w7$^-q93csD|1wQ%wU<_}1u*(O5UDMsVuBq_Tg+ajf zpoglyp*0{f!h#RuJ$VP=eSlkA_YBR0=Rj|&0oz^Ftg8+@0d?50;UO>^a1F!83op25 zz`X5vK0H*6Hr;@vH5^ohlL(eu6|yKS*sg)M55jtA`EWpmhQ)TJhZ=YzUsLfY-O}+; zbi`5Nf(%_>hk3eLZ+ad(OVm^y!!>odcRUz^O&{arkoytdc+1l@&o!Mo6Psc{_uOXC z(C{euaA3rTYr=ye81716^_rS#!i^uXE6vjFX0s90LO+^&cpuOsIQ1>dZJJKA9;mEA z&FfBJVU`+z7r>Tps=ifo$tKIi`)ba~wGBY!{AK z5MucmY@VoUx@ORXBh|HRyuCwiR~X3QLxD@l!LP1eXZwh^Hvv8{(Wudg&<71nD7j9W zripp?umnwZr+8*K;K6W+ch*ffec^_%YaV>EaOiqLpm`dG!e~fR_v4Duzp=PV4C!dL|kea5TI* z96A9!A0GK(nhutKXoiMYH{pj2*wvz{0UwXmP~n$=7tw^jgFFNn4BxKTZ7497VY92E znue{zNeB;>f%RktI$R4HHXgY(3^?mFD`0|AYL4y=1fdBNKbAiFr@Gkp7*Y=m!P7K& z3Y&FyPV`Vm55opt7h{B)aGrTKwv1})^?Jk6>S4Xk&Ze4}XFaengLQ*^>CHME*cyKL znpejJsCBGub~hayh7sBt|KeVGqF_RXu39$vkU|s7!PMe z!0+W+j^@?sj)pgcj{{67w7_ZV4bAp#+Y0p5GgMP=Ht-^t*``}3E}&waSt>jwKAh|g z54^#2*l59o^rjvJRy~AoG{CGu39Na(Q?FTdcw^wF*D-f&4e`*1XL-#!1{iKn)P(mB zz9+4w8J4SAF8G?Ju~AV?O*K_anqxKLtu#^7f%mos_m~?5s@-V%LF&C8S%O99&z}Kb z@?l<@Hce1^@Zf+QV!W{&Ocm4PVXSLlGVsu#UqKM0{>BfzPkwf;sBedUV3J1?elT(m zVsCl?G!U=>oEaS5G+9@xrek2jYM5hqc{Gd*9*M`BP8fpMJ65Ba`YV6CAoWH)vCXD! z8CuP92p~}>ha~|LG|y=mSW9r=Hd0UXdH2h`QBSZ)eGMzGfhLLXg9!z0fDH|u+A^AM z!?9C;5k0Y7)uts64>_1Q*cTX|-^2-F!H1>ma3$)jI(*js@-|F#MGH*}tG@|1U!689 zn3h+^O7r2i4SYb0R8xncrMD!V7}cklv!TLUU?p%CV-8#uSb)&Le$_M}K6D)xnH?UK zcM@IKfc)?sFwDThk%plGdj}W5&S_$~1x>^CbXKCSYuK6K;pl4vdk|+A*0+w4vCxOQ z891TaG*X}OYaW!Jje3G*Pt#I({yWCmBjm9S8If+r-l!INIsg0u3&A{ zeFH}#77%e83;sbBp7TaC2*bMWz`NRHMe2%bV-`F(<1tONZoy_<8w?F6ijQTfs=DK` z0>7^!?KEA~$Nbv5uak?FywG4I@HB?#N>hdZ&$E5NQT{9hyFI_blH8-(T9T^K&@?bP zuu&gf3ULa1o{n_}Xo`l(3h1E7^V1%YPZ0ZA1<0U@W3Hx!#9SO=83s5EKrHY#H}r-R zxTz-#$_uI8Sv94cqTImtW3JLKSyEBiNMZ7;@-6aGc~`kl&Pcz5kadetl{KLv-&Hva zs&TziF8>#)#!!hjlkO~!E`0!{n3oPaTspH9mewnNR(zs(RdI1~+v23cKMKzkt}mQa zm?Q1Ys)cEVRQ}cciv0KUyXCcfF1IpwckZ0re(dd>o9oK1V#C>ovKM6!&3f5&GM{9A zk-0o`Bs({=Rc3tpZ|SGgKT02$-ag%}{FBXOYeJ0b8IX5NO|wm~DtK^lgy3`lLc+$O z3WlbsffhCl&8G1O{vd=50Ui#i21}=jRqv3PgyT9in@!7Vx@?$g0_xC&(?6&MF8G$I z<3RI$IAyU-;Vt)k4Zwxe6QZUy(DZR4!k-`7I7i?($0AVeTHwQV>lqDI4OKRus@8E3 ztA>kBY3al*&{4Nx5`Y3Ht?fHH1Ppegs0qG_!^W=}z%5{Pfu(p34t~37d0_dj8q|IE z6RK%7!T|%|1YkiN8_OH-fg=YiB?L53$0D#A4UgR*dg?iWs)2O_tAQbcAOTOH>LsBp5>d<=BW3IYQ>sqVocn0lY6P}9R1W7HsP z(*6bObbQP=CKjA0fMjagY=2Rcj<>pFVjPGQW7!c_2OtmE_rUVOj2mjI|5;I$AWY62n+)Fi{VA)1p@~oWLg>xELtE(Al9QrdPmm)1V-~ijjhGU=cPV= zOkV2Y*WN34&n3fMGLRkh1`EO0nqcvIv_-J40YoryqCix_&^GZx@M7hjm!}D43CYOR zfX%`&3)$T?V952soog0Y3`QI;7P_ey#FIVWZs-Jg0hR%4S}Z@D^f-JR$o2umKAnx{ zyUFmM?{m96Cwe>t&So821aKrc79d^_-p{Mq&|?B9Bz5dZHcmVqo2#iqcs2qL`=9}N z35yY@Fa#h7l)8^y!4Bmso|ktL$3oqPv}6Ot0~rCc-UOxRp+3$NOr{NnZq(WO{2O#9 z>WQTVAwe>lIw3S5$dXcHLY}YzK!h|0aBXA}svCGCI>2z!fm!Pg5HY^%Lmt2Z0e+&Y z4I}k;KK%~)Infg^9o-3m46~pe;mP>n=>dcxh~HRVfPUzW)Q9}5JLKqSwQz)aIHYR< zbO($kCQB>>EMrJYhSt<|H}yHMKHEB4El7)ir(pZy1cMZT0}$H;n;&8qszY>vHh2h) zp#^!$^IaN4AM4wO(Bsj`-KblTf(Xk4;e9QF;j7pot{|u7)9U z>tI;TX4A2uum(Vir5@+YGE%SDq?QWVx2|Jj*BznsXy6!twn4kqLzPZfsAmULclgtj z;ZT}!HyqaVD-Kx=YGeqRfVh(1Bm^CljHU^sACzD~KkKkC{5~V?#NWPKzFwS!Ca}+> z<6_xhV*xHm`UQcU8o;hWWCiNRVe5*=V}EKSD*}y%X#?bjL`NMuhiAD)130T@lWi?( zLW?pCusa_<3wjOkJm_JN7a;|LYe1Rv+1MVwA}jSoJ%{Ftw+1XoZQ}588xZrc5U@6E z)NPmsgt64~{MLKqNbZ9Jr0zSwK{n`kFm32hfVZkO)lwTF&I(MS!N%}!vn@H%v`pO# zh|&4jdM1>AK)#{%Sh}V)u$>#=Y^mos8a&CRM#C++6527O3Fy7xaOe+d;VvzxP}emmORfdfEL%qm4X}ug2cF~#fw&I65_}A* zI2ajFdzg2l!4BlJbJ*l356dS-bEHBo2Xm>_nQHWubdtGKuQGS1K!Jy5H&Ri@(+X~wBljFe3(QaqF}4~(C%EYlF+x=A~9Y#+=vj+ zJ!;;7*5VqF&;n}SGHoB5h%JmB+6Y1@HZ|Zuamdt3zbAuD2Y<;S4G3o*%u0~9$Yf%|{Ghq1kNMz}@^xYpV3QM08s@bCCp@}~Ni!@67#Ix~ zVgq=SoqAbx*V8PV5>2Q|WHIz0TX-&Zj|~JFMzIls{iI$JHC<07MIU}tR5C48a&$t= zH*t8<4h8-e-U_k<;!T|ftZg+L+ZQYZx`Qx7`l@SSn0?EzjL2pTbrw2pfZf_4!x=3} z7X~XF61p1z;vIO7&kh&OW2r%Sgg6F{4S^Gt975v*whDWar`KU@O8urs=8K+^rwT@C z*Bdx9O&`_;ygD>5FlrSFo(f44tQD-pZ>E0D&&7I-1`Tf?hFH2dQ^7d`z-S#>$x!V) z94BxtyFQyF`qD{1sD}^kKloJ2t@Xn^1_qwoFsqP?u(}*r$zVQ!4XweBj%vc3L&jPN_}BrkKj9R^iZy_n z_I=xHVAr#w3Oom97j?qM$ZJ6B1BeT`5C<0|13X$+n?B@o=uVCmxq@JP1mn{2Co(ge zjR5KojCM62I(P^uIeyygQqc)muV5dCHVDHDYKE{^sbovjfKP@M1uti_A4FRKO1Xt; zgGG+Uz`;g=P6jA6tZ#^Dz#_o0&gr4pBP38_C3|#=ha{E4TwkN*iA9USf}QOWs)?Oz zS{5WU9DF2HkZuv`Pz$i4nl_X^EMIn^FolClL5~0fvg$Byz-9rvkPQn5Oi?7LLFcj? z>;lm|%!59*JWOe%2Vk*duRL*@>t*Ah{5m{SX?9)4&!r!A|i`5VmN~K_v=tpjhk#@lHUBJ1Rvo1jM5uAwsf* zIE=l9^F+hu@#^e&QL~P~10RBZ06Q4AGh7fj=D`IF7zZJJ>9Be*fe{!0ik&QKHK?x$RsussC|~MD(NPQvjI%f!aj=5@kxpk|6F{*Jn{b^t5N+6o zqNY30aN$^>y+L732rVJz4|xmc39R;(3IijXBC6_S<+2f@gcXH7qJtYWX+gm}(NH1k zYoW`!sV0m*j!Gi7jn&)QeqwB4mxK8j#z(cz?xmWZ>hjH>lc(|pPsn+)A4UaOeq9gtF;fduzvX}aRZAto@dT9t8xTQ;B-n#pVuiq7U$0~HAmqXh zoYc2`!Q*ly*0@lZRTC>b6wVh|8*qf-eZU{!*s%j_5i|9MV1~Dz1ZMcqoUKay}Mba=x=7-&qG;lBzhXiRm0Du}{3VIl% zJ`pu7Onm@e58EF0C>%OCrsyPrGXkC@@{72sZ+iIqkIN^(Eq^#`N!<<<65mGG%_dC+ zu{Pg>{{m;dg8(B$*1+;InV<8VJWa@Q4ullM@PMH}A;BcWiVc$}?D()DA}q#kXr`Zf zg?hxl{#b@};xQ^CE)+2;*y0eZ(Yq#eVc)`;6vD#=F~HZgy1_OOHEjpMQ;o2u>lE=s zn-dZ={DUgO8w_m9hU>BI#2aIpAh|)pfx#X%N#25zi8rQ$vw`E;GuTEqi>gosny_os z?0}X#6hSO!s3PzI+7Q$bj|7v-O_xkmrb~H~PoIeRrEMlEhfUu<-#@xvL|&qwID;VA z2LYrT;cIjd#si*#BM}VQt=kR${0VYT-{AZ<5u8U5IH0M*mxmE`!NQ;)!rg|jKZr?? z-}DB*eUaR&?HAMF?a@K(N0_hZJc2L_&4Hv~93KrG#&W3o8b4x^+^xr$u@6b748U_}CBjCAHBGv*8~8XiNvlI^+utl&+b1T3gA5ikm^56_ zzySxAYr}v7>81{ej8rV6)!N=M5e(*b(12h8moAnxaUD8(NlMqS(-7K=Xd#WCKU1`} zSDO&55%x3e6}Sw9@{dCjQ-|m14GKat!7lmXA7LQ(jA_7g;4nd;78=6V0RxAJ6SjDG zLtz%h@`LZE)tE7NaE~@&k^o8~ocFv$Gq8J`FbTimhi|0xYP-cW33v!Kw%}SZB)i6h z33v#f^hdC&U1FL9a$d9^zt^ToBDhfpZ+~2j#?CQe0!G1~rw;bFX_BZ9Vg#qp9YNDs zk>HO`!>G@RX%fivt4AGcW2cxffoMNsG-k(y2@c$-mpis;l2|3FFuka8X$>~kbA>3 zKazi?3~a58Pvv&a_2tspH?wzS&&ckTHM0f88QhaOR~es~pV=fcN`TfbN*}6hmG;tO zluwmkDpv?k*wX5*fKsO`zpdO3EZtrei%db~d&}pQ4=8V1UZeDW>5=b%LoX{XDsEXE zSNLn;>B2RIV+-3AHs2usMgIBx_4$+XJLP+F-zZ1sUe4W|TPpuWeoDR?z`gC{4Wuum z=cVhV6Q$YGRDqWJDO$(?Rd)Ysu z%je?4XWvA?MWLSY3w}n>x`XJHZN#2M*=Tqa?wyx*! z=WdecMkqFKId$&=K7BT!@r0zw8NiYfyN!Q)z1$ns`o9PHlh}EDv!|pQAG2IOMncAe zBW|GP*KS?ATGs+yd)X_|PuE`dU(w}Re$54|2X1c*LH6wOGLutlrmR#otejJR2~g-gia#hk zQz+!M+GOuRx>CKhJ@>SBK>?2k}Mf%78F-m!^E5C6nKWcFAL1}RJL1|R~1pe$A zik{zj-jN5-+jqhKNAXS9S3G{jC}q##kC_r=E9w5hosS#UKXsCp%gsq${H?Mv?_s-RsVM_l$e^Iu+&U;d3g=V%C@IOLfUX zs_Iq_Df7}3#V?BE3!CKkm4h759-g@?{aJcrX0#5!tWu>x@yh=Vq`b0XAz0ZzI{XKOy-dE!% zZ=swsyz^bkJgMu1^(*}>HM+lCn~-Cw!NP+Vth#&f zgC$oft8TmK{cC=5{MtmY4m#5!7yv;!Z=7U^JOftwy^DVG!RhB^SKW3OY7eh_ukv5% zuH$q6jp(7hK%^KaA^6<$6ssIHk&cM?*AFQRontfKeGj-EU{`@E2n!c9HXm9)d_h1} zK)%-jQG>VLQnZt-_FJMScfY&r>^v^$319HA^1OSz+cIs#k_>>;)W)2V3? zg35!N2L@puh)WoM!XS&m(ArPs2S27%_$H4ikFJHeo+ZM)DGG8#xc4@9w&NH1Sc+PV z0vLC=1w|3&#lNPzBF>9{x~tNPcw0Zf%~lNKZmVw|vYXP1Z+^FZud@5LtrR`sL*cQKj)c$qs zUaKGV+JpGR0eh_`yWt@;97QT&qI-GyVT9(2xUD3U7)3Lk1ez$UioZ|fBAO}5bVadF z+dhJ2Op#yw7NkkY5=a>VPs7=LlozXgDEB~HRJ}Su0siO6r#96hP*Dg=j|h00Md4GE zktL>jR&_lDscibcNi~Db-uIvMGXF_0)6UuRpY$@=T{#31{wKZ6>Z~sRNiXyN@ANXq zPAF}dDrGcQy05q&A{xi#cgpf;*s)A)&3Dq8m+ z?mhe6^DcPrnicP_xNg-sXMS+uihsSsk62H!`4?9zb2D=WRg#}4aYY{!Rs7(ZyFd8h zk4Bb7_2H|zQj@cTYYg^|>L17VyuTI@;_7S^&@AUNW%xHX>QxCQ*e?YYgTjdU>}qV{`c9zCq61OK-#zV8`tzP#3FtlNWR9k$rchIQY1PG-zW0-}S6y=Ys%x&LCQZKGRmxqX z!GN-*U#6-TRcn^J-;DRXJpXNt;#_y8Q|A0{`ax z>@Ad2{v+@UH7C+6lE{kxPYV1`%B*_kaQ0DUsH!XuOa1)Z=ar+k##)(_x+7J+tlC$3 zva(g5W{Q;Q^kz{)@_+%KjcoU%jY2sVv?cr6+%_9Hq>kS?V9&;y22CrW~>f zia&WtX)@(t2gT1`R+cbjzJ;pCysA8`9BiQEyrz7sEY?ukp)`-t~I?h zeEu7X%%J*iT;lw<2xuPMdRlq-oHqeKR|ZETgr?7-RZPIA6lbr6igCQLPo*cVaQeI4vmTl6GWIq?y8}#m?%LA2-!P( z^r31@lpqF!x=1GDzPUq{HerHT3}N}zhsrTcf_MySEON~Zm14pKff-~n?&%vUwuzF2 zP>?qQM1>JVouetlAodOAW1<9+5yG3+H=E>8Nway0*&S&%^w_iK+FIU2@r|!OSTBpZNh&Cn+xFU2UDelqmiz9Bg#0uB)HEDKJ4f~ruM8Qjm{98sVT6SfPQT;ZG+0a>A#v1Lv=9f6YZE4kJD`o$s~sEDB!JJ4c(Y^L zgh_Dm;?1TnZqw)qV*U80la$`+N5?ca?T~*T#n)PiN5w=5Li3{CHF#v3C`qVW)Vm|v zG-`qvv(}Pd)FuLu1$mDF13`LKz-q|t4~Sg=SfvKo0nmoPhS8Xl#{`c1g>6D`KDgfi zg$M8q7E(fC0)%A(uo)tuYXb>xjRt@5OWI(Ew~5>Y&>U)wQa7Nr!`g&NaL0V$T)AiZ z;DVT_g~SCn`=5Zg{8yhd_(>0K(*R-A5je|l-Vp2dkTy+{Fb=#GrCh*E9o(i%64t_!GqdFonw~xeM{tNeS-(KNpRG`ll$)jV)@v`kWmH?XcGaB6;hA{A^)*3nm{kP zhyVgEu7Tsn25v(|8stcf`oECJHg7)&a3h2O;LHS?8UU7tk0S|yR-k7Pzz%>AqJj~9 zwHm-OG&3edz$6Ugz*YgT31l9kLy_x%5ZE5@Jca=ncR=oEoG_ckLahzK7b$r~DiD6FOsTBZ+e z5)&cxu8!yiLPG<$*aR*bcsw8;RZU>Rb+gGQ0;-`8&4_6bETq~vzyPNMrV3rcSO5&C z>WCJ`x&tssj70=g8gko&VSqsZ^bP^0lvn}58ieOYAdm)z1Q@D|o(Awm@=_A zj5bk#1Q@0c$gn43$U`g>3IqmD5;%2)B&YzlM*yrLJtjg{3`FoXC%Ml0IfpUI@T{lVSPxAi2zYl z5lI0&D2Y|ThXImEQ4f&AfHp^)NWVebPC$o-`eH)84jdT;&Vb3} zSRkei=qv&$%$nW|k^C9Kopl`x@kXsF~@ z6Ot{x9|$*!2?0<qtH!N%o_~*pHL~7l%m=N(|b^~t)Y#SJv zj%|*V78GRXQCtLa4CqEnL+g!+@F+|WVc;OxLUIR3P?4J2LG%;iYMY2~6y0noO+9Tw zgy#hqGsH+Bu{rS{&@>PojIDqm1*9TZn_+8RPK}9l09Gw<1WhOWIc*{bkry=toFd8s z3|O_(4MR4fpEXx%nVl1NKxj4Upg>#;Fmf^bSAZ0)i! zF=2u*$<~rwCnib|%P6`TvDUTQgh_(STO4Gqm?%NWHnm2_1_ou#m@q*`meqtffJe6p zlcZfChA?%2T+N~KVG5u&B#6t_0ehQ~=>oV-MV`<%D|b}RsO*)~bGeG8d{`-^XNq(W z7nBc*GazPHX74H;M%fMi7eX z9)WfG^N*-30y6kMPZI{}7I8l+-_$Nk>>~cBkdRJGTi3zX^+dj-K&~Cvx*plOE@)j3 z6!kJu{v%E~D>G4g5K)%c9RBS;>A8OEs`Ck7(eKm6HN$#EAHKbs-eW4?<7ugdccVL* zC}f>SWs$C?Rj#zDGO2e*ltr+as3WC*!N0tEHF}QvC8a(U**1q~T_bPD*x%>{df8{g zi+&_eMDD@0S{+=IuD$Gy=<=Ik{I(VTJhs*EGF^Mwo6+S3x?Cp#?1a(lWq%Qufm>430-P$7tmCKOdjwE(sQ$&Zjo7#>`k-A}{rBZn2ve2S%@oIVyrF{IRioJrq6LE0xs zt17#XYC=Fo>?C5AbbRgtf&!w_A+zD56$rh6o(l!pZ?fBa=TOxILN&9+Lv0HWrGPmk zIY9HIj{~+}gHBF4XAnlBg=`5wZKd3|LxMPj)Z5~r2@IGl%WqpL@3wtsizUm5XC@H$ zS)D6y$-C~5AnqY0aE?e)=eZOv4AUw_*C5gj87548DhFZ2P+=QLRmJA=kAEf)?HDEq zj7YsjT}4=GM*||ldye^4D+u4KBScDrDHMVjEdeBA@eqDQX}1DoeM2%fL=JAxuR?th z-jhV;V-XgM0=@?h6`e{T^RcN^le9MkdqTK2DAg3%X()oSrUEFgoAKH1nwa!kKHOZ1md0$6NuHSA*B*U5+bl4f&MilaX@-E zB;kWv#a7TmkwOf)0g-bHN)t)65Q-7_2d&USbT9&|Al2Ft55^Z!8pzmzI5)%-W0OJM z$5(cc5dia#bODGRt~b~fBI43V=x!bAGQ!WXZ4i!!P9kmwn-V!!U{=`W#)%Bd zI)$OZs0^PGVEd+&RS1a03R3Y*#LFSJ z!e$qVh)aA54BHINdkv@}CbU8_%#$LBNXn*8pCzla-mmbwfosB*uxqB1odNGoweQ1pU__-*i7kwMv+nj#@j@Ma=|iI#LMF`vp=Oi24b< zB}^7I6X^0x6*Utm@2szfpZyE@Z_)Nmptv)^ocsiuI;&A9k_3#UR`&40U&>K(6NI&6 z`$Fq?5%-A=2OfdQCx=oAA|)5%j8)rbJMkNT+2X57Tt>in&wN^*KFv>HCtw?kIMJ_< z15Xv1ACMrUqm6)VB;FM%(hx@uA6FBmNB{!Sb;=ovWHN{cMGSuko;q99Okh4hG{Tp7 z$!KOYM1+pShVku;-6j2Dk{B{hsOZ`st0rGw)YXrp38YVG` zSw8it7`Gdbm%BF-$t{w&<&X?`yY>MI_Sr?lS65Hx=esxTv6E_wI=qAZ(*7AnO0lJ3OIqTi(v4nma zN9hvCveOqlTdl6q=d)x|hMH%TJpc=Y1{ zU7-Furd1}dC2aa}gs!G_&am8ayT{SFNpdYmp249wGB-)uWqPd^1|bg5MSwqqoqwN& zSvdLip*S=*Nj_$34WEP{)J`0q3%v+j0TJH_Cx@jL(jx>uI3SwP+9+dT9Ucqe-0B;O z19TAz31JrA7fYO6lzRhdk4YG|@u5;A>O+nY{`lt%Lmvm{A{{9LkKu)aUjm#R(f1IB z;5~qRh!37NklW1)TSRemE@d#%0a3uGFG-(6@)M-3rL+YO#114opcLA|aoIN%hvz0y zgM@FjZzzt>MXraAvRdSj9g1UflN{kR?2$uuD2~mgRN9>mP~p4OhvMK|WV7jbHd1Sm zvw0{E&c%duJaG5}O9*8Z2j(VG<3_X=2j;?y)iIqyi z5ECJ(4RWTE>k6A1=~JPL;ghg68(9I7ycANJBhph~CHgTDY)#0vfV?@#!H$+Fr4u2T z>MHU$BKM;KLcMJBq6xE8vtj3u;ne=A|?dX z*)pJES_D)>#vin3LNiCgSA3Teswxtq6Cv6Eg*kY(^h_$7%dEu5JI>1Nlc{G)>37oi zrO!_vklrl4rt*>WjPjWB1AJwqsjM%5R(&NWXJ60WnmrZyfxjCSjTCv6LizXQd&=jO z_Z8n4c~^d-^kC`2(!r%IN^2MYnAPNo(&zYe&Skmp2FJ5Ei}368{ReVTs+%X9aYWGwh zt^2|#Cd&M!pCURs>f5qbU(Rl~m0@R&C<`S&>Q9u9s8!xm)OqT2hMs({U6$C+{FATb z*%Ax+=Kr8~4_em^Ti4Na?PY(6F0avLnke%vzLrmkEbI?2Av^RA;;B(tnMY+K_vO&;AA(!6jz%TfU{1H)>tiZC%%(YcE?BU7n{)EAV!SQ`77k|Y)*!X=lB7Gpn?hA*pj`tSe| zQnbA~cWLZrN@6bKN01D(H1;tiF`V&9XW}4U8Y8lkq(Y-EULz9bER7M_NfM*+XVF^U z(ioAA5ZjJ9()c$BOVyXgh-?e^pH9iFsf+X>qUm#&#)$0BxvlxAA;7Vg#(->K96Bbs z=0|Nz9W1pOI(;>w(?=tyg9}};u!=FE(fJz^M0ohuVqq29gs>5I{O$=6MiTkbe47y8 zeh5Pc7Gj4WTS#LDlnlN+{d1clYatmYTwcrlidV(16B)sp+_8V;Nhr zR|KtI8so7Ervvd0`3r3*Lnft}^qO#xA*Gs!%#=v(88$^r`qCJWjiiSiT~xF%=p2Q} z8e_5vP}<3sE=EuviZR(q%<9xyOAU=d*-4D-(J~y0LD`V~I@;T*wU)UdMr9|-x7ac_ z#E9%9nHR;{?HfA2y>^jFw__4Uv7~B4$Hhb)^D*)nlay(FL&wG>3GyZuLRrD0%U}&0X9w)x=nAJ3$)b)vFfDXN<>AlF^q4TU$BCV|V=M1|mvm6oEC7 z&q&Qmy`PfKk?)Z9h2pRcVNP-rM|_s>G`2=%kBVN&At}mT<+HM%m-i{xv(J=E*&mhO z$sQ-~mEFE{Z)sV!yEI>NN;6XLm%56piVqeqEFM&xSzNR5VdkGwCG$ez(ZVH#1+rQ2 z*&hmH@}IE#DKFd9kyE3y=?r4OSi_E;%T+a;Bfj!BZ? zGRilV45NZ)PUdH=lsEeS4Em%u5&8u1rc?NzekPwXki;y+La`JQ*n(IfY9=rMF<;ai zNMQ0|o~W9@#>2Ltnn^-1*yf_9J5x;l4mC>Q&(pamXsr5>Dy3&i6joVfjrvrtC1wEQ1(F(#!)v(z<)%z2R?!h6N%fF z6_a2A`M6`r+TpZ`l4Ree)+Wvo-L%_;Nxo4=g!8TvDt^692#vYphh&M6V6=EYt4)ZT z9lsjM7gAu@QnO72C}YQj>C_qlbUhLEe^K9hfF(u$bniTI~w+A9B@O>j!s|5Tis0% z#sN1ly>$Fw9ubmp5rlEj4Zfe(@$-2^NQN;ik~r`N=wK|$fB!YTmVq%2yupWoJAPPi zb!+Hm9DS4I+s{PU8qqicC&{OviLkW^;s_ia8R*Q( zr*Jxch?lz9G7QHNI9h`5^0o}aar8|R{f_V5L;NR>zDc6$@$!+xBID?rBtTetuStej zlX3J-5?Cw|Qc6~=$v6ZDw&9K_S^nrz^3($e$lsUiPgP%Sx$fxGo+~T#Y0r5TyZvd; zD53EONN9X<=}>_6*D3xHxkWF7yABDBbNxtZ{8ZuU!ZC$eg~|DUT|8T0BJ zvtblU4;bkA?Rl=Ydd8}rtJS5`GCXijWjg>j#XdJ~mqNIKCR>^K_ZVtnxSP+hRV_)? zvRb7Yij`1JpX03qmc2=L4aH_rv4`VZ;#zE0JRIK>dp~w<{EGOwFp{HUtFK*&DhgpY zy!G0ZXPz0Lp{r`+){pj=-j8%Du5T?GHz3|2JA#g;dzUg}qHY(r3q1zEy@f8vbJo%4 zoZ=6uB9+NXwJcZba+NM=nxUvZgM9AYb#!@$?rf|p72gosAL|;O9T^=N9h!dlz-9N- zopQ?k^yNZP=ws@>bOp2|2o&XZNeg)Wqx6KbHuEM~)v{HsnpKKvs-~>_jo|lIGUX`t zAp1O?^=CRuN=f|bpXsZh#B9S$9-%LX5`7XzkJ2LsQxyG0x&#{G1tM2zo~BL7lnmK2 zMbkD-QA=35=t#B(C&RWZ-SLcs2UDqYc1lfYNF*iwwN?M zC!tHGVav&JqZwE8`IvG9A4avVR#}z=6Sz6ulP@{kL4oEKFPV^%DMOSDCjlLFB+>C) zRRrC!G}V(mDWyXP715pFbdh{k-J<4W^;A`>WvxoH5{jv4Hqn?9^b|OGF67 zuTCczZ(p+5k3*B_4(V=ul;U|J;qZ^ozj)p+%OtQ_HoB%Q55S{QttnNOrdg_~`C}D= z8rk?2RD2KEm@WAuHstVu%eE7B-cCniD1HT9iub2bITr@{L->JNOgR^dhpF+{J{^hz z+^xi4l`!S_y}!}@Gf?r8LR2vTgyRd*6%Gh13z2=)k4@8=LS&L9l!eSW)0a&Ph0IqJ zn55%tsd!GqbLF5IDvS-$OBWtGj8e$#9>IiGt!h=43*rpUGq*hN+e4>BwWrVh)EVrmZ94@I(T8s;~XzYJKw6Pw01?Sqwo zU(Ev3ZzZg}y~`GNCu2}N9oh%|_e?1XtFj}yno8Pt4G|W)q-dyG(o9OOAz5}!^ZX{K zzIhSm_aWo#LU@SXLCtNMWYR`qlU!0z)$_VW(kE5=@&i@7u4ikoc*2~)nx$!yDcXsI zBuW4RTr=tFlB(e^-$LCA(%_k0$k6yxL+Z921=bx!lq?t@EoG!c%aAouQ4CoH^R1|g zovdxHB|~%I#`_Okv-yL^t}%}@JehXOS6yf5L~BDo-N+8S% zs1Ps$+*m2o5Y2>^Fbv5s70bj8dyqZhIIXv9Jlm;bBweZ(x7aJwkib?bGW0T~16tBe z(Q%VW5R7Efbds83S{Aodlf~}eM?L9yumaR zjstc9gu_a~9NGy}v}^+|Ro8HJcxcH+L(N$iWt!^T`HhWr)0<)G{^)^6K3sd1JGQQQ zNiTBlRV|&`E9LnmdFiiYGjCZXsY(U6OI7peBa1qKsP#B()eI}+xQUdV5M|etV4P%d z$s`lx0z5KXcdV3Qd3o<^};if#rX{d3V7LRP4IlpzJz&%^iYvS-xy{hF?;s3~9 z)e8APzE`zM{yV=J1CO+Pair(=s@DB-uj)kWU^e~|dOe~OX0>8e8HOdRN*?PqMxhfu zN{P&Y+R7ksDOG}nLG?6Ib6~-8w4^5Ls-qjSm#}Qd!)5QF?uFUUNL%{}&V%EsN&gDQH8nv@kiX(x5F)g%;B zf7{N1TV+8wqDoa%OVL|8R}Y?H&x+!#o0oChF)hz@4A3=QfqZj()^kG47ZDh9}xCz-(xzVZ;30PM014-Pd?%_9xU%MsxY4m9lL5toJ*P;ueBci2|Ly=vP z4e@Yf2}IW(j$IoWAE}JZicsM$7n z_pD$lNU0KU-wi&s8(2y0!qQ7nbfCBauZJSuUcvN7a5)}-?vt+s@-BVIi|@j{VJ)Rf z{O&8Le8S-1WNL|ICcrX+x+NWuS!96fsSsx07<0a5d+XO5E-U2Km zasohQQZ+^0k|o!)UBz+SAwXD(`@RO1Tfv{HCAybLsz%Zh0fK_}l>-0Ib`3*Jg1p!o z7%f#w+CVs7g*i_-P6}Kk50(*6g9w!^0kkk(FQs~hqo>?qKv;=?)0e5pggVhrn~nv5 z+HgdOi~&ruA-o0AFId(*#Y!bS%S$UxUT8oz-Xo>4F|#@<6RT{Z5!g|;Cw@s9z?1f(oaQ&Rm3z>Fr!)uC`%l`bBdxv zBou%N5W*{#p}~8^L|ZP9E0PBR{ZDb%{vcjZdK%j;rCabEQVNHl>nl1ycqiANsR0sn z2$yz*OJx8I5nOJ-(+0p0MRtK8Z!L!S*hwS|QHZzN-6t%-r4m>@yAMhLPyG+(7Ed5Qx@R-6#Ik)I5Hi5!o0(g`9+VTh)^2Vi7|f%LRbhW zj}yW+!I8{yqa!gwSqMgs62d|NZ^S2T4_-6JM6Y2&SqQoe5yC={qTmxAjp#B*K{}pL z7J|KkK4AgyDL@F11BNo~&=5x`3js5J^t2G<;RjED0X;ydwgo=;(bGbZz(W#)I-DJh zy-&r@jca803nJ22#NHPUwml$v`fnT%%(kQds#0O#RlY!-o){KfzI1BCh-)B-5$2reXm(ih}Bpxiwhq$3X~i6Gmpgw6IQ9{tlP&C+}mn{`sE%3WUOV<)&($EqnL^?HF zPxy$k5JEtd`Ko<9S;!kco-BkA@T6aLCILY1=|bM{;bb9%KAbFskibd6lfH)M@ua^? zmdBI6nq4#-Ccwv&#D?G<5oNj&S6+d1`R87VQ74V=?~m*$)%4i32`1<7GgqtY*`4Q zk1Y!!%wx+!D1B^M2%(QH3nBEeB@kv#xZUn!%R;L3v1K8IKDKNj%>3e3zmF{osnW-m zg%JAKvJGM8xM>DHwroRrTtXjP7P4aa*zyR%%rP?qTCnAbQwV%)c|?`RtkK7o#~{oc zm6h=8R_S9@c~p)5Dt#Qn_OTcrTONn9UC`z~wn~p{&BpMtWg%_nGac@w;y=Xih28XQ zd|-TF?5e{DE^A^S)1irxAk*Pq2n4MEGeE#_{9fwN>e^K#(P1Dpesvs50^F;_?=1sY z7h+6H{L~sQ0LAh7qMxSV7yJ9&EhOWG#n}wguQ$W8l+cFHSAf$zpXbF|jut+bxAIA{ zrSg3GiBow-^TifUS2AP$WQ;=67yNz{Lg@Fh5JG7ar8N=OT zTu(gkC%QKsSpD87{b&wLaZX&l@V)Lt90%bChJZUmZHIDoC7WjOf+$9 z^tn_=>UJt#6sw4Ok=fzvLfeGB{Aa;`1v>{$=1eq+xr}~l>Tv8fzP;*VSCKsH&!}cH#8d z`5nfOvfkXHbWi_{P)ltj{c3FlsW@29)^OA36r~6H+;t=gPe-#A$g`E3-jiKK=O&l4 zcZHe2shE}6p-i|xPD*SqhHuEtme^-FGJ^f_(5Dy}vAbY&#oT2H_A?rHI)|;G@#=9O zh`Fatb{2!boWfS-Y6h`eP@p??4!w-R{4jP?@b5vMJ)b>)b_7W`5V*BNaQfxF7h)2Lh_*1TY96Oap@we!efaq7yxehh#Jz@O#X>29F zZakaDiQlk07``uNr?Dav{3)kQV|NC9)xuBCV9V(X@lQ}EJvTRQHv2$dq6;IDM#bNV zZ;t;qJ~=MOdC1m$D0X#hdaOFuA$lPCXmoXSPIOqbOXTy&vytCN7DYxz%EJE$|1JE7 z@Fn4zaQ`qBdL2y--50tnGzn=TIm8S5g>C3c;cDSL!4%^Bhy0`b_55spC|?ph7!^nVHX|m>%@E^bY!V`a=2)x`O(FdWFbdyB~J{>d!wc$4$Gy-+uH*_KbY@d#Y?X zKKCccgWC8rJ7CRD2I2MJvK9D?Z`r@$(_UaiJo^xPK7Q*T>;U|T#`fd-`)V=mbK(te zVEf~*?qvHh)N{B4X8YlHF&o6&HnY70)RTm6^^iBqbC3Li?aJU6?_uxGHz_5c$*=zi zO%B`0F2#fHV>9^&yMG4{rfp(t0@RHp+=6R2!;LMQ*-D1G8n3&7U4n)0B+X&pNuGaOw-@pE{a?-Kkh_)PHD;DX?Y zU}@k`U{_#6;NrlUfqvZ2-0R$Z+-2M(PU3=SAKFGH9bFZ_9Hw1~3vH&oDEd+K@#vc9 zyr>)P9{DozT;w*G_S0LZeMxwHxL@e!(Chh04@se#ps-KaCR_zGZV4Uu1N>wBYV;eF zKvDJs_7V1ab~Zbd?aX|}Jj2|=G{GdEOn*Z^Pp_vhpvTbV)c4fO?IsW|f=}XUJD5r= z3tTzfkXM90A#Mzf{}Sf@foDd!?{U-jY`*~Yv_F8ueuM#B`6IjZKQh^u;%!5?a=dXU zSCdO>+;cPz7~BBd^F`pOs19`P$FE>gM|}gLvS0~!G5+WhE{&U>ho}FulsgO8F5}L` zZ!d#4lB2*hPLvi7N@R)FeFjsJdZv2=0U--5BVty3gEBMdg?%>_QrNOg; z1A=s5Phd;nihy@+KnsMq_qacCtGJomV6G$jJKBygYD6A7iT#>=o?Xvgz>Z}rm>-x| zm_IVhnF&l4!_jZkTj>?_G}@p(pkrX+$`BO$(}>`2$}7vbl^xB1pFuO_~Aj9wM; zLO9eY{2;s{+$&^-iC{0!69x(a{vG~7{wn@F-r_q1KMFn`yfN4ibc5XkUxjDK%)nm* z>jLKo#stc_@41)5L%1{k$Svn4a8(=!7H=zBfohS7;_LzTvDjO&`(szcro@yOAKe#y zFgh)oh(;psNB$I98JQ8Ore2722p@pt%cK`_X7L-~0;Z7O#*es?Oj z6NM`1JMo|eWO=_5@94-4#9Pne&Vbw0_qenZNa+^~+1~hvG&c$J-MAOtwxs`dMmxWDBu&%6+pkwth=kHgP@BsUh|-<<+)O)7=cCUTlv0;k8xsi-rY+_yo@ zKYkljXV5#KI^linl6-aNE`!>4zYfz``Z8O&?HgtUjl$PcWq2sVoSY}Q?J^+Q$1nl> z^`*e*)eO_0315$&_5e=0hjT*?vd^KJGG9Va!=^T zJ`~;+-Vi1WNTt7kYzqB0G#M~MP_s65i$WQVtK!@x0cwlCD$oZY{C*M6nqZH=vtW!GJut65260RAb|~dO z9mJhZV`T_8z={f|QpMCav@kxNj9ndlHQFgMC45t8XDCE{!%q+19(W@la6{2zb{(^w zK1k`l)(NN558Y^?`#VE{NxMB|p3g465P&8r)wuXH0iB8n+{E<)8hx@mf8M;sjrG%g zEPMn6#S%hY@Gb!j$$d&AH`u#RTF$1St_r^{iV}EQ7&J7UN}7@`L*gSOui%Yk?8CWm z2))2^+QOoAZ~RsiDdBwH71ZB!5$+m8&AF>$=zMx0^BmQYE~4ln`n$Lln-j&6zlQ%A zJ|#3rIFGI7uLw2<9^}5}PDOLrduWrI1Eza0Zs>s4cZU~0Ey_;MGA$jOkY{G-$TSAT zS{?z9rL{A7fdJi@Mx(25OrTvQ{6MO?r3**C_2H_U{{CO9{(kv2A3e4ikEPMTz}#%4 z2vGmXVl*Vw>N2pzWyq~9MmHcd0jk1lyCMb8?ut$cW+!H&MQNMdF-qpuFIsezzkv@H zBP-Xj8~V2MDHkw-PXnE~)6oU-5itx#wI}#BTR;bU2$T3_xpE2BpkVflY!~7uT&W?G zF2iTO1HS$a4Q*xdaudCkn`ohX0;8ibnhHizRJ?EG&#|qsk${k^A}MCdi4OX*BMyPO z3PxGRONXJWiDkMNKYt%OAF+F=H?g}3%_ODyc+(~{7oJ8p;FC8)$~{FzzQsE?!&)Is zrC!1E7Brod8t|%NutHN*co4qCMh#F3?ZBVfXbCBe#&aEXSqGT7XKAW59qn7e(|lCG z(ZslhT=ZvWI3tDR=;HNujq$iO1IrN9Uo?2x>0= zW;kjHM=Rlby$bl=1Zo_8F4VYk1R4dD+@J6}Bhc4SLQmyh8Ho^`Ss09^>1aG16-$7= zn_$YG?m<2`h_eZqBAyDV#mS@uNfEBCCQV&Qm^M0IqEEY!(TMpCGwK^>jjx+kzo@xx z;iBf+S=OwD^A|TM3z^n7GrT|=^>o#+A;AoGFClM2u_4L9OsFDk+Djhfqd;5{iK- zE;*r~%;NENwKGVZfNkJnX(8GThQCA*pcVK?(v=O!8j&F%7JBCBB;_B%8IY7IK_*GY zuncL8Bb_SiZDSJT3yEWeBuG1B7B@84H#O8jdwTqOYJ||zDKgtGWVRbA6~3~7+%HJl zf-mUI6y$^2lA+i#BnfM}H)dj+E@fIi` zvh2x_q8jt5pLKhJGQ;M&&;gvElK!P4S<=7W>&#;1z#Ad>DM> zhVPsL3kUczA^b1$z~5m1c{n^6ey;xpvkL!x1YF+Sa(NnlcO+aM%wNI=d$*~F>#H9H z4`xn<*Zlo;b2P9(zLwj7*FrJBzy6EU+cLZP{dM2q{Ib3ABljn=8N_7d_ty(icOSAB zqGNs(w-8J02kt?G`sG#V7c_{-CLQ0C3r<5X#Rrlv@d}CCw!YN_Z%rX@6=E6*Fz(FV zK*d+Y%VUqnhDVn~!;xDfT6kx;Hnbw zGzNmllW+Eq zl1sFKS%Dwg4dD*7fxZ{7c?mrqLmQ}fO7#*V>i{@O0&_X}rosafYG&@Om(dIwai3Fr zbIz+MMWf(C>iyi+uc75M5)4|z9o|5XLkY0x%Wt5cQRr&w0Df%`T0~0o@#r@Jvqr9@ vZ_f393$Zj5A@C;eMPH$qN)OKUc^lnLld1Xvzw{2eo|Iv diff --git a/Plugins/Plugin/MyMqttClient.cs b/Plugins/Plugin/MyMqttClient.cs index 5db5cda..ad372d3 100644 --- a/Plugins/Plugin/MyMqttClient.cs +++ b/Plugins/Plugin/MyMqttClient.cs @@ -129,7 +129,7 @@ namespace Plugin try { _logger.LogError($"MQTT DISCONNECTED WITH SERVER "); - await Client.DisconnectAsync(); + await Client.ConnectAsync(_options); } catch (Exception ex) { diff --git a/Plugins/PluginInterface/DataTypeEnum.cs b/Plugins/PluginInterface/DataTypeEnum.cs index 4875ec4..ae43401 100644 --- a/Plugins/PluginInterface/DataTypeEnum.cs +++ b/Plugins/PluginInterface/DataTypeEnum.cs @@ -49,15 +49,15 @@ namespace PluginInterface TimeStampS, [Display(Name = "Any")] Any, - [Display(Name = "Custom 1")] + [Display(Name = "Custom1")] Custome1, - [Display(Name = "Custom 2")] + [Display(Name = "Custom2")] Custome2, - [Display(Name = "Custom 3")] + [Display(Name = "Custom3")] Custome3, [Display(Name = "Custom4")] Custome4, - [Display(Name = "Custom 5")] + [Display(Name = "Custom5")] Custome5, [Display(Name = "Gb2312")] Gb2312String,