public void decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) {for (int i = 0; i < iterations; ++i) {final long block0 = blocks[blocksOffset++];values[valuesOffset++] = block0 >>> 40;values[valuesOffset++] = (block0 >>> 16) & 16777215L;final long block1 = blocks[blocksOffset++];values[valuesOffset++] = ((block0 & 65535L) << 8) | (block1 >>> 56);values[valuesOffset++] = (block1 >>> 32) & 16777215L;values[valuesOffset++] = (block1 >>> 8) & 16777215L;final long block2 = blocks[blocksOffset++];values[valuesOffset++] = ((block1 & 255L) << 16) | (block2 >>> 48);values[valuesOffset++] = (block2 >>> 24) & 16777215L;values[valuesOffset++] = block2 & 16777215L;}}

public override void Decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations){for (int i = 0; i < iterations; ++i){long block0 = blocks[blocksOffset++];values[valuesOffset++] = (long)((ulong)block0 >> 40);values[valuesOffset++] = ((long)((ulong)block0 >> 16)) & 16777215L;long block1 = blocks[blocksOffset++];values[valuesOffset++] = ((block0 & 65535L) << 8) | ((long)((ulong)block1 >> 56));values[valuesOffset++] = ((long)((ulong)block1 >> 32)) & 16777215L;values[valuesOffset++] = ((long)((ulong)block1 >> 8)) & 16777215L;long block2 = blocks[blocksOffset++];values[valuesOffset++] = ((block1 & 255L) << 16) | ((long)((ulong)block2 >> 48));values[valuesOffset++] = ((long)((ulong)block2 >> 24)) & 16777215L;values[valuesOffset++] = block2 & 16777215L;}}
