public VarInt(byte[] buf, int offset)
{
var first = buf[offset];
ulong val;
if (first < 253)
{
// 8 bits.
val = first;
}
else if (first == 253)
{
// 16 bits.
val = (ushort) (buf[offset + 1] | (buf[offset + 2] << 8));
}
else if (first == 254)
{
// 32 bits.
val = Utils.ReadUint32(buf, offset + 1);
}
else
{
// 64 bits.
val = Utils.ReadUint32(buf, offset + 1) | (((ulong) Utils.ReadUint32(buf, offset + 5)) << 32);
}
Value = val;
}