From 53f828559a33e0d27c22b75c688dc6e9e53f3440 Mon Sep 17 00:00:00 2001 From: 29353 <29353@DESKTOP-KFP891H> Date: Sat, 1 Nov 2025 15:24:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=A1=B9=E7=9B=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SysTunnelNuget.sln | 31 ++++ TunnelNuget/IRfidTunnel.cs | 53 ++++++ TunnelNuget/InfoParams.cs | 214 +++++++++++++++++++++ TunnelNuget/Properties/AssemblyInfo.cs | 33 ++++ TunnelNuget/RfidTunnel.cs | 245 +++++++++++++++++++++++++ TunnelNuget/Rovinj.Device.dll | Bin 0 -> 7680 bytes TunnelNuget/Rovinj.Reader.Silion.dll | Bin 0 -> 28160 bytes TunnelNuget/Rovinj.Reader.dll | Bin 0 -> 13824 bytes TunnelNuget/Rovinj.Tunnel.dll | Bin 0 -> 37888 bytes TunnelNuget/TunnelNuget.csproj | 79 ++++++++ TunnelNuget/packages.config | 9 + TunnelNuget/tunnelPlc.dll | Bin 0 -> 44544 bytes UITunnel/App.config | 6 + UITunnel/Program.cs | 136 ++++++++++++++ UITunnel/Properties/AssemblyInfo.cs | 33 ++++ UITunnel/UITunnel.csproj | 103 +++++++++++ UITunnel/packages.config | 9 + 17 files changed, 951 insertions(+) create mode 100644 SysTunnelNuget.sln create mode 100644 TunnelNuget/IRfidTunnel.cs create mode 100644 TunnelNuget/InfoParams.cs create mode 100644 TunnelNuget/Properties/AssemblyInfo.cs create mode 100644 TunnelNuget/RfidTunnel.cs create mode 100644 TunnelNuget/Rovinj.Device.dll create mode 100644 TunnelNuget/Rovinj.Reader.Silion.dll create mode 100644 TunnelNuget/Rovinj.Reader.dll create mode 100644 TunnelNuget/Rovinj.Tunnel.dll create mode 100644 TunnelNuget/TunnelNuget.csproj create mode 100644 TunnelNuget/packages.config create mode 100644 TunnelNuget/tunnelPlc.dll create mode 100644 UITunnel/App.config create mode 100644 UITunnel/Program.cs create mode 100644 UITunnel/Properties/AssemblyInfo.cs create mode 100644 UITunnel/UITunnel.csproj create mode 100644 UITunnel/packages.config diff --git a/SysTunnelNuget.sln b/SysTunnelNuget.sln new file mode 100644 index 0000000..d183b5b --- /dev/null +++ b/SysTunnelNuget.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36623.8 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TunnelNuget", "TunnelNuget\TunnelNuget.csproj", "{7B9289E9-0AE5-40A8-B5F8-1DCD5FC9F4E3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UITunnel", "UITunnel\UITunnel.csproj", "{974DBE1D-C300-4BAA-8163-F7D7AA99CED4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7B9289E9-0AE5-40A8-B5F8-1DCD5FC9F4E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7B9289E9-0AE5-40A8-B5F8-1DCD5FC9F4E3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7B9289E9-0AE5-40A8-B5F8-1DCD5FC9F4E3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7B9289E9-0AE5-40A8-B5F8-1DCD5FC9F4E3}.Release|Any CPU.Build.0 = Release|Any CPU + {974DBE1D-C300-4BAA-8163-F7D7AA99CED4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {974DBE1D-C300-4BAA-8163-F7D7AA99CED4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {974DBE1D-C300-4BAA-8163-F7D7AA99CED4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {974DBE1D-C300-4BAA-8163-F7D7AA99CED4}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {57D3B418-10FA-47A0-9EAF-3CDC901A6EF1} + EndGlobalSection +EndGlobal diff --git a/TunnelNuget/IRfidTunnel.cs b/TunnelNuget/IRfidTunnel.cs new file mode 100644 index 0000000..fb27774 --- /dev/null +++ b/TunnelNuget/IRfidTunnel.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Rovinj.Tunnel; +using Rovinj.Reader.Silion; +using Rovinj.Device; +namespace TunnelNuget +{ + /// + /// 隧道机接口 + /// + public interface IRfidTunnel + { + /// + /// 连接通道机 + /// + bool ConnectTunnel(SilionReaderConfig readerConfig, ConnectionConfig plcConnectionConfig, TunnelConfig tunnelConfig); + + /// + /// 关闭通道机 + /// + /// + void CloseTunnel(); + + /// + /// 标签报告事件 + /// + /// + /// + void Tunnel_TagsReported(ITunnel tunnel, TunnelTagsReportedEventArgs e); + /// + /// 通道机读写器状态变化事件 + /// + /// + /// + void Tunnel_ReaderStateChanged(ITunnel tunnel, TunnelReaderStateChangedEventArgs e); + /// + /// 通道机PLC状态变化事件 + /// + /// + /// + void Tunnel_PlcStateChanged(ITunnel tunnel, TunnelPlcStateChangedEventArgs e); + + /// + /// 通道机错误事件 + /// + /// + /// + void Tunnel_ErrorReceived(ITunnel tunnel, TunnelErrorReceivedEventArgs e); + } +} diff --git a/TunnelNuget/InfoParams.cs b/TunnelNuget/InfoParams.cs new file mode 100644 index 0000000..9a4f690 --- /dev/null +++ b/TunnelNuget/InfoParams.cs @@ -0,0 +1,214 @@ +using Rovinj.Device; +using Rovinj.Reader.Silion; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TunnelNuget +{ + /// + /// 参数列表 + /// + public class InfoParams + { + /// + /// Plc连接工厂 + /// + public class PlcConnectionParams + { + /// + /// Ip地址 + /// + public string Address { get; set; } + /// + /// 端口号 + /// + public ushort Port { get; set; } = 502; + /// + /// 波特率 + /// + public int BaudRate { get; set; } = 9600; + /// + /// 连接模式 + /// + public ConnectionMode Mode { get; set; } + } + + /// + /// 工厂/构建方法:根据参数创建配置对象 + /// + public static class PlcConnectionFactory + { + public static ConnectionConfig Create(PlcConnectionParams parameters) + { + if (parameters == null) throw new ArgumentNullException(nameof(parameters)); + + var config = new ConnectionConfig + { + ConnectionMode = parameters.Mode + }; + + // 设置网络相关字段 + switch (parameters.Mode) + { + case ConnectionMode.Network: + config.ConnectionMode = parameters.Mode; + config.NetworkAddress = parameters.Address; + config.NetworkPort = parameters.Port; + break; + case ConnectionMode.Serial: + config.ConnectionMode = parameters.Mode; + config.SerialPortName = parameters.Address; + config.BaudRate = parameters.BaudRate; + break; + case ConnectionMode.USB: + config.ConnectionMode = parameters.Mode; + config.Address = parameters.Address; + break; + // 未来扩展…… 继续加 + default: + throw new NotSupportedException($"不支持的连接模式: {parameters.Mode}"); + } + return config; + } + } + + + /// + /// 参数对象:读写器连接参数 + /// + public class ReaderConnectionParams + { + /// + /// 天线数量 + /// + public object[] Args { get; set; } + /// + /// IP地址 + /// + public string Address { get; set; } + /// + /// 连接模式 + /// + public ConnectionMode Mode { get; set; } + } + + + /// + /// 工厂/构建方法:根据参数创建读取/写入器的连接配置对象 + /// + public static class ReaderConnectionFactory + { + public static ConnectionConfig Create(ReaderConnectionParams parameters) + { + if (parameters == null) throw new ArgumentNullException(nameof(parameters)); + + var config = new ConnectionConfig + { + ConnectionMode = parameters.Mode + }; + + // 设置网络相关字段(当前示例为网络模式) + switch (parameters.Mode) + { + case ConnectionMode.Network: + config.Args = new object[] { parameters.Args }; + config.ConnectionMode = parameters.Mode; + config.NetworkAddress = parameters.Address; + break; + // 未来扩展…… 继续加 + default: + throw new NotSupportedException($"不支持的连接模式: {parameters.Mode}"); + } + + return config; + } + } + + /// + /// 参数对象:RFID 读写器参数 + /// + public class SilionReaderParams + { + /// + /// Q值,-1=DynamicQ, 0~15时为StaticQ + /// + public int QValue { get; set; } = 5; + /// + /// Gen2会话,取值范围为0、1、2、3 + /// + public int Session { get; set; } = 1; + /// + /// 读取TID + /// + public bool ReadTID { get; set; } = false; + /// + /// 目标,0=A, 1=B, 2=AB, 3=BA + /// + public int Target { get; set; } = 0; + /// + /// 0=FM0, 1=M2, 2=M4, 3=M8 + /// + public int RfMode { get; set; } = 1; + /// + /// 快速模式 + /// + public bool IsFastRead { get; set; } = true; + /// + /// 0:快速模式;1:快速模式-读距离优先;2:快速模式-读次数优先;3:Ex10快速模式;4:按照给定的Gen2参数进行设置 + /// + public int QuickModeType { get; set; } = 3; + + /// + /// 天线 + /// + public int AntCount { get; set; } = 4; // 天线数量,默认 4 + /// + /// 天线功率,单位 dBm + /// + public double PowerDbm { get; set; } = 30; + } + + /// + /// 工厂/构建方法:根据参数创建 SilionReaderConfig 对象 + /// + public static class SilionReaderFactory + { + public static SilionReaderConfig Create(SilionReaderParams parameters) + { + if (parameters == null) throw new ArgumentNullException(nameof(parameters)); + + // 基础配置 + var readerConfig = new SilionReaderConfig + { + Qvalue = parameters.QValue, + Session = parameters.Session, + ReadTID = parameters.ReadTID, + Target = parameters.Target, + RfMode = parameters.RfMode, + IsFastRead = parameters.IsFastRead, + QuickModeType = parameters.QuickModeType, + Antennas = new List() + }; + // 确保天线数量至少为 1,避免出现无天线的情况。 + int antCount = Math.Max(1, parameters.AntCount); + for (int i = 0; i < antCount; i++) + { + readerConfig.Antennas.Add(new SilionAntennaConfig + { + IsEnabled = true, + PortNumber = (ushort)(i + 1), + TxPowerInDbm = (int)parameters.PowerDbm + }); + } + + return readerConfig; + } + } + + + + } +} diff --git a/TunnelNuget/Properties/AssemblyInfo.cs b/TunnelNuget/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..8bdb991 --- /dev/null +++ b/TunnelNuget/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("TunnelNuget")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("TunnelNuget")] +[assembly: AssemblyCopyright("Copyright © 2025")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("7b9289e9-0ae5-40a8-b5f8-1dcd5fc9f4e3")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/TunnelNuget/RfidTunnel.cs b/TunnelNuget/RfidTunnel.cs new file mode 100644 index 0000000..d61d4f6 --- /dev/null +++ b/TunnelNuget/RfidTunnel.cs @@ -0,0 +1,245 @@ +using Rovinj.Device; +using Rovinj.Reader.Silion; +using Rovinj.Tunnel; +using Rovinj.Tunnel.Plc; +using Rovinj.Reader; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Media; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Rovinj.Log; + +namespace TunnelNuget +{ + /// + /// 隧道机实现类 + /// + public class RfidTunnel : IRfidTunnel + { + /// + /// 是否开始校验数量 + /// + private volatile bool isStartCheckTags; + /// + /// 扫描ID的标签 + /// + private string tagsScanId; + /// + /// 标签ID列表,可以是EPC或TID + /// + private List tagIdList = new List(); + /// + /// 当前PLC的状态 + /// + private PlcStatus currentPlcStatus; + /// + /// 隧道是否已连接 + /// + private bool isTunnelConnected; + /// + ///通道机接口 + /// + private ITunnel tunnel; + /// + /// 线程退出标识 + /// + private CancellationTokenSource cancellationTokenSource; + /// + /// 检查标签线程 + /// + private Thread checkTagsThread; + /// + /// Silion读写器,支持R2000/E310/E710芯片,支持1、2、3、4、8、16口天线 + /// + private SilionReader silionReader; + public RfidTunnel() { } + + /// + /// 通道机读写器状态变化事件 + /// + /// + /// + public void Tunnel_ReaderStateChanged(ITunnel tunnel, TunnelReaderStateChangedEventArgs e) + { + LogHelper.Error("e.RunningState:" + e.RunningState); + if (e.RunningState == 0) + { + //停止业务 + LogHelper.Info("停止业务"); + } + else if (e.RunningState == 1) + { + //启动业务 + tagsScanId = e.ScanId; + LogHelper.Info("启动业务"); + } + else + { + LogHelper.Info("其他状态"); + //其他状态 + } + } + + /// + /// 标签报告事件 + /// + /// + /// + public void Tunnel_TagsReported(ITunnel tunnel, TunnelTagsReportedEventArgs e) + { + LogHelper.Error("e.Tags.Count:" + e.Tags.Count); + for (int i = 0; i < e.Tags.Count; i++) + { + Tag tag = e.Tags[i]; + //过滤掉不符合扫描ID的标签 + if (tag.ScanId != tagsScanId) + continue; + + //如果配置为"TID"且TID不为空,则使用TID;否则使用EPC。检查标签ID是否已存在于 tagIdList 中,避免重复添加。 + if (tunnel.TunnelConfig.TagIdFieldName == "TID" && !string.IsNullOrEmpty(tag.TID)) + { + if (tagIdList.Contains(tag.TID)) + continue; + + tagIdList.Add(tag.TID); + LogHelper.Info("tag.TID:" + tag.TID); + } + else + { + if (tagIdList.Contains(tag.EPC)) + continue; + + tagIdList.Add(tag.EPC); + LogHelper.Info("tag.TID:" + tag.TID); + } + } + } + + + /// + /// 通道机PLC状态变化事件 + /// + /// + /// + public void Tunnel_PlcStateChanged(ITunnel tunnel, TunnelPlcStateChangedEventArgs e) + { + currentPlcStatus = e.PlcStatus;//记录当前PLC状态 + LogHelper.Info("通道机PLC状态变化事件:" + e.PlcStatus); + } + + /// + /// 通道机错误接收事件 + /// + /// + /// + /// + public void Tunnel_ErrorReceived(ITunnel tunnel, TunnelErrorReceivedEventArgs e) + { + // 在控制台输出错误信息,包括错误消息和异常详情 + Console.WriteLine($"错误信息:{e.ErrorMessage},异常:{e.Exception}"); + LogHelper.Error("通道机错误接收事件:" + $"错误信息:{e.ErrorMessage},异常:{e.Exception}"); + } + + /// + /// 关闭通道机连接 + /// + /// + /// + public void CloseTunnel() + { + if (tunnel == null) + return; + + if (tunnel.Reader.IsStarted) + { + tunnel.StopReader(); + } + + StopTunnel(); + tunnel.Close(); + tunnel = null; + isTunnelConnected = false; + } + + /// + /// 停止隧道 + /// + private void StopTunnel() + { + if (tunnel.IsStarted) + tunnel.Stop(); + + isStartCheckTags = false; + + if (cancellationTokenSource != null) + cancellationTokenSource.Cancel(); + + if (checkTagsThread != null) + checkTagsThread.Join(); + + } + + /// + /// 连接隧道 + /// + /// 配置RFID读写器参数 + /// 配置PLC连接方式 + /// 配置读写器连接方式 + public bool ConnectTunnel(SilionReaderConfig readerConfig, ConnectionConfig plcConnectionConfig, TunnelConfig tunnelConfig) + { + if (!isTunnelConnected) + { + //创建并打开隧道 + tunnel = TunnelFactory.CreateTunnel(TunnelType.SC201, tunnelConfig);//根据实际的设备选择对应的类型,这里假设是SC201 + tunnel.TagsReported += Tunnel_TagsReported; //读到标签时触发; + tunnel.ReaderStateChanged += Tunnel_ReaderStateChanged; //读写器状态变化 + tunnel.PlcStateChanged += Tunnel_PlcStateChanged; //PLC 状态变化 + tunnel.ErrorReceived += Tunnel_ErrorReceived; //收到错误时触发 + if (tunnel.Open()) + { + LogHelper.Info("连接成功"); + + isTunnelConnected = true; + + //获取读写器能力(支持的发射功率列表) + silionReader = tunnel.Reader as SilionReader; + if (silionReader.ReaderCapability != null) + { + //发射率列表 + List doubles = new List(); + for (int i = 0; i < silionReader.ReaderCapability.TxPowers.Count; i++) + { + doubles.Add(silionReader.ReaderCapability.TxPowers[i]); + LogHelper.Info("发射率列表:" + silionReader.ReaderCapability.TxPowers[i]); + } + } + + if (tunnel.Initialize())//复位 + { + LogHelper.Info("复位成功"); + //语音提示 + SoundPlayer player = new SoundPlayer(); + player.Play(); + } + return true; + } + else + { + LogHelper.Error("连接失败"); + tunnel.Close(); + isTunnelConnected = false; + return false; + } + } + else + { + CloseTunnel(); + return false; + } + } + + } +} diff --git a/TunnelNuget/Rovinj.Device.dll b/TunnelNuget/Rovinj.Device.dll new file mode 100644 index 0000000000000000000000000000000000000000..0ceb592a18ab3ae8f94ffc2f71fa734b92ef77df GIT binary patch literal 7680 zcmeHLeQX@X6@Rn0yJw%1i_dmG2zI!{2|XO=@Huvxgg|_;W8x-u9NQ#NOzrjEa@pkW z_OiQYVgjvEXiG~#t*EF#tx7725NZomqe7`b5k*L}p`ukP1*t`$sw!xas<)hX3lt(E73ID6h@L^sPmjb8hgqnjS3Db~Gqta* zeManiW$oBu%Z-;DJLedMc*ZCeZ7)7$#+`C8ZWZHw`$yviJ8LGFE{&`YOb_oS+9yIZ zwKMlvWweX5E?y@(h*m(N`_iFq)Nzy^6ry@bE56?>2$~Vif`Oc$5KVrXoAUpB9k49I z^S3Ud{Y>-_b#WjTKa)gDAge*UvBkO%jA+FwF;%`>4Eo2$IRPk$iC7f3fpQ%sd{>dc2%*Gyqe>Rhka8>qqD7` z5icR7|2eEtPSnE5wslJAPDwxzsR$$iL0v^42?*e|-$fD-EUgG60XG^uRQeoh_!UzU zKs}-x&%j*X6z(7>-qwJHu2B_$C8>kCgIydnW3kvpR>xv^jIwLZ61Nx;YIo?+RO zg{M|7?70LzSu1-gC)iq>^h=}Pphmc3p#-Fn_GOqltCdv=NcFam6N6XwGUzrf4LO%p znD%QzEAPWniVZ8S*#1=;L61cA``c?3eZ|8GEVHiPZ>>y46@BHy30R0EkmI_tqGA*a zRk9lbqaUd-?FTL~S{J_GT9v9*LJ1_KzHx1s#|UE#W})LT!Wg5G$G{Tl75`WILsi&d zI#?Y{#a}K-tWgq8=-T#@to02|2?RaT9&~7Bb$EodbC0Oa|KLZZm);n7rMOx zRhz&vDHNmadkJeyRFp$0_Lba8X=)2ttVg7+TGuWDRme`Tt`RgC=Wb`#A*E`(N^T|R;EWi z$13JrZc)PC=t13j!zeuknvcrX>u(t7Lwy$fJxJl!U3q&7JU?K?p_Z@L)?#$}tJuuv z7UD_>E5SUm7)u~)USH&s)FF`ESDuN;8hGaSc{yt=i zZmJD*&k5Gm<4>SOb=Eb3x(f;R4b|rw=`^glXi3PG%WxpLloSVN1*L#1B(_OhCb3y! ztHdx+;Mcqxc!9P7-$h?R3BmLpu>*Lw#&m<&DJqt`)NWXAmsmjG7@gL7#c-Tw^_iN- z#6GmYG2p&04uCTPu1+~56tV(tjZ%-*b^^{(ZpJVC?E&{GMPRj02HYpKLqer{1MZks zk6rwwfIF*A2#vlHaIb0^aE}LEKlBT_zw)$BSr5>COL=RH0av!+yfV)RLAePbb zIqqS^?V*4>Ax?`XIwQF+uKJn!nBZN{&r3@mr}Od*keueK)m&E5rB2YVLYz_m4qm75 z9@~n2BFLvxkc8;($RD*zUeO+awnERhWJxWZ!%mC=b>!VSH9}Vb>nSC1o5Zxl0f`4B z-X!rDP^TG*-=PPz)$|=o=n3FjbrbM0t&?7+kJ2{K*J_(U-%Qt$CEMRc&3Z57r?kEF zQ)%rr`m#7cZ_wAs0FEm;>=L%$OlQCBy+~3Wy$EciSAdt(+rU=(GjJm^CrO)WKkypN zCP}?y0r!#v90m4B3zHIOB|akYti+2FN$@CfiEAaU7a2%;B%PLMNW4qpBN9(bd{nkP zE9o~RE~m9LP6gzNzzL2!0X-+4K*p?7o&=s$z6&gCOrO`D2Hqj*&Dsw@f0NE)*YkcB z$h?p&8fX>gJKrY5pmm^v!Y5x1P(i5!9RVsROF=IIDk#f9M}Z2mE=D)eN!*$8jU3htz<_;4RRB$u4leea5bjJ0}LbBJ+=S|t)O_vPCT5m)1SCd-b@RHT6BE0P%u)QD_giKj`cd>Z^24^{4H<>^(eEBIw1<1zRM~?KbE=%n@dW2(>A;~e%c~ZT84jY>j~8%LuG^fA zO8b6{anN*JWYDF?28y@ZPQj4Lod3X9Sdv?4%o;79VEw4(;86$V5zum}BHpEtLAk5kKy|VWL zW65Bu*hb`Ej!_wo=N_`W!xU@*@-u=KWOXu|&-JT{bOc#AJ3R24nFlBHXJNFZ=4a+-y)n>Y{*31ZHLl0GNvV! z%rKwK$SOEg`YaE z^ZEVG?m`J1o@FQS)^I0n$L~!FHHCZe{b-P=_G;YzO`67q3-7a`?f7KTmU}aQ>cHL8 z&)*xq>BJrP9$NjLpquyB9_=4^Yv7^JK7Q{r4}I$-sc~F0LU9rrh**r-s2UcrdYwYi zXmhh3R$8JhQI&)eg;I&?aREUHf*O{FqxgAM8qy7E{NzTX%r!TpTbh+M1T!oZ4acG| z-jI$i4~LdF42bCR*q{<^NH32a;7XIS@bZS;%thkF>PBi5;h>!q9grd&*3z*uG_tE2 zM>E*Q_)HQ=(MXt$qQ$92^5_PS8zBzI6=0*NdHVM8gO_z({G9p}e!|7osQ}*f56_ zKrPLzL;HGx;6z)RBlSWB5e2E$3u=jStkO}P6oEh>{sKCcupoQ|R}-)vO2BRcb`!9h zfJqQa4PR{dS;KFBW6Fv{j!_!2i*vhq?670shBuAM6=o2(k>t?svAI*aJve`^#q0Z) zWC}*2O>;{A0m&Qkho^~q#pg6}*}4vQEdNZx=Re%xaQ2!8esCm{N_OIdKnGsDaZ3Y3 zc;BO?3yv`9I>XOjf9DAjgTox@<0#`@D0siGJh*aUjrl%>yC8Jut90Ckza3ORBcpwz zN9xbtv-3=5@cwrjZ<~H%>}s~rw|$&{n%t6+F~@yZ#{HviG<&qGXnN!L<{3x=eQ<{u zx2KMb2lE?8!>%oZ*em7y`cwllr|xcL2e?#WL-`{U2IcF#L| zEz|LNzM86hBK2jsk2rn#{2%W}lZxQnI^6WxK{Vz<& zqD$o5ZV$?hJwz8caf0W9f&`(1c&C{F?xqn?12`#%zz+cX{jcuyocjBJ`geQI41Rz0 z>z$J0Q-Ea)pFXexRt<7s$HF%*TrR0dw~{Rzu9v;WpfwMz5mxmQ=kanEBU>q7xoHNl4HzZMg}-+Iy@uLOiQarB;SX38Zl?T z53O9v$Z<;x{HpGk#JeT`npkMbRy%OS%-c8!nFA~Hb4tOhPLvK=u*awY?Kvu*Y+HnX z`6@3zc&sFT$MX0i!qEmB`_Mlpd-IG-c(dn-<>)XhliV}=*e;GyJJwy$!oG_m<;Mx%L1jGCh@p%56|k~-%q)(qS{T{I cag_`DzXV8V{%$;6br}9HP4EA6`S1w*3y?qPH~;_u literal 0 HcmV?d00001 diff --git a/TunnelNuget/Rovinj.Reader.Silion.dll b/TunnelNuget/Rovinj.Reader.Silion.dll new file mode 100644 index 0000000000000000000000000000000000000000..b5ac507fe9548a0ed59188b74379884ab2965a48 GIT binary patch literal 28160 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⋘QI)T_#C|rpPbta)dA{Om|{vo7d z;B!0pJ3Z`yn6!)aut(XayOByrN%2K(1oSxcP0}Drn9@@ADt-}pdKaE~@3Jp~VoSbN zRNsm6qv(}v?E}!1?FoF9pkWj8EtK3Z&p3X?%Jw0Cif(Ec#&b7HyhZ*z)#i7g?d{z5 z>LExEqRf8L(+8~wPQgvUPFlPPa+CN527BUS_>1ixMb9b!#qnjCtkrB&H}W&k$KJt@ zK8v>Do9yJ+MpUy=N_OD8QMgyi+g_dJZ>D`Hmy{YP$7Rp*SYoZzz|Rykat-77ZU|e# zy~vi16D?4l&9_YXemA~m!E!0II>B;f-2R;XWix7?H_N`V85Y!ThJ6X?t8DoQe8D4{ zD(3X-f(ZPYwTbq~CPMLyTELGc~WO!UMV{g9tKH`t#s*u=A74Bxn+ifnHVg2%Cg=4EEIf?Sj0 zZ(2Hg)NVvu!kA0kGF&)7qb0t^B^x;Ge{%J}I{XH=sE@}5aHSxANK&C@4)+k-0-0Hy z_BkAAm?eWB&dlOK|11uEGE+GOUqxZb0Qw_@6m-wwLDwAKsmkIP5SUN1^+Dq)xUl#X zT-0<5F6ye8tG5l`IXo4=gFQA!eg*ssJ$Q{DKko;he`Z_f1NS}qvx^QGX>vAdn%mJx zS`iWz6-;`aF3lG*s(t5Zz92Jn1{XsyOZh?$m*&PdRpW>>x{Ppocmya@j&stDw_W>j_#5*K z8n|b9G~W*=*`xV>FyZMU_m?l(v1P%^=dO0Q-97Nq7eD)j-@-P0>kz*{#h0rY91Ko| zA_jw@n8Cxq-&k~N4ETo>gU;Y!a5BJ+D8}Goa5EG$co<3;N*TNi^BBq*Di|6WPG?xc z(9G}-2K;3jR9FPSuT@bcgM-1zP{e?*tRj~|XK*m!CvAXffX1LRI2fD^MGOW5eue-M z2A#pd;AALbFc@46ZiZq84?_t|z*Y7-NVtU=KwO!?#K|+-eT_ zg1S)#P7Loj-U+-h*uA=;Befat5xlqKeGwPnxMmkDbr==%@owQ@b{z!Diy@$*1*m|V zDIV=^6{dW_Vmprcf{sS~ssw>1&XADlv{`UOaJwLu6HK$1!C^J#=0~0HV)Z!8Gpf!v zeT2gq$5hN`Oh?S#5AuZbG9YN^x{h)@*}bS+X6Tee9tj)ACF?kfLre#OFmVFk$m70 zrgAqn_?*YwpVlCU`HNSdMs=( zwz{n&*1l%t*qYIfu{H74ZEM}~+ez6TakIuk**%f&2wlnMpPrky}&~W$gM8NU#{T2Vx{XqS1Uwq|fwfHODMBQiY z*ox0))045$_zux?`_A3GU}HD%t9I`CEP0v<21AdXQCmb@YPiOk|K&HzDlb8uRHWr=kMQ8zj(<0 z7DheK6D^puc&ZR&Gw|rf8-GnkPNO~c`Hs)AyKyGu*Agkk=SDtnrsdq3yZsP}d!65h zQVlj`%rocQ@vTW~8gtK96HqhV>Med>j58v=M<=dAl1DOk+@qOev zlw65ESxu`1+i)8Z18)tuW57|+{ES1Q4bL`=)iv^54gM<0TLoFHUwEyRz71lO@XagV eVXAxBx3@)#{`D}e{-05w=IQ$1umA5n@V@~qtg$Bm literal 0 HcmV?d00001 diff --git a/TunnelNuget/Rovinj.Reader.dll b/TunnelNuget/Rovinj.Reader.dll new file mode 100644 index 0000000000000000000000000000000000000000..14b3ac7a59cafcb9a98e4470158f8b865c528f6f GIT binary patch literal 13824 zcmeHO3vgWJbw2;UyLVT+S|Q0V0e-A)naHn2FAJL(BU$o8VA(<|8ygJL)#_SaYqcxy zT?q>?m7yU|9Ne@J($d%sNlD0%3?T{0ki-P)G^8|v$#ZHNLk1>o(vm_R4V^;2bMC*Z zm1Gz??M!Amz4HC;`OZ22`5*Ux-MiOa*WFD%BJ$&W^G%}1aOI;_@at)NHC zo>}^s+VRZN-h(MOHk!*0sd?%qPQ zL;0xjbH^VpWcsc zx~8WPVRrR#%eeYz6l)c%sH(N<67BQXp{A_41r{%W2vESqQ-}ZsJUxX7P@wXjLIfzP z3kngSm{U-Q0L9#bLIf!06%-;sF~6V?0g43$g$Pj86ci#rabZCr!ub>z6+A?M$HfJO z2!F3#6fk_0vos=SW<<_LyC`t@C}&`L7J@7UlbayIxUTC&Tl%u7NqDWEyQ;tuHOy@; z9TLfw6_SYn#qxqe1Sl|Xd4WZM0^`L~hyVo!kEaj;igy(hB0y1BP>2A<%7Q`!C{`5| zA`}WZr`}I}=<`1GNiEgLp?{C&(9uS-Xq9j!=`5NgTyw)3uB0blf7c=mlkoh=>P0$O zb6rgqEfp@ef|!xex$DsE;lBtj*c%BJ{2PC4@%Zx7M&yODS*6$b_3^cqi*`KK_`J1><6Mb2D5Hs^=dYR{*2hzk`Q@u?Lut=ZGcuS)_)#~`;jG;bxUT~`z0C3 z(y8L^5fpN=o^NR3J}&c_*=U)sIBj@caFZ{Kn``M?cqV&86;l-TJOe?Gi9B)DW@Tn+ zp7Y0>32u3hq_va&G9>#B(`bkO-|DNcy8)F3NzaKe|+DulU* zGB|OM#24)-atzlkM&=mEN=}yHQD&}G5nL6q=nlaj2tH<2Mdr|<2*>%2l?++*c<|ve ziv|Uk3T_hogy7#!u^tx94<*%i zL#*E;nun08f?f&y4K#O%=R;zBEyzAEMeYNhf{#Vt6uc?Aw2W)?3J-l}Bg$@CL|wv$47*0y{f6xpcFeGS!cLTN4vXjpi5Za^Ed%2^ zj7om1X;f@6$!|4{lW%DyU5V1Iqk6iDeDLHxvW}YQ7Gd4On&~Lg)%tv>$T7dA_DtTW z7(W@Xpn1ht2K+IsmNj3MLH`+D4t$XqUln{l%<@MAjGqK58uV8JKjCBCDzaa2gh z2gBA#jx*6;tJ@VOPs1#IyTTM|*fZ*V3i}AdehS9(A0KC;x2od`3$Yw$qIZMw9LvX< zz>knSmR>o|1h$9%w1oA9?wiIwuCOc{&lkfFD6Fl9?F)ZeVUaa#QRs6D%a&n>qOFR@ z6dz{-r^`wiMZQ>K`z?LFgk7MXQZYK^wP)zHGFL65PaEdLreYaAVpz;_)pGi(VR5UH zmeZ4lJ&Sa;^c}-qEUTni`o3Xpu&to8hV6!J1-)cg3bsq=Ukp16+a>f{!{$bh)4S*m z!&XECU_q=-+{;^{ovMy5Fswb=1y*BNH*70qU1QH1U|UHmjcr5u(^xi!Iez##>I^G*{6i#=E z-c)2~18ek^MaJni8|I~JFWNXA?*hCioNjB8ak@^!ymVI;Z7&2`^o}As8`z|G78$4O zp@>)8&;jMD1kEw*FjkxdEi~+hk(HS8a;GWOD1!(N7MH?1@5Ut!x#n+*G2*j0OI zt6@LE=-5NM3|p)^)wOi3VXIUZSifN#t*i82I%rs@wF~U9VgE_H^*)*~%u@TnZa3_n z=x%)-eZa5>qWi!;Vwkpe>+9*y4Xd*Dfj!_cxzqdUv%>D7S0gv-{Zv!S4RsIQ8yeI% zP`_a+dPv_$4;l8)<)gZf9y9D%bWHct!WCY+J43f;)liRU04H#Ubps0ZmUOKc8(%Gh$SIVcErQK2bpz`jS*lZrJV z>uP}MW^v_py@<_-io6sUrUqaoZ4hh|>=e94aG#(p zco?YgoWcGnk;{P#X)Zk;T1g8l{SysaA7#1x0pLUBpP}DF^Cj%ahpi{6OdSn9ja`2^{RCJE4521xfwk}sQ60Su zTtmMA*3++m&GZ}K5%IZId?v-`kKq%f&(iC_&(nVb9~JpAbeteP4o!@b@LwtzM~l6H z*Ozm!$Bom)^ek{W{R+66eh+M-ZN50Yn-aiw>IYs;Bftcm0$vYnl{jsJ{enq}IVtif z!6yXIiJlba7!zz2>{nc#Nx_qXrv;x7d_hoQ)LNo!B)Y3!AZfBf~N(~2~tq}1zQFC1t$eh3Z51`=jlW2 ze^T(Y;5orq8S7gGPexciEqG3l$|V=UR>6M3Nx_qXrv=XmQdIl}TLt?CCk0Omo)&DP z>*yGL96k1H=&=ebMVrQJ7m8}UG@+N(df>fkBW6Q|_apqo9iTA!e}oobr1L)gE9!(M zx+MH(zzt>h0Z&-0Ia+={aEWI5O!O2m7-mhQ#rSd=<37P-f-9q(c3YI=*n(G;e+u#s zB8;CCyeslBA5$FjMPhta@OjBGt~h3w^$lQHJq3I)$~ez@N{8?s zMq}JB0CF9DI5iMYW|-Y8F^~C$2cY+(?jgDeZ&4~SVlC(+(q`qr5N4+k^oxKRYj+v^ zD}Wj!JOZ2xou+ws0@HY>PzCF1pvKHH2l85=#%wST@})qHxn=?61}Rq~N}(_#TnK$L za#nc$zZh~0a#M5}P}6$67f_gEmq5N8bBw~=u@v$~S`PUNpr%cDeo%O?xB_x3o(UAS z0X2T!SP8iusHp?xQkc(IL*9yVDcT0qc=K^7o$!=C9>S^Pq z4Sjv}eGs-}?18k?mQHUPFq%!tzP^r>JDRp9+S9h{Hn1D}H?jarNdi&LOwcqHSArH3 zc`VUDom(a3cC?^cGGZQ-)1{GjMvm#Q%)L6+}7DjzNfRbrf{5 zc+ANpQ;s{^+;b%1WZYCfHIDOq4!uXZvp1otvy*n)sq?8#hiT7_W%9EVZ5vI!r6v0o zmO=$4W`!GZ@&~hnbag77?#6t3Q#Ln zl&TPPD+*%9$82L~=0G+#V)M#nr{B`6J)1d@8XC)q-&7E8T zZpr*?0|&4(6H|sB^i#CH=<}(8R63O}v2LC~`)zabdw7xamO2_3J3yGpso2xGq-bP} zKaA_t&4?wMLvA)>#7=KfF%0pHgeBBSNiU6AA5Ed+rg<=PQ*YM$rID^hFL!&h+npmu z!DXDLI9N0##s*yZeUi3jb6f1>LFqs{oXk-EAho#@nPj`2P7h#lpkzVl!m65^*lcHp zF#^nvr7!@n+bN7BuSW4fXt-~8Vp%smSO$(aR8kpljNm$olO1QwpJJb>W4{^GsMp`8 zPpy=|NJlp+jGS%wX_aq)bc%wq$2nlO8pI2ILA@iDIV|N#l+4CnCZ!54Ny&^X4yBy! zQ|l5Uf_m^4t2dV#8UpiL*6by=jAxwub~`hOp-nS3KwHM0 zOwm?IC3~4^meO6vGy@l&R}Cq)2q=h5_muaheTpaZ*&I+V+oYH-+1@VCEwp7v${xyO zT})Lj@f=(<6uNO?ZbDo0^y^B)_Z;AcbS3kGoHIIa#zMFET)3cK{YsKZ(@oi@Ep!re zx<+D5U+uiCXXw29mB>$|QMTeB>&?n2qdazX(+7TW8gyl3c4t#)ot#UXQ)o&fbKZr8 z)D+EIRlQNd3#q7ONj3N1n-@F{r*9h^%%QtecM_4^LRT0QX%}x`AP$YDjD*xlJI|vY zGcD~JIE39cWxWeVo15R2>u?U(SYN2KjpqUE7?~gozLeB^H|F@EjDvMDPiCemRY}pj z{vgY@)T1~vVs4cx7M6Xn773@_HtH?=#$t$cex78pINGSoxRcA{rCLd`couBS{I z@V(dn=-Y?CyY0Qddi{gH>-*&f_EY|tQlS8#Y95Of*1YOARSk_+3u{2G04alk)pH16 z$W-@Mhl2B}9bFyL)s;#wrg_yP_{EV`i%I*#NWgA;5rmUR1w#mRjjmXToHWA3)EtTC zTNDUYAg_vw3KWKOtq9=@4jrhdn(zlf0tDMa!HPi8S0>gnSOY=5D9ElsCh!V{LSMdl z|DFq*&%IyAyeDTrKQR0GaoNw$)qZ}Q_VWWXR2pwY@F;C*jlxtqMzO9Q7`t zpeZzrtvGFMMSWIvH>Kpi8sp@@#NakZ3v_VNxT@&%Vt81V`sjF;u ztg=zVD7OWEmsN`b6~Kx`0btppfFH<;ML|y;#7$8Wp6iDGLm}o;{yJm|w`d4I=isIiEmr9Ey?Xw&IeTNX6Wu(YzAjhqAexDps__#5POxCNPHd&*3i@x&k+1iuefAz1fz5RpV`W>oJII6lJ#R_ct)yKBt(bt~M zb)?f>n0`rK0XdFr7RBMs6$mo38H!2&ZwdT`n0yyFIlW#y*5tGES$g){j&pB6>{Bl^ zA@f`JJ@}QU54eSTAa&wP`<>vOz^&d__w+UYD{t@uhWP^izT(yUh5-E+T5ljjFh>Wj z3Q=v!Ax;YKTJe;Ox2y*!D;~9ysuxxpS{HVk^6<-odB^AdcO$4mnXrw31>61eL`sWK zJyurluNiNIF}m?~n}1(uN4yby<;HnTphh+rCITEiu#8L8L&7`o{v2PPnUZ$E%f(w| z&UbWLxk}T;5ye5wL0}G1>M`w2#n>ZS7ZD0|YCx%)aW>)PGImfk{JB-~;+sLNbV(`S zI1{i+jc%7W`_t3TY^kYsT8(lw;H`cO@>q{L4gfdcx(?WY)5c#C zZJER${}Qkso|lP73-|#^*MR-j2KWr(%Ke?-#rLTVci2U&5qPH2VlnhqzK>IPY^ogI a{gT9g2x#^G&q(bRe~8TgKhHmO3;Y-9{U>Yy literal 0 HcmV?d00001 diff --git a/TunnelNuget/Rovinj.Tunnel.dll b/TunnelNuget/Rovinj.Tunnel.dll new file mode 100644 index 0000000000000000000000000000000000000000..035f6014b60b21540d22fc0cc800edf5fd611a69 GIT binary patch literal 37888 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 + + + + Debug + AnyCPU + {7B9289E9-0AE5-40A8-B5F8-1DCD5FC9F4E3} + Library + Properties + TunnelNuget + TunnelNuget + v4.6.1 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\Rovinj.Reader.Silion.1.4.3.3\lib\net461\ModuleAPI.dll + + + ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll + + + ..\packages\Rovinj.Device.1.2.0\lib\net461\Rovinj.Device.dll + + + ..\packages\Rovinj.Log.1.1.0\lib\net461\Rovinj.Log.dll + + + ..\packages\Rovinj.Reader.1.4.3\lib\net461\Rovinj.Reader.dll + + + ..\packages\Rovinj.Reader.Silion.1.4.3.3\lib\net461\Rovinj.Reader.Silion.dll + + + ..\packages\Rovinj.Tunnel.1.9.0\lib\net461\Rovinj.Tunnel.dll + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + + \ No newline at end of file diff --git a/TunnelNuget/packages.config b/TunnelNuget/packages.config new file mode 100644 index 0000000..feb9099 --- /dev/null +++ b/TunnelNuget/packages.config @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/TunnelNuget/tunnelPlc.dll b/TunnelNuget/tunnelPlc.dll new file mode 100644 index 0000000000000000000000000000000000000000..d38d4a4eb692d5572cd05dcadd76c95230a54bdc GIT binary patch literal 44544 zcmeFa3tUun`agb#8DP}Wg9(M@1ryUkYlh)6FbtqDiY7XWg60L0i$Dl0%&3(bI*^RV zDR$cVE*6z0Zt<~BxyAR?5T6rxmX=Sa|F{nsM@RIX;Kc92v0)n;s-PiB;|GoY{ zczw<}pZoK9p6By?p6B^|&Y8^nHgigj<5UQ4H^=S9o&HkU^~M*qg5w5_e0>o2a=-US z?N&^Gf7G1flIn=cs)}V*dCMd6^UBLBtPx8KBdToW5hdjj=`*t;mRA%M-aT+&|46y% zQE$(xDf~3$s3(;D`T3*wBmSp_$w!v4d(x32b~hfWVE06Jzx&V0N0uO7_-XRdfw-?& z5PxJPyQdr}V0YJ1x)*->9J{YrU}EXBOY)1Uubv~bm^p5`B9Qy>Nk_3K?+h0(YJg(U zIIb2ccS)(wZ@@hSVH=Bwu;&1d3t~~tB#m!g$_;kYHi9Cv6Z z$F)%QA&#pdg7o}5BbBrKk>e_R=J~}pKih+L+c?gE-uwEy+giBFicF^+7lMz*D#MK@ z_7{P!@2)Dyv*rQ3TadI3AsnF|!S62>UEeJg<2DB(!-W9c$hg9T^p}d9yQ`|J@)2cY z#h6*2e~|J$*Hmh+s<5mA1qnyo83Z-LpAh{1QaNstU-bVy{tFnGE410$G+DyQ9N}`^ zDQmUetyoc>E!fm`7p;Za?y&c^aUu4-Du?-Moy$7M-t2BRcTw|>H62zXzvG(nN_Lh- zj0g8*=VXcZ(A{mjnj?t zb!IrsUB(lu&$d6Mj>f+wB%??NXU+*2&lF2#GR!LhM)E*0F9| zh%mRqndTNUujW|9NHA+06GOa+ zmhqjHEt8(F%>oMR+(L+O^z-AcENo$NM! z$!!#~gbbtGoEmnU*UoMWmkg)GB|F)z;LHe$6-SJuTUjN$Rc>Q9>zN2jTxA(Wx79AX zJyL@)w2!7IlAVX{;6fHJX!H_LmAhE)THs;t_dpMMc4gSthH%!gIeK@(TFr_P{77nt z6DF&O*@7&>7?&fgMaeE@vhj-bR)CMjgL2%5Fa-AsRaTC8lf(qM3;Y50 zwYL)OXwXhM+R;ogu2rwd5N4>rxeM#u)_M9PyJ>mq{N796*)|D>ajiD+$J#1mk@Wm)U+Wc6nfI7n(Y4T~X(8^Mf(op8_Ks!H$(`v?EN> zNDu~F#4pw`61%5pghf~FjVi~YtHNz{r}(;uFynF;dqt)fe|#-*pM8ynv#ymXVk1l{ zulS*IDZpRs2j;(m$~$CKs(?y%bD{)hw#KLc9z_@>*;rIA9K zVx)^z#>*J#fT-j0NSi$)efA+~q)LpmOA;*NMkx&=#Za&q+g-H03!F5Px@2Oo1&if{ z#E*V7L}3PWg+&_UNq)ndh}zc>`Cg(7b104R&v?vnCMk&LEb=gag)~}Mh{}FL{a1Kz zwwI`rRl=H3$N-RbgrN437Ap-KbIUAo=Y!IiGu1*r!bdZ|<6R=Oa?mXCQ7KQc*2AZa zzG@GB&jLix+&_+IAv2_IpF~{9X~&wY5Y_x6G;+vk3z{Zr;y#R}4RjlV(o;}|1ojyj zgP0`7F5XTbB>#yanf!;Yp)!72 z^|i3(Ds&m}m9eopLdaG{oe=i$J3iufn6WAx2N24eEwjZ}ACLyVrVFjyxmE+#;CE!B zy=G*Wa_b(y^L44(KC98q_KuYClM5^XUnxGeoC$0BvYV$F)m9JCBLcU-Z| zRwn0oR37UvLI(*+nZ?FRkN_L%){t&X0m^`f(r6N$ta{0KshX-r9prbkpz17T5NQjO zBrqLbBFVZ6-Te5G!8-#StN~8#&^NiPoT!#}7?Kb2lP)nNuTeXP1zT?yx`4T%9{hG+ zU#}2;X^k+RkdO;?Z;yo#JQw(DRNf3~%ogukB_X$W%s#flgIWK@_^03n#zG+K9*k-+ zUdrO9$PkA(hZ(F94B}fh13MBW`e#5yfo(C1*0(+O!BX$c-HEKs3Xgx(F_zcp)Cw)==Q55iD!3Ti1Y z7}uz)zGV8(qQ>0CyNNOjNR7aS`l3J3Q|@n;)Za9zzqITe!3f;+(%(g?zZ_40gHdrZ z^>@W+Lx1)I?p&d1G5WB#xcz$S+21@c4q8IDnB&%I!jSA7jME@Iq+#8%!QBOeXVn;? zlizVcd7dAc4i>Xyd**ux8i=}J|4xAx9{9?B&@D7$VeZi_jSoXvqei1ql7bVdznHL6 zvtl@FPnZJwHYu?Z9mQM+JOiOtXsSdRYo2V@u#7M0CvuB?Z76Um%mkhI+J1PX<)5#G z8;28eRANL2%!GDQ-M^7$v3;MLCUP!h*mFoBdx&+=Nd3>%FaT_;JxN#(tQC+sY|Xk? z(#3K?@dbWDoUB5oi?Q|U>J8Vc(aWLBpNCrG|S z7h0c-r3f&i-~#kBnl#xF&}46*#1iFc<;vB&q!kSKN1LcUL9l4-mlZ3m6ObCO$s#3HW#9$oI$cp21Ne`2;!sj**EtcaKRRGTG)=LoB43fv6Z-ZaZO z84cuEgm*=Q)JBeQ43XcpQ-dmxo=NR7dn`MP9WUd#+j?PSsFawIYQp5SSx`6Mcv%D6Ckrpz1YCQniaD z>SbxkI+`OdS*mJAd0|aQAA&0G7XW7s{0N$R0aY5*U_iFs2*waFsLMi22F8pfcKr|} zL7eqw|1$c|6*5Si&0s5>bqefWEyP*8Fpnsx1x8m)moWwO=Adzb^+;%aPfZFar`{JC#|3bp-+mvy#l6+Hb)Oq`EP^ zH&Y|%fU*=YE_@DzZdo|*zZ#;{L zlM>A#5ONSD30Yv7a3bQp;FtZ%0glWL>w|!8g^&yc#X|SQ0KpVdU?|`nIivKa5Wmeb z%cnP{0u^a++bO$@i@K^nLFQYuuj%51CPqQw*c(JcSQJjx5Ml0BqTr`|9qH4k)*6Z$ zjBf8a7i*kQO|MW_`>e}_+t{i#jZv)UqUANt*`n2T!$k`Y1R@vgEVU3!v~t@zXvs2{ zOG{QTfC4fnktGNL3#_dF8l-AfI-!3r(&&#k=BgR4h5}B~KfUPcx(;15r+yB)x(Hnz zgf1V$_lhp~Ed0>bMd*^){5?QN==${Mpv%kPKf@;N1zlZ)uA7&8(WM4jBy_30=n{g# zA7g2KzrAlyRj|Or44k26BA7V3J7-H`nDKXLmZWjoV7%%Pfx^+Zy%XqW__A%KLi}W7wR(j# zH5Nj=`TN#ro-%!o`K{V}`mMT&nh26)ZH{WcsnJD(?5_Jgw1!oc*)b9NM`nj{CT7MC z@==pQ*HenYecY{SpA?gY81N(s>qBS)qXZ(kb72tNQ1twy8`GC&VK)PF5$Zey9H~M~ z`{rxE#^dZ#E=#nRA`R2FCF)(a#PjCEWc2Q*q8BdiQCN)|2RJ7lO6s>Vu;!e$^;YM^ zcaj3>Ilgs}bK>ul0{IQJgw&kNaaJp8F7f<^$Ea#^z1q1-VQ;*q{K$A=WwoS#Z47c| z9ICn0Z>4HHwUqHr&80v*Q%f1Ym!5N412pc9*$U@0Rxq&UYi;Xr=QLIlk@(gS=QLIn zk(^d#&3<QE_GYPCepXm?n;$?pJJ9fEMz-2h4w+M9ftKgqrtxu zN&o3q`M0Qys&1`2jH8NshxzGDY`%`)&bhb{{XZ~wvcN6oHqg#x3&j9vFqv2N?~50M`89qbE*br@CV;P|VH$-Sww*6gqjcEz+!{u0)7puVe#S{Z=!rmk_kj7Bww#{>g zoj}xX2(V3gn+iB*D6rma44Pc)vR#V$UTCtr6#S${d80-+LDt?W>rKwd3JYs6OZ>$$ zHgSb3b*F3t&@EFT8ih}VgU(rKs|HNYZB$HT?d`XQG5exs^#J!mTR;0bMUyIlv$fkV z1+3^-^ROb(xiY{SAargF5{A0~SFOt$Me-|Yq3yPurXbE^?hf#PJ=msi3R<{vvV!0} znd8Zi_U2=&1g5=bUrZ%5fj1h_)Ix8P#4n9G`itHqsg%t7bi1CvEuwhU%b=l*LBo9< z&C0j$er_*c?dBk|1iQgMp&~2U^GOKAO2Sq_Zq?Rm0^VnL&Rm zv8ie<@c?ky+UeYh<|iSOF#(>@*C+iV*2ckBqS3qIIl}9A?2~ zoI6Yl3<=XCQ|)`z+f|Sq!eI=Yl+s&`VFe8whJO$sfy=_Bf=S>rbec3P)q-0_U>P>@ zEydfAiH4VyhFZjvfSmEQvo?}ktK+G&iHm6i`TWL!NyK!{HzT(pKkC@bjZ+j; zkkTdWZ#Wll;g7<8=bT83{WIl-XKz>-9Z&;u9h5JA8E{;97SO6BXhSh9!5XO+R!4?E zL&I|nq(PCHavxBQ5m@;g7jQES(1#Ol=J0pcM%JQLOA&vpHj?(4fv5-xQOKWXDXyWx z)<$kd7RKuigSZPRX(qf!wIlt%k)B<=1&J1M&1LcyL?ZP$bXN?vVd&5uxxENb;FO-$6vYQqJ7ZQyQnqTjdOg&UxisJxn{B^E0h1Lk+S#_F7^sIS%h z4*U%qe=EeQQC#lYf;$^*@m?gBD!{dSRTlA2AR%&SiKY^?vtwZ;+_8j2@e$-xVIfw7 zY8aq}Rg`ksqdZ?iFd>9ZkEaGCc3-Q-uJvrMo zi|k=^7)GE2LT9E1!Z+I@{@B%Xs`v01Q2TIOa8UQ5-f;rVRpWkZfByF_r^-wVnO|QX zdD52QTfb1*Vct#lxCUz&U%MMKl??NpxEE`H3rQvj!_|1!lP2Ua!yvY13b#rAzyU&& zBXh640R$p{A+}p9A8v^XEfZ8Lrvyc;kx4G;s5EFbYan}@V z6dKpKs$Lg{6C$Plj&2M}x`(g51pp+aNgjfve7-gq@zQ9gxrL_Np+OuD5R)km3lYkKL^#MIcm>gQ3)MlM2QQy zc{mE%*P9LlE=7)v3?cJP@B*~R6^eQVCMIU&d1TpLS_qO*FOk_o<21i%*-m_A5mLv| z#=BbP08{|Vv7B=b1?kI7qgrC|;2RhsSmg8!Z#v2m`_fE&e}Sm=rh6x&yq>mUmbqm8 zEj!1b%Lg(pcfn%>>u3nJrVB^ckFDZ!}X z1e1@WkK^nN?3NGV5Clin)uFtwLS?^(g;BsWO*cF4r92K{j6=(~MM$?8+`vD@elQk? z=pfz9U0%$k66Q2giR0vuVWG`xlfHp_z)I>yOXeu>YXUJ z?h5S|@Q#oUD>&@-BWz?I$7aAKxb-fwf7}9y7*?b-af{HmndaJ9b*?dtESZ}`U ztZRoN3pTG`bg9XFg%dX{fFP-BBO{GnQ3)#oDB_LNKNu69%jWc6@q!zAY$3?`BBdopQQDQ?J zsA5Fcdt3D5Si)mdus_-uet)N4~E4Tv4-MTR$i8Y^uFWz544? zER$y~5K@s?1Sf;1?bkwAzeD4JnWBF`S6n<@LcE&uA-H#b4Eay-W9z*hTKB-CyYVNv2J1u+jV3nMjhmTJl_%&&(>w^Fp)N#4X{h{T z7Cheo?V(JXZf4@NPyY4Jv1)HOJ@DQGp?-+$@=k7lL@F`U85=9a-{t%?F5kz(g1Js? zTnRSjcfHaDL}21r?AHQT-mBlIKY~a^kyroZch!bnLXk-gpQ(!mH1Mys7>`wb&A-|p zI0=Qh{HreL4c~duE(Z$hHVj!3I{|(8w^5PX`FRe0VZit_sm6+r)aTp*3t0f z0UX8JLPeTcA^_klIpTbpI6^FSC3LxuWs!XmDKyjJSSHJtdApNfl)*wKAk)9kW+w`Z zDc*8^48rC&z4+kc4>qlV?zhoB^A11yGM;WQb%`_9s3m;&Ie)vaSCG{^oewCizARA5D*m-c-NQd;BN%wj^@0!tkeK+6yDY zvvcg1)cmI15S{$4DiyzLQeeZE>H+P}iI2L+IXm zkH_6%@OO8#0KgC-Ju=4Q@MuAs;e#oW9MF7i6G^8o@a|i95bjlrBeb|LPz$C_0I@Zg z_G*usMP347PGqET08it@3FyeaH5*=}35%xu(zxIO@5Y!#t8r3U)PcV0q7rQ5h><50wqrx~)D^(mNH4+R@@qq7r z9;x(hBofX8DXCrp4WVd6)VsG?BgYFCH3%33b^fs<;L6pSb(hE@P#p->F;v#3UUL$I>Jhih^i^?~ompM~!Va0tUUUwaH9 zYgIqsJL(hQdXyio>7)|FHLWzB8L=4J(qnjG%?%mCLel!Nw9rIL3#=JDqhDj4GOqyteq=^>H=9uknbj+rlhot9z1z(i^to}rr z)yFZbtw*RdrXJ@lU4YWUe({AUpcf26^Sf6Dq4SsB!K9)d29XATPJy2JT{D99r+|TA z`?(q%h}_a>yVV^pyxU{g<9oIz;AEb>VI=FNzL#+z`Pq6m58UQm@4B$wg*xj_gJ4+W zXqgtyJDktMNsWct@yZE2h&3>mplqNNVyp};;-yH1;ergZUE2A<<})Uf2&&^mU~O?L815y{PKKI3!oHi=kPqPm>s3puiT_vy35@R3gQ88ktI zwG@ZI%_iQ#1dog__bY@bnMDuu3@JR z*($dXj7Nuf=HOmD&d&uINiN8X%muj#(tet78}_@E!a;|*-tO}FA43uc%l=1;B5@Y^ zA6)@(L0;#7{2VY$CjX;tQ`PHoH?+WP3?}d6Mz9HaAJ@|z-p2=V_j(^^!;o^CH#M6# zy&OjF0+07GNBrAA315=;@o^y2ZQDfN$9SxA?6oB3^LdI`aQJ5Q6F}w#n?!4ZehX4G6$s#C&&!eU8PQzFeLpnT~eghNC^`t`#BO#PobG<*4^Hw5% zX1xrGrP%9f%w}K>_JBoR#&ZQ|tu({W(O3&*VPvmBZA$KOq|0!V#|_9tryiG-NUq~A7BTnmIOLXU2oV=o!IpS}C~4jV83EaF z+F?E;n9q*6Qtx(?yl8`?TR!pPFrRgrPg_9V)5Fj(?9p$71Dee3*b+@*UGud`G)!u_ zRE=VocF-2hA_{ZO<~HJqW)x>Jc811%lzb%s-5}S$ioBkLkd_k(+fS3J#;{GT;K@;` zqEV)He%o+)xV+;gIdmcKqS~p1R>-U+XKt|bVSi_Ct)Da3H$9!^TFZ8tp+0A>lu45c z4LQxfE>&1c70$W8YBK*Su*v*uPUJBznim>~)sZOU)`_%!NC#$^?Q?%3N=V2z*Me<( z_=Kl>v&ngS6!?fhZ@9^11bIDV9OW(Qu^J>daX)W5vl}3vuv6m`PFOO0V-yB55p*N} zuy4%0`G=o`Ekncc`iEKZ|A2qk2cyqFEE7Za4@*7$4F7PK!2=`d^f&MiAM_UVv$z=k zu$Aia`PY50^@+c`ypCb1F!4+`$9lfp7wk!232@Cv>(=1-At~9<;)+F3?<(E`fl%Zy zi}mKOoo2BVCw#_!3gNI;!_nzMZufdzFa9eX-rT;?e6D6s zeEr<-0}j<^p08=RKj3h^`2xS|h;TsI(`5dRqn+;0`BH^vaW{AJyVldn3|}$a&rb7q zmePJ=jG8oxVIHUZGw~8q{d~scV&CLV_MnjAZ@LeE*wu5GUxsiBW7>}75tu7iQbFIjL2_=Xm`?YcWql+Pi z3FWQ@Y)9ndSdTRFkc*wqXdCCF7nDtMKK~4&_?)0Vj_&S6DVMwJ$@C{>m+OY9Z2i&5 zt4tG4qhiyScF!%vPht|_>``f;MZEJg2GNLR1Zd|Px}Zq9Ec~uUOYyU;OdBmkR8E0% zI8wMb5|if~qdHNVO&6fD$^5Yn&<6y>n!5S zGe533e}?C_dh=OC=hE{xMf{RO2rWf?9`1R#U&GA$0$Jbk<3OkC6L2wIJ5+D}5=r0j zAuLHHC4JRo7M0G4K}G!9BmA!Efgh(T58Jymt9|qG)b;c7oOfQHW}@JfrIZ(+#F7B& zk`2KYnEo->O-#0XcwX;G_mY}Du=$A%3XgmvdgJ&}s531BsV-c*TImdotd9OhkBh>be!)yMh0Z&$8dlG#MAJ`4QSE390Nd8X;s%p_f9@( zzT(uBhkn;P%e!=*Nsi69zUHyyEGPO6bu4Q4bC!SSN1yJ_@@?LB{fc;<!dgRX@+TfR>qOoEAub&$z9F+~VdotU`VI z#P^UVk|}DEPdxHN2%SZ3PV*H4>nK#e9Jb*)3?i$ivpd|++5Mom9l_QCMXm*!0I1sC z(>>Q)NTR2ozUFam{{~}_oZC)3-C!pA?eh0F4ZBO^)AxAT%AbbVR)t<`zCr_JK5N<( zz=Z84XtsN+VmMx}wct&a#SF=pvt9PKbcsdx!h4lUr*lFCobc2Ld+4Az(n8_nOUJpb z5b_Y?EZjJJ2gMdqV+gdVjGfjwtbLMk@V4Pp(io|iM!Q?J`Ye2%{48AX23XFI&J2Y( z6sige4#WA2jp>nt64Uu>eBBpVuMy)BbMtk_5tIGl2FV|e2F8ouec<(PM>2~g9d26u z`TX13Zq8GGu6}3Nd|us}c@f<3VY^gLTxmH#hyn4?>wU*QDCc8!E|y<1#$)Qk3X8SN22f%b@=Xio>)Bj7%L)BuUfho?^;kd5ZJ#Ih3MhhJX^`Pj&C28WE`|#)>E5fdUvgV5 zpeBwRIjxb?vn{i6qIeil4Jd((xlQ&;z6{TyZLEGDJfj)6?Hi42s|t*efvT!iyz-Lq z8oy~0#(mDl*ap6%|09G|dk9M;9flBoE&^*-H{yHCkk6DkPrZeS4-jI+Nf<83Pt#1| z0NR{lo>PelmPAQRz#dUsfAeD1cGcZ072Q9DYJ#)&mjd!gPbVk zXmT9I88{q(i^j=DRPy+|4cKEi*4M7kLtqQq6@t9MOgiW`qA|XfzL6l!r3wB%WdEI^ z#S)`SPG`bOe|QOLVwv5?q)9~^RX`crEMj=0gUymFyHT29Z%Q-l6={b3?YbEzHNfgV zkGlF(#K{ni5#pRf-Z_#X&k@6o<_KQR>>-#khFpe#H6&nPgnx7pSlhFIktB8=WR0__ za>=(-l-f<$u@;lOqHf4#OqGn=&?0=Bk3HROs%%CK-KT?4xN-TOKtp*iE+f8oHT zKif7*TOaSx*2n8?-=lRmLq~>MeB&nc@0qo1d$Jq+o8&hA;O{`XLrxQd{R0gmmm+IOVs`q_u_Q8lRf9pQ}KMG^XH(^|M>hl>rXy^J{SPd4p2Y3 zV+TlqyLSi30$WZxf8KouC|i7fA7M<|0it)-<@4vU1A&G<&Yy1>%~0e!e=dO`{KWZl zi?`bU^!)kOciHmL>+$ffZ}$M#y%+DU5Nd6PmI2+a=lOG-dVdc&%yxVe%31H{&mF!F z(rJt52eMUgV4O~$)43&zI993HiSHYnKBr^n8utF!btliqL;8gR5I=TeC(ntae47;> zr1x_2{L4`u9KafcuIbrQIN(k9m~@i!VV5^uI)Bt-Kf#Zy2Qsd{(SCwdm<)p6_7kSd zJ$d&NSaHvO0zPBsJ=%RsE<3>{`+GyZ_56_H+c}UiBkvqYZL*yMLS;B$@t!RAnC5i6 zTzor1!jr1|`CNRj)8}u2CH^zU@7oXXjlbJ|K$hGUb~t?{Xg>f81HO=%V4_WdhvD4% z!8x}>HqJW&ETsX$0p^DI0c2!uKnwtHYpT4>5ha6Bm-&0Y8R;Rs|N3HY^V{FJ-hZ^) zTM7On0uC;7S%_Un?(5ET`v%kfJa@jg(eC3tsi(v3Z3-oAcsS?6;rg|3pj3%{4~$jh zrBPz;?Q&M)jmUJU84F{{-^Ug-I*i@b^DuUMs`oHJ-!y~T44Izp7 zM{np~+v=?-s2@~`b} z`1ky4w|d*Tfq(4>>{3Ik!ix0s{c93gG!PELb!;xbMdS0Y`DobPzqVTL7&{)mBAC`c z!@oAsTa~6T7Hf7YG|HPQ&tQ*#Er!mUT!KR?l)PxpDJ0nlco>jc@s>Sq_ZuQ64^}lg zyve*PxJ%BhyF7;rWBlzs>0MQAXRERu{o>E;=Bi<(A8;Gb^R>SN z4umQAmQ>$vk?yBAkM`#4`kALU=_SMiWQM>b#|z`KeWw+l1SQC;!4T~8Ye8kl2cUp! zU_V^^GhQT~j_Yo$cSCgx^FnF8rZssHhny!bXaY{?K1#2gqiKU^k(%x4(Ms|s zo79%U+ZOX^MZ#tZfmdssU{QfZwB+1+6s`K4TQ!K`92kt?@ThB8bCgYFvRfC!T)z+I zde0-BM}Zlw$K68aI%wIusjdO*Nk=*hS7|`eaOE{Z5l(ZWD*_AN0W#4)1#y{){v96N zGUY0%f)O~_M2F0&wB1FF&G3%bLqVR6_8MC0BWSrZm$S@!As1q<^ zBnW747*Fs0gHyfsIcWIPMtRmdJT(IDI7r>&W7~er@o;bLd%puKBBkgA#kX)=Svfi2kYAAfl0k8%Fj73Xc^O+y_ks9 z|Eui9nE?1dYA=?*N!;7bUW~xWW$_~8>K^uDD&?F;j=#P5AUQPs404G8h>tWZ#vB+2-^eFn5^S)9FtxBA(0ex=&NP(&QCB)9N^! zkGuX|-|Bg$D83@65Up*&?tSwpv!^Rku^X9d&QZk=rhqJl!G^1 zGU775T{2k!-jNt5)|-Bv{tEk(H6y*$Gmx>#jqGo!Fi}Oezq_5AdT+2aX0QFtihJyD zd`S+~? z5SSrszCQ=DdDk<1qKLhp{WFH`Q_y|G?tTvCRERWS*xkM&q@WjXN1x8Rc~INPi*pYd zV>47Rv4xrne8l_v%0I02>vI=16uk3h$-QP24}70(ja2BH~x z_n%x03&i`p0C?pa$zQApq7FNmbhOf6To68x&r|;3zVqSGP>bI~ndqbb0?I$!cm5*E zf3fd;73Kf3@BBc@|3%;V{V9J|ANkOEN`t9@mKE@SJ6g8K{roR5d;Hi<=xYM>#tGd` zwZnL8U$POq2`%u#af$Co5?sXm=O7lnQsN0;wPczM*yBK{9P!zA{0iB;g|?F@kZi$2 z+fzxV@59&Y5;8T`Jba-c1Rp%n;`~(TM0^w8xF4TqU{>SNbF;ub@-sP;Cm{+qNk>3G z-#Lxa0C3w@=i4aX(tAGm`)114vFu*?{}#$0+;@IB<$sSE+z0=MQvTt-^9NJ@ zi+$&ZQT{Lc&JUpcU-X?nl=5fwoqsFk>-x^Wjq(Tgk^l2%#0c*ZWuM@aU6Qosbr*+U zLWVKHHvnIaF{>Ay`{D@nw@WIUC;kc)W$=YXJdIb%@KJNL;FV|p0eE_f=P%J0W+i>4 zZh&~{gw&-P1|%R7U&CrdAgDPp8E-O6j~*5Uf3i1o)WZ4Vvp^t>Tj8W=31{{Xokyb= z7wlJ5($DSKuRx2K0&7Y*z&^p2>ihnh{Za^DH=eSN3kRZ(dB5L8ABm|?AB@+$Z5Q;e znq(cn#pPh9xe;5dkfOApQ8Yk`J}*a=Qgo*rRY}p8cLQy6!l;zT8erwq?e)|48=%M z4~Al;s7vlBPKtUk6fZ?R7&1sv4~7z?s0TwyQq+SXlN9w}NT#_5Ln%`38T89A_&sYlK#kiiXeBD8oLZ~sW zrz>8oW+{Xn<9fRCb^py$2tmg6bmi-Q%TfqO#`SdN>o%|y7fYe5?EzsOVad3juF$;K z5t5AS>1taftRoy5*VENDQ&>kRGOnkqZKAM_P-0w9SDRi~NBAkv@uo!vlLQ#-|*o)=DM~g!D1d41iqR_3}@CrGTKFsuYDF# zy9m)o-whCAL!q-I1k#rlZG)xn#2ss9Q53^R%)5WTZe0QV1SA93<+|vzleTYaOeJ_) zXdU{_65Q$Afq4H485fJTKZ)}XMUG&*X(3c0`HPBZ6HHi-t6R#xxU!o8#&d-qTghG|TtoS>r(78YrXe8mynkd1HW282(yJkzTV_fq* z!-zCC!nAzum()`BwwwM`!aU6ie5p)G+KS)9!U8)+SV`aZvPMA_9^1z^y;=v+LAZYI zmGZZ@oKxt~UpN}Yc6y7aZT4$A^E6d|fC(J#J|x5v8i6`AoW_2PZG`k&Y`0)(@A;!E z^doHUIAJ(7=03`P9*=$o?>8Z2;p3+}LR;~nQ_A!^$Sgk+7{yjXaPAI91^MGHY|KO? zJ$>s!laQfVk-wP+UjLsNIPH1R@YpBeCQ=v13{BP3p21Vk(%_9hZ}5J@-UcVMG;Db+ z%*{evCt#M0{eT`r*1dCW6Nsc^IIxorKYOI zGXR=W|1S1#_rfp4GSHa@eM}h6fM=1T#Wgfpzh%=+C4Z*YI>+y;wCv-p5Mgva8vE}A zOmm7$OG;BAd0Q<1*QAq$(rm!iJhy#IPXT|AE}*K#Guf73ZNGzKWD7{zZ+L6@pFNfJ^aoprts2I2k>0^XEet-6?WX z;fP|qQ4ms`O1V$7T&Y1U6I}Eubcm0X!-#c@CM49JvZaZ4;ur)R<;k3NWVVBG!Flwl`5pe;F3A&br5TQ z7VU(HrKpO1$3VMVY0HqBp5$xV8Y?BGGa&FYBKWBed=p(;TviL(N%|WaNd`LcerBUk zDC#fzuysA6NMRFVmw@m9jZFm7_P`9%hhk)wV0s>k;>U{=wm`8CeCzA$Z-5=1L7ERJ z0(ym|LUv*(?yv${d-|z3mpd#SkC^KjxUrw{T-O!}7)x()hb=)8Btc+l!2I{`e5QU6 zef7AOu3u#DZt6tmle0^FW_EO0Asf|+|} z6T7RP*^Il>tbXQ6ir1aSDf8yQ6QH~TyCB;s^O-G(H3!z?N`N;9ZeqDKW4FprrK)-N zySV0>ClRL!C&dLOY#h@AyAW?U!{OY73m_w2T(BL?MxR>TypMjt6gwXF!Va7`?64Ph z(YLBOU;w^yy}1LQpm&GOK~zT%^P~r-xebLDvO?`nc>2w4dh=C%!@fqT&+MFcW_+3Y z#@iqY-i)!T>JHfM5Vv6V3oXWjw&2%hBC~Z6Qu_}aJO%HJo(UPyf@$pHLOKuUIvALX z8;hTVJaUIw(2MlU-g%ziC{EpmhB8!kb)+LhCEn|a1t3O)!H!L~kddTp;a{B?>YNp> zJcNg!``gDU&l`{7C$2Iz#%Y?W{=y`+a+1c_Ql+u)8D~6Z`x*z2U@h-yy_7A!gJ}o` zh$z@jvi9wl0SI>LTUEwGR)`^Ce>?voUb?ZhN4pj`?o=#p6d#o;1dH@dk=AhWLBuWM zbGSlCT9whRMsYhLI~9!(%4Cbxy5?i1HHyz56{O z9e6~?LmAt%d69|riWr+o%DE7q!`!xTaU9CcpTDS4`~lJh5NL|u#2A>!1p;-f6}~nC zcLHbxl|C1aEAhe_H9oM_6u27|6k;t&!E0y)K&qng<4)rDQlvlXeTm2Ut><>)r*KiR z#`GGha8?z?rQctI%($koEfp&yDDJ?FzFmUkw^S7);fq@cu#HmG8Wrto)#7z3$3TMD zG0?@Xd)bu=ItISSu7_}K3Z(uN!2hDgQfzhrtM8Sni!CHavoQ-uV(!ko5AWh9K$3w{^QILO*YBoBrAW$c>_edQdsUmJG&ujq;)zEVIPFL&DJtXB}%_70In0B}@06 ziq?_XHxpoHtuvrm7r&)JXdtO37l^)YO(MFLqbS0QrZ4u3jT`s?<`e{*KX_eX548udJr)TdQy_+VuFd?B?9cZcka+t*(;Y{#eFtFBIeU z+3kHv+Lav=ro zSaeSBm4rCTaJma2>I{r^X23&G>i=PJ6pGkQ6U<; za;`a{-uA%Gpa9M~ z%v4FYFq0)n$yo;>5w~C@Dj`bj1J3|%g)sMw{?w>NZF={pMIwHXCm6q(#&6mHbd(0q z^McH}^>!yLIt@7SD<%M~vylU1ClsqAS=EXDAp7c?&k9sgERCF(V7|I~ zxPBjSBNwF{899WSHK*}w^4kfi!axhI_Lcx4b`Cv!cC9&(&`yl{3>9#&0uGkj3Bu6t z{gU=!Z-Kc$B>^O7|LnV73v+6|b{+~-Mfzok>3D{}MsWx~w*svQ`$hPDs>}}inV``J z>|H^8T@(r!5Ab#LaW)2@y+ti`1A0pUU2Kf7J|GNa(6&UdZeQm(<)Q5~kkKF6&-^G= zfE?hSp)?08Yy8MI1HHX|2Fd7h^q$cNjC*Wa;{n@vR#W1!RQs7zQrl7^5YzsRv<{Fm zS&dF}8^_gf){rq+=&wn=uns%TBFCvYYu@$!%|L(Cgl7G|hVM`fUrVxo75vNzU~%2S zaU7@UJUp5K+j)GniGeO%rNMS7R`B+(-jOD@bq#`5)F2rbQm35D)*#=c& z%xZRB#jdB>^$fe7Wml11+t{_8T|3yd3s%{jq5>z_f_FcPMPgs$Ujjfu>s^0QLuw)Mmr`N~%oD_ZEyW^W zYT5?vevHL-Z)P{FN&9>+A3^@)WM|?b%npoFu8^nK4^ zp1g2h-Z12a4{+JS;RK;`exdp!o!{fPDj~vfKiWDG&y<5hZj^So_3+8VUmrd(;FPTc z`R$zrc!|0NIpLjODi2o;GNRl{bycttWmhO>=#L0ZGi|}0A9bFvf5a_VoVzDP_7c;Z z;Hs#W+gzQ8Mz;ui$8haX30t6kHO$|F&+n@u8z*26adlklIro@KhVU|Wwc-kH```U{ z=p~N(8sRcR$lp0`96~C>LIf*94Z_m7Q;XQ;;5YFu4xN8VEy~=SV7NNFU7qIVYM7Ti~F2cIBp3-IYJG>69{i2oIq$tpue|Ku8Zm*eiOp8 zc)kPoVRHU7+*9S}t;l|tnkcp$!MeAc?1 z8&e&TZk{xEN@B#AYT%ArUSh4bEiI`oE}1+pcCMu?Kewd3#M-}?^rEW5!v5Tt1&b3G zC5|bkKD*bAs4UBms4gropr*%1SWA`{(o^r{stWU0Nad;utMNe1`L)*@9F*1#237|H zo=0`ZXk+Ai^gK_R55AuR8!OW*T-7Co%L~h^eL$fHwSD>if7LkMdT)*-YZbRaCmQeA+sxR&GgKnPR&6%f2P{|fK!pv~D? z=~*BCEn(!0sQKnc?zm5g4t?O)G|u$Ig*g>f_g7cu|a&7KoEFKr@~fw$H_4Q4XO!L{p` zHkFlw&(}YVm9un9v#@e=x~H*n^SY(YVdWNfPh;ia?BkXIz`Ltx4A6T(HwG_@M^>+r zk~#1iR|Ytxa*-=4%B;%^5GQ_m4oH{NAAIn^f~B-DoOsUDjx|4W>O|H*tV6kNO1qEs zf5ty;j#Lhop|9K=sT@4(Ts`&A0E%3NN3QZOfIS##g%Xg5c5)moi84K+sZ8yQ5)I`v zJ*90$njhU_D2;Rva;MAX;wX)CaU8u2a<_~FIEA?o!qw7hT6R#0u>i&no{H4!C}|tg z&MVAMwrid3g4e!Tz)(42VhUS<+p@ocf03RF3|SJOZviW*7^T((JmAZz zAqLFB|VKagj6mG{o1b1x}%31-`YCNyuxCmfBgyNNm_s?^@GU~%-#Bh4f)-&4LM}oz!bXJc2(KWtAbg7OBf^j!95(^Mj4%(O z9AP8EpAni6zC>^%+_sbBbO`APOA#JI_zl8~2t>gEPRXgbKrV<2h8*h0_2&j~8g3vr zh~q)@!Q4&U5XiJJ?q=>5$mOBjt=w(gFm5$H z;>L3mxVyP~I4!5+qB%VmBd?-ZIqxngE8}u~ijYUi%P*^_E(G87lC`YRnx3kQ?jtKR z)zDi`MP*@m?>VGoOnSgtSlvgPl%Hj-Dk)#qSN%T0fgY0Cqg7HCdKnuf_cAUyxyP6& z_4@HpYF}gV_s=XUBG&LvE~=KiMPW>l1?kt8bUwV64E)z;oK zs`848O7eTn%PA~bR(yTVN=k;1!Eh?e3Sm0|QKV;h{=WS?p0;7_B0WR?Q@;$IW*c-J zzqENsD?{26zqHG*V68yfUcaiS6Ll;7(rS=)0%^Pb z(*A(72-NNE@BjH_{yo2pQaPp2n)N`nwQ%_ycq=AWPlnM=Pu$7? zKyk{QXvI>s)Q073B6I4kYK3a?9Ft(@wW1U)lv zSER$>v0hhci)uC|KXnaVhD*yU&o3;STETINK{@EQkYy}VS!`9y3TdWt+XAx+;Xq)| zN4PZR31EP8TR1k=GBBCZn3Bp-DH?Bu&05U`cv48@p|^X@vuBv6>!X0`KDNZNv2>jRaAa2*v@PcuXjj+eko+rxFOSPDvXzxp=2?rOUF8;5 zRh0w7L!sx~Ur++-ui=VFRAcJp=H}&BS#wJ&u%6k<^SPB=QBj$#x|n>DMQkmBb$wkw zMKT1N2+s2SJS$hul~gnHm&3wB%LCYGIhWvj&Mo97a?m%5bBjvKkeN$*93X-Vr>JC^ zt*S7$JP)k7GB>Yk*$ReR-y-A5DlA`7QdLn7*A=iIC$%jtL%9{@g{w-exz@a;#8<#* z;i|%XaCP^LThJesgBP)~WWw_52`fv=Ct&;&iVO29CzRXA>RxKTbBrli8Z zK#%$ub73``m;Qx%LQ!Qa@7Yn0c7Se({BCW07&y0F;=ckj<3`L_%nzU#ep;FVeP)j* z8IWeHsscVORTZ?@axVwY0pUu@F=0GO+#i)wtK~>V)ns_$KrIWroJ5A@s#&(ess}8E zRZv>6tmb3VVif3n!u73BE#P#1sdI{HsYfEW&QFeHO~*9LKnC{|`b{rfYFoCfu*%b4 zI?cZPVvKDvd#Zc@)($-_uUG-X|BHWgZslLB(yjQ5L*HTFO!Xv^ZA*U&Bv7a>xSt$< zTnFI**noR?xap(=?E7BQ;eMfChPkf1N_|}-N-8)U?cz4$ ziF`L1R9XHLk8s>CJrUe90%CB@h95N-S2H&oPgA*>+ziC0;yM}6^!JwPyKB^LAcK(H zN(3p#rLZgcwp6gwyZ=3hA_}x;<*K+6$nRxntppyoLbP1Y6>(TFxLQ_53tVWq7#5b| z3LgV3eTBDtHtJMy)u>&8n)IiG^&X3$Wr6&%gHWE@wX(A1*u^OW{CV7R#A&UuA+H?I zWx#J4mydb{xR)Vs8vF+eZaVUov07>9rILGqLA?xEhcM@^Pm6#rAr0Py2>1`Q2+=47 z9|nVCrd*dsO>lU|O|hSbM;eO-ZBzh88(_8ijpW8-iD7u_UbiRqdg3k}a4SIlJoM;+ z)JGv&>%dIh9OULktkBSQO- z_I2$Ox)IU$MsJ9IH2U%AC!?Q<{%iD$(YvGHiEfI1Kl+2{Q_-JCpNnpf?u@<`9jMpn zhv;wBkJ69R-=mMyoAgukv-At}o%#=B9*B*IYmR#{{z*e#@|(%jIPnDf(KqRDjy1<^ zkJA}88NN?YB*rF|CvHgGmH3G9&&F4bZyDb+9y4|rgOUo8>`Bigy_EEiq!UTJNoPtm z%{S$m3QfyR)uy$kH%+=^Q*vhVeaS16pG#gXzs%C{*$q|hYo zK%bG?1nmNCp0-l^u-2h{O#7+!vUZAYxvpCGfbN9uW8JOMxzPpDf5Rx>j&6*8H~N$4 zQ2hvfr2cMwivBJA9({}cu>Mp1l$flT`7yaMH8GFG{557r%$b<4V!n;(jQKGpAa+3P z(AaUYy4dX4jj>O}Zj1d>Y;)}Uv0ulw$G#r-d7K#cZ5$sT79SmNh(8;DtKlw#)(~gN zF)T7XXs9vVm#{tI&j~Li98CBy;e0|@!mY+h#th>Oqs{n`ajWrZ<38ifNpq7bl0Hfb zG9{W8nwFZ1O^=x#H@#%qZL%ick}@I1oH8wCcFKb(S4q&N!Vinvac!ses#c}jq?;1G zEV?Y(8Xcs!=wHzPsJ|;_XUuCc9e_I}_TJc>*y7lAvA>Jm4_Gh8UX9I(TNJl7ZeQFt zaTnsc;<)%B@!I&f_}ci5@xO_GF8(Hi$uQTj#IV+I$Pkhck+3o0v4qDHo=$i^;iZI# z#IcFX5~~v*NPIYPTjHM*_a`1qgN|0em*$uA`TJ^6#=kCHo+e@q^iGChSB zo|iGcG1_~y8?-yLuV~)@J-^Tf=+wHgx_5OSV!Rd6w&;hV{}BCL^glq&@1w`-EA)1K zv%Xz_OH4vcN{l(CD5fmN5%XBg*D(}cA{j2&${A~6? zjOe2NrkL=U4dBP!F>l9w8uJCXQ62k>*gwY}jQue7RBS+;I&Mr{RNSn%O>qa~{uwtm z-V(nu{r^OB!Pem429$vcu?O+K7_ zD*3bIFO$DbR-`1RdZ7pWx^V&0@V3cl!?uhOS z-M6}{z(iW~)aaSfmC-ArpNRf_^oNi;XCQYvqXYDJ=@a#-`pNob`sMnK`px?I*!0+G zu@;PZW$fdaeeJP7fR9IF%rzKuwqc=Rslje=7=CN`z2Qqko8i1+NW##BI}`3nh%+Ub zCYkb0C8h^V51WpePMbbADUz$BYQIC#gttsZ>1bdIhFEx%9RwZhT~R&-kdgA8=)Pe9j{H%W@xjt^RQ4h+Lyt(d$dQir?vmoirOFX(@&YY*}8eUMY?=lvCgJ@NLQnKLHDxm4aU`H zb(eJ$qo+hqkDeW!18G$XF5e8?`~ke;h9vH<57CF|Z-*qFpwHK@!ndXWp?_b0M1NBM zmHs>Z5Bkgcz?eZXx5NyO856>ms3m<`hnS%&)zd4>|hFANVD z>I{z>ehoZ7V|c;vmf?NF$G~?`LRi9xgs6mx2@fUICI|_?O!!SgXyWd~6N&wdNyeqd zUl{9+j~cfapD=DS{>k{fu>sQmW8*)KKN#J{Wl7egtx5l#w9>TM^n~eU(_5xJrVmZ$ zOy8Om$)l2!lWUUeAp8FWj+>M64B>qo+cdKr+?oORf7pI%1o2j$weyRJd?)SPs>i(|#U)yPT#_*cq z9m7Y4FMw(C3o!f{jM$8LjD(DojB0`9NvAQx0^nLHU^H78rT}B?jL8L)8zu&(9;OVy Ul2OOf#nQtv1z2_f6%29!002DoRsaA1 literal 0 HcmV?d00001 diff --git a/UITunnel/App.config b/UITunnel/App.config new file mode 100644 index 0000000..731f6de --- /dev/null +++ b/UITunnel/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/UITunnel/Program.cs b/UITunnel/Program.cs new file mode 100644 index 0000000..7e0ea2a --- /dev/null +++ b/UITunnel/Program.cs @@ -0,0 +1,136 @@ +using Rovinj.Device; +using Rovinj.Log; +using Rovinj.Reader; +using Rovinj.Reader.Silion; +using Rovinj.Tunnel; +using Rovinj.Tunnel.Plc; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TunnelNuget; +using static TunnelNuget.InfoParams; + +namespace UITunnel +{ + internal class Program + { + /// + /// 模拟连接隧道机 + /// + static void Main(string[] args) + { + //创建日志目录 + if (!Directory.Exists("log")) + Directory.CreateDirectory("log"); + + //初始化日志组件(仅供测试使用) + Rovinj.Log.LogHelper.InitLogger(new Rovinj.Log.TextLog($"log\\{DateTime.Now:yyyy-MM-dd}.log")); + + //隧道机业务层 + RfidTunnel rfidTunnel = new RfidTunnel(); + + ////配置RFID读写器参数 + #region 自定义 配置RFID读写器参数 + //SilionReaderConfig readerConfig = new SilionReaderConfig() + //{ + // Qvalue = 5, + // Session = 1, + // ReadTID = false, + // Target = 0, + // RfMode = 1, + // IsFastRead = true, + // QuickModeType = 3, + // Antennas = new List(), + //}; + //double power = 30; //功率 + //int antCount = 4; //4个天线 + + ////根据用户输入的天线数量(默认 4 个),给每个天线端口配置功率和启用状态。 + //for (int i = 0; i < antCount; i++) + //{ + // readerConfig.Antennas.Add(new SilionAntennaConfig() + // { + // IsEnabled = true, + // PortNumber = (ushort)(i + 1), + // TxPowerInDbm = power + // }); + //} + #endregion + var readerParams = new SilionReaderParams + { + QValue = 5, + Session = 1, + ReadTID = false, + Target = 0, + RfMode = 1, + IsFastRead = true, + QuickModeType = 3, + AntCount = 4, + PowerDbm = 30 + }; + + SilionReaderConfig readerConfig = SilionReaderFactory.Create(readerParams); + + #region 配置PLC连接方式 + + //ConnectionConfig plcConnectionConfig = new ConnectionConfig(); + //plcConnectionConfig.ConnectionMode = ConnectionMode.Network; //网口连接模式 + //plcConnectionConfig.NetworkAddress = "192.168.1.250"; //PLC IP地址 + //plcConnectionConfig.NetworkPort = 502; //PLC 端口号 + #endregion + var PlcParameters = new PlcConnectionParams + { + Address = "192.168.1.250", + Mode = ConnectionMode.Network, + Port = 502 + }; + ConnectionConfig plcConnectionConfig = PlcConnectionFactory.Create(PlcParameters); + + #region 配置读写器连接方式 + + //ConnectionConfig readerConnectionConfig = new ConnectionConfig(); + //readerConnectionConfig.Args = new object[] { antCount }; //天线数量,默认是4个天线,支持1,2,4,8,16 + //readerConnectionConfig.ConnectionMode = ConnectionMode.Network; //网口连接模式 + //readerConnectionConfig.NetworkAddress = "192.168.1.100"; + #endregion + var ReaderParameters = new ReaderConnectionParams + { + Args = new object[] { 4 }, + Mode = ConnectionMode.Network, + Address = "192.168.1.100" + + }; + ConnectionConfig readerConnectionConfig = ReaderConnectionFactory.Create(ReaderParameters); + + + + //封装成隧道配置 根据用户选择,判断是三菱还是西门子 PLC。 + TunnelConfig tunnelConfig = new TunnelConfig() + { + PlcType = PlcType.Mitsubishi_FX5U, //PLC类型 + PlcConnectionConfig = plcConnectionConfig, //PLC连接配置 + ReaderConnectionConfig = readerConnectionConfig, //读写器连接配置 + ReaderConfig = readerConfig, //读写器配置 + ReaderType = Rovinj.Tunnel.Reader.ReaderType.Silion //读写器类型 + }; + + //西门子PLC暂时不支持使用串口的通讯方式 + if ((tunnelConfig.PlcType == PlcType.Mitsubishi_FX5U || tunnelConfig.PlcType == PlcType.Siemens) + && tunnelConfig.PlcConnectionConfig.ConnectionMode != ConnectionMode.Network) + { + LogHelper.Error("暂不支持的连接方式!"); + return; + } + + //是否连接成功 + bool result = rfidTunnel.ConnectTunnel(readerConfig, plcConnectionConfig, tunnelConfig); + if (result) + { + + } + } + } +} diff --git a/UITunnel/Properties/AssemblyInfo.cs b/UITunnel/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..639fa5d --- /dev/null +++ b/UITunnel/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("UITunnel")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("UITunnel")] +[assembly: AssemblyCopyright("Copyright © 2025")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("974dbe1d-c300-4baa-8163-f7d7aa99ced4")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/UITunnel/UITunnel.csproj b/UITunnel/UITunnel.csproj new file mode 100644 index 0000000..c57d2d0 --- /dev/null +++ b/UITunnel/UITunnel.csproj @@ -0,0 +1,103 @@ + + + + + Debug + AnyCPU + {974DBE1D-C300-4BAA-8163-F7D7AA99CED4} + Exe + UITunnel + UITunnel + v4.6.1 + 512 + true + true + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\Rovinj.Reader.Silion.1.4.3.3\lib\net461\ModuleAPI.dll + + + ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll + + + ..\packages\Rovinj.Device.1.2.0\lib\net461\Rovinj.Device.dll + + + ..\packages\Rovinj.Log.1.1.0\lib\net461\Rovinj.Log.dll + + + ..\packages\Rovinj.Reader.1.4.3\lib\net461\Rovinj.Reader.dll + + + ..\packages\Rovinj.Reader.Silion.1.4.3.3\lib\net461\Rovinj.Reader.Silion.dll + + + ..\packages\Rovinj.Tunnel.1.9.0\lib\net461\Rovinj.Tunnel.dll + + + + + + + + + + + + + + + + + + + + + {7b9289e9-0ae5-40a8-b5f8-1dcd5fc9f4e3} + TunnelNuget + + + + + False + .NET Framework 3.5 SP1 + false + + + + \ No newline at end of file diff --git a/UITunnel/packages.config b/UITunnel/packages.config new file mode 100644 index 0000000..feb9099 --- /dev/null +++ b/UITunnel/packages.config @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file