public decimal ReadDecimal()
{
var header = ReadUInt8();
ulong first = 0;
uint second = 0;
switch (header >> 5 & 3)
{
case 0:
break;
case 1:
first = ReadVUInt64();
break;
case 2:
second = ReadVUInt32();
first = (ulong)ReadInt64();
break;
case 3:
second = (uint)ReadInt32();
first = (ulong)ReadInt64();
break;
}
var res = new decimal((int)first, (int)(first >> 32), (int)second, (header & 128) != 0, (byte)(header & 31));
return res;
}