This brings along proper password encryption and validation for the login process (which is still not needed for local connections).
You can run the remote connection tests by passing a system name and password as 2 arguments (so the system name needs to be quoted, e.g.: `test "Pentair: xx-xx-xx" 1234`)
Also updated to latest .NET Core and C# versions while I was at it.
Converted as much ugly code as I could find into appropriate C#-friendly versions. For example, all the manual ByteHelper stuff, buffer index tracking, etc. are now BinaryWriters/BinaryReaders. Also cleaned up a bunch of getter and setter methods to use C# properties.
There's still more to be done here, but this greatly simplifies the code for reading and comprehension.